Alexa+Node-RED+Nature Remo miniでスマートホーム化の第一歩 〜照明を制御する〜

はじめに

Alexa+Node-RED+Nature Remo miniでスマートホーム化を試します。今回は照明の制御を行なっていきます。

iPhone Alexaアプリに話しかけるだけで操作ができるので、Echo dotを各部屋に設置しなくても、スマートリモコンさえ各部屋にあればスマホを使用して家中の家電が音声だけで操作できるので便利です。(Alexaにデバイス登録されていれば、Echo dotすら必要ありません。)

Nature Remo Smart Home Skillにより、Nature Remo mimiに登録されているデバイスが簡単にスマートホームに登録できるようにはなりましたが、まだ簡単な制御しかできないため、ある程度細かく制御したいといったニーズに対応するためにはNode-REDおよびAlexaアプリの定型アクションを使用します(次回、テレビの制御にて使用します)。

Nature Remo Smart Home SkillのアップデートによってNode-REDを介さず自在に制御できるようになれば嬉しいですが、もうしばらく時間が必要かもしれません。

Node-REDのexecノード、functionノードはなるべく使用しない方向での制御を目指します。

制御フローのイメージ

環境

前提

  • AlexaアプリでEcho dotの初期設定が済んでいること
  • Node-REDのスキルの有効化がされ、Node-RED Alexa Home Skill Bridgeのアカウントにログインできる状態であること
  • Nature Remo miniアプリで操作したい家電のコントロール、ボタン設定が行われており、アクセストークンが発行されていること

前提条件を整えるための参考サイト

目次

  1. Node-RED Alexa Home Skill Bridgeへのデバイス登録
  2. Alexaアプリへデバイスの登録
  3. Node-REDへAlexaノードの登録
  4. Nature Remoのリモコン設定情報を取得
  5. Node-REDへNature Remoノードの登録
  6. switchノードの作成
  7. changeノードの作成
  8. Alexaで操作する

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

取り扱うNature Remoボタン制御の内容

照明の制御を行うに当たり、今回はNature Remoアプリに設定した以下の4つのボタン機能をAlexaで使用できるようにしていきます。

  • お好み
  • 消灯
  • 明るい
  • 暗い

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

Node-RED Alexa Home Skill Bridgeにログインし、Device登録します。

項目名 設定値 説明
Name 照明 デバイス名を設定します。Alexaへ呼びかけるデバイス名になります。後から変更できません。
Description 寝室照明制御 デバイスの説明を設定します。後から変更可。
Actions On、Off、+%、-% 制御したいアクションを選択します。今回は電源オン、オフ、明るさ調整のみ行います。後から変更可。
Application Type Light 選択不要。後から変更可。

back

Alexaアプリへデバイスの登録

Alexaアプリを開き、「スマートホーム」から「デバイスを追加」をタップします。「デバイスを追加」の前にEcho dotを起動していないと検索に失敗するようです。

「照明」が追加されていることを確認します。「タップしてコントロールまたは編集」と表示されている場合はタップします。

back

Node-REDへAlexaノードの登録

Alexa Homeノードをドラッグ&ドロップで配置し、ダブルクリックします。

Account欄の鉛筆アイコンをクリックします。

Node-RED Alexa Home Skill Bridgeのユーザ名とパスワードを設定します。

Deviceに「照明」が選択されていることを確認し、「完了」をクリックします。

Nature Remoのリモコン設定情報を取得

Node-REDへNature Remoノードの登録」時に使用するNature Remoのリモコン設定情報をJSON形式で取得します。

照明部分のみ抜粋すると、以下のようなデータが取得されます。

"nickname":"寝室照明",
"image":"ico_light",
"type":"IR",
"settings":null,
"aircon":null,
"signals":[{"id":"9db3c894-ae8e-4f31-bd84-01310ba4c071",
"name":"全灯",
"image":"ico_lightdown"},
{"id":"6063b62d-46e8-4548-9c01-150134c449ef",
"name":"お好み",
"image":"ico_record"},
{"id":"37ef14c1-c929-4002-acd1-e1c5e877055a",
"name":"常夜灯",
"image":"ico_lightup"},
{"id":"5a2b1658-36c7-4353-9e15-edb8110921b5",
"name":"明るい",
"image":"ico_arrow_top"},
{"id":"e889f504-8d9d-40f4-a698-5f066b3c5ded",
"name":"暗い",
"image":"ico_arrow_bottom"},
{"id":"8d93a75c-fed2-441c-921a-b97ab2fae3a6",
"name":"消灯",
"image":"ico_io"}]

Raspberry Piにssh接続し、以下のコマンドを実行します。

$ curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer <アクセストークン>" > remo.json

<アクセストークン>:Nature Remoサイトで生成したアクセストークンを設定します。

back

Node-REDへNature Remoノードの登録

Nature Remoノードをドラッグ&ドロップで配置し、ダブルクリックします。

Token欄の鉛筆アイコンをクリックします。

Nature Remoサイトで生成したアクセストークンを入力し、追加をクリックします。

Applianceに「Nature Remoのリモコン設定情報を取得」で取得したJSONファイルへのパスを設定します。

Nameはわかりやすい名前であればなんでも良いです。

back

switchノードの作成

現在のフローは以下のようになっており、Alexa HomeとNature Remoノードが配置されています。

このフローに、Switchノードを配置し制御を行います。

Switchノードをドラッグ&ドロップで追加します。

Switchノードをダブルクリックし、プロパティの編集画面を開きます。

名前はノードの名称になります。適当に設定します。プロパティは、「command」と入力します。

「+追加」をクリックし、条件を追加します。入力欄に以下を順に設定します。

  1. TurnOnRequest
  2. TurnOffRequest
  3. IncrementPercentageRequest
  4. DecrementPercentageRequest

commandの概要を以下にまとめます。

Alexaへの発話 Action 対応するコマンド
(msg.command)
説明
〇〇をオン
〇〇をつけて
On TurnOnRequest 電源オンのコマンド。
〇〇をオフ
〇〇を消して
Off TurnOffRequest 電源オフのコマンド。
〇〇を明るくして
〇〇を〇%増やして
+% IncrementPercentageRequest 増分指定のコマンド。
〇〇を暗くして
〇〇を〇%減らして
-% DecrementPercentageRequest 減分指定のコマンド。

「完了」をクリックすると、以下のフローになります。

switchノードの出力側に4つの出力が作成されています。

back

changeノードの作成

電源オンのchangeノード作成

changeノードをドラッグ&ドロップで追加します。

changeノードをダブルクリックし、編集します。

「名前」はノードの表示名なので、わかりやすい名前をつけます。

「対象の値」は”{}JSON”を選択します。「…」をクリックし、JSONを入力します。

「Nature Remoのリモコン設定情報を取得」で取得したremo.jsonファイルを元に、nicknameとnameを編集します。

電源オンには、「お好み」ボタンの機能を割り当てました。

switchノードの1番上の出力とchangeノードをリンクさせます。

電源オフのchangeノード作成

同様に、電源オフのchangeノードを作成します。

明るくするchangeノード作成

同様に、明るくするchangeノードを作成します。

「明るい」ボタンでの明るさの増加率が低く、1回の操作であまり変化がないため、ここでは4回同一のコマンドを発行しています。

暗くするchangeノード作成

同様に、暗くするchangeノードを作成します。

「明るく」のノードと同様、4回同一のコマンドを発行しています。

最後に、リンクされていないノード間をつなぎ合わせたら、右上の「デプロイ」をクリックします。

「デプロイが成功しました」と表示されたら完成です。

back

Alexaで操作する

Amazon Echo dotまたはAlexaアプリに話しかけて操作してみましょう。

  • 「アレクサ、照明オン」「アレクサ、照明をつけて」
  • 「アレクサ、照明オフ」「アレクサ、照明を消して」
  • 「アレクサ、照明を明るくして」
  • 「アレクサ、照明を暗くして」

うまく動作しない場合、debugノードを追加し、msg.payloadやmsg.commandの値を確認しながら不具合を解消していきましょう。

back