Amazon Dash ButtonでPhilips Hue 電球専用のDimmer スイッチを作ってみました (2)
“9月から配信開始になったNETFLIXの”スター・トレック: ディスカバリー”を何で観るか! “Fire TV Stick”編”
“Apple Watch Series 3(GPS + Cellularモデル)とApple TV 4K(32GB)が届きました!! (3)”
“Koogeekスマートコンセント HomeKit 遠隔操作 電力を監視 1800W AC120V 米国の規制 ホワイト”
“ルートアール 30灯 USB LED バーライト 拡散カバータイプ 昼光色 RL-BAR30DD”
“ダイソンのPure Hot + CoolをGoogle AssistantとHomeKitでリモコン操作できるようにしてみました”
“Homekitアクセサリを外出先からリモートコントロールする方法をまとめておきますね”
“980円でお部屋の温度をHomeKitをベースに外出先でもモニターできるようにしてみました”
“Philips Hue Whiteスターターセットを買ってHomeKitとGoogle Homeでホームオートメーション!”
“Amazon Dash ButtonでPhilips Hue 電球専用のDimmer スイッチを作ってみました (1)“の続きです。
先日のTALKで、”Philips Hue(ヒュー) ホワイトグラデーション スターターセット“には、”Philips Hue(ヒュー) Dimmer スイッチ 929001173762 【AmazonAlexa認定取得製品“は要らない、とお話しましたが、数日間使ってみると、誤って、これまで使っていた照明用のスイッチで、Hue電球をオフにしてしまうと、通電自体オフになってしまうので、その後、該当のHue電球のコントロールができなくなるという不都合に気づき、これは何とかしないとなあ、と思い、先人の知恵を検索してみると、”Amazon Dash Button“と”Raspberry Pi” (常時電源が入っているデバイスならばPCでも良さそう。)のコンビで、”Philips Hue(ヒュー) ブリッジ 929001180614 【AmazonAlexa認定取得製品】“を介して、Hue電球をオフ・オンできるそうなので、早速、試してみることにしました。
で、前回までで、“Philips Hue ブリッジ”を介して、Hue電球の状態やオン・オフするところまでは出来たのですが、肝心な”Dash Button”のセットアップが不調に終わり、アマゾンのサポートさんとチャットした結果、もう1台、”Dash Button”を送ってもらうことにした、というところまでお話しました。
(3) 再送してもらった”Dash Button”をセットアップしてみましょう
再送してもらった”Dash Button”が翌日届いたので、早速、セットアップをしてみることにしました。
iOSアプリ “Amazon ショッピングアプリ – AMZN Mobile LLC“を起動して、所定の手順でセットアップを進めてみると、
“登録中…”画面が表示されていた後、少し経つと、”Dash Button”の青色に光っていたLEDが消えてしまいます。んんん、やっぱり、セットアップが出来ない!!
2台目も同様の現象だとすると、”Dash Button”のハードウェア的問題ではないことは明確になったので、改めて、ネット検索しながら、セットアップできない原因を考えてみることにしました。
(4) ”Dash Button”をセットアップできない原因が判明しました!
”Dash Button”をセットアップできない原因として、一番疑った箇所は、自宅のネットワーク環境でした。我が家では、2系統の無線LANがあったり、無線LANを利用するガジェットが山のようにあるので、複雑になってしまったネットワーク環境、あるいは”DHCP”、”2.4GHz帯域”辺りを重点的にチェックしてみたのですが、一向に改善の兆しが見えてきません。
で、ふとしたきっかけで閲覧した”Amazon.comのアカウントを結合済みのお客様 Amazon.comとAmazon.co.jpのアカウントを結合済みのお客様への注意点です。“というアマゾンのヘルプで、もしかすると、”Dash Button”でも同様の状況は発生するのかも?ということで、テンポラリに女房のアマゾンIDを借りて、”Dash Button”をセットアップしてみることにしました。
WiFiの認証情報を入力、”登録中…”画面が表示されていた後、少し経つと、セットアップ手順の続きに進むことができました!
“商品を選択”画面に切り替わったタイミングで、右上の”X”ボタンをタップして、商品の設定をスキップします。
今回は、”Dash Button”でアマゾンに注文する必要がないので、これでいいんです!!
ま、結果的に、2台目の”Dash Button”も手元に残ったので、この機会にセットアップを済ませておきます。2台目以降の”Dash Button”をセットアップする場合は、WiFiの認証手続きをスキップできるんですねえ。これは、賢い仕様ですねえ。
無事、”Dash Button”のセットアップが完了しました。
(5) 本題に入る前に
”Dash Button”を使って、Hue電球をコントロールする方法は、先人たちの努力によって、いくつかのパターンがあるようです。勿論、全てを試すわけにはいきませんので、比較的、簡単そうな方法を1種類だけ試してみました。
・Dasherモジュールを活用する方法
“Dasher“というモジュールを活用すれば、APIなどを叩かなくても、比較的用意にHue電球をコントロールできそうなので、実際に試してみたところ、なかなかストレートにはできそうにありませんでした。
これ以外に、”node-dash-button“なども気にはなりましたが、そうそう試している時間もないので、いずれまた、ということにしました。
(6) それでは、Philips HueのAPIを使って、Hue電球をコントロールしてみましょう
今回は、折角、Philips Hue APIのアウトラインを理解できたので、ライブラリやモジュールといった方法には頼らず、直球勝負で、APIを発行するシェルスクリプトを書くことにしました。勿論、先人たちの知恵を借りながらですけどねえ。
・Dash ButtonのMACアドレスを調べておきます
今回は、マックのターミナルを使って、
sudo tcpdump port bootps
を実行、そして”Dash Button”のボタンを押すことで、MACアドレスを調べる方法でいきました。
ただ、この方法ですと、複数のMACアドレスが一度に表示されることがあるので、表示されたMACアドレスを”こちら”で検索することで検証しました。
・Raspberry Piにtcpdumpをインストールします
sudo apt-get install tcpdump
・シェルスクリプトを書いていきます
sudo nano dash_button_hue.sh
シェルスクリプトの中身はこんな感じです。
#!/bin/bash
sudo tcpdump udp -nl | while read line; do
if [[ `echo ${line} | grep "68:37:e9:57:60:df"` ]]; then
#対象ライトのステータスを取得
statesearch=$(curl -X GET 'http://<前回調べたブリッジのIPアドレス>/api/<前回取得したusername>/lights/<前回調べたHue電球のID番号>')
state=\"on\":true\,\"bri\"
#echo $statesearch
#echo ${statesearch:10:15}
#照明がオンの場合
if [[ ${statesearch:10:15} = ${state} ]]; then
#hueのブリッジに対象ライトをOFFさせに行く
curl -X PUT 'http://192.168.1.17/api/<前回取得したusername>/lights/<前回調べたHue電球のID番号>/state' -d '{"on": false}'
else
#照明がオフの場合
curl -X PUT 'http://192.168.1.17/api/<前回取得したusername>/lights/<前回調べたHue電球のID番号>/state' -d '{"on": true}'
fi
else
echo "dash_button_script is running."
fi
done
ちょっとだけ補足しておきますと、対象ライトのステータスを取得すると、次のような結果が返ってきます。
{“state”:{“on”:true,”bri”:
204,”alert”:”none”,”mode”:”homeautomation”,”reachable”:true},”swupdate”:{“state”:”noupdates”,”lastinstall”:”2018-01-31T08:46:35″},”type”:”Dimmable light”,”name”:”書斎のサブ照明”,”modelid”:”LWB014″,”manufacturername”:”Philips”,”capabilities”:{“streaming”:{“renderer”:false,”proxy”:false}},”uniqueid”:”xxxxxxxxxx”,”swversion”:”1.29.0_r21169″,”swconfigid”:”321D79EA”,”productid”:”Philips-LWB014-1-A19DLv4″}
なので、先頭の何文字かを照合して、Hue電球がオンなのかオフなのかを判定しています。
作成したスクリプトファイルに実行権限を付けます。
sudo chmod 755 dash_button_hue.sh
で、シェルスクリプトを実行し、”Dash Button”のボタンを押して、コントロールできていることを確認します。
sudo /home/pi/dash_button_hue.sh
ターミナルには、こんな具合に出力されます。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
dash_button_script is running.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 455 0 455 0 0 22416 0 --:--:-- --:--:-- --:--:-- 23947
[{"success":{"/lights/2/state/on":false}}]
dash_button_script is running.
(7) シェルスクリプトを自動起動するようにしておきましょう
Raspberry Piが起動する度に、シェルスクリプトを実行するのも手間なので、自動起動するようにしておきます。
sudo nano /etc/systemd/system/dash_button_hue.service
ファイルの中身はこんな感じです。
Description=dash_button_hue.service
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/home/pi/
ExecStart=/home/pi/dash_button_hue.sh
Restart=always
TimeoutStopSec=5
StandardOutput=null
RestartSec=10
[Install]
WantedBy = multi-user.target
systemdに登録します。
sudo systemctl daemon-reload
sudo systemctl enable dash_button_hue.service
sudo systemctl start dash_button_hue.service
Raspberry Piを再起動した後、自動起動しているか確認しておきます。勿論、”Dash Button”のボタンを押してみれば、一目瞭然ですけどねえ。
sudo systemctl status dash_button_hue.service
こんな感じでターミナルに出力されればOKです。
● dash_button_hue.service
Loaded: loaded (/etc/systemd/system/dash_button__hue.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-02-04 16:39:19 JST; 42s ago
Main PID: 312 (dash_button_hue)
CGroup: /system.slice/dash_button_hue.service
├─312 /bin/bash /home/pi/dash_button_hue.sh
├─343 sudo tcpdump udp -nl
├─344 /bin/bash /home/pi/dash_button_hue.sh
└─363 tcpdump udp -nl
これで、一通り完成です。
ま、いろいろありましたが、結果的には、Hue電球 1個あたり250円で、Philips Hue 電球専用のDimmer スイッチが完成したので、当初の目標は達成できました。使い勝手としては、物理的なスイッチのように、パチパチ連続してオン・オフはできませんが、照明を付け、一呼吸してから照明を消す、といった比較的スローなアクションでしたら、実用性は十二分かと思います。
ちょっぴり暫定的な雰囲気がありますが、まずは使ってみながら、細かな改良をしていくつもりです。まずは、もっと綺麗にシール作らないとねえ。
p.s>
あまりに美しくないので、100円ショップで、インクジェットプリンタ専用のラベル用紙を買ってきて、
こんな感じでシールを作ってみたのですが、実際に切り抜いてみると、やっぱり円の部分を上手に切り抜けなかったので、
結局、こんな感じ。ま、前よりは少しだけマシかなあ!?
|
|
|
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。
ホームページ “THE POOH FILES” にも是非お立ち寄り下さい。