スマートホームスキルとNode-redとpython-broadlinkを使ってrm mini3を操作するようにするメモ
参考:Amazon Echoで「○○をつけて」と言って家電を操作する - Qiita
ほとんどここの内容。rm mini3 + debian(strech)バージョン。日本語打つのが嫌なのでめっちゃ参照する。
前置き
Alexaでスマートホームを実現する方法は主に以下の方法ある。
- カスタムスキル
- IFTTT連携
- スマートホームスキル
上から順に自由度が高いが、スマートホームスキル以外は依頼時に呼び出し名が必要で使い勝手が悪い。
e.g.「アレクサ、"リモコンを起動して"テレビをつけて」、「アレクサ、テレビをつけて"をトリガー"」
スマートホームスキルは現状の対応操作(ON,OFF,調光,調色)しかできないが、自然な依頼が可能である。
e.g. 「アレクサ、テレビつけて」、「アレクサ、照明を明るくして」
カスタムスキルであれスマートホームスキルであれ、スキル開発が(それなりに)面倒くさいので一番シンプルにやるならIFTTT連携が良い感じだった。
そんなある日、イギリスのおじさんがスマートホームスキルの面倒な部分を実装して必要なところだけをサービスとして提供してくれている事を知った。今回それを使って、自然な依頼でrm mini3を音声操作できるようにする。イギリスのおじさんに大いに感謝する。(paypalでビール代を送ってあげよう)
使うもの
- ハードウエア
- alexa
- スマートスピーカ
- rm mini3
- wifi ir リモコン
- debian(strech)
- お家にある常時起動かつnode-red,pythonが動けば何でも良い
- (ルータ)
- alexa
- ソフトウェア
-
Node-RED Alexa Home Skill Bridge
- イギリスのおじさんが開発したホームスキルとnode-redを繋げる無料Webサービス
- ビール代はこちらからpaypalで。
- Node-red (on node.js)
- 機能毎に用意されたノードをGUIでいじるだけでプログラムを作れるサーバ
- python-broadlink
- rm mini3をコマンドラインから操作するpythonで書かれたプログラム
-
Node-RED Alexa Home Skill Bridge
それでは始めよう。
スマートスピーカーが成熟するとこのような工夫は不要になるでしょうが、逆にハックする楽しみを味わえるのは今ならではです。
手順.0
ぐっちゃぐちゃにする用のフォルダを作ろう
mkdir ~/smarthome-project
cd smarthome-project
手順1. Node-RED Alexa Home Skill Bridgeのセットアップ
リンク先と全く同じ
手順2. スマートホームスキル (Node-RED) とデバイスを追加する
リンク先と全く同じ
手順3. Node-redとpython-broadlinkのインストール
node-redのインストール
Debian(strech)だと普通にaptするとかなり古いしnpm入らないというクソ仕様なので、公式サイトパッケージマネージャを利用した Node.js のインストール | Node.jsに従う。
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g --unsafe-perm node-red
node-red #起動
最近のraspberry piはこんなことしなくても標準でnode-red入ってるらいしい。
RaspberryPiでNode-REDが使えるようになった - Qiita
python-boradlinkのインストール
sudo apt install python
sudo apt install python-pip #pipが入っているならいらない。よく覚えてない
(setuptoolsがないと言われる場合)
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
(ここまで)
sudo pip install broadlink
sudo apt install git
git clone https://github.com/mjg59/python-broadlink.git
cd python-broadlink/cli
# ~/smarthome-project/python-broadlink/cli
# rm mini3の認識
./broadlink_discovery
XxXXXX xxx.xxx.xxx.xxx. xxxxxxx
# いい感じに認識してそうなら情報を保存
./broadlink_discovery > ROOM.device
# 学習(コマンドを叩いてからrm mini3に向けてリモコンを操作)
./broadlink_cli --device @ROOM.device --learnfile LIGHT.on
# 送信(学習させた内容が動作することを確認),@を忘れずに
./broadlink_cli --device @ROOM.device --send @LIGHT.on
手順4. Node-REDで家電操作のフローを作成する
execノード以外は同じ
execノードには*.shではなく送信コマンドをフルパスで入れる。むっちゃ長くなるので引数を使うと多少まし。
例
コマンド:/home/(ユーザ名)/smarthome-project/python-broadlink/cli/broadlink_cli
引数:--device @/home/(ユーザ名)/smarthome-project/python-broadlink/cli/ROOM.device --send @/home/(ユーザ名)/smarthome-project/python-broadlink/cli/LIGHT.on
(msg.payloadのチェックを外すこと)
あとはデバイス毎やON,OFFや照度の調整ごとにどんどフローを作っていくだけ!
手順5. シェルスクリプトからNature Remoを使って照明をつける
コマンドで実施済みのため必要なし。
手順6. テレビやtorneを遠隔から操作できるようにする
Braviaやtorneを連携する場合には参考に。
手順7. node-redoのservice化
全てうまくいったらnode-redをサービス化しておく。raspberry piの場合でも使えそうだけどやったことはない。
sudo nano /lib/systemd/system/nodered.service
(以下の内容で作る、パスの指定だけ見直して。)
[Unit]
Description=The NodeRed
After=syslog.target network.target
[Service]
Type=simple
User=root
Group=root
Nice=5
KillSignal=SIGINT
ExecStart=/usr/bin/node-red
Restart=on-failure
StandardOutput=syslog
WorkingDirectory=/home/(ユーザ名)/.node-red
User=root
Group=root
[Install]
WantedBy=multi-user.tar
sudo systemctl daemon-reload
sudo systemctl enable nodered.service
sudo systemctl start nodered.service
memo
Debian(strech)の正体はrock64にRelease 0.6.32: jenkins-linux-build-rock-64-210 · ayufan-rock64/linux-buildを入れてる。
SynologyでやってもよかったけどNASをいじくり回すの怖い。