はじめに
自宅で Node-red を利用して AlexaとRaspberryPi を通信させていたのですが、以前のアップデートで、Alexa側からは、一つのIPアドレスに対して、一つのデバイスしか認識しなくなった様子です。口頭で部屋の家電を制御するのに飽きていたことに、ものぐさも手伝って、放置していたのですが、今回、再設定したので備忘となります。
Node-Red どのノードを使うのか?
右上のハンバーガーメニューから「パレット管理を選択」
次に「ノードを追加」タブを選択してください。
気ワード「alexa」で検索すると以下のノードが あるので追加してください。
"node-red-contrib-alexa-home"
左端のノードパレットに以下が追加されます。
どのように設定するのか?① ノードをフローに
Alexa Home controller を一つフローに置きます。二つ置く必要はありません。
次にAlexa home を置いて好きなデバイス名を付けてください。Alexaのアプリからはこの名前で認識されます。自分は「Light1」にしています。関係あるかないか検証していませんが自分は「Type」をExtended Color lightにしています。
この時、Alexa home を複数置いて、複数のデバイスを1つのサーバーに設定しようとしてはいけません。上手く行きません。又、複数置いた状態で、Alexa アプリからデバイスを検出しようとすると、サーバーに置いたデバイス(=Node)を認識しなくなります。一つに戻しても、何日間か、再検出されない現象を確認しています。
どのように設定するのか?② ご説明
デバイスが一つしか設定できないなら、AlexaからNode-Redにさせれる仕事の数は凄く少ないんじゃない? 以前と違って使い物にならないのでは?
そう思われるのはごもっとも。
ここで抜け道があります。Alexa アプリから ライトのデバイスには0%~100% の刻みで明るさを指定できるのです。気付きましたか? 「マイ定型アクション」を使うと定型文の命令で、100種類の動作を指定できます。
どの様に設定するのか?③ ノードの設定
ここで、パレットの機能から「switch」ノードを置いて利用します。
「Light1」からSwitch ノードに繋げます。
palyloadには「.bri」を追記してください。「明るさ」を受け取る訳です。
名前が100~81なのは、この方法では一つのフローに100命令を置かなければならず、
100個に分岐するSwitch を置くと、フローがこんがらがるので、20個づつのSwitch をフロー上に離して置いて解決しています。
さて上の写真で気付かれと思いますが、100が最大なのに、254 ?と思った方、そう。254です。Alexa アプリで 100%の明るさを選んだ場合、254 が 流れてきます。
- 100 = 254
- 99 = 251
- 98 = 249
このような具合に100 の 254 と 99 の 251 の間は3 の空きがあり、99と 98 = 249の間は2つの空きがあります。規則正しく、3飛ばし、2飛ばしの数字がNode-Red側には流れてきます。(0~100 まで全部確認したわけではないので、debug ノードを利用してmsg.payload.briに流れてくる値を確認しながら設定してくださいね)
このように面倒な作業をして、ようやく、Raspberry Pi をAlexaで制御できるようになりました。お疲れさーん。