Node-RED RaspberryPi Windows

AlexaとNode-RED【実践編】

投稿日:

今回いよいよ家電コントローラとして運用できるように、Alexaのスマートホームスキルとなるアクションを作ります。

ちょっと前までは家電コントローラとして使用するには赤外線リモコン機能が必須、みたいな感じでしたが既に時代はIoT。
いつの間にやら普通にLANに繋がっているモノで溢れています。

私も真っ先にRaspberryPiの赤外線リモコン化をしたものの、実際に赤外線信号で操作しているのは安いLEDシーリングライトとエアコン、サーキュレーターくらい。

テレビもアンプもPCも、ゲーム機すらLAN経由、Node-REDで操作出来ちゃいました。
前の回でも書きましたがWindows版のNode-REDもありますし、ブラウザでアクセスする公式Alexaエミュレータもありますので、今回の内容はその気になればPCだけでも同様に操作できるはずです。

私がRaspberryPiや電子工作抜きの「AlexaとNode-REDだけで出来たこと」は以下。
・WakeOnLanで対応機器を起動
・LGのTVを操作
・DENONのアンプを操作
・PS4起動、スタンバイ移行
・XBOX ONE起動
・PC起動、任意アプリの立ち上げ、PCシャットダウンまで自在に操作

ちなみにいろいろ調べてる過程ではいくらかRaspberryPiでプログラムを組む必要があるかと思ってましたが、結局一行も書かずに済んでしまいました。
ホントにNode-REDはなんでもできちゃう印象です。

前置きが長くなりましたが、基本的に前半はNode-REDのノード紹介と使い方説明になります。

WakeOnLan
LAN経由でマジックワードという特殊なパケットを送り付け、対象機器を起動させます。
私の環境ではLGTVとDENONのアンプも対応していました。
大抵のPCは対応していますが最初にWoL起動を有効にする設定が必要です。
PC側の設定は千差万別なのでそれぞれで調べて頂くとして、Node-RED側はnode-red-node-wolをインストールします。
ノードを配置して設定を開いて対象機器のMACアドレスとIPアドレスを入力すればOKです。

name欄は入力しなくても問題なく動作するんですが、画面にノードが増えてくるとこんがらがってくるので簡潔に判りやすい名前を付けるといい感じです。

LGのTVを操作
LGのテレビはWebOSというシステムで動作していてAPIが公開されています。
node-red-contrib-lgtv」ノードを追加するとNode-REDから簡単に操作可能になります。

まず最初に認証が必要です。
テレビの電源をOnにした状態でNode-REDからLGTVの「Control」ノードを中央部分に配置、ダブルクリックして設定画面からさらに鉛筆マークのボタンで新規追加を開きます。

テレビのIPアドレスを入力しConnectボタンを押します。

するとテレビの画面に認証してよいかどうかの確認画面が出ますので「はい」を選択します。
Tokunが自動的に挿入され、以後LGTVがNode-REDのコマンドを受け付けるようになります。

なお電源OFFはこのLGTVノードから出来ますが電源ONは出来ないので、先のWakeOnLanを使用して起動させます。
ということは電源のOnとOffで別の機能を使用することになりますから分岐させる必要があります。
ノードを分岐させるにはSwitchノードを使います。

設定画面を開くと最初は分岐がないのですが、下の「+追加」ボタンで増やすことができます。
今回はOnとOffですから一度押して2つにします。

ここで、前回試した人は既にティンと来たかと思いますがノード分岐の条件にはmsg.payloadを使用します。
「テレビをつけて」「オンにして」と指示すると「True」、「消して」「オフにして」だと「False」という値が入るので、「Onにしたいときは1番出力」「Offにしたいときは2番出力」ということで画像のように設定します。

Switchノードで分岐した後はOnの方に前述のWakeOnLan、Offの方にLGTVノードパレットから先ほどと同じControlノードを配置します。

しかし改めてControlノードの設定画面を開くと、あれ?何か足りない気がします。

実はあらかじめ、msg.payloadに「どの操作を送信するか」を設定しないといけないのです。
このままだとSwitchノードで分岐したときのまま「False」が送られてしまい、LGTVのWebOSはそんなボタン知りませんので何も反応しません。

このような場面でmsgに特定の値を設定するにはTemplateノードを使用します。
今回は平文として、中央のテキストを電源OFFを意味する「turnOff」にします。

そして、各ノードの出力と入力を繋いでようやく完成です。

実際にアレクサに話しかける前にデプロイを忘れないでください。
私はよく忘れます…

少々駆け足になりましたが、今回のようなSwitchノードとTemplateノードの使い方が基本で大体このパターンで何とかなります。
私はOn/Offさえできれば満足で他は試してませんが、チャンネル変更や音量変更などももちろん出来ますのでいろいろ試してみてください。

LGTVノードについてはこちらを参照させていただきました。
Node-redでスマートハウス-LG製テレビを操作してみる(1/5)~(5/5)

さて、ここからちょっと飛ばし気味で行きます。

DENONのアンプを操作
そのものずばりな「node-red-contrib-denon」というノードをインストールします。
送信コマンド表でもあるpdfファイルが上記ページから既に消えてしまっていますが「Denon AVR control protocol」で検索するといくつか見つかります。
機種によって微妙に違う場合があるようなので注意してください。
認証は不要ですが使い方はLGTVとよく似てます。
電源ON/OFFの他、ボリュームコントロールや入力の切替までも可能です。

PS4を電源ON/スタンバイ
厳密にはこれはNode-REDのノードではなく、npmで公開されているパッケージを使います。
(npm自体のインストールは後述します)
これはスマホの画面をPS4のサブ画面等として使う「PS4 Second Screen」に成りすます形で電源ONの制御をするようです。

sudo npm install -g ps4-waker

でインストールします。
そして先にPS4が起動している状態で、

sudo ps4-waker

を実行するとPS4 Second Screenの接続待ちになるので、スマホにPlayStation Appをインストールし、アプリ内からさらに「セカンドスクリーン」をインストールして正規手順を進めると、ちゃっかりスマホアプリと一緒にps4-wakerが認証待ちの状態になっています。
ここでps4-wakerの方を認証するとPS4の画面にPINコードが表示されるので

sudo ps4-waker --pin [PS4画面に表示されたpin-code]

として以後、PS4が

sudo ps4-waker		#起動
sudo ps4-waker standby	#スタンバイ

を受け付け動作するようになります。
このコマンドをNode-REDのExecノードで実行します。
こちらを参考にさせて頂きました。
Google Homeでプレステ4を操作できるようにしてみた

XBOX ONEを起動
これもまたnpmパッケージです。

sudo npm install -g xbox-on

でインストールし、XBOX ONEのIPアドレスと、「設定」→「システム」→「本体情報」で表示される「XBOX Live デバイスID」を使って

xbox-on -i <IPアドレス> -l <XBOX Live デバイスID>

で電源ONします。
こちらは電源ONだけの機能で、スタンバイや電源OFFは出来ません。
pa4-wakerと同じくEXECノードで実行できます。

npmのインストール

npmはNode.jsのパッケージマネージャーです。
Node-REDには無い便利なパッケージもありますのでこの際入れときましょう。


sudo apt install -y git
sudo apt install -y nodejs
sudo apt install -y npm
sudo npm cache clean
sudo npm install npm n -g
sudo n stable

Zeroは3B+とCPUが違うせいかエラーが出る場合があるようです。
その場合は最新版ではなく古いバージョンをいれてみるといいそうです(未確認)

PC操作は少々手間がかかるので次回に続きます。

-Node-RED, RaspberryPi, Windows
-, , , ,

Copyright© 復活の「愛馬の上で直立不動」 , 2021 All Rights Reserved Powered by STINGER.