Raspberry PiとNode-REDでSwitchBotの温湿度計データを取得する

2021.10.31

はじめに

データアナリティクス事業本部のkobayashiです。

自宅をスマートホーム化できるツールとしてSwitchBot社製の製品を個人的に購入して使用しています。今回はそのSwitchBot社の製品の中で温湿度を計測できるSwitchBot温湿度計のデータをRaspberry PiにインストールしたNode-REDで取得してみたいと思います。

SwitchBotとは

IoT化されていない製品をIoT化できる製品です。例えば一般的に使われているカーテンテールに取り付けることでカーテンの開け締めを自動的に行えるようになる「 SwitchBotカーテン 」や普通のボタン・スイッチに取り付けてIoT化できる「 SwitchBotボット 」、赤外線リモコンを代替や他のSwitchBot製品のHubとなる「 SwitchBotハブミニ 」が有名所です。これらをAmazon AlexaやGoogle アシスタントと組み合わせて音声で操作することもできます。

今回はその中の「 SwitchBot温湿度計 」と「 SwitchBotハブミニ 」を使ってみたいと思います。

Node-REDでSwitchBot温湿度計のデータを取得

温湿度計単体でも温度・湿度は計測でき温湿度系本体に36日分を保存できますが、SwitchBotハブミニとペアリングすることで遠隔操作や音声操作が行えることに加え、計測データをクラウド上に無期限に保存できるようになります。またこの計測データをAPIを使うことで取得できるようになりますのでそのAPIを使ってNode-REDでデータを取得します。

今回の記事では温湿度計とSwitchBotハブミニの設定はすでに行われている前提で進めます。機器の設定はSwitchBot公式のドキュメントに詳しく記載されているのでそちらをご確認ください。

SwitchBotのAPI

SwitchBot社で用意されているAPIのドキュメントはGitHub上にありますので詳しい使い方はそちらをご確認ください。

ではまずはじめにAPIを叩くためにSwitchBotのアプリからトークンを取得します。

  1. アプリを起動してプロフィール > 設定とタップする
  2. アプリバージョンを10回タップする
  3. 開発者向けオプションが表示されるのでタップするとトークンが表示される

これでAPIを叩くためのトークンが取得できたので実際にAPIを叩いてみます。APIドキュメントに記載されているディバイス一覧を取得してみます。

curl -H 'Authorization:{取得したトークン}' https://api.switch-bot.com/v1.0/devices

結果は以下のようにJsonで取得できます。

{
  "statusCode": 100,
  "body": {
    "deviceList": [
      {
        "deviceId": "D145XXXXXX",
        "deviceName": "リビングハブミニ",
        "deviceType": "Hub Mini",
        "hubDeviceId": "000000000000"
      },
      {
        "deviceId": "DDCDXXXXXX",
        "deviceName": "寝室の温湿度計",
        "deviceType": "Meter",
        "enableCloudService": true,
        "hubDeviceId": "D145XXXXXX"
      },
      {
        "deviceId": "EBACXXXXXX",
        "deviceName": "子供部屋の温湿度計",
        "deviceType": "Meter",
        "enableCloudService": true,
        "hubDeviceId": "D145XXXXXX"
      },
      {
        "deviceId": "F328XXXXXX",
        "deviceName": "リビングの温湿度計",
        "deviceType": "Meter",
        "enableCloudService": true,
        "hubDeviceId": "D145XXXXXX"
      }
    ],
    "infraredRemoteList": []
  },
  "message": "success"
}

deviceIdを後々使うのですが、これは各ディバイスのBluetoodh MACアドレスとなっていてSwitchBotのアプリでも確認できます。

次にこのdeviceIdを使って温湿度計のデータを取得してみます。

curl -H 'Authorization:{取得したトークン}' https://api.switch-bot.com/v1.0/devices/{deviceId}/status

取得結果

{
  "statusCode": 100,
  "body": {
    "deviceId": "DDCDXXXXXX",
    "deviceType": "Meter",
    "hubDeviceId": "D145XXXXXX",
    "humidity": 52,
    "temperature": 19.3
  },
  "message": "success"
}

このようにAPIを使うことで簡単にSwitchBot温湿度計のデータを取得できます。APIでデータ取得が確認できたので次にNode-REDで取得してみます。

Node-REDでSwitchBotのAPIを使う

Node-REDでSwitchBotのディバイスを扱う際にはライブラリ( node-red-contrib-switchbot-api (node) - Node-RED )があったのですが、動作がイマイチだったのでNode-REDの標準ノードのみを使って組み立てます。以下がその完成形になります。

それぞれのノードの解説

set headerはAPIにリクエストを送る際に認証情報をヘッダに含める必要があるのでこのノードで設定しています。

msg.headers = {
    "Authorization": "{取得したトークン}"};
return msg;

次のhttp requestノードは温湿度計のデータを取得するしている部分になります。 先程テストを行った温湿度計のデータを取得するAPIへリクエストを送っています。したがってURLには以下を登録します。

https://api.switch-bot.com/v1.0/devices/{deviceId}/status

最後のJSON.parseではAPIから取得したJsonのパースを行っています。

const data = JSON.parse(msg.payload);
msg.payload = data.body;

return msg;

実行結果

実行してみるとSwitchBot温湿度計のデータが良い感じで取得できていることがわかります。 ここまでできれば後はNode-REDを使っててデータベースへ保存したり色々できることの幅が広がります。

まとめ

Raspberry PiとNode-REDでSwitchBotの温湿度計データを取得してみました。SwitchBot単体でも温湿度計のセンサーデータの確認をしたり温湿度計をトリガーにして色々な操作が行えたりできますが、Node-REDを介することでできることの幅が広がり様々なアイデアを具現化できるのではないでしょうか。

最後まで読んで頂いてありがとうございました。