LoginSignup
10
10

More than 5 years have passed since last update.

Amazon Echoから家電を制御 1 ~node-red-contrib-alexa-local~

Last updated at Posted at 2018-07-28

準備

ラズパイの構築リモコンの学習も完了させ、Node-REDにフローを書きます。描きます?
コードを書けないのでNode-REDは本当助かります。レゴ マインドストームみたい。

ブラウザからhttp://{ラズパイのアドレス}:1880/にアクセスします。

node-red-contrib-alexa-localのインストール

Node-REDの右上にある「三」をクリックするとメニューが出てきます。
メニューの中から「パレットの管理」をクリックします。
「ノードを追加」タブで「node-red-contrib-alexa-local」を検索、「ノードを追加」します。

現在のバージョンではEcho Dotからのみデバイスを検索できるようです。
ついうっかり無印にDotを買い足したから使えたけれど...

「node-red-contrib-alexa-home-skill」なんてのもありますが、ukにあるサーバーがたまに落ちてるので、不意に操作ができなくなります。って言うか、操作できなくなったので乗り換えました。

フローの作成

コードを書くことも、そもそもの知識もないので試行錯誤しました。
とりあえず先ほど追加したnode-red-contrib-alexa-localノードをフローエディタに置いてダブルクリックしてデバイス名をつけます。alexaに話しかけたとき、alexaが認識してくれるよう日本語で名付けます。
よし、お前は今日からテレビだ。

「alexa、デバイスを探して」

見つかりました。Philips Hueとして認識されるようです。テレビなのに電球です。

んで、なにするの?となるのですが、execノードも置いて~/python-broadlink/cli/tv.sh onを書いてデプロイ。当然、検索して沢山の先人の知恵をお借りしました。

「alexa、テレビをつけて」

ついた。電源入った。なんだ、Node-REDなんて簡単じゃん。ちょろいなNode-RED。当然先人の知恵のおかげです。

さて。デバイスに一対一でexecノードなんて作り方してたら醜いしカッコ悪い。
テレビをつけるか消すかしかできないし。

そうだ、条件分岐しよう。

debugノードを接続して見るとなにやらmsg.payloadに"on"とあります。プロパティ?なにそれ。msg.payload?なにそれ。
ほう、alexaは「つけて」を"on"に変換するのか。
msg.briとかmsg.on_off_commandとか種類あるじゃん。わかんないよ。
もう少し条件分岐していろんなことをやらせたいので、switchノードを置きます。
switchノードで分岐するため、分岐できる条件を探します。
先ほどのdebugノードを眺めてmsg.bri、msg.on、msg.on_off_command、msg.change_directionが掛け声によりどのように変化するか確認します。

その結果

msg. on on_off_command bri change_direction
つけて true true 不定 0
けして false true 0 0
明るくして true false 74 1
大きくして true false 74 1
暗くして true false 24 -1
低くして true false 39 0

おい、msg.bri。「暗くして」と「低くして」で挙動を変えるな。シーリングライトが暗くならず、気がつくまでに時間がかかったじゃないか。

後日、もう少し調べてみました

Amazon Echoから家電を制御 1.25 ~node-red-contrib-alexa-localの日本語の情報が少ないのでもう少し調べてみる~

見辛いのでひとまず、明暗を削除します

msg. on on_off_command bri change_direction
つけて true true 不定 0
けして false true 0 0
大きくして true false 74 1
低くして true false 39 0

msg.briを不定と書いたのは、msg.saved_briというのがあって、こいつが直前のbriを保持しやがるせいのようです。たぶん。

さて、さっきのswitchノードをダブルクリック。
msg.payloadをmsg.onに書き換え、端子を「==」から「is true」に変更し、端子を追加して「is false」も設定します。
そして各端子をいい感じにexecノードに接続。デプロイ。

「alexa、テレビをつけて」

alexa「はい」
よーし。ちょろいな。Node-RED。

「alexa、テレビをけして」

「はい」
...
ん?

暫くのち。

ああ...
execノードには引数として"on"をつけてました。
その引数を削除し、payloadにチェックを付けます。
payloadってことはmsg.onではダメなんだろうなと思いながらもデプロイ。

「alexa、テレビをけして?」

「はい」
...
知ってた。知っててやったもん。
msg.onをmsg.payloadに変換?する方法はないものか...と再び先人の知恵をお借りします。
なかなかこれだ!!という記事が見つからず途方にくれていました。
changeノードを置いて「値の代入」をクリックして見るとあるじゃないか。

「値の移動」

これでmsg.onをmsg.payloadに変換?できました。
さぁ、デプロイ。

「alexa、テレビをけして!!!!!!!!」

「はい」
よーし。よーし。よーーーーし。

ちょ、ちょろいな。Node-RED。

Amazon Echoで遊ぼう

前提環境

大凡1.5hで構築するraspberry pi + node-red + samba

Amazon Echoから家電を制御シリーズ

Amazon Echoから家電を制御 0 ~RMmini3 + python-broadlinkで学習~
Amazon Echoから家電を制御 1 ~node-red-contrib-alexa-local~
Amazon Echoから家電を制御 1.25 ~node-red-contrib-alexa-localの日本語の情報が少ないのでもう少し調べてみる~
Amazon Echoから家電を制御 2 ~テレビを我が手中に収めてやった 基本操作編~
Amazon Echoから家電を制御 3 ~テレビを我が手中に収めてやった ch操作編~
node-red-dashboardでwebリモコンを作ってみた

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10