前回までに全体像とAzure IoT Hubの設定まで行いました。今回はPlayStation 4の制御とIoT Hubとの連携を実装します。最終的にはRaspberry Piで実行しますが先ずはWindows上のNode.jsで実装してみます。
※全体像および各関連記事へのリンクはこちらから
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」が見つかるので選択します。
すると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に入力します。
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にコマンドを送信するプログラムを作成します。