スマートスピーカーでPS4を操作してみた

やりたいこと

スマートスピーカーでPS4を起動できたら便利ですよね!?さらに特定のアプリを狙い撃ちして起動できたら素晴らしい!そんなことができちゃいます。

我が家はPS4をレコーダー(torne/nasne)として使っているので、コントローローラーは使わずテレビのリモコンだけで操作を完結したかったんです。でも、PS4はbluetoothとwifiしか受け付けないので、スマートスピーカー+赤外線リモコンの最強タッグが通用しません。

しかし! Raspberry PIをスマートスピーカーと組み合わせると、そんな夢のようなことができちゃうので紹介します!

動作イメージ

今回紹介するシステム全体の動作イメージは通り。重要なのはRaspberry Piに構築したNode Redとps4-wakerの2つです。

構成概要
構成概要

Node Redの役割は主に2つです。

①Alexaにない「プレステ」のキーワードを登録する

②音声からRaspberry Pi上のコマンドを実行する

Alexaには標準だとPS4を操作するためのキーワードはありません。なので、Node Redを使ってAlexaが「プレステ点けて/消して」を受け付けてくれるようになります。

また、「点けて」と「消して」に合わせてps4-wakerのコマンドを実行することでPS4を起動/停止することができます。

必要なもの(物理)

必要なものは下記の4つ。PS4とスマートスピーカーは必須です。Raspberry Piは別のものでもよく、Node Redとps4-wakerが動けば何でもよいです。

  • PS4
  • スマートスピーカー(Alexa)
  • Raspberry Pi

私はAlexaを使っていますが、Google homeでも大丈夫だと思います。

構築の流れ

システム構築の大まかな流れは下記の通りです。Node Redにより、音声に応じて任意のコマンドが実行できます。そのため、PS4の起動以外にも自由度が高く応用が利くようになります。

  1. Raspberry Piにps4-wakerを構築。(PS4がコマンドで操作可能になる)
  2. Node RedとAlexa(web)に「プレステ」の登録。(Alexaが「プレステ」に反応するようになる)
  3. Raspberry PiにNode Red(モジュール)をインストール。(「プレステ点けて/消して」をps4-wakerのコマンドに紐づけ)

1. Raspberry Piにps4-wakerを構築

ps4-wakerは、PS4をネットワーク経由で操作できるモジュールです。これにより、PS4の起動/停止をコマンドで操作することができます。

まずは、早速モジュールのインストールです。※環境によってはnpmも別途インストールが必要です。

$ npm install -g ps4-waker

インストールしただけでは、PS4の操作はまだできません。

一度ps4-wakerを実行して、このようなメッセージがでることを確認しましょう。

$ sudo ps4-waker
No credentials; Use Playstation App and try to connect to PS4-Waker

Raspberry Pi側はそのままで、PS4とps4-wakerを紐づけるため、iOSやAndroidの「PS4 Second Screen」をダウンロードし起動します。

起動したら画面下部の「PS4に接続する」→「セカンドスクリーン」と進めると「PS4-Waker」が出て来るので選択します。

すると、Raspberry Piで処理が実行されるのがわかると思います。

次に、今度はPS4を操作します。
「設定」→「PlayStation App接続設定」→「機器を登録する」と進めるとPINコードが表示されるので、そのPINコードを使い以下のコマンドを実行します。

$ sudo ps4-waker --pin
Logged into device! Future uses should succeed

これでps4-wakerの構築は完了です!試しにコマンドでPS4を起動/停止してみましょう!

$ sudo ps4-waker #スタンバイ状態から起動
$ sudo ps4-waker standby #スタンバイモードに

その他の操作はここから確認できます。

また、特定のアプリを起動させることもできます。

$ sudo ps4-waker start CUSA00442 #torneを起動
$ sudo ps4-waker start CUSA01065 #youtubeを起動
$ sudo ps4-waker start CUSA03099 #Amazon Prime Videoを起動

start の後ろの「CUSAxxxxx」の部分がアプリを意味しています。PlayStation Storeで、起動したいアプリのページを開いたときのURLに載っているので、置き換えることで好きなアプリを起動することができますよ!

2. Node Red(Web)とAlexaに「プレステ」の登録

続いてAlexaが「プレステ」というキーワードに反応してもらうための登録作業をします。

まず、Node Redという無料のクラウドサービスを利用します。Alexaと連携するためにNode-Red Alexa Home Skill Bridgeのページへアクセスし下記の通りアカウント登録とデバイス(プレステ)の登録を行います。

  1. トップ画面の上部にあるRegisterからアカウントを登録
  2. DeviceタブのAdd Deviceをプッシュ
  3. Add New Device ポップアップのName(プレステ), Actions(On/Off)を設定する

次に、Alexaの方で先ほどNode Redで登録したデバイスを追加していきます。

  1. AlexaアプリでスキルNode Redを有効にする
  2. スキルを有効後、ログインを求められるので先ほどアカウント登録した「Node-Red Alexa Home Skill Bridge 」のIDとパスワードでログインする
  3. Alexaの「デバイスの検出」で先ほど登録したデバイス(プレステ)を登録する

これでAlexaは「プレステ」をデバイスとして認識し、声に反応するようになりました。

試しに、「プレステ点けて」や「プレステ オン」と言ってみてください。きちんと反応が返ってくるはずです。ただし、このデバイス(プレステ)にはまだ何の機能も持たせていないため、実際にPS4が起動することはありません。

3. Raspberry PiにNode Red(モジュール)をインストール

構築の最終段階に入ってきました。先ほどAlexaに登録したデバイス(プレステ)に機能を持たせる工程です。Node RedのモジュールをRaspberry Piにインストールすることで、クラウドのNode RedとモジュールのNode Redが連携してRaspberry Piのコマンド(ps4-waker)を操作させます。

まずは、Node Redモジュールのインストールを行います。

$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

そしてNode Redを起動します。Raspberry Piはメモリがあまりないので、基盤となるNode.jsプロセスに未使用のメモリを早く解放するように指示するような 追加引数とともにNode-REDを起動する必要があると公式がおっしゃっています。仰せのままに従いましょう。

$ node-red-pi --max-old-space-size=256

ちなみに、Raspberry Piの起動とともに自動でNode Redのプロセスを立ち上げるコマンドは下記の通りです。

$ sudo systemctl enable nodered.service

では続いて、ブラウザを開いてNode Redのフローを作成し、デバイス(プレステ)が呼ばれた際にps4-wakerを叩くルールを実装していきます。URLはRaspberry Piで開くか他の端末で開くかで異なりますので注意が必要です。

  • Raspberry Piのブラウザでアクセスする場合: http://127.0.0.1:1880/
  • その他の端末からアクセスする場合: http://(Raspberry PiのIPアドレス):1880
Node Redの設定画面
Node Redの設定画面

URLにアクセスするとこのような画面が表示されます。既にフローを実装した状態ですが、このようにノードを繋ぎ合わせてルールを作ることで、色々な動作をさせることができます。

私は「プレステ」でPS4の電源操作と「トルネ」でアプリの起動を実装しています。ちなみに、「トルネ点けて」でスタンバイモードのPS4が起動するため、「プレステ」はもっぱらスタンバイモードにする用となっています。

では「プレステ」→「change:2 roules」→「電源操作」のフローを作成していきます。

「プレステ」部分はAlexa Homeのノードです。このノードは、Alexaに登録されたデバイス(プレステ)が呼ばれると反応しフローを起動してくれます。初期状態では使えないため追加する必要があります。

メニュー(=)→設定→パレットを開き「node-red-contrib-alexa-home-skill」を追加しましょう。

alexaの追加
alexaの追加

設定を閉じ、画面左のノード一覧を見ると↓のようなノードが追加されています。

alexaノード
alexaノード

これをドラッグ&ドロップでフロー画面に移動させ、ノードをダブルクリックすると編集画面が表示されるので、Node-Red Alexa Home Skill Bridgeで登録したアカウントでログインします。

alexaとNode Redの連携設定
alexaとNode Redの連携設定

ログインができれば、↑左画像のDeviceの更新ボタンをプッシュして表示される「プレステ」を選択します。これでAlexaの呼びかけに反応できるようになりました。

続いて「change:2 roules」を作成します。

最終的にps4-wakerのコマンドを実行して起動とスタンバイを使い分けるのですが、起動は引数なし、スタンバイは「standby」を引数として渡す必要があります。この引数の違いを表現するためにこの「change」ノードを利用します。

画面左のノード一覧から「change」ノードをドラッグ&ドロップし、ダブルクリックしましょう。

条件分岐の基データとなるalexa homeノードは「プレステ点けて」というとTrueを出力し、「プレステ消して」というとFalseを出力します。なので↓の様にTrueなら変換なし(引数なし)、Falseなら「standby」に変換して次のノードへ渡すよう設定します。

alexaからのデータを変換
alexaからのデータを変換

最後に、「電源操作」のノードでコマンド実行部分を実装します。

画面左のノード一覧から「exec」ノードをドラッグ&ドロップしダブルクリックしましょう。

設定する内容は、起動するコマンド(ps4-waker)と前ノードからの引数受付です。

ps-4 wakerコマンドの実行設定
ps-4 wakerコマンドの実行設定

これで、フローの作成は完了です。

あとは画面右上のデプロイをプッシュして設定を反映すれば構築完了です。

きちんと構築できていれば、「アレクサ、プレステ点けて」と言うと、ピピっとPS4が起動してくれるはずです!!

まとめ

Raspberry PiがあればPS4の起動も操作もできちゃいます。音声で操作できるものが増えると、ますます便利ですね!Raspberry Piとスマートスピーカーの組み合わせは無限の可能性があるので、どんどん家中をIoT化していきたいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です