電気毛布が必要な時期、外出時の電源を切り忘れるのを防ぐために、昨年導入していた Switchbot Plug 。
スマホの SwitchBot アプリのタイマー機能で朝に強制オフの制御していたけど、寝る時にスイッチを入れるのは、自分が不在の時だとムダだし、homebridge や cron で制御するのも面白そう。
switchbot-utility のインストール
ということで、Raspberry-Pi に、switchbot-utility をインストール。
((( 事前にSwitchbot アプリは設定済み ))) $ sudo pip3 install switchbot-utility $ cd /usr/local/lib/python3.9/dist-packages/switchbot_utility
制御するには、Switchbot アプリのトークンと秘密鍵が必要なので、アプリを起動して「プロフィール」、「設定」の画面を開いて、「アプリバージョン」の表示を 10 回連打すると、「開発者向けオプション」を表示できる。この画面を開いてトークンとクライアントシークレットをコピーし、上記の switchbot_utility のフォルダ内に、settings.json のファイル名で保存。
Python で以下のスクリプトを実行すると、switchbot-utility で扱えるデバイスの一覧 deviceList.txt が作られる。
((( settings.json ))) // Switchbot アプリで取得したトークンとシークレットを、 // switchbot_utilitiy のフォルダに settings.json で保存しておく { "token": "xxxxx....", "secret": "yyyyy...." } ((( devicelist.py ))) // Python で以下のスクリプトを実行すると、deviceList.txt が作られる。 // 以下を devicelist.py で保存し、python3 devicelist.py で実行! from switchbot_utility.switchbot import Switchbot switchbot = Switchbot() switchbot.devicelist() ((( deviceList.txt ))) 441793xxxxxx, 電気毛布, Plug, 000000000000 C5B496xxxxxx, エアコン, Bot, 000000000000
実際に、Switchbot Plug を動かすために、下記のscriptでスイッチを制御できるようにしてみた。
#!/usr/bin/python3 # -*- mode: python; coding: utf-8; tab-width: 4 ; -*- # SwitchBot をON/OFFする import sys import time import os from switchbot_utility.switchbot_plug import SwitchbotPlug # ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ # 制御するSwitchBot に合わせて、上記~~~ を書き換える。 sb_dir = '/usr/local/lib/python3.9/dist-packages/switchbot_utility' # Switch Bot Plug MAC ADDR # deviceList.txt 調べた MACアドレスを記入 sb_plug_macaddr = '441793xxxxxx' # コマンドライン引数プロセス名 script_file_name = sys.argv.pop( 0 ) # コマンドライン引数 -d <デバイスID> while len( sys.argv ) >= 2 and sys.argv[0] == '-d' : sys.argv.pop( 0 ) sb_plug_macaddr = sys.argv.pop( 0 ) # setting.jsonを読み込むため os.chdir( sb_dir ) # SwitchBot Plug に接続 sb_plug = SwitchbotPlug( sb_plug_macaddr ) # ~~~~~~~~~~~~~ この部分に制御対象用のコンストラクタを書けばいい if len( sys.argv ) == 0 : # 引数なしは、状態を表示 print( sb_plug.get_power() ) elif len( sys.argv ) == 1 : # status | on | off | toggle or turn arg = sys.argv.pop() if arg == 'status' : # exitでスイッチ状態を返す sys.exit( 0 if sb_plug.get_power() == 'on' else 1 ) elif arg == 'on' : sb_plug.turn_on() # ON elif arg == 'off' : sb_plug.turn_off() # OFF elif arg == 'toggle' or arg == 'turn' : # スイッチを反転 pw = sb_plug.get_power() if pw == 'on' : sb_plug.turn_off() elif pw == 'off' : sb_plug.turn_on()
このプログラムを、homebridge-cmdswitch2 の設定に加える。
{ "platform": "cmdSwitch2", "name": "cmdSwitch2", "switches": [ { "name": "電気毛布", "on_cmd": "/usr/local/bin/switchbot-plug.py on", "off_cmd": "/usr/local/bin/switchbot-plug.py off", "state_cmd": "/usr/local/bin/switchbot-plug.py status" } ] }
ということで、「OK Google, 電気毛布を点ける」でON、朝は起床時間にあわせたタイマーでOFF完成。