日曜日, 4月 7, 2024
SwitchBotのAPI活用とWebhook設定
SwitchBotでデータ取得
SwitchBotはAPIでデータの取得ができますが、APIの実行回数に制限がある事や、現在の状態を取得はできても過去のデータにはアクセスできません。
そこでWebhookを使い変更時にSwitchBot側から自前のサーバーに通知してもらう事で過去のデータを自前で保管する仕組みを作りました。
MySQLにデータベース構築
※DBの構築は省略
テーブル構成はこんな感じ(JSONの生で登録しています。)
| フィールド | 種別 | その他 |
|---|---|---|
| No | int(11) | auto_increment |
| Registration_Server_Time | datetime | - |
| input_json | text | - |
Webhookを受け付けるページを作る
適当なWebサーバー(PHPが動く環境)を用意して設置します。
設置場所例:http://api.hogehoge.jp/SwitchBot/index.php
<?php
// POSTされたJSON文字列を取り出し
$json = file_get_contents("php://input");
//データベースに格納
//[連番][サーバー受信日時][JSON生データ]
if($json == ""){
print("Not JSON");
}else{
try {
$db = new PDO('mysql:host=localhost; dbname=データベース名', 'ユーザー名', 'パスワード');
$db->exec('SET NAMES utf8');
$stt = $db->prepare('INSERT INTO SwitchBot_Log(Registration_Server_Time,input_json)
VALUES(:Registration_Server_Time, :input_json)');
$stt->bindValue(':Registration_Server_Time', date("Y-m-d H:i:s"));
$stt->bindValue(':input_json', $json);
$stt->execute();
$db = NULL;
} catch(PDOException $e) {
die('エラーメッセージ:'.$e->getMessage());
}
print("Registration: OK");
}
?>
Webhookの登録
SwitchBotのデバイス状態に変化があるとSwitchBotのサーバーからWebhookで通知を受けれるように設定します。
※「Authorization」は事前にアプリから取得してください
# AUTH="Authorization:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# curl -H ${AUTH} -H "Content-type:application/json" -d '{ "action":"setupWebhook", "url":"http://api.hogehoge.jp/SwitchBot/", "deviceList":"ALL" }' -X POST https://api.switch-bot.com/v1.0/webhook/setupWebhook | jq .
データベースを確認
JSONのデータが溜まっていれば成功です。
これで過去のデータにもアクセスができ色々と遊べそうですね。
コメント記入
次のフォームにコメントを記入してください。