ラズパイ

【Nature Remo Eの電力API使い方】電力使用量グラフ化・アラートの仕組みを作ってみた!

どうも、CHASUKEです。

Nature Remo Eの電力APIが公開されたので、Pythonでデータ取得・活用してみました。

▼Nature Remo Eとは。

リアルタイムに電気使用量が見える『Nature Remo E』の使い方・レビュー!!

 

Nature Remo Eは、家庭にあるスマートメーターと連携し、アプリ上で電気使用量をリアルタイムに確認できるスマート機器です。

ラインナップとして、太陽光、蓄電池、スマートメーター等のエネマネ機器と連携できる本格的な「Nature Remo E」と、スマートメーターとの連携のみに対応した「Nature Remo E lite」があります。

  1. Nature Remo E32,780円
  2. Nature Remo E lite14,800円

どちらのモデルでも、電力APIを使って、スマートメーターから情報を取得できます。

 

ということで本記事では、ラズパイを使った「電力APIの使い方・活用について書いてみます。

Nature Remo Eを持っている前提にはなってしまうが、自宅の電気使用量と身近なネタなので、わかりやすく面白いです。

LABISTS ラズベリーパイ4B メモリ4GB SDカード32GB
LABISTS

電力APIでスマートメーター情報を取得する方法【CURLコマンド】

手始めにcurlコマンドを実行し、スマートメーターから電力情報を取得してみます。

前提として、Nature Remo E(Liteモデル)をRemoアプリに登録し、スマートメーターに登録しておきます。

▼下記の情報が参考になります。

 

Remoのアクセストークンを発行したら、ラズベリーパイのターミナルから下記を実行します。

curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer [アクセストークン]" > memo.json

 

実行したディレクトリ配下に「memo.json」が出力されます。これがNature Remoに登録している家電一覧になります。この中の一部にスマートメーターの情報があります。

▼Json整形して表示するとこんな感じ。

"smart_meter": {
    "echonetlite_properties": [
        {
            "name": "coefficient",
            "epc": 211,
            "val": "1",
            "updated_at": "2020-05-02T20:28:03Z"
        },
        {
            "name": "cumulative_electric_energy_effective_digits",
            "epc": 215,
            "val": "6",
            "updated_at": "2020-05-02T20:28:03Z"
        },
        {
            "name": "normal_direction_cumulative_electric_energy",
            "epc": 224,
            "val": "112381",
            "updated_at": "2020-05-02T20:28:03Z"
        },
        {
            "name": "cumulative_electric_energy_unit",
            "epc": 225,
            "val": "1",
            "updated_at": "2020-05-02T20:28:03Z"
        },
        {
            "name": "reverse_direction_cumulative_electric_energy",
            "epc": 227,
            "val": "23",
            "updated_at": "2020-05-02T20:28:03Z"
        },
        {
            "name": "measured_instantaneous",
            "epc": 231,
            "val": "308",
            "updated_at": "2020-05-02T20:28:03Z"
        }
    ]
}
CHASUKE
あっさり取れましたね。

 

上のように「smart_meter」というキー配下に、スマートメーターの電力データが格納されてます。上から順番に全部で6種類あります。

  1. 係数
  2. 積算電力量有効桁数
  3. 積算電力量計測値(正方向)
  4. 積算電力量単位
  5. 積算電力量計測値(逆方向)
  6. 瞬時電力計測値

補足すると、「⑥瞬時電力計測値」がリアルタイムの電力使用量(W)を表します。僕の家の場合、「308w」ですね。

CHASUKE
電力APIを使って、いとも簡単にリアルタイムの電力値が取得できました

 

ちなみに、時間帯ごとの電力使用量の積算値は「③積算電力量計測値(正方向)」から、以下の計算式で求められます。

計算方法

「(⑥積算電力量計測値(正方向)の増加量 × ①係数) × 0.1(②積算電力量単位)」

例えば、過去1時間分の電気使用量が知りたければ、1時間前との増加量で計算します。また、「積算電力量単位」はスマートメーターの種類によって違うので、正確には下記マニュアルを参照ください。

【概要】電力APIでやってみた内容

ここから取得した電力値を活用していきます。

やってみたのはこんな感じ。

  1. 電気使用量のグラフ化
  2. 電気使用量アラート

 

電気使用量のグラフ化

1分ごとに取得した瞬時電力計測値を、IoTデータ可視化ツール「Ambient」でグラフ化しました。

▼無料で使えて、こんなグラフで可視化できます。

グラフを見て、ピョンと伸びてるところが消費電力が大きい家電を使ったタイミングですね。

「8時」「12時」「17時」にご飯のために電子レンジ使ったとか、「20時」にドライヤー使ったとか推測できます。

CHASUKE
自宅ネタは面白いなぁー

 

電気使用量アラート

グラフ化のついでに、瞬時電力計測値が既定値を超えてたらLINE通知をもらう仕組みも。

IFTTT連携して簡単にできます。

こちらも何か使えればなと。同じような仕組みで応用できそう。

【作り方】電力APIでグラフ化・アラート

1から10までは書けないので、不明なところがあれば、お問い合わせくださればと。

いつも通りですが、手軽にスクリプトが書けるので、ラズパイにインストールされているPython3を使ってます。

pi@raspberrypi:~ $ python3 -V
Python 3.5.3

バージョンは「3.5.3」のようです。

▼下記3ステップで実装します。

  1. Ambient送信用グラフ生成
  2. Ambient取得・送信機能実装
  3. アラート機能実装

 

Ambientでデータ送信用グラフを生成

グラフ作成とか難しそうですが、IoTデータ可視化ツール「Ambient」なら、無料で簡単です。利用制約もあるので、ご注意ください。

Ambientの制約

  • 8チャネル/ユーザーまで作成できる
  • 1日3000データまで登録できる
  • データ送信間隔は5秒以上あける

詳しくはこちら

 

▼サイトにログインして、チャネルを作成します。

ここにある「チャネルID」と「ライトキー」が後で必要なので、メモしておきましょう。

 

▼チャネルを開くと、当然何もないので、「チャネル」と「グラフ」の設定をしていきます。

 

▼チャネル設定はこんな感じ。

 

▼グラフ設定はこんな感じ。

これでAmbient側の設定は完了です。このチャネルに向けて電力データを送ります!

 

Pythonスクリプトで電力値の取得・送信を実装

こんな感じで書いてみました。

remo_1minut.py(その1)

import requests
import datetime
import ambient

REMOAPI="[Nature API アクセストークン]"
AMBIENTCHANNELID="[Ambient チャネルID]"
WRITEKEY="[Ambient ライトキーID]"

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

    # 電力情報を取得
    list = appliances[3]['smart_meter']['echonetlite_properties']
    dict={}
    for item in list:
        key=item['name']
        dict[key]=item['val']

    power = int(dict['measured_instantaneous'])
    print('Power_Now:' + str(power))
    return str(power)

# ここからスタート
if __name__ == '__main__':

    print('Start')

    # 電力値取得
    power = power_get()

    # Ambientに送信
    am = ambient.Ambient(AMBIENTCHANNELID, WRITEKEY)
    r = am.send({'created': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'd1': power})
    
    print('End')

 

▼少し補足すると、以下の通り。

27行目:処理スタート
32行目:電力値取得の呼び出し
13行目:Remo APIをコール
16行目:Remo登録数に応じて変更
36行目:Ambientにデータ送信

 

15,16,17行目の個別情報を追記すれば、下記コマンドで実行できます。僕のラズパイ環境だと実行コマンドは、こんな感じ。

python3 /home/pi/Desktop/remo_1minut.py

 

▼実行後、Ambientの作成したグラフを見ると、データが反映されてるはずです。丸の中です。

メモ

この時、グラフ種類を「折れ線」にしてたので、点が1つだけ出てきた。

 

あとは、このスクリプトを1分毎に実行してやれば、グラフが作れます。簡単ですね。

1分単位のスクリプト実行は、crontabを使って繰り返し実行しました。

▼コマンドで編集します。

pi@raspberrypi:~ $ crontab -e

 

▼設定内容はこんな感じ。

*/1 * * * * python3 /home/pi/Desktop/remo_1minut.py > /home/pi/Desktop/output.log 2>&1

これで、1分間隔で実行されます。

上の例では、コンソール出力をoutput.logに出してます。これがあると、解析する際に役立ちます。

 

▼あとは1日も経てば、こんな感じ。

 

アラート機能を盛り込む

最後に電力使用量の閾値を指定して、アラート機能を盛り込みます。アラートは、LINEに通知される仕組みにします。

▼IFTTT側では、「Webhook→LINE」という連携を作りますが、やり方は下記の記事が参考になります。同じことやってます。

Pythonを使って『IFTTT(Webhook)』を呼び出す方法

 

▼Ambient送信するスクリプトに、アラート機能を追加して、こんなになった。

remo_1minut.py(その2)

import requests
import datetime
import ambient

REMOAPI="[Nature API アクセストークン]"
AMBIENTCHANNELID="[Ambient チャネルID]"
WRITEKEY="[Ambient ライトキーID]"
IFTTTKEY="[IFTTTキー]"
WEBHOOKKEY="[IFTTTのWebhookキー]"
LIMIT=[閾値のワット数]

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

    # 電力情報を取得
    list = appliances[3]['smart_meter']['echonetlite_properties']
    dict={}
    for item in list:
        key=item['name']
        dict[key]=item['val']

    power = int(dict['measured_instantaneous'])
    print('Power_Now:' + str(power))
    return str(power)

# IFTTT_Webhook
def ifttt_webhook(power):
    if(int(power) > LIMIT):
        payload = {"value1": power,
                    "value2": "",
                    "value3": "" }
        url = "https://maker.ifttt.com/trigger/" + WEBHOOKKEY + "/with/key/" + IFTTTKEY
        response = requests.post(url, data=payload)

# ここからスタート
if __name__ == '__main__':

    print('Start')

    # 電力値取得
    power = power_get()

    # Ambientに送信
    am = ambient.Ambient(AMBIENTCHANNELID, WRITEKEY)
    r = am.send({'created': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'd1': power})

    # 異常値ならLINE通知
    ifttt_webhook(power)

    print('End')

 

▼補足として、下記の通り。

8行目:IFTTTキーや閾値を追加
61行目:電力値をIFTTT判定へ
31行目:閾値と比較
36行目:閾値超過ならIFTTT発火

 

とりあえず、1000wを閾値にしてみたら、洗濯機と電子レンジ使うとオーバー。カップラーメン用のケトルもアウトでしたー。

CHASUKE
1分毎に上がるので通知が止まらない...

電力データの見える化は楽しい(さまざまな活用方法)

Remo APIを使って、自宅の電気使用量が簡単に取得できました。

やはり、自宅の電気状況と直結するので面白いですね。他にもいろいろな用途がありそうです。

 

電力会社のデータと比較

僕が住む愛知県では、中部電力ミライズ『カテエネ』に申し込めば、前日以前の電気使用量が時間帯別にチェックできます。

▼こんな具合に。

 

▼積算電力量計測値(正方向)を使って、同じグラフが作れそうだったので、試してみたら、、

メモ

1時間前の積算電力量計測値(正方向)を覚えておいて、1時間ごとに差分を求めて、Ambientに送信してるだけです。

CHASUKE
出来ました。カテエネグラフとも一致しましたー!

 

Siriショートカット

 

SiriショートカットからAPI呼んで、データを扱えるので、何かに使えるかも。

 

スマートガジェットとの連携

@2ndknjさんがツイートされていた、LaMetric Timeアプリも面白い。こちらもラズパイで処理してデータ送信してるみたいです。

スマートデバイスとの連携も面白い。僕もLaMetricつ買ってるので、これは真似したい。

ドット表示がお洒落で可愛い。スマート置き時計『LaMetric Time』レビュー!

最後に

Remo APIを使って、スマートメーターの情報を取得する方法を紹介しました。

ラズパイがあれば、簡単に抽出して活用できます。身近なデータが使える面白さもあります。

▼今回使った「Remo E Lite」はこちら

▼今回使ったラズパイ4はこちら

LABISTS ラズベリーパイ4B メモリ4GB SDカード32GB
LABISTS

以上、それではまた。

Amazonでお得に買い物



Amazon.co.jpで買い物するならギフト券の購入(チャージ)がおすすめ。チャージごとに最大2.5%分のポイントが付与されます

チャージへGO!!

  • この記事を書いた人
Avatar photo

CHASUKE

IT企業につとめる30代サラリーマンブロガーです。当ブログでは、実際に使ってよかった役立つガジェットや製品をお届けしてます。面白い機能や素敵なデザイン、少し尖ったアイテムが特に好きです。ご質問・ご意見は「お問い合わせ」まで。レビュー依頼もお待ちしております!

© 2023 CHASUKE.com