現状(2023/07/01調べ)で私が把握しているスマートプラグです。
・TP-LINK製(対応アプリ:kasa)
・SwitchBot製(対応アプリ:SwitchBot)
・+Style製(対応アプリ:+Style)
・Meross製(対応アプリ:Meross)
・Amazon製(対応アプリ:Amazon Alexa)
・Broadlink製(対応アプリ:BroadLink)
・SONOFF製(対応アプリ:eWeLink)
・TuyaのSmartLifeプロトコル?と互換のある無名中華製品(対応アプリ:SmartLifeなど)
基本機能は一緒でスマートフォンでリモート操作することを目的としています。
モノによって物理ON/OFFボタンが付いていたりします。
モノによってBluetooth対応しています。
電源プラグに極性あったりなかったりします。
3ピン対応だったり2ピンだったりします。
各社の違いとしては外部連携が出来るかどうか。
メーカーによってはそこを月額有料としてるところもある。
IFTTTを中心とした外部サービスに連携出来たりします。
一部、中国系クラウドサービスにも連携出来たりするモノもあるようです。
+Styleに至っては、親会社がソフトバンクのためソフトバンクグループという。でも中国産なんでしょ?と個人的に思っている。
各社のAPI利用は下記のような感じ。
- TP-LINKは有志の方が解析してPythonを使用してLinuxなどで中心に自身のPCにて操作可能になっている。(公式は解析されたことを黙認している?)
- https://github.com/plasticrake/tplink-smarthome-api
- SwitchBotは公式でAPIを公開している。REST APIのため、言語やOSに囚われない感じになっています。頑張ればコマンドライン1行で行けるがメンテナンスがきっと大変。
- https://github.com/OpenWonderLabs/SwitchBotAPI
- Broadlinkは有志の方が解析してPythonを使用してLinuxなどで中心に自身のPCにて操作可能になっている。(公式は解析されたことを黙認している?)
- https://github.com/mjg59/python-broadlink
- SONOFFはファームウェアを自社クラウドから自宅サーバーに切り替えることで操作可能になるらしい。開発者の自己満足機能な感じでマニュアル等が充実していないため、手順がよくわからない。開発者がこのあたりを理解していれば日本のスマートホーム化に大きく貢献出来る製品が多いのに・・・。要は第二種電気工事士の資格が必須となる製品が多いです。
- Merossは有志の方が解析してPythonを使用してLinuxなどで中心に自身のPCにて操作可能になっている。HTTP APIをPythonを使用して実行している模様。
- https://albertogeniola.github.io/MerossIot/
今までTP-LINKのスマートプラグを使用していたが、可能とするサービスの条件が近いSwitchBotへ移行しようと思い、製品を購入しました。
開封前に会社情報を深堀をしてみる
そもそもSwitchBotってどこにある会社なのかと。
SwitchBotは中国深圳市に本拠をおくスマートホーム企業。
日本においては「SWITCHBOT株式会社」という法人でIoTデバイスの企画、製造、販売しているとのこと。
Googleマップで見る限りでは、恐らく小さな事務所で日本法人を置くためだけの場所のような感じがします。
登録住所が変わっていないのであれば、こちらと同じような間取りと推測します。
クラウドファンディングの場合はFUGU INNOVATIONSが担当し、実績のある製品の販売は日本ではグリーンハウスが行っているのかなと。
そして、製品仕様(公式から抜粋)
・本体寸法:70 x 39 x 59 mm
・動作温度:-15°C~40°C
・BLE:4.2
・Wi-Fi 802.11 b/g/n (2.4 GHz)で 5 GHzは出来ないと。
代わり映えはしない普通な感じ
外箱
Made in Chinaですね。届け出を調べていませんが技適マーク付き。
内容物(本体2つ、SNSへのヘルプ先一覧、取扱説明書)
点灯状態は物理スイッチがON状態。消灯時はOFF状態。
電源を入れるとLEDが白く点灯したままになるが、アプリ設定で常に消灯状態に出来る。
2つとも全く同じ色・形状のため識別が出来ません。
養生テープを貼って油性ペンでメモ書き。
電力消費が見れるのはいいが・・・
基本はスマートフォンのSwitchBotアプリから操作。
デバイス登録しようとすると、既にプラグミニ(JP)が認識してますね。
追加しようとすると1台ずつという感じになる。
電源プラグとして使うので注意事項があります。
日本の細やかな仕様に準拠するなら、同意しますのチェックボタンがあってから次へボタン押せるようにした方がいいですね・・・。
説明通りの操作をします。
青く点滅している状態ならば下記画面に移ります。
2.4GHzのネットワークを選択してパスワードを入力します。
同じようにもう1台登録し、2台とも登録した。
このプラグミニは電量消費が見れます。
ですが、割と常時専用サーバーに情報を送ってますね。ということは余計なネットワークトラフィックが発生します。
うーん、この情報切りたいなぁ。送信感覚は頻繁でなくてよくて30分に1回とかにしてくれないかな。
SwitchBot ボタンと連携するとリモートボタンになるで、恐らく便利。
私は公式APIを使って下記の自作リモートボタンへ割り当てます。
わざわざアプリ起動してタップしたり、ミニプラグの設置場所へ移動して物理ボタンを押す手間が省けます。
目が届く範囲にリモートボタンがあると集中管理が出来て非常に便利ですね。
自作なので、メーカーが異なってもAPIが動作すれば問題無しです。唯一の強みはメーカーに囚われないですかね。
弱みはプログラム開発言語のバージョンアップでソースコードの互換性がなくなるケースがあることでしょうか。
バージョンアップしたら試してみて動かなかったら都度修正が入ります。
APIを使ってみる
基本的には下記URLに記載の通り・・・。
https://github.com/OpenWonderLabs/SwitchBotAPI
前提条件として、スマートフォンの SwitchBot アプリでアカウント登録しており、デバイスを紐づけていること。
翻訳内容をそのまま抜粋。
アプリ内でオープン トークンを生成します。
a) [プロファイル] > [設定] に移動します。
b) [アプリのバージョン] を 10 回タップします。開発者向けオプションが表示されます。
c) 開発者向けオプションをタップします。
d) トークンの取得をタップします。
開発者向けオプションでクライアントシークレットとトークンの取得が出来ます。
あとはお好みの言語でAPI認証が出来るはず。
Python、JavaScript、C#、Java 11 以降、PHPなどの言語がサンプルとして提示されています。
個人的には cURL を使用して結果的に1行で済ませる方がスマートかな?と感じます。
って思ったらPHPの場合、内部で cURL 使ってますよ!?
LinuxだったらShellスクリプトでいいじゃん!と思います。
WindowsだとPowerShellか。バッチスクリプトでもいいけれど。
でも認証部分が面倒な感じがするからサンプルプログラム使った方が楽かなぁ。
とりあえず、公式の認証サンプルと基本構成を下記サイトを参考にしつつ仮組みした。
参考サイト:https://dev.classmethod.jp/articles/switchbot-control-by-api/
# python3 SwitchBotAPI.py
Device Type: Plug Mini (JP)
Device Type: Plug Mini (JP)
Device Type: Curtain
情報は取れたけど、SwitchBot ボットはデバイスリストに出てこないですね。
どうもスマートフォン上のアプリでSwitchBot ボットデバイスに対してクラウドサービスが有効になってないとダメだみたいなことが書かれているが、自分のアプリ上ではそんな項目が無い。
Debian系 Linux OS(主にRaspberry Pi)なら下記を使用することSwitchBot ボットの実行ができます。これも公式から提供されているものです。
デバイスのMACアドレスを設定すればCurtainも使用可能でした。
https://github.com/OpenWonderLabs/python-host
Raspbian GNU/Linux 11 (bullseye)の場合、下記が必要かもしれない。
$ sudo apt install python3-bluez
少し脱線したので switchbot-control-by-api の方に話題が戻る。
PlugMiniは ON / OFF / Toggle の3パターンが使用可能みたい。
とりあえず、開発要件としては下記を定義した。
・SwitchBotAPI.pyとしては実行時の起動パラメータからデバイスIDとコマンドを決定させて動的にしたい。
・パラメータ無しだと現状のデバイス情報の一覧を出したい
・Node-REDからはSwitchBotAPI.pyを実行時にパラメータとしてデバイスIDとコマンドを渡したい。
とりあえず作るだけ作ってみた。
GitHubへコミットしました。(使用する方へ。必要モジュールは各自で入れてください)
https://github.com/kamomilen/MySwitchBotAPI.git
その翌日、コーヒーメーカーに設置しているSwitchBot ボットが稼働しなかった。
なんでだろうと思いスマートフォンアプリを立ち上げて確認したら、SwitchBot ボットが登録解除されていた。
デバイスの追加で復帰したが、なんだろう。APIからのアクセスがあったから裏で何かシステム上の変更が入ったのか・・・。本当の意味で開発者モードへ変化したのか不明。
唯一変化があったのはSwitchBot ボットにクラウドサービスの項目が増えていたこと。
どのようなタイミングかは不明だが、登録済みのデバイスに対してサービス内容が増えたり変更されたりすると登録済みのデバイスは一旦解除される仕組みかもしれない。
クラウドサービスの項目が増えているということはつまり・・・と思ったので、APIのコマンド実行を改めてしてみた。
キタ━━━━(゚∀゚)━━━━!!
# ★デバイスの一覧取得
# /usr/bin/python3 /root/SwitchBotAPI/MySwitchBotAPI.py
{'deviceId': 'aaaa', 'deviceName': 'Plug1', 'deviceType': 'Plug Mini (JP)', 'enableCloudService': True, 'hubDeviceId': ''}
{'deviceId': 'bbbb', 'deviceName': 'Plug2', 'deviceType': 'Plug Mini (JP)', 'enableCloudService': True, 'hubDeviceId': ''}
{'deviceId': 'cccc', 'deviceName': 'カーテン', 'deviceType': 'Curtain', 'enableCloudService': False, 'hubDeviceId': 'cccc', 'curtainDevicesIds': ['cccc'], 'calibrate': True, 'group': False, 'master': True, 'openDirection': 'left'}
{'deviceId': 'dddd', 'deviceName': 'コーヒーメーカー', 'deviceType': 'Bot', 'enableCloudService': False, 'hubDeviceId': ''}
{'deviceId': 'eeee', 'deviceName': 'ボット 7E', 'deviceType': 'Bot', 'enableCloudService': False, 'hubDeviceId': ''}
# ★デバイスのステータス(引数:デバイスID)
# /usr/bin/python3 /root/SwitchBotAPI/MySwitchBotAPI.py 123456789012
{'deviceId': '123456789012', 'deviceType': 'Plug Mini (JP)', 'hubDeviceId': '123456789012', 'power': 'on', 'voltage': 102.6, 'weight': 78, 'electricityOfDay': 300, 'electricCurrent': 9.58, 'version': 'V1.5-1.5'}
# ★デバイスへのコマンド実行1(引数:デバイスID、コマンド)
# /usr/bin/python3 /root/SwitchBotAPI/MySwitchBotAPI.py 123456789012 toggle
{'statusCode': 100, 'body': {'items': [{'deviceID': '123456789012', 'code': 100, 'status': {'isDelay': False, 'rssiQuality': 39, 'currentElectricity': 509, 'currentTemperature': 66, 'onTime': 302, 'currentWeight': 398, 'currentPower': 51.5, 'isOverload': False, 'currentVoltage': 1026, 'power': 'off', 'isLed': False}, 'message': 'success'}]}, 'message': 'success'}
# /usr/bin/python3 /root/SwitchBotAPI/MySwitchBotAPI.py 123456789012 toggle
{'statusCode': 100, 'body': {'items': [{'deviceID': '123456789012', 'code': 100, 'status': {'isDelay': False, 'rssiQuality': 39, 'currentElectricity': 0, 'currentTemperature': 67, 'onTime': 302, 'currentWeight': 403, 'currentPower': 0, 'isOverload': False, 'currentVoltage': 1026, 'power': 'on', 'isLed': False}, 'message': 'success'}]}, 'message': 'success'}
# ★デバイスへのコマンド実行2(引数:デバイスID、コマンド、コマンドパラメータ)※対応デバイスが無いので未テストで実装済み
# /usr/bin/python3 /root/SwitchBotAPI/MySwitchBotAPI.py 123456789012 toggle 'aaaaa,bbbb,cccc'
SwitchBotボットはSwitchBotハブ系がないと動作しないかもしれない。
まぁ、公式のpython-hostで直接操作可能だから私の環境にはハブがいらないですね。
ハブがあると「deviceList」ではなく「infraredRemoteList」が使用できてエアコン等の赤外線センサー操作が出来るらしいが、別製品で赤外線センサーの操作が可能な環境が出来ているので、やっぱり私はハブ不要ですwww
ということはつまり、「infraredRemoteList」の実装はしない!ということです。
Node-REDへの実装と連結
端的に言うと、素材の作成が終わったから素材と素材を組み合わせて工作のような感じで作りますよと。
最近のプログラムってこんな感じですね。
著作権フリーな素材をかき集めていい感じに繋げてあげれば出来ますよね。
まぁ、素材に不具合あったら対処が難しいけれど。
品質の高い汎用性あるような素材であればOpenAIとかで精製してくれるのでしょうね。知らんけど。
こんな感じにしてみたけど・・・ボタン押してから10秒もかかる。おそーい。
クラウドサービスを一度経由して認証通ってクラウドサービスから電源操作してるんだろうな。
Bluetooth接続などで直接ローカル内で完結してないから遅いのだと思います。
これはちょっと誤算だったなぁ。
まぁ、TP-LINKより怪しいところは少ないし許容範囲とすべきか。
★2023-07-12追記
SwitchBotAPI-BLEを見ていたのですが、Plugに対応してそうですね・・・。
https://github.com/OpenWonderLabs/SwitchBotAPI-BLE
自分で実装する必要がありそうですが、頑張れば作れるかもです。
参考サイト:https://takagi.blog/using-raspberry-pi-to-visualize-switchbot-thermo-hygrometer-data-in-mackerel/
時間が出来たら試してみよう。
★2023-07-13追記
公式に記載のあるDeviceTypeはこちら。
Curtainは 0x63 で取れるんだけど、今回購入したものは 0x6a と表示される。
0x67 だったら Plug Mini として使えるんだが・・・。
0x67ってもしかしてUSのプラグかな。
公式が 0x6a に対応してくれないとコレは使えないなぁ( ;∀;)
下記のカーテンのBLE MACを指定したら一応情報が取れるのは確認しました。
-
購入金額
3,478円
-
購入日
2023年07月01日
-
購入場所
Amazon.co.jp
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。