はじめに
最近買ったRaspberryPiを活用して自宅のスマートホーム化を目指そうと、SwitchBotのセンサーとNature Remo E liteを購入してみました。
ところが、(自分の下調べが不十分だっただけですが)、各センサーデバイスからの情報取得の接続構成がイメージしているものと違っていたので、自身の整理も兼ねて記事にまとめます。
本記事の対象機器
- SwitchBot温湿度計
- SwitchBotハブミニ
- SwitchBotプラグ
- Nature Remo E lite (HEMSの読み取り端末)
接続構成
勝手なIoTのイメージで、各センサーデバイスからの情報取得はエッジサーバ(RaspberryPi)からセンサーネットワーク内で直接行うものと思い込んでいました。ところが、市販されている多くのセンサーデバイスはそれ自身がクラウドと接続しており、情報取得はクラウドのAPIとやり取りを行う構成となります。
そのためデータを収集するプログラムはクラウドのAPIを会話できればよく、センサーデバイスと直接の接続が不要であることから自宅NW内に配置する必要性はなく、Google Apps Script等を活用しクラウド上に配置することも可能となります。
なお、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が取得できます
{
"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)を取得できます
{
"statusCode":100,
"body":{
"deviceId":"XXXXXXXXXXXX",
"deviceType":"Plug",
"hubDeviceId":"XXXXXXXXXXXX",
"power":"on"
},
"message":"success"
}
(2) SwitchBot温湿度計の取得結果
- 湿度と温度を取得できます
-
hubDeviceId
には経由しているSwitchBotハブミニのIDが表示されています
{
"statusCode":100,
"body":{
"deviceId":"XXXXXXXXXXXX",
"deviceType":"Meter",
"hubDeviceId":"XXXXXXXXXXXX",
"humidity":52,
"temperature":14.7
},
"message":"success"
}
(3) SwitchBotハブミニの取得結果
- bodyは空です
{
"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などでデータ収集のコードを動かし、各センサーデバイスの情報を一元管理できるダッシュボードを作ってみたいと思います。