SwitchBotロックを公式APIを使って開閉する方法(サーバ障害があっても動作できる方法)

SwitchBotロックの開閉操作は2022年9月19日に公開されたAPI v1.1によって、公式に対応がされています。
公式のアナウンス

[参考記事] SwitchBot API v1.1のリクエスト用curlを生成する

この記事の方法ではSwitchbotAPIのサーバを介さないため、Switchbotサーバの障害があっても操作できます。
SwitchBotボットを使う方法
SwitchBotボットの注意点
より安全な方法
リレーモジュールでON/OFFする方法
Node-REDとAlexaで操作する方法
過去に使用できていた非公開APIコマンド

SwitchBotボットを使う方法

SwitchBotロックの開閉操作を行うには、非公開のAPIコマンドを使わなくても公式APIでできます。

SwitchBotロックは、
・リモートボタンで開錠・施錠の動作ができます。
・SwitchBotボットがAPIで操作できます。

この2つを組み合わせることで、APIで開錠・施錠を行うことが可能となります。

具体的には、リモートボタンにSwitchBotロックの開錠・施錠を設定し、リモートボタンに両面テープでSwitchBotボットを張り付けます。
そしてSwitchBotボットをAPIでpress操作をします。

両面テープだけではすぐにSwitchBotボットが外れてしまうので、クランプなどを使って固定をするとよいです。


[参考記事] SwitchBotボットの危険性 使用方法によってはとても危険です

SwitchBotボットの注意点

SwitchBotのBLE版APIは、
・必要ライブラリのインストール
・Gitからコードをダウンロード
これだけで、特別な認証をしなくてもSwitchBotデバイスのBLE MACアドレスを指定してデバイス操作ができます。

つまりSwitchBotボットのMACアドレスが分かればだれでも操作ができてしまいます。

[参考記事] SwitchBotボットの危険性 使用方法によってはとても危険です

より安全な方法

リモートボタンを分解し、タクトスイッチの結線を1チャンネルリレーモジュールでON/OFFする仕組みを作り、Raspberry Piで制御するという方法があります。

この方法だとSwitchBotボットのONからリモートボタンが押されるまでのタイムラグがなくなります。
またBluetoothが不安定なSwitchBotボットより確実な動作が行えます。

SwitchbotAPIのサーバを介さないため、インターネットがつながっていなくてもSwitchbotサーバの障害があっても操作できます。
SwitchbotAPIはリクエストに失敗することが多いだけでなく、リクエストに成功しても動作しないことがあります。

ほかにもSwitchBotボットではなくマイクロサーボで操作する方法がなどがあります。

リレーモジュールでON/OFFする方法

リモートボタンを分解すると下のようになっています。




タクトスイッチの赤枠の部分に配線をつなぎます。
(電池側のSW1・SW2のテスト端子でもできるかもしれません)


リレーモジュールとつなぎます。


リレースイッチでON/OFFするコードは下記のようになります。

import RPi.GPIO as GPIO
from time import sleep

RELAY_PIN = 18

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)

GPIO.output(RELAY_PIN, True)
sleep(0.35)
GPIO.output(RELAY_PIN, False)
sleep(0.35)
GPIO.cleanup()

Node-REDとAlexaで操作する方法

Alexaとswitchbotロックを連携して、Node-REDサーバにnode-red-contrib-alexa-remote2ノードを追加して、Alexaアクションを操作することでサーバから動作させることができます。
http in => Alexa Smarthome => http response などで操作を設定します。

過去に使用できていた非公開APIコマンド

SwitchBotロックは非公開のAPIコマンド(lock/unlock)で開閉できていましたが、2022年7月29日より使用できなくなっています。

GitHub API Issue

{
"statusCode": 190,
"body": {},
"message": "not support device type"
}

関連記事

スポンサーリンク

Aタグのtarget属性をJavaScriptで指定する方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る