テレビの基本的なことを制御するフロー
テレビの基本的なこと=テレビのon/offとボリュウムの上げ下げを制御します。
node-red-contrib-alexa-localノードにテレビという名前を与えました。
各switchノードではmsg.on、msg.on_off_command、msg.bri、msg.i、msg.change_directionの値で分岐しています。
msg.に持ってる値
掛け声とそれに対応する各プロパティの値です。
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に左右されるので不定とします。
switchノード msg.on
"true"または"fales"が渡されます。
"true"が渡されたら"is true"に接続されたswitchノードに流れます。
後の分岐のために、ここではまだtv.shに接続しません。
"false"が渡されたら"is fales"に接続されたtv.shに流れます。
同時にmsg.payloadには"off"が入っていますので、tv.shに"off"を渡して無条件でテレビを消します。
switchノード msg.on_off_command
"true"または"fales"が渡されます。
"true"が渡されたら、いよいよtv.shにmsg.payload="on"とともに流れます。
"fales"が渡されたら後のswitchノードに流れます。
switchノード msg.bri
数値が入っています。
brightの略なのか。たぶん。
連れてきたmsg.briによって分岐します。
「大きくして」で"74"と「低くして」で"34"が渡されたら後のfunctionノードに流れます。
その他の値が渡されたら別のフロー"ch"にlinkノードで流れます。
templateノード msg.i
こちらの記事を参考にさせていただき、while処理をします。
i=0で初期化し、functionノードでインクリメントするそうです。インクリメントって何ですか。
後のswitchノードi<5で5回まで繰り返し処理をします。
switchノード msg.change_direction
"true"または"fales"が渡されます。
「alexa、テレビを大きくして」で"1"が渡されます。
後のchangeノードでmsg.briを受けてmsg.payload="volup"に変換?移動しtv.shに渡します。
「alexa、テレビを低くして」で"0"が渡されます。
後のchangeノードでやはり、msg.briを受けてmsg.payload="voldown"に変換?移動しtv.shに渡します。
I have!!
フロー全体を貼り付けたつもりでしたが、貼り付けできていませんでした。
[{"id":"d1282316.7ea6","type":"tab","label":"TV","disabled":false,"info":""},{"id":"2409d274.be2e0e","type":"alexa-local","z":"d1282316.7ea6","devicename":"テレビ","inputtrigger":false,"x":90,"y":260,"wires":[["43a02821.004c6","254e6aca.729066"]]},{"id":"de708dcf.653d3","type":"exec","z":"d1282316.7ea6","command":"/home/hoge/python-broadlink/cli/tv.sh","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"tv.sh","x":750,"y":260,"wires":[["1269d67c.8bd222"],[],[]]},{"id":"4e6d9d71.94566c","type":"switch","z":"d1282316.7ea6","name":"on_off_command","property":"on_off_command","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":510,"y":200,"wires":[["de708dcf.653d3"],["6d87a273.ebb5bc"]]},{"id":"68e68646.22a8f","type":"switch","z":"d1282316.7ea6","name":"change_direction","property":"change_direction","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":830,"y":480,"wires":[["d2da2aea.e0d198"],["fa4c93dd.5650b8"]]},{"id":"37e0d436.fd85d4","type":"switch","z":"d1282316.7ea6","name":"i<5","property":"i","propertyType":"msg","rules":[{"t":"lt","v":"5","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":670,"y":480,"wires":[["68e68646.22a8f"],[]]},{"id":"b2dc766e.a0bfd8","type":"template","z":"d1282316.7ea6","name":"i=0","field":"i","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"0","output":"str","x":530,"y":480,"wires":[["37e0d436.fd85d4"]]},{"id":"1269d67c.8bd222","type":"function","z":"d1282316.7ea6","name":"i++","func":"msg.i++;\n\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":440,"wires":[["37e0d436.fd85d4"]]},{"id":"d2da2aea.e0d198","type":"change","z":"d1282316.7ea6","name":"volup","rules":[{"t":"set","p":"payload","pt":"msg","to":"volup","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":990,"y":460,"wires":[["de708dcf.653d3"]]},{"id":"fa4c93dd.5650b8","type":"change","z":"d1282316.7ea6","name":"voldown","rules":[{"t":"set","p":"payload","pt":"msg","to":"voldown","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1000,"y":500,"wires":[["de708dcf.653d3"]]},{"id":"6d87a273.ebb5bc","type":"switch","z":"d1282316.7ea6","name":"bri","property":"bri","propertyType":"msg","rules":[{"t":"eq","v":"74","vt":"num"},{"t":"eq","v":"39","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":390,"y":500,"wires":[["b2dc766e.a0bfd8"],["b2dc766e.a0bfd8"],["a80096a5.8428a8"]]},{"id":"a80096a5.8428a8","type":"link out","z":"d1282316.7ea6","name":"->CH","links":["470b1eb8.4d67e"],"x":495,"y":520,"wires":[]},{"id":"43a02821.004c6","type":"switch","z":"d1282316.7ea6","name":"on","property":"on","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":260,"wires":[["4e6d9d71.94566c"],["de708dcf.653d3"]]},{"id":"254e6aca.729066","type":"debug","z":"d1282316.7ea6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":270,"y":140,"wires":[]}]
他の家電は
同じようなことをして制御しています。
必要に応じ、msg.briとmsg.change_directionの順番を変えてフローを書きます。
ここにたどり着くまでに結構な時間がかかりました。
相当のスキルをお持ちの方は鼻で笑うような試行錯誤かと思いますが、かなり楽しい時間を過ごせました。
この記事によって、一人でも多くの方がnode-redとAmazon Echoに興味を持っていただけたら、この界隈が賑やかになり、明日の私が幸せになることでしょう。
投稿の数日後、増築しました
要塞感溢れるフローですが、要塞の増築をしました。
amazon Echoは全く経由しませんが、iPhoneやMac、windowsのwebブラウザから家電を制御します。
node-red-dashboardでwebリモコンを作ってみた
コードを書かないでなんとかする。という理念の元、実現できました。
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リモコンを作ってみた