ワイズリマインダー

SwitchBotのAPIを叩いてドアの施錠を操作する

AndroidのアプリTaskerのみで実装させたかったが、
JavaScriptで署名をゴリゴリするのが大変だったので
とりまサーバでPHPからAPIを叩いてみた。

今回使用したSwitchBotはこちら。
指紋認証でアンロックができるので便利なのではあるが、
家に近づくだけで自動的にアンロックさせたかった。
(両手に荷物を持っている時に便利)

 

【ロック状態を確認する】
TaskerからPHPへはPOSTでtoken,secret,deviceIDを送信する。
deviceIDはここから調べることが出来る。

$token = isset($_POST['token']) ? htmlspecialchars($_POST['token'], ENT_QUOTES, 'UTF-8') : "";
$secret = isset($_POST['secret']) ? htmlspecialchars($_POST['secret'], ENT_QUOTES, 'UTF-8') : "";
$deviceId = isset($_POST['deviceId']) ? htmlspecialchars($_POST['deviceId'], ENT_QUOTES, 'UTF-8') : "";

$time = (string)floor( microtime(true) * 1000 );
$nonce = "xyzzy";
$sha256 = hash_hmac( 'sha256', "{$token}{$time}{$nonce}", $secret, true);

$header = [];
$header[] = "Authorization:{$token}";
$header[] = "t:{$time}";
$header[] = "sign:".base64_encode($sha256);
$header[] = "nonce:{$nonce}";
$header[] = "Content-Type:application/json";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.switch-bot.com/v1.1/devices/{$deviceId}/status");
curl_setopt($curl, CURLOPT_POST, 'true');
curl_setopt($curl, CURLOPT_HEADER, 'true');
curl_setopt($curl, CURLINFO_HEADER_OUT, 'true');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 'true');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
header("Content-Type: application/json; charset=utf-8");
echo curl_exec( $curl );

 

【施錠を操作する】
TaskerからPHPへはPOSTでtoken,secret,deviceID,cmdを送信する。
cmdは”lock”もしくは”unlock”
deviceIDはここから調べることが出来る。

$token = isset($_POST['token']) ? htmlspecialchars($_POST['token'], ENT_QUOTES, 'UTF-8') : "";
$secret = isset($_POST['secret']) ? htmlspecialchars($_POST['secret'], ENT_QUOTES, 'UTF-8') : "";
$deviceId = isset($_POST['deviceId']) ? htmlspecialchars($_POST['deviceId'], ENT_QUOTES, 'UTF-8') : "";
$cmd = isset($_POST['cmd']) ? htmlspecialchars($_POST['cmd'], ENT_QUOTES, 'UTF-8') : "";

$time = (string)floor( microtime(true) * 1000 );
$nonce = "xyzzy";
$sha256 = hash_hmac( 'sha256', "{$token}{$time}{$nonce}", $secret, true);

$header = [];
$header[] = "Authorization:{$token}";
$header[] = "t:{$time}";
$header[] = "sign:".base64_encode($sha256);
$header[] = "nonce:{$nonce}";
$header[] = "Content-Type:application/json";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.switch-bot.com/v1.1/devices/{$deviceId}/commands");
curl_setopt($curl, CURLOPT_POST, 'true');
curl_setopt($curl, CURLOPT_POSTFIELDS, '{"command": "'.$cmd.'","parameter": "default","commandType": "command"}');
curl_setopt($curl, CURLOPT_HEADER, 'true');
curl_setopt($curl, CURLINFO_HEADER_OUT, 'true');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 'true');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
header("Content-Type: application/json; charset=utf-8");
echo curl_exec( $curl );

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

検索

最近のコメント

最近の投稿

タグ

フィード配信

アーカイブ

外部リンク