コメントありがとうございます。 サービス終了した今なら、安く中古が手に入りそ…
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 );
検索
コメントを残す