こんにちは! 虎の穴ラボのS.Sです。
本記事は 虎の穴ラボのカレンダー | Advent Calendar 2022 - Qiita 24日目の記事です。
昨日は磯江さんによる「Deno向けWebフレームワーク「Fresh」入門」が投稿されました。
明日は松尾さんによる「虎の穴ラボというエンジニア組織が1年間でどう変化したか 1年間振り返り」が投稿されます。
こちらもぜひご覧ください。
季節は冬になり、すっかり寒くなりましたね。そんな時、部屋の温度調節が自動で出来たらいいなと思いまして、
今回は、SwitchBot(スイッチボット)の温湿度計を使用して、SwitchBotが提供しているAPIで室温を取得して、
室温が閾値以下もしくは閾値以上ならAPIで、SwitchBot ハブミニを操作して、暖房を自動的にONもしくはOFFにするシステムを組んでみたいと思います。
目次
- 目次
- 今回使用するアイテムの紹介
- SwitchBot のAPIにアクセスしてみる
- SwitchBot APIから現在の温度・湿度を取得する
- SwitchBot APIからエアコンを操作してみる
- GASからSwitchBotのAPIにアクセスして、室温を自動的にコントロールする
- まとめ
- P.S.
今回使用するアイテムの紹介
SwitchBot 温湿度計
通常の温度計・湿度計の機能にプラスして、スマホアプリやWEB APIからでも、温度と湿度が取得出来るアイテムです。
SwitchBot 温湿度計www.switchbot.jp
SwitchBot ハブミニ
赤外線リモコン対応のテレビや照明やエアコンなどを、簡単な初期設定だけで、スマホアプリやWEB APIで、スマート家電のように遠隔操作が出来るようになるアイテムです。
SwitchBot ハブミニwww.switchbot.jp
SwitchBot のAPIにアクセスしてみる
まずSwitchBot のAPIにアクセスするには、APIトークンが必要になります。
APIトークンは、SwitchBotのスマートフォンアプリから取得が可能です。
詳しい取得方法は、以前ブログ記事にて紹介していますので、こちらをご参照ください。
toranoana-lab.hatenablog.com
リクエストAPI
GET https://api.switch-bot.com/v1.0/devices
取得したアクセストークンをヘッダーにのせて、上記のAPIにアクセスすると登録されているデバイスの一覧が取得可能です。
レスポンス
{ "deviceId":"********", "deviceName":"温湿度計プラス E0", "deviceType":"MeterPlus", "enableCloudService":true, "hubDeviceId":"********" },
ここから温湿度計のデバイスID(deviceId)を取得します。
SwitchBot APIから現在の温度・湿度を取得する
devices/{デバイスID}/status
にてデバイスの情報が取得できます。
今回は、SwitchBotの温湿度計にアクセスして、温度と湿度を取得します。
リクエストAPI
GET https://api.switch-bot.com/v1.0/devices/{温湿度計のデバイスID}/status
レスポンス
{ "deviceId":"*********", "deviceType":"MeterPlus", "hubDeviceId":"*************", "humidity":41, "temperature":23.2 }
temperatureが室温、humidityが湿度になります。
SwitchBot APIからエアコンを操作してみる
devices/{デバイスID}/commands
にパラメーターでデバイスの操作コマンドを送ると、実際にデバイスの操作をAPIで行うことが出来ます。
リクエストAPI
POST https://api.switch-bot.com/v1.0/devices/{エコアンのデバイスID}/commands
リクエストパラメーター
{ 'command': 'setAll', 'parameter': '26,5,2,on’, // 温度、モード (5:暖房)、風速(2:低速)、電源のON/OFF 'commandType': 'command' }
GASからSwitchBotのAPIにアクセスして、室温を自動的にコントロールする
UrlFetchApp.fetchを使ってGAS(GoogleAppsScript)からSwitchBotのAPIでSwitchBotにアクセスして、温度の取得や、暖房の操作を行います。
GASのスクリプト
function autoControlRoomTemperature() { // 温湿度計から室温を取得 const temperature = getRoomTemperature(); // 21度以下なら暖房をON if(temperature <= 21){ const requestPayload = { 'command': 'setAll', 'parameter': '26,5,1,on', 'commandType': 'command' } sendDevicesCommands(requestPayload); // 25度以上なら暖房をOFF } else if(temperature >= 25){ const requestPayload = { 'command': 'setAll', 'parameter': '26,5,1,off', 'commandType': 'command' } sendDevicesCommands(requestPayload); } } // SwitchBot APIで温湿度計のデータを取得 function getRoomTemperature(){ const requestHeaders = { 'Content-Type': 'application/json', 'Authorization': TOKEN_ID } const requestOptions = { 'method' : 'get', 'headers' : requestHeaders } const requestUrl = 'https://api.switch-bot.com/v1.0/devices/' + DEVICES_ID_THERMOMETER + '/status' const response = UrlFetchApp.fetch(requestUrl, requestOptions); const response_arr = JSON.parse(response.getContentText()); return response_arr['body']['temperature']; } // SwitchBot APIでデバイスの操作コマンドを送信 function sendDevicesCommands(requestPayload){ const requestHeaders = { 'Content-Type': 'application/json', 'Authorization': TOKEN_ID } const requestOptions = { 'method' : 'post', 'payload' : JSON.stringify(requestPayload), 'headers' : requestHeaders } const requestUrl = 'https://api.switch-bot.com/v1.0/devices/' + DEVICES_ID_AIR_CONDITIONER + '/commands' UrlFetchApp.fetch(requestUrl, requestOptions); }
このスクリプトをトリガーで定期実行設定すれば、完成です!
まとめ
温湿度計から温度と湿度の取得と連動して、エアコンの操作がSwitchBotのAPIで簡単に出来ました。
デバイスの価格も安価で、APIの機能も充実しているので、一度試してみては如何でしょうか。
P.S.
採用
虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
yumenosora.co.jp
LINEスタンプ
エンジニア専用のメイドちゃんスタンプが完成しました!
「あの場面」で思わず使いたくなるようなスタンプから、日常で役立つスタンプを合計40個用意しました。
エンジニアの皆さん、エンジニアでない方もぜひスタンプを確認してみてください。
store.line.me