虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

SwitchBotのAPIで家電を遠隔操作してみた

こんにちは! 虎の穴ラボの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 ハブミニの実物でございます。割とサイズが小さいです。)

開発者用トークンをスマホアプリから取得

スマホアプリから開発者用トークンを取得します。

SwitchBot

SwitchBot

  • wonderlabs, Incorporated
  • ライフスタイル
  • 無料
apps.apple.com play.google.com アプリを起動しましたら「プロフィール」タブから「設定」を開きます。
アプリバーションを10回タップします。
・・・すると隠しコマンドみたく「開発者向けオプション」の項目が表示されます。 開発者向けオプション」をタップすると、APIのアクセスに必要な開発者用トークンが表示されます。
ただし、この開発者トークンが流出すると、誰もがあなたの端末(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