0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「ねえgoogle、電気をつけて!」SwitchBotAPIをラズパイからコールする

Last updated at Posted at 2019-11-26

Switch Botを買いました!

物理ボタンを遠隔で操作げきる優れものです。
しかし残念なことに、こいつ、専用のハブを別途購入しないといけなくて、それがまたお高めです。。
ただし、APIが公開されているとのことなので、今回はラズパイから操作してみました。

以下はその作業ログです。

構成図

image.png

環境情報

$ 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アドレスを見に行きます。
歯車アイコンから次に「・・・」を押すと出てくる。

image.png

このアドレスを直接指定して以下を実行。

$ python switchbot.py 12:34:56:78:9a:bc Press

うぃーーーーーーん

となったら成功!

次はこれをMQTTでgoogle homeから繋ぎます。

MQTTブローカー

MQTTをこれまでよく理解せずにとりあえずで使ってたので一応整理。

image.png

以下、細々した設定

初めのセットアップなどは昔やってしまっているので別記事でまとめます。
(ネット探せば落ちているはずです。)

beebotteの設定

image.png

  • サイドバーの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 にアクセス。

全体構成

image.png

mqttノードの設定

設定項目 設定値
サーバ:ポート番号 mqtt.beebotte.com:8883
SSL/TLS接続を使用
セキュリティ(ユーザ名) トークン
セキュリティ(パスワード) 空欄
トピック チャンネル名/トピック名

jsonノード

jsonに変換。おわり。

switchノード

jsonに変換したのち、payload.data[0].devicedeviceの値を、payload.data[0].actionactionの値を受け取れます。

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

これはアプリの設定から「壁のスイッチを使用します」を選択することで、このタイプのスイッチに対応できるようになりました。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?