alexaで家電を操作してみた。〜 Echo dot + Amazon Alexa + Node RED + Raspberry pi + eRemote 〜



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

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

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

■python-broadlinkでeRemote検索
$ 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に張っておきます。
コマンドの使い方は、こちらをみてください。

リモコンのデータを登録する。
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に家電を操作する処理を入れる前に、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もこの日本語に応答してくれます。



ちなみに照明は、点灯、消灯に加えて二色に対応させてます。二色って言わないのかなぁ、周りに言ったら通じなかった。アクションは-%をチェックしています。照明を暗くしてというと、二色になります。寝るときに豆球のみつけるあのオレンジのみ点きます



■ 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パーツを配置してそれぞれ繋げます。



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



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



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


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

NuxtからGatsbyに変えてLighthouseで100点を目指す、ついでにPWA対応もしてみた。

Nuxt から Gatsby に変えて Lighthouse の点数が 92 点まで上がりました。今回はさらに 100 点を目指したいと思います。ついで PWA に対応したいと思います。 SEO対応のため、NuxtからGatsbyに変更、さらにLighthouseを...