PS5で音声起動が可能に！ゲームプレイがよりスムーズに（ラズパイ+Node-RED）

# 概要
我が家でPS5を声で起動できるようになりました。

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">PS5を声で起動。ノーコーディング<br><br>英語issuesのわずかな情報しかなくて、パケットキャプチャしてユーザ情報をぶっこ抜いて来るのが大変だった<br>日本人でトライした人の情報見当たらないから記事書くか <a href="https://t.co/h0rAYBuhZc">pic.twitter.com/h0rAYBuhZc</a></p>&mdash; すいばり@&#39;22年5戦4勝⚾️ (@Suibari_cha) <a href="https://twitter.com/Suibari_cha/status/1610580491794804736?ref_src=twsrc%5Etfw">January 4, 2023</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

本記事は同じことができるようになるための手順（Windows編）を書きます。

**特にパケットキャプチャが詰まりどころで、自分が探した限りは日本語情報は皆無、あってもライブラリのissuesに断片的な英語の情報しかありませんでした。**
そこを補完できるような記事にできればと思います。

（タイトルはChatGPTに考えてもらいました）

# 背景
PS5はリモートプレイによるスマホ、PCからの起動には対応していますが、AlexaやGoogle Nest、Siriなどのスマートスピーカーからの起動には現状対応していません。

今回はそこにラズベリーパイを噛ませることで連携を実現します。
以下が構成図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110901/5611630c-0768-dccf-a8b2-f48598975d89.png)

# 目次
1. ラズパイでPS5-WAKEのビルド
1. パケットキャプチャによるuser credentianの取得
1. PS5-WAKEでPS5を起動できることの確認
1. ラズパイへのnode-redの導入、設定
1. アレクサの設定

# 内容
## ラズパイでPS5-WAKEのビルド

以下コマンドを順次実行します。

```shell
$ 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"を入力し待機させます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110901/3c6c9b31-ce08-c3df-244f-877871617772.png)

次に以下SIEのサイトからリモートプレイアプリをダウンロード、インストールします。
起動後、Sonyアカウントを入力し、ご自身のPS5と紐づけしてください。
https://remoteplay.dl.playstation.net/remoteplay/lang/jp/ps5_win.html#section2

リモートプレイを行ったことがない場合、PS5の設定でリモートプレイを有効化する必要があると思いますのでそちらも有効化してください。

設定後、PS5は遠隔起動するためにレストモードにしておいてください。

リモートプレイが実行可能になったら、実行します。
実行直後にWiresharkが3個以上のパケットを拾ってくると思います。
パケットをいくつか選択してみて、**その中から、"user credential"文字列が含まれるものを見つけてください。**
"user credential"直後の9桁の数字が得たい情報です。数字をメモっておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110901/81ac83c0-69b1-40ae-ab77-916f951a3ed9.png)

## PS5-WAKEでPS5を起動できることの確認

先程得たuser credentialを使って、ラズパイ上で以下コマンドを実行します。
[user credential]のところに、前章で得た9桁の数値を入力して下さい。
**ライブラリのREADMEではハイフンが必要と書かれていますが不要です。**
（これは[issuesによると](https://github.com/iharosi/ps5-wake/issues/5)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のフローは以下の様に前章で入力したコマンドを実行するようにして下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110901/3fe60895-d851-401a-9d85-d387af60fd97.png)

## アレクサの設定

上記記事を参考にAmazon AlexaアプリからNode-REDのスキルを有効化してください。
（記事ではPCからでも出来ると書いてありますが、自分は見つけられませんでした…）

これで、Node-REDでのデバイス名を"PS5"にしていれば、「Alexa、PS5をつけて」でPS5が起動するはずです。

# おわりに

パケットキャプチャとリモートプレイを同じPCで行うというのがミソで、少し嵌りましたが無事実行できて楽しかったです。
[issues](https://github.com/iharosi/ps5-wake/issues/9)にはAPでパケットキャプチャを実行すれば同じPCでなくてもできるような記載があったのですが、APでパケットキャプチャってどうやるのでしょう？
詳しい方がいたら教えて頂けたら有難いです。