1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでRemoEから消費電力を取得する方法

Posted at

#目的
Nature RemoEに登録したスマートメーターから消費電力データを取得する。

#方法
ざっくりの流れは以下の通りです。

  1. Nature Remo Cloud APIのGET /1/appliances というエンドポイントを叩く
  2. smart_meterというプロパティからepcとvalを取得する
  3. 正方向の積算電力量に係数を掛けて、単位変換を行う
  4. 任意の期間の積算電力量の差分をとる

それでは、コードを載せながら、それぞれ詳しく説明していきます。

####Nature Remo Cloud APIのGET /1/appliances というエンドポイントを叩く

APIは、HTTPクライアントがNatureのサーバへHTTPSリクエストを行うことで利用します。レスポンスはJSON形式です。認証、認可にはOAuth2を利用します。
APIを利用する際には、必ず以下のHTTPヘッダを付加する必要があります。

Authorization: Bearer {TOKEN}

{TOKEN} 部には、OAuth2を通して取得したアクセストークンを入れてください。

# スマートメーター情報取得
def get_smartmeter_info():
    url = 'https://api.nature.global/1/appliances'
    headers = {'Authorization': 'Bearer ' + REMOAPI, 'accept':'application/json'}
    appliances = requests.get(url, headers = headers).json()

####smart_meterというプロパティからepcとvalを取得する
appliance(機器)情報にsmart_meterというプロパティが生えており、そこにさらに、echonetlite_propertiesという配列があるので、epcとvalを取得します。
epcとはECHONETプロパティのことで、機器の情報を取得するためのキーとなります。
valはプロパティの値を示します。ECHONET Liteのプロパティは任意の型の値を取るため、このフィールドの型は数値ではなく文字列であることに気をつけてください。

# スマートメーター情報取得
def get_smartmeter_info():
    url = 'https://api.nature.global/1/appliances'
    headers = {'Authorization': 'Bearer ' + REMOAPI, 'accept':'application/json'}
    appliances = requests.get(url, headers = headers).json()
    
    # 電力情報を取得
    smart_meter_info = appliances[0]['smart_meter']['echonetlite_properties']
    sm_info = {}
    for item in smart_meter_info:
        key = item['epc']
        sm_info[key] = item['val']

    return sm_info

####正方向の積算電力量に係数を掛けて、単位変換を行う
epc224の積算電力量の単位がkWhではないので、係数と単位の反映が必要です。
係数はepc211、単位はepc225で値を保持しています。
単位については、値がそのまま単位になるわけではなく、読み替えが必要です。
どの値がどの単位に対応するかは下記のとおりです。

|値|単位|
|:|:|
|0x00|1kWh|
|0x01|0.1kWh|
|0x02|0.01kWh|
|0x03|0.001kWh|
|0x04|0.0001kWh|
|0x0A|10kWh|
|0x0B|100kWh|
|0x0C|1000kWh|
|0x0D|10000kWh|

必要な値を取得したら、それぞれの値を乗じることで積算電力量がkWhで求められます。

# 正方向積算電力量計算
def calc_normal_direction_cumulative_electric_energy(normal_direction_cumulative_electric_energy, coefficient, unit):
    
    calc_result = float(normal_direction_cumulative_electric_energy) * float(coefficient) * float(unit)
    
    return calc_result

def lambda_handler(event, context):
    # スマートメーター情報取得取得
    sm_info = get_smartmeter_info()
    # 係数
    coefficient = sm_info[211]
    # 積算電力量計測値(正方向・買電)
    normal_direction_cumulative_electric_energy = sm_info[224]
    # 積算電力量単位
    cumulative_electric_energy_unit = sm_info[225]
    # 単位変換
    unit=0
    if cumulative_electric_energy_unit == '1': 
        unit = 0.1
    
    normal_electric_energy = calc_normal_direction_cumulative_electric_energy(normal_direction_cumulative_electric_energy, coefficient, unit)

###任意の期間の積算電力量の差分をとる
あとは上記積算電力量を定期的に取得し、任意の期間の差分をとることで、その期間の消費電力が求められます。

注意点として、電力量は積算値で表すわけですが、これはカウンター値であり、無限にカウントアップするわけではありません。
epc215は積算電力量有効桁数を示しています。たとえばこれが6だとすると、値域が、0-999999で、999999を超えると0に戻るという仕様です。また、これは係数情報などを乗じる前の生の値に対して適用されます。

#まとめ
PythonでNature RemoEに登録したスマートメーターから消費電力データを取得する方法を簡単に解説しました。上記の内容は公式情報を参考にしましたので、詳細はこちらからご確認ください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?