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

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でデータ取得ができるように対応。

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

#-*- 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で電力を見える化して節電につなげていこう。

参考


Related #iot

Alexaにゲーミングマシンと周辺環境を起動してもらう

PC起動、TV起動、サウンドバー起動がまとめてできるようになった

Alexaにゲーミングマシンと周辺環境を終了してもらう

「Alexa Steamを終了して」ができるようになった

MH-Z19でCO2濃度をリアルタイム計測してMackerelでアラート通知する

換気すべきタイミングにアラートが飛ぶようになった

AlexaにPS4を起動してもらう

「Alexa、PS4をつけて(消して)」

RaspberryPi用の赤外線送受信リモコンを作る

夏休みの電子工作