要エントリーのキャンペーンです。詳しい条件はAmazonのキャンペーンサイトを御覧ください。

PHPを使ってWebサーバーからPHP経由でSwitchbotを操作する

SwitchbotAPIを使うとWebサーバー経由でSwtchbotを操作する。具体的にはライトを点灯させたり、テレビとスピーカーのセットの電源を入れたりすることができるようになる。プログラミングに熟達している人には簡単なのかもしれないが、エンジニアでない人がこれをやろうとすると少し苦労することがあるかもしれない。

目次

トークンとシークレットキーの取得

まずトークンとシークレットキーの取得で苦労した。トークンの取得の仕方はSwitchbotのWebサイトに書いてある。開発者メニューは隠してあり一定の操作をする必要がある。ここで問題があった。iPhoneではシークレットキーが取得できなかった。アプリケーションを最新のものにするように書いてあるのだがそれでもダメだった。結局普段使っていないAndroidスマホを引っ張り出してきてこちらでシークレットキーを取得した。サポートには問い合わせをしているが返事は返ってきていない。

デバイスリストとシーンリストを表示させる

リストを取得する

トークンとシークレットキーが取得できたら今度はサンプルスクリプトを使ってデバイスリストとシーンリストを表示する。サンプルスクリプトには取得するところまでは書いてある。ところがそれを表示させるやり方は書いていない。

APIのURLは次のようになる。最初のものがデバイスリストを表示するURLで次のものがシーンの一覧を表示するURLになる。

  • $url = “https://api.switch-bot.com/v1.1/devices”;
  • $url = “https://api.switch-bot.com/v1.1/scenes”;

データは$reportにJSON形式で入っているのでこの中身の表示方法は自分で調べる必要がある。まずはJSONファイルをデコードして配列に入れてやる。これで配列にはいるので適宜読み込んでやる。

$array = json_decode($response, true);

操作のやり方は二通り

操作のやり方は二通りある。プラグの場合はオンであればオフにするなど状況を見る必要がある。この場合はデバイス番号を指定してAPIを叩くと現在の状態を知ることができる。不思議なことに第二世代以降のミニプラグにはtoggleというコマンドがある。この場合はオンであればオフに切り替えてくれるので情報の確認は必要ない。

$url = "https://api.switch-bot.com/v1.1/devices/".$devid."/status";

ステータスの確認をする必要がなく単にオン/オフすればいいものはステータスを確認せずにそのままコマンドを送る。

$url = "https://api.switch-bot.com/v1.1/devices/".$devid."/commands";

コマンドはPOSTで送る必要があるのだが……

コマンドはPOSTで送る必要があるのだが、サンプルにはGETのやり方しか書いていない。デバイスに命令を与える場合には次のようなコマンドを送る。

$url = "https://api.switch-bot.com/v1.1/devices/".$devid."/commands";

まずbodyという行列を作ってコマンドを形成してやる。

    $body = array(
    "command" => "turnOn",
    "parameter" => "default"
    );

次にこれをPOSTする。パラメータは次のようにセットする。

    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($body));

一応これだけのことがわかれば、情報の取得とコマンドの送信ができる。

単にオン・オフを送れるものもあれば、カラー電球のように色を指定できるものもある。

複雑な操作はどうすればいいのか

例えばテレビとスピーカーの電源など複数のデバイスの電源を入れたりするにはどうすればいいのだろうか?

あらかじめSwitchbotアプリでシーンを作っておき、シーンにコマンドを送ればいい。ミニハブに登録しているリモコンは物理機器ではないのでデバイス情報が取れない。ステータスもわからないので単にあらかじめシーンに登録してあるボタンを押すことになる。

$url = "https://api.switch-bot.com/v1.1/scenes/".$scene."/execute";
要エントリーのキャンペーンです。詳しい条件はAmazonのキャンペーンサイトを御覧ください。

Comments

コメントを残す

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