Switch Botを買いました!
物理ボタンを遠隔で操作げきる優れものです。
しかし残念なことに、こいつ、専用のハブを別途購入しないといけなくて、それがまたお高めです。。
ただし、APIが公開されているとのことなので、今回はラズパイから操作してみました。
以下はその作業ログです。
構成図
環境情報
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.8 (stretch)
Release: 9.8
Codename: stretch
自分のラズパイのosの情報は上記のコマンドで検索できます。
Raspbian Stretch
だと成功しないとの記事もあったのですが、この方法では大丈夫でした。ラズパイは3Bです。
ラズパイ側の設定
ほぼ参考サイトの通りにやります。
$ sudo apt-get update
$ sudo apt-get install python-pexpect
$ sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev
$ sudo apt-get install libudev-dev libical-dev libreadline-dev
$ sudo pip install bluepy
公式サイトからソースを落とします。
$ git clone https://github.com/OpenWonderLabs/python-host.git
python-host
というフォルダができるので、そこへ移動します。
$ cd python-host
ここから、参考サイトではSwitchBotの検索のスクリプトを実行していたのですが、自分は何回かやってもデバイスを見つけてもらえなかったのでMACアドレスをアプリから直接みに行く方法をとりました。
→参考:https://chasuke.com/switchbot-raspi/
アプリをインストールすると勝手に周辺のSwitchBotを見つけてくれるのでそこからMACアドレスを見に行きます。
歯車アイコンから次に「・・・」を押すと出てくる。
このアドレスを直接指定して以下を実行。
$ python switchbot.py 12:34:56:78:9a:bc Press
うぃーーーーーーん
となったら成功!
次はこれをMQTTでgoogle homeから繋ぎます。
MQTTブローカー
MQTTをこれまでよく理解せずにとりあえずで使ってたので一応整理。
以下、細々した設定
初めのセットアップなどは昔やってしまっているので別記事でまとめます。
(ネット探せば落ちているはずです。)
beebotteの設定
- サイドバーの
Channels
からチャンネルとトピックを作成→トークンが発行されます。
IFTTTの設定
- this:google assistantを指定して、トリガーとなる言葉を設定。
- that:webhooksを指定し、先ほどのurlを設定。形式はPOST、aplication/jsonを指定して、postする内容には
{"data":[{"device":"switchbot","action":"press"}]}
を指定。
Node-Redの設定
ドラッグアンドドロップで紐づけていくだけでフローが完成します。楽。
ラズパイでnode-redを起動した状態で、ブラウザから http://raspberrypi.local:1880
にアクセス。
全体構成
mqttノードの設定
設定項目 | 設定値 |
---|---|
サーバ:ポート番号 | mqtt.beebotte.com:8883 |
SSL/TLS接続を使用 | |
セキュリティ(ユーザ名) | トークン |
セキュリティ(パスワード) | 空欄 |
トピック | チャンネル名/トピック名 |
jsonノード
jsonに変換。おわり。
switchノード
jsonに変換したのち、payload.data[0].device
でdevice
の値を、payload.data[0].action
でaction
の値を受け取れます。
execノード
ここでは実行するコマンドを入れる。
ルートディレクトリから参照しているので、先ほどのswitchbot.py
のパスに注意。
python ~/switchbot.py 12:34:56:78:9a:bc Press
※ デフォルトでpayloadが引数になっているのでチェックを外すこと。
テスト
僕 「ねえgoogle、電気をつけて!!」
g「電気をつけます」
s「うぃーーーーーん」
成功!
参考
追記
デフォルトの状態だと、以下のどのコマンドを打っても同じ挙動でこれではOn/Offで押す引くが逆になるタイプのスイッチに対応できません。
$ python ~/switchbot.py 12:34:56:78:9a:bc Press
$ python ~/switchbot.py 12:34:56:78:9a:bc Turn On
$ python ~/switchbot.py 12:34:56:78:9a:bc Turn Off
これはアプリの設定から「壁のスイッチを使用します」を選択することで、このタイプのスイッチに対応できるようになりました。