Nature Remo E liteを使って電力データを取得する

電力消費量のモニタリングができるNature Remo E liteが外出自粛キャンペーンをやっていたので購入。

これまでにもサンワサプライ ワットモニターを使って消費電力のモニタリングをやっていたが、ワットモニターの場合は一つのコンセントのデータしか見れないのと、デバイスの表示を目視で確認するしかなかったのであまり活用できていなかった。

電力データを取得するには電力メーター情報発信サービス(Bルートサービス)への申込みが必要だったので購入と合わせて申し込み。

5月3日に申し込んで、5月14日に認証IDが郵送、パスワードがメールで送られてきた。

空いているコンセントにRemo E liteを差し込んで、スマホアプリで接続して、認証コードとパスワードを入力。

最初エラーになったけど、何度か試したら無事に認証ができた。

Nature Remoの場合は、APIが用意されており、アクセストークンを発行すれば↓のcurlを実行すればスマートメータの電力値を取得できる。

curl -X GET "https://api.nature.global/1/appliances" -H "accept: application/json" -H "Authorization: Bearer {Token]"

これをCloudWatchでグラフ化したかったので、BME280センサ情報をAWS IoTで管理してChatbotでSlackに通知するのと同様にしてAWS IoT経由でCloudWatchに送信するようにした。

公式サイトの記事を参考にpythonでデータ取得ができるように対応。

スマートメーターの値から電力データを算出する — Nature Inc

とりあえず、積算電力量計測値(正方向)、瞬時電力計測値のみ取得するようにした。

#-*- coding: utf-8 -*-
import json
import os
import urllib.request

class SmartMeter:
  def create_request(self):
    req = urllib.request.Request('https://api.nature.global/1/appliances')
    req.add_header('Authorization', 'Bearer %s' % os.environ['NATURE_REMO_TOKEN'])
    req.add_header('Content-Type', 'application/json')
    return req

  def get_power(self):
    req = self.create_request()
    with urllib.request.urlopen(req) as res:
      str_response = res.read().decode('utf-8')
      json_load = json.loads(str_response)

      coefficient = 0
      normal_direction_cumulative_el = 0
      reverse_direction_cumulative_el = 0
      measured_instantaneous = 0
      energy_unit = 0
      updated_at = ""

      for data in json_load:
        if data['type'] == "EL_SMART_METER":
          for echonet_prop in data['smart_meter']['echonetlite_properties']:
            if echonet_prop['epc'] == 211:
              coefficient = int(echonet_prop['val'])
            if echonet_prop['epc'] == 224:
              normal_direction_cumulative_el = int(echonet_prop['val'])
            if echonet_prop['epc'] == 227:
              reverse_direction_cumulative_el = int(echonet_prop['val'])
            if echonet_prop['epc'] == 231:
              measured_instantaneous = int(echonet_prop['val'])
            if echonet_prop['epc'] == 225:
              energy_unit = int(echonet_prop['val'])
            updated_at = echonet_prop['updated_at']

      kwh = normal_direction_cumulative_el * coefficient / 10**(energy_unit)

      return {
        'updated_at': updated_at,
        'measured_instantaneous': measured_instantaneous,
        'kwh': kwh,
      }

if __name__ == '__main__':
    meter = SmartMeter()
    power = meter.get_power()
    print(power)

普段は400Wくらいになっているが、ホットクックを動かすと1,200Wくらいまで跳ね上がる。

家にいる時間が増えているので、Remo E liteで電力を見える化して節電につなげていこう。

参考