#目的
Nature RemoEに登録したスマートメーターから消費電力データを取得する。
#方法
ざっくりの流れは以下の通りです。
- Nature Remo Cloud APIのGET /1/appliances というエンドポイントを叩く
- smart_meterというプロパティからepcとvalを取得する
- 正方向の積算電力量に係数を掛けて、単位変換を行う
- 任意の期間の積算電力量の差分をとる
それでは、コードを載せながら、それぞれ詳しく説明していきます。
####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に登録したスマートメーターから消費電力データを取得する方法を簡単に解説しました。上記の内容は公式情報を参考にしましたので、詳細はこちらからご確認ください。