🔋

TelegrafでNature RemoのCloud API情報を取得する

2022/06/21に公開

概要

家に転がっている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