高木のブログ

Nature Remo E用のGem作った

2021/01/11

Nature Remo E / E lite用のAPIクライアント用のGemを作った。E liteでしか動作確認していないけど、Eでも使えるはず。

ytkg/nature_remo_e - GitHub

作った理由

  • 単純にGemを作ってみたかった
  • Nature RemoのGemは既に存在しているが、スマートメーターの値だけを取るだけなのにコードが長くなってしまうので、それ専用にGemを作ってコードを短くしたかった。

コードを短くすることができた具体例

【Nature Remo E lite】瞬時電力計測値をAmbientでグラフ化するで書いたコード

Before

require 'dotenv/load'
require 'nature_remo'
require 'ruby-ambient'

client = NatureRemo::Client.new(ENV['NATURE_REMO_API_TOKEN'])
response = client.appliances
appliances = JSON.parse(response.body, symbolize_names: true)

el_smart_meter = appliances.find { |appliance| appliance[:type] == 'EL_SMART_METER' }
echonetlite_properties = el_smart_meter[:smart_meter][:echonetlite_properties].each_with_object({}) do |echonetlite_property, hash|
  hash[echonetlite_property[:name].to_sym] = echonetlite_property[:val].to_i
end

ambient = Ambient.new(ENV['AMBIENT_CHANNEL_ID'], write_key: ENV['AMBIENT_WRITE_KEY'])
ambient.send({ d1: echonetlite_properties[:measured_instantaneous] })

After

require 'dotenv/load'
require 'nature_remo_e'
require 'ruby-ambient'

client = NatureRemoE::Client.new(ENV['NATURE_REMO_API_TOKEN'])

ambient = Ambient.new(ENV['AMBIENT_CHANNEL_ID'], write_key: ENV['AMBIENT_WRITE_KEY'])
ambient.send({ d1: client.measured_instantaneous })

できること

  • ECHONETプロパティ全てをHashクラスで取得できる
  • ECHONETプロパティを個別に取得できる
名前 プロパティ
normal_direction_cumulative_electric_energy 積算電力量計測値(正方向)
reverse_direction_cumulative_electric_energy 積算電力量計測値(逆方向)
coefficient 係数
cumulative_electric_energy_unit 積算電力量単位
cumulative_electric_energy_effective_digits 積算電力量有効桁数
measured_instantaneous 瞬時電力計測値

この名前はNature社が独自に命名したもので、将来的に変わる可能性があるとのこと。

使い方

変更があるかもしれないので、正確な使い方はREADME.mdへ。

Gemのインストール

$ gem install nature_remo_e

コード

require 'nature_remo_e'

client = NatureRemoE::Client.new('token')

client.echonetlite_properties
#=> {
#     :coefficient=>1,
#     :cumulative_electric_energy_effective_digits=>6,
#     :normal_direction_cumulative_electric_energy=>36039,
#     :cumulative_electric_energy_unit=>1,
#     :reverse_direction_cumulative_electric_energy=>10,
#     :measured_instantaneous=>630
#   }

client.coefficient
#=> 1

client.cumulative_electric_energy_effective_digits
#=> 6

client.normal_direction_cumulative_electric_energy
#=> 36039

client.cumulative_electric_energy_unit
#=> 1

client.reverse_direction_cumulative_electric_energy
#=> 10

client.measured_instantaneous
#=> 630

残タスク

最低限のものしか実装していないので未完成の状態である。
現時点で思いつくのは以下の2つ。

  • 例外処理
  • 積算電力量の取得

ytkg

Written by ytkg, Twitter, GitHub