概要
我が家でPS5を声で起動できるようになりました。
PS5を声で起動。ノーコーディング
— すいばり@'22年5戦4勝⚾️ (@Suibari_cha) January 4, 2023
英語issuesのわずかな情報しかなくて、パケットキャプチャしてユーザ情報をぶっこ抜いて来るのが大変だった
日本人でトライした人の情報見当たらないから記事書くか pic.twitter.com/h0rAYBuhZc
本記事は同じことができるようになるための手順(Windows編)を書きます。
特にパケットキャプチャが詰まりどころで、自分が探した限りは日本語情報は皆無、あってもライブラリのissuesに断片的な英語の情報しかありませんでした。
そこを補完できるような記事にできればと思います。
(タイトルはChatGPTに考えてもらいました)
背景
PS5はリモートプレイによるスマホ、PCからの起動には対応していますが、AlexaやGoogle Nest、Siriなどのスマートスピーカーからの起動には現状対応していません。
今回はそこにラズベリーパイを噛ませることで連携を実現します。
以下が構成図です。
目次
- ラズパイでPS5-WAKEのビルド
- パケットキャプチャによるuser credentianの取得
- PS5-WAKEでPS5を起動できることの確認
- ラズパイへのnode-redの導入、設定
- アレクサの設定
内容
ラズパイでPS5-WAKEのビルド
以下コマンドを順次実行します。
$ git clone https://github.com/iharosi/ps5-wake.git
$ cd ps5-wake
$ make
これで./ps5-wakeを実行すればPS5を起動できるやん!…と言いたいのですが、PS5の仕様でuser credentialという9桁の数字をWoL(Wake on Lan)のパケットに含めなければ遠隔起動できないようになっています。
PS4ではこの値をリモートプレイアプリから取得できたようなのですが、PS5では秘匿されておりLANを流れるパケットから拾ってくるしかありません。
パケットキャプチャによるuser credentialの取得
本来、Linuxならtcpdumpコマンド一発でパケットキャプチャが行えるのですが、今回はWindowsでパケットキャプチャを行います。
その理由は、今回取得したいuser credentialの含まれたパケットを拾うのに基本的にはリモートプレイ実行PCとパケットキャプチャPCが同一である必要があるためです。
Linuxでリモートプレイを実行する手段が自分の知る限りないため、Windows(かMac)でパケットキャプチャを実行することになるわけです。
(ちなみに、Macだとコマンドによるパケットキャプチャが行えるのでソフトウェアのインストールなどすることなく本章を実行できると思います。自分はMac持っていないので分かりませんが…)
さて、方法の説明に移ります。
Windowsでパケットキャプチャする主な方法として、Wireshark使用、Microsoft Message Analyzer使用、netshコマンドの3つの方法があります。(参考:https://www.imrcry.jp/blog/packet-capture/307)
今回は代表的なパケットキャプチャツールであるWiresharkを使用します。
以下からダウンロード、インストールします。
https://www.wireshark.org/download.html
Wiresharkを起動すると、LAN内を流れるパケットが片っ端から表示されます。
該当パケットをフィルタリングするために、ツール上部の検索バーに"udp.port==9302"を入力し待機させます。
次に以下SIEのサイトからリモートプレイアプリをダウンロード、インストールします。
起動後、Sonyアカウントを入力し、ご自身のPS5と紐づけしてください。
https://remoteplay.dl.playstation.net/remoteplay/lang/jp/ps5_win.html#section2
リモートプレイを行ったことがない場合、PS5の設定でリモートプレイを有効化する必要があると思いますのでそちらも有効化してください。
設定後、PS5は遠隔起動するためにレストモードにしておいてください。
リモートプレイが実行可能になったら、実行します。
実行直後にWiresharkが3個以上のパケットを拾ってくると思います。
パケットをいくつか選択してみて、その中から、"user credential"文字列が含まれるものを見つけてください。
"user credential"直後の9桁の数字が得たい情報です。数字をメモっておいてください。
PS5-WAKEでPS5を起動できることの確認
先程得たuser credentialを使って、ラズパイ上で以下コマンドを実行します。
[user credential]のところに、前章で得た9桁の数値を入力して下さい。
ライブラリのREADMEではハイフンが必要と書かれていますが不要です。
(これはissuesによるとEU版と日米版のモデルが異なることが理由のようです。もしかしたら将来ライブラリのアップデートが行われるかもしれません)
$ ./ps5-wake -vW [user credential] -B
ラズパイからPS5を起動出来たらOKです。
ラズパイへのNode-REDの導入、設定
次に、アレクサと連携させるために、Node-REDをラズパイに導入します。
Node-REDはコーディング不要の各種デバイス・サービスの接続ツールです。
(参考:https://qiita.com/haru15komekome/items/491d4e78eac76a677d19)
Node-REDのインストール、設定は以下記事が参考になります。
https://qiita.com/g-iki/items/a5d4d4674a30de7ed124
最終的に作るNode-REDのフローは以下の様に前章で入力したコマンドを実行するようにして下さい。
アレクサの設定
上記記事を参考にAmazon AlexaアプリからNode-REDのスキルを有効化してください。
(記事ではPCからでも出来ると書いてありますが、自分は見つけられませんでした…)
これで、Node-REDでのデバイス名を"PS5"にしていれば、「Alexa、PS5をつけて」でPS5が起動するはずです。
おわりに
パケットキャプチャとリモートプレイを同じPCで行うというのがミソで、少し嵌りましたが無事実行できて楽しかったです。
issuesにはAPでパケットキャプチャを実行すれば同じPCでなくてもできるような記載があったのですが、APでパケットキャプチャってどうやるのでしょう?
詳しい方がいたら教えて頂けたら有難いです。