yamamoWorks

.NET技術を中心に気まぐれに更新していきます

Google HomeとAzure IoT HubとRaspberry PiでTVとPS4をコントロール【03:PS4前編】

前回までに全体像とAzure IoT Hubの設定まで行いました。今回はPlayStation 4の制御とIoT Hubとの連携を実装します。最終的にはRaspberry Piで実行しますが先ずはWindows上のNode.jsで実装してみます。

Google HomeとAzure IoT HubとRaspberry PiでTVとPS4をコントロール【概要編】
Google HomeとAzure IoT HubとRaspberry PiでTVとPS4をコントロール【IoT Hub編】

PS4の制御

PS4の制御には「ps4-waker」というライブラリを使います。このライブラリでは同一LAN上のPS4に対して以下の事が可能です。

  • 起動(スタンバイモードから)
  • スタンバイ
  • アプリの起動
  • キー送信(up, down, left, right, enter, back, option, ps)
  • テキスト送信

ps4-wakerの導入

プログラムを作る前に、PS4にアクセスするにはPINコードでの認証が必要なので以下の手順で先に済ませておきます。なお作業にはPS4 Second ScreenというiPhone/Androidアプリが必要となります。 (PS4 Second ScreenはPlayStation Appのセカンドスクリーン機能が別アプリとして切り出されたものです)

PSN | PlayStation App | プレイステーション
※PS4 Second Screenは「PlayStation関連アプリ」にあります

まずPowerShellかコマンドプロンプトからps4-wakerをインストールします。

PS > npm install -g ps4-waker

インストールが完了したらコマンドを実行します。すると認証情報が無いのでPS4 Second Screen Appで接続しろと表示されます。

PS > npx ps4-waker
No credentials; Use the PS4 Second Screen App and try to connect to PS4-Waker

実行している端末にネットワークインターフェイスが複数ある場合は、PS4と同一LAN上のインターフェイス(IPアドレス)を--bind 192.168.0.1のように指定する必要があります。

この状態のまま、同一LAN上にあるスマホでPS4 Second Screenを起動すると「PS4-Waker」が見つかるので選択します。
f:id:yamamoWorks:20180318233559p:plain:w300

するとps4-wakerがPINコード入力待ち状態になります。 この時点でPS4 Second Screenは終了しても構いません。

Got credentials!  { 'client-type': 'i',
  'auth-type': 'C',
  'user-credential': 'xxxxxxxxxxxxxxxxxxxxxxxx' }
Go to 'Settings -> PlayStation(R) App Connection Settings -> Add Device' on your PS4 to obtain the PIN code.
Pin code> 

次にPS4側で[設定] - [モバイルアプリ接続設定] - [機器を登録する]と進み、表示されたPINコードをps4-wakerに入力します。
f:id:yamamoWorks:20180318164306p:plain:w300 f:id:yamamoWorks:20180318164323p:plain:w300

Pin code> 00000000
Logged into device! Future uses should succeed

以上でps4-wakerを実行している端末からPS4の制御が可能となりました。

認証情報はHOMEディレクトリに.ps4-wake.credentials.jsonファイルとして保存されます。Linux系/macOSなら~/ですが、Windowsだと実行時のカレントドライブ+%HOMEPATH%のようです。

動作確認

試しにコマンドを送ってみましょう。

PS > npx ps4-waker standby

PS4がスタンバイモードになれば成功です。

アプリを起動する場合は以下のようなコマンドになります。スタンバイモードになっていても自動的にPS4が起動します。

PS > npx ps4-waker start CUSA02988

ここで「CUSA02988」はNetflixアプリを表すTitle Idと呼ばれるコードです。
※Title Idは同じアプリでも国・地域によって値が異なります。

Application Title Id (JP) Title Id (US) Title Id (EU)
Netflix CUSA02988 CUSA00129 CUSA00127
YouTube CUSA01065 CUSA01015 CUSA01116
Amazon Video CUSA03099 CUSA00130 CUSA00126

Title Idを調べるには、PS4で目的のアプリを起動した状態でsearchコマンドを送信、表示された応答のrunning-app-titleidを確認します。

{
  "type": "device",
  "statusLine": "200 Ok",
        (省略)
  "running-app-name": "Spotify",
  "running-app-titleid": "CUSA01780",
  "address": "192.168.0.2"
}

次回はPS4にコマンドを送信するプログラムを作成します。