5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwitchBot/Nature RemoとクラウドAPI経由で接続してみた話

Last updated at Posted at 2022-01-30

はじめに

最近買ったRaspberryPiを活用して自宅のスマートホーム化を目指そうと、SwitchBotのセンサーとNature Remo E liteを購入してみました。
ところが、(自分の下調べが不十分だっただけですが)、各センサーデバイスからの情報取得の接続構成がイメージしているものと違っていたので、自身の整理も兼ねて記事にまとめます。

本記事の対象機器

  • SwitchBot温湿度計
  • SwitchBotハブミニ
  • SwitchBotプラグ
  • Nature Remo E lite (HEMSの読み取り端末)

接続構成

勝手なIoTのイメージで、各センサーデバイスからの情報取得はエッジサーバ(RaspberryPi)からセンサーネットワーク内で直接行うものと思い込んでいました。ところが、市販されている多くのセンサーデバイスはそれ自身がクラウドと接続しており、情報取得はクラウドのAPIとやり取りを行う構成となります。
image.png

そのためデータを収集するプログラムはクラウドのAPIを会話できればよく、センサーデバイスと直接の接続が不要であることから自宅NW内に配置する必要性はなく、Google Apps Script等を活用しクラウド上に配置することも可能となります。
image.png

なお、SwitchBotはセンサーネットワーク内で直接取得することも可能ではあるようです。

Nature Remoも local API というものが提供されているようですが、Nature Remo E liteは使えませんでした。

SwitchBotAPI

SwitchBotAPIの利用方法は公式のGitに掲載されています。
SwitchBotAPI公式: https://github.com/OpenWonderLabs/SwitchBotAPI

デバイス一覧の取得(GET)

% curl -X GET "https://api.switch-bot.com/v1.0/devices" -H "Authorization: <token>"
  • <token> はSwitchBotアプリの 「プロフィール」>「設定」の「アプリバージョン」を10回タップすると表示される「開発者向けオプション」から確認できます
  • body.deviceList に登録済みのSwitchBotデバイスの情報(deviceId、deviceName、deviceName)が表示されます
  • body.deviceList[x].hubDeviceId にはSwitchBotのクラウドと接続するためのHub端末のIDが入るようですが、 デバイス一覧の取得 のAPIだと全て「000000000000」と表示されてしまうようです
  • 後続の デバイス情報の取得 のAPIでは正しいHub端末のIDが取得できます
deviceList
{
  "statusCode":100,
  "body":{
    "deviceList":[
      {
        "deviceId":"XXXXXXXXXXXX",
        "deviceName":"Plug 917F",
        "deviceType":"Plug",
        "enableCloudService":true,
        "hubDeviceId":"000000000000"
      },{
        "deviceId":"XXXXXXXXXXXX",
        "deviceName":"書斎温湿度計",
        "deviceType":"Meter",
        "hubDeviceId":"000000000000"
      },{
        "deviceId":"XXXXXXXXXXXX",
        "deviceName":"寝室ハブミニ",
        "deviceType":"Hub Mini",
        "hubDeviceId":"000000000000"
      },{
        "deviceId":"XXXXXXXXXXXX",
        "deviceName":"寝室温湿度計",
        "deviceType":"Meter",
        "hubDeviceId":"000000000000"
      }
    ],
    "infraredRemoteList":[
      {
        "deviceId":"XX-XXXXXXXXXXXX-XXXXXXXX",
        "deviceName":"AS-C22H",
        "remoteType":"DIY Air Conditioner",
        "hubDeviceId":"XXXXXXXXXXXX"
      }
    ]
  },
  "message":"success"
}

デバイス情報の取得(GET)

  • デバイス情報の取得は https://api.switch-bot.com/v1.0/devices/<deviceId>/status から取得します
  • <deviceId>デバイス一覧の取得 で確認したIDです
% curl -X GET "https://api.switch-bot.com/v1.0/devices/<deviceId>/status" -H "Authorization: <token>"
  • 以下は私が購入したPlugと温湿度計からの取得結果です
    • SwitchBotプラグ
    • SwitchBot温湿度計
    • SwitchBotハブミニ

(1) SwitchBotプラグの取得結果

  • 給電状態(on/off)を取得できます
SwitchBotプラグ
{
  "statusCode":100,
  "body":{
    "deviceId":"XXXXXXXXXXXX",
    "deviceType":"Plug",
    "hubDeviceId":"XXXXXXXXXXXX",
    "power":"on"
  },
  "message":"success"
}

(2) SwitchBot温湿度計の取得結果

  • 湿度と温度を取得できます
  • hubDeviceId には経由しているSwitchBotハブミニのIDが表示されています
SwitchBot温湿度計
{
  "statusCode":100,
  "body":{
    "deviceId":"XXXXXXXXXXXX",
    "deviceType":"Meter",
    "hubDeviceId":"XXXXXXXXXXXX",
    "humidity":52,
    "temperature":14.7
  },
  "message":"success"
}

(3) SwitchBotハブミニの取得結果

  • bodyは空です
SwitchBotハブミニ
{
  "statusCode":100,
  "body":{},
  "message":"success"
}

Nature Remo Cloud API

Nature Remo Cloud APIの利用方法は公式: https://developer.nature.globalに掲載されています。

デバイス情報の取得(GET)

  • デバイス情報の取得は https://api.nature.global/1/appliances から取得します
  • <token>http://home.nature.global/ で発行します
% curl -X GET "https://api.nature.global/1/appliances" -k --header "Authorization: Bearer <token>"

(1) Nature Remo E liteの取得結果

  • 電力情報は smart_meter.echonetlite_properties 配下に出力されています
  • 電気使用量[kWh] は取得した各値をもとに算出する必要があります
[
    {
        "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "device":{
            "name":"Remo E lite",
            "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "created_at":"2022-01-24T09:46:14Z",
            "updated_at":"2022-01-24T09:46:29Z",
            "mac_address":"xx:xx:xx:xx:xx:xx",
            "bt_mac_address":"xx:xx:xx:xx:xx:xx",
            "serial_number":"xxxxxxxxxxxxxx",
            "firmware_version":"Remo-E-lite/1.3.9",
            "temperature_offset":0,
            "humidity_offset":0
        },
        "model":{
            "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "manufacturer":"",
            "name":"Smart Meter",
            "image":"ico_smartmeter"
        },
        "type":"EL_SMART_METER",
        "nickname":"スマートメーター",
        "image":"ico_smartmeter",
        "settings":null,
        "aircon":null,
        "signals":[],
        "smart_meter":{
            "echonetlite_properties":[
                {
                    "name":"coefficient",
                    "epc":211,
                    "val":"1",
                    "updated_at":"2022-01-29T06:40:35Z"
                },
                {
                    "name":"cumulative_electric_energy_effective_digits",
                    "epc":215,
                    "val":"6",
                    "updated_at":"2022-01-29T06:40:35Z"
                },{
                    "name":"normal_direction_cumulative_electric_energy","epc":224,
                    "val":"14267",
                    "updated_at":"2022-01-29T06:40:35Z"
                },{
                    "name":"cumulative_electric_energy_unit",
                    "epc":225,
                    "val":"1",
                    "updated_at":"2022-01-29T06:40:35Z"
                },{
                    "name":"reverse_direction_cumulative_electric_energy",
                    "epc":227,
                    "val":"22",
                    "updated_at":"2022-01-29T06:40:35Z"
                },{
                    "name":"measured_instantaneous",
                    "epc":231,
                    "val":"1024",
                    "updated_at":"2022-01-29T06:40:35Z"
                }
            ]
        }
    }
]

取得された各値の意味合い、電力データの算出の方法は以下の公式情報に記載があります。

積算電力値[kWh] は以下の計算式で算出できます。(積算電力量単位が 0~4 の場合)

積算電力値[kWh] = 係数 × 積算電力量計測値(正方向) × (1/10)^積算電力量単位
  • 係数: coefficient
  • 積算電力量計測値(正方向): normal_direction_cumulative_electric_energy
  • 積算電力量単位: cumulative_electric_energy_unit

上記の出力例だと

  • 係数: 1
  • 積算電力量計測値(正方向): 14267
  • 積算電力量単位: 1
    ですので、
積算電力値[kWh] = 1 × 14267 × (1/10)^1 = 1426.7kWh

となります。
積算電力値[kWh]はメーターが動き始めてからの積算値であるため、ある一定期間の電気使用量[kWh]を求めるには、開始日と終了日の積算電力値の差を計算します。

おわりに

SwitchBotもNature Remo E liteもRaspberryPiから接続しようと思って買ったものの、クラウドAPIを利用することでRaspberryPiが無くてもデータを収集できることがわかりました。
実際にGoogle Apps ScriptやAWS Lambdaなどでデータ収集のコードを動かし、各センサーデバイスの情報を一元管理できるダッシュボードを作ってみたいと思います。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?