Aug 7, 2020

alexaで家電を操作してみた。

前書き

年末に echo dot、eRemote が届いたので、家電を操作してみた。「alexa、照明つけて」「alexa、エアコン消して」ちゃんと反応している。 ただ、数日後に突然「〇〇から応答ありません」とつれない反応、eRemote のサポートフォーラム見ると同様の現象が出ているようでした。

また、iPhone アプリ、eHome から eRemote で家電操作はできるのに、家電の追加や設定は Wifi だとできない。4G 経由だとできるのに・・ こちらの proxy の設定かなと思いサポートに聞きましたが、詳しい仕掛け教えてくれない、ルータリセットしてください。のレベルでした。 サポートは親切で反応も早くて好感は持てたんですけどね。 そう言えば、eRemote は中国のベンダーだったような、日本の代理店のサポートに期待してもダメかな。観察していると、eRemote は日本の AWS に頻繁にアクセス、eHome はどうも中国のサーバにアクセスしているみたい。

eRemote は、仕掛け Broadlink 黒豆と一緒だよね。調べたら python-broadlinkなるものを発見、仮想 PC(Fedora)にセットアップして試してみました。

$ broadlink_discovery
###########################################
RM2
# broadlink_cli --type 0x2712 --host 192.168.1.XXX --mac 51XXXXXXXX
Device file data (to be used with --device @filename in broadlink_cli) :
0x2712 192.168.1.XXX 51XXXXXXXX
temperature = 23.9

ちゃんと eRemote を見つけてくれました。後述する node-RED を入れてしばらく遊んでたんですが、Raspberry pi にも入るとのこと。専用機にするならこちらかな。ということで Raspberry pi にイスントールすることにしました。 Raspberry pi3,OS は Raspbian Lite です。Raspbian にはデスクトップで node-red が入っているみたいですが、デスクトップ使うつもりないので Lite にしてます。

Raspberry pi に python-broadlink をインストールします。

sudo apt-get install python-pip
sudo pip install broadlink

Broadlink ライブラリ入ったので、あとは、これを操作するコマンドをpython-broadlinkから取ってきます。お好みで、broadlink_cli,broadlink_discovery はシンボリックリンクで/usr/local/bin に張っておきます。 コマンドの使い方は、python-broadlink cliをみてください。 次にリモコンのデータを登録します。

broadlink_cli --device @eremote --learnfile TV.power

@eremote は discovery で取得情報を格納したファイル名、learnfile はリモコンの情報を保存しておくファイルです。 次はコマンドから家電を操作してみます。 broadlink_cli —device @eremote —send @TV.power テレビがつきましたね。これで Raspberry pi から eRemote 経由で家電操作することが可能になりました。次はいよい alexa さんに家電を操作してもらう番です。これに使うスキルが「Node-RED」このスキルは、Node-RED Alexa Home Skill Bridgeを使って Node-RED で記述したデバイスを操作します。

Node-REDは、ハードウェアデバイス/API およびオンラインサービスを接続するためのツール。今回調べてこれすごいわ、ちょっと感激、Node-RED Alexa Home Skill Bridge を使うことで alexa とつなぐことができるんです。

(^○^) あれくさ >>> echo Dot—Amazon Alex(Skill node-RED) — Node-RED Alexa Home Skill Bridge — Raspberry pi(Node-RED,python-broadlink) — eRemote ))) TV☆☆

な感じになります。

それでは環境を整えていきます。まずは、Raspberry pi に Node-RED を入れます。

Raspberry pi に Node-RED をインストール

$ sudo apt-get install -y nodejs npm
$ sudo npm cache clean
$ sudo npm install npm n -g
$ sudo n stable
$ sudo apt-get install nodered
$ update-nodejs-and-nodered
$ node-red-start
$ sudo systemctl enable nodered.service

これで http://raspberry pi サーバ:1880/で Node-RED がページにアクセスできたら OK です。次に Node-RED に node-red-contrib-alexa-home-skill を入れていきます。デプロイ横の三本線をクリツクし設定を選択します。次にノード追加タグから node-red-contrib-alexa-home-skill を検索して登録します。

node-red-contrib-alexa-home-skill!

Node-RED に家電を操作する処理を入れる前に、Node-RED Alexa Home Skill Bridge へ操作したいデバイスの登録や Amazon Alexa に Node-RED スキルを登録します。

Node-RED Alexa Home Skill Bridge にデバイス登録

Node-RED Alexa Home Skill Bridgeにアクセスして自分のアカウントを登録します。登録はユーザ名、e-Mail とパスワードのみです。 登録したアカウントで操作したいデバイスを登録したします。Add Device から Name,Description,Actions を登録します。日本語名も問題ないです。alexa もこの日本語に応答してくれます。

node-red-contrib-alexa-home-skill!

Amazon Alexa に Node RED スキルを登録

Amazon Alexaにアクセスして、Node RED スキルを覚えさせます。スキルから Node-RED を検索し Node-RED スキルを登録してください。次にスマートホームのデバイスから検出を実行してください。先ほど Node-RED Alexa Home Skill Bridge ベージに登録したデバイスが検出されれば OK です。

次は Raspberry pi で Node-RED を使って家電を操作する処理を埋め込みます。

Node-RED で家電操作の処理を登録

Raspberry pi の Node-RED にアクセスしたら、左のパーツから alexa home をフローにドラッグします。同様に、switch、change、exec、debug パーツを配置してそれぞれ繋げます。

node-red-contrib-alexa-home-skill!

こんな感じです。照明を例に説明します。最初に alexa home パーツの設定、灰色のパーツです。これをダブルクリックするとプロパティが開きます。Account 横の鉛筆マークをクリックしこれに Node-RED Alexa Home Skill Bridge に登録したユーザ名、パスワードを入力すると Device に登録したデバイスが表示されます。次に switch です。ここには alexa の反応に応じたアクションに応じて設定をします。詳しくはAlexa documentsをみてください。

node-red-contrib-alexa-home-skill!

change は、それぞれ on, off,dark と設定します。

node-red-contrib-alexa-home-skill!

あとは exec です。コマンドに broadlink_cli —device @xxxx —send @xxx みたいに eRemote を操作するコマンドを入れれば OK です。私の場合は、汎用的なシェルを一つ作り引き数により、各家電をコントロールするようにしました。あとはデプロイしてアレクサと呼びかければ家電が反応してくれると思います。

echo dot がきてから一番便利になったと感じるのは、zwift で屋内トレーニング中に、アレクサ、エアコン止めてとか、もっとポップな曲かけてとかできるようになったこと、そのうち、温度上がってきたら冷房にするとか、自伝車のパワーが落ちてきたらテンポの良い音楽に変えていくとか・・・夢は広がるまた一つおもちゃができました。

zwift