こんにちは! 虎の穴ラボのS.Sです。
この記事は「虎の穴ラボ 夏のアドベントカレンダー」の6日目の記事です。
5日目はNSSさんによる「3ステップでサーバーレスアプリケーションを簡単作成!AWS SAMをご紹介!」が投稿されました。
7日目はT.Kさんによる「.NET MAUI で C# マークアップを試そう!」が投稿されます。こちらもぜひご覧ください。
6日目からはテーマが変わりまして、2週目(6日目〜10日目)は「仕事には役立たないかもしれない技術」をテーマにお届けします!
今回は、SwitchBotのAPIを使用して、自宅の家電を遠隔操作してみたいと思います。
目次
SwitchBotについて紹介
赤外線リモコン対応のテレビや照明やエアコンなどを、簡単な初期設定だけで、スマホアプリやWEB APIで、スマート家電のように遠隔操作が出来るようになるアイテムです。
今回は、SwitchBot ハブミニで使用してみたいと思います。
SwitchBot(スイッチボット)ハブミニ|リモコンを一つにまとめるスマートリモコン
(こちらは自宅にあるSwitchBot ハブミニの実物でございます。割とサイズが小さいです。)
開発者用トークンをスマホアプリから取得
スマホアプリから開発者用トークンを取得します。
apps.apple.com play.google.com アプリを起動しましたら「プロフィール」タブから「設定」を開きます。アプリバーションを10回タップします。
・・・すると隠しコマンドみたく「開発者向けオプション」の項目が表示されます。

ただし、この開発者トークンが流出すると、誰もがあなたの端末(SwitchBot)を操作出来てしまうので、流出しないよう取り扱いには細心の注意が必要です。

連携されているリストを取得
上記で取得した開発者用トークンを使って、SwitchBotのAPIにアクセスしてみます。
最初は、SwitchBotに連携されている家電(デバイス)のリストを取得します。
▼リクエスト
$ curl -H 'Content-Type: application/json; charset=utf8' \ -H 'Authorization:[開発者用トークン]' \ https://api.switch-bot.com/v1.0/devices
リクエストヘッダーにAuthorizationでアプリで取得した開発者用トークンを設定します。
上記リクエストを送信すると、以下のように連携されている家電のリストが取得出来ます。
▼レスポンス
{ "statusCode": 100, "body": { "deviceList": [ { "deviceId": "[デバイスID]", "deviceName": "ハブミニ 2E", "deviceType": "Hub Mini", "hubDeviceId": "[ハブデバイスID]" } ], "infraredRemoteList": [ { "deviceId": "[デバイスID]", "deviceName": "テレビ", "remoteType": "TV", "hubDeviceId": "[ハブデバイスID]" }, { "deviceId": "[デバイスID]", "deviceName": "照明", "remoteType": "Others", "hubDeviceId": "[ハブデバイスID]" }, { "deviceId": "[デバイスID]", "deviceName": "エアコン", "remoteType": "Air Conditioner", "hubDeviceId": "[ハブデバイスID]" } ] }, "message": "success" }
実際にAPIで家電を操作してみる
上記、リストで取得しましたデバイスIDを元に、実際に家電をWEB APIで操作してみます。
その1 テレビの電源を付けてみる
気分転換にテレビを観たいので、テレビの電源をオンにします。
▼リクエスト
$ curl -X POST -H 'Content-Type: application/json; charset=utf8' \ -H 'Authorization: [開発者用トークン]' \ -d '{"command": "turnOn","parameter": "default","commandType": "command"}' \ https://api.switch-bot.com/v1.0/devices/[テレビのデバイスID]/commands
デバイスリストの取得はGET送信でしたが、デバイスの操作はPOSTでの送信になります。
turnOnコマンドにてAPIを送信すると、対象のデバイスIDの家電の電源がオンになります。
逆に電源をオフにしたい場合は、turnOff を指定します。
この電源のオン・オフの操作は、どのデバイス(家電)でも共通のコマンドになります。
APIの実行が成功すると以下のようにレスポンスが返り、実際にテレビの電源がオンになります。
▼レスポンス
{ "statusCode": 100, "body": {}, "message": "success" }
その2 テレビのチャンネルを変えてみる
そろそろアニメ放送が始まる時間なので、テレビのチャンネルを変えてみたいと思います。
▼リクエスト
$ curl -X POST -H 'Content-Type: application/json; charset=utf8' \ -H 'Authorization: [開発者用トークン]' \ -d '{"command": "SetChannel","parameter": "9","commandType": "command"}' \ https://api.switch-bot.com/v1.0/devices/[テレビのデバイスID]/commands
上記リクエストでは、9チャンネルにチャンネルを変更しています。
SetChannel コマンドにて操作を行います。パラメータにはチャンネル数を指定します。
APIのレスポンスの内容はその1と同じです。
その3 エアコンを操作してみる
部屋が暑くなってきましたので、エアコンの電源を点けてみたいと思います。
▼リクエスト
$ curl -X POST -H 'Content-Type: application/json; charset=utf8' \ -H 'Authorization: [開発者トークン]' \ -d '{"command": "setAll","parameter": "26,2,1,on","commandType": "command"}' \ https://api.switch-bot.com/v1.0/devices/[エアコンのデバイスID]/commands
上記リクエストでは、温度が26℃の冷房を風速:自動にてエアコンを起動しています。
setAll コマンドと、parameter にて設定を行います。
4つの引数がありますが、1つ目は温度です。
2つ目はモードです。2が冷房、3が除湿(ドライ)、5が暖房になります。
3つ目は風速です。1が自動、2が弱、3が中、4が強になります。
4つ目は電源です。電源ONにしたい時は[on]を、OFFにした時は[off]を指定します。
APIのレスポンスの内容はその1と同じです。
おわりに
今回ご紹介したのはごく一部で、この他にも様々な家電の操作に対応しています。
詳細は、Github にて公開されていますので、ぜひご覧ください。
github.com
今ある家電をスマート家電のように操作できるSwitchBotは、基本的にはスマホアプリで操作できますが、今回ご紹介したようにWEB APIも公開されていますので、皆さんもぜひ試してみてください。
P.S.
虎の穴ラボでは、私たちと一緒に新しいオタク向けサービスを作る仲間を募集しています。
詳しい採用情報は以下をご覧ください。
yumenosora.co.jp