TelegrafでNature RemoのCloud API情報を取得する
概要
家に転がっているRaspberry PiでTelegraf/InfluxDB/Grafanaの時系列DB&可視化環境を整備したので、今回はTelegrafというメトリクス収集のツールを使って、自宅に設置してあるNature Remo Eから得られる電力の情報をCloud API経由で取得してみようと思います。
方法
Nature Remo Cloud APIの設定
Nature RemoのCloud APIを利用するために、まずは home.nature.global からOAuth2のアクセストークンを発行しておきます。
そして今回は/1/appliances
のエンドポイントを利用します。リクエストのheaderに先ほどのOAuth2のアクセストークンを設定し、下記のようにcurl
コマンドで叩いてみます。
curl --request GET \
--url https://api.nature.global/1/appliances \
--header 'Authorization: Bearer INSERT_YOUR_TOKEN_HERE' \
問題なくCloud APIを叩くことができれば、以下のようなレスポンスが帰ってきます(idや不要な情報は削除してあります)。
[
{
"id": "xxx",
"device": {
"name": "Remo E lite",
"id": "xxx",
[...]
},
"model": {
"id": "xxx",
"manufacturer": "",
"name": "Smart Meter",
"image": "ico_smartmeter"
},
"type": "EL_SMART_METER",
"nickname": "スマートメーター",
"image": "ico_smartmeter",
[...]
"smart_meter": {
"echonetlite_properties": [
{
"name": "coefficient",
"epc": 211,
"val": "1",
"updated_at": "2022-06-20T07:43:31Z"
},
[...]
このsmart_meter.echonetlite_properties
の中身が、Nature Remo Eから取得できる時刻ごとの情報です。
Telegrafで叩くシェルスクリプトの作成
先ほどはcurl
コマンドを利用してCloud APIで結果を取得することができましたが、このレスポンスの中には不要な情報が多数含まれているため、jq
コマンドを使ってTelegrafに渡す用にjsonを綺麗にします。
curl --request GET \
--url https://api.nature.global/1/appliances \
--header 'Authorization: Bearer INSERT_YOUR_TOKEN_HERE' \
| jq '.[] | select(.id == "YOUR_APPLIANCE_ID").smart_meter.echonetlite_properties[] | {name: (.name), epc: (.epc), val: (.val|tonumber), updated_at: (.updated_at)}' \
| jq -s
少々トリッキーなことをやっていますが、jq
でやっていることは以下の3つです。
- レスポンス全体はリストになっていているため、特定機器の情報のみを取得するためにidでフィルターする
- 各種メトリクスの数値情報である
val
は文字列で返却されいるため、numberに変換する - リスト内の各要素ごとの操作を行ったので、最後にリストに戻す
Telegrafの設定ファイルの作成
それでは、Telegrafから上記シェルスクリプトを定期実行できるようにしましょう。/etc/telegraf/telegraf.d
以下に設定ファイルを追加します。
$ cd /etc/telegraf/telegraf.d
$ sudo touch remo.conf
remo.conf
には下記のような設定を記述します。この例では、1分単位でAPIを叩きremo_smartmeter
という名前で値を書き込む設定になっています。
[[inputs.exec]]
commands = ["/usr/bin/sh /home/pi/dev/telegraf/remo.sh"]
interval = "1m"
timeout = "10s"
name_override = "remo_smartmeter"
data_format = "json"
tag_keys = ["name"]
json_time_key = "updated_at"
json_time_format = "2006-01-02T15:04:05Z"
上記の設定ファイルが問題なく動作するかを、telegraf -test
でテストします。
$ telegraf -config remo.conf -test
2022-06-20T12:10:23Z I! Starting Telegraf 1.22.4
2022-06-20T12:10:23Z I! Loaded inputs: exec
2022-06-20T12:10:23Z I! Loaded aggregators:
2022-06-20T12:10:23Z I! Loaded processors:
2022-06-20T12:10:23Z W! Outputs are not used in testing mode!
2022-06-20T12:10:23Z I! Tags enabled: host=raspberrypi
> remo_smartmeter,host=raspberrypi,name=coefficient epc=211,val=1 1655726976000000000
> remo_smartmeter,host=raspberrypi,name=cumulative_electric_energy_effective_digits epc=215,val=6 1655726976000000000
> remo_smartmeter,host=raspberrypi,name=normal_direction_cumulative_electric_energy epc=224,val=141003 1655726976000000000
> remo_smartmeter,host=raspberrypi,name=cumulative_electric_energy_unit epc=225,val=1 1655726976000000000
> remo_smartmeter,host=raspberrypi,name=reverse_direction_cumulative_electric_energy epc=227,val=21 1655726976000000000
> remo_smartmeter,host=raspberrypi,name=measured_instantaneous epc=231,val=440 1655726976000000000
telegrafから問題なく出力できそうなので、telegrafを再起動して作成した設定ファイルを読み込んで終了です。
$ sudo systemctl restart telegraf
(補足)InfluxDBの確認とGrafanaの可視化
Telegrafを使ったNature RemoのAPI情報取得は以上ですが、私の場合はInfluxDBに書き込む設定にしてあるので、そちらに実際に値が入ったか最後に見ておきましょう。telegraf
テーブルのmeasurementsに、設定ファイルに記述した名前であるremo_smartmeter
が入っているはずです。
$ influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> SHOW MEASUREMENTS ON telegraf
name: measurements
name
----
cpu
cpu_temperature
disk
diskio
gpu_temperature
internet_speed
kernel
mem
net
netstat
processes
remo_smartmeter
swap
system
> select * from remo_smartmeter limit 6
name: remo_smartmeter
time epc host name val
---- --- ---- ---- ---
1655727577000000000 211 raspberrypi coefficient 1
1655727577000000000 227 raspberrypi reverse_direction_cumulative_electric_energy 21
1655727577000000000 224 raspberrypi normal_direction_cumulative_electric_energy 141003
1655727577000000000 231 raspberrypi measured_instantaneous 320
1655727577000000000 225 raspberrypi cumulative_electric_energy_unit 1
1655727577000000000 215 raspberrypi cumulative_electric_energy_effective_digits 6
ちなみにGrafanaで可視化すると以下のようになりました。Nature Remoのスマホアプリと同じようなグラフを作れて満足です。
Discussion