ホーム » コンピュータ » Linux » Switchbot Plug の制御

システム

最近の投稿

アーカイブ

カテゴリー

Switchbot Plug の制御

電気毛布が必要な時期、外出時の電源を切り忘れるのを防ぐために、昨年導入していた 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完成。