どうも、CHASUKEです。
「LaMetric Time」と言えば、粗いドットが可愛いスマートデジタル時計。
デジタル時計だけでなく、TwitterやYouTubeの通知を表示させたりする機能も備わっており、さまざまな目的で使うことができます。

LaMetricにはAPIが公開されており、コマンドで好きなメッセージを通知させることができます。さらに、LaMetricネイティブアプリを自作すれば、情報の常時表示やボタンを使ったアクションさせることも可能です。
今回は、LaMetric API実行し、リアルタイムな電気使用量をLaMetricに通知させる方法を紹介します。以前にツイートした内容です。
半年くらい前からやろやろ思ってた、Nature Remo Eで取った電気量をLaMetricに表示するやつ、できた。
1. 今の使用量
2. 1時間の使用量
3. 1時間ごとのグラフこれもやり方とか書こうかな。#remo #lametric pic.twitter.com/nneW1KhEuE
— CHASUKE@ガジェットブログ (@chasuke__) March 1, 2021
なお、自宅のスマートメーター電気量を取得するため、「Nature Remo E」を使ってます。こちらもAPIからデータを取得できます。
Macやラズパイから試せるようにCurlコマンドやPythonスクリプト例も紹介してますので、気軽にお試しください。

完成形や必要なものなど
完成イメージはこちら
- 今の使用量
- 1時間の使用量
- 1時間ごとのグラフ

今回使ったモノ
今回使ったもの
- LaMetric Time(今回の主役)
- Remo E(スマメ情報が取れるやつ)
- Pythonやcurl の実行環境(Macやラズパイ等)
LaMetricもRemo Eも便利ですが、お高い。。。両方持っている人とは仲良くなれる気がするw

LaMetric APIで任意のメッセージを表示してみる【curlコマンド】
まずは練習がてら、LaMetricに任意のメッセージを表示させる方法を書いていきます。
手順は3ステップ
- LaMetricアプリでIPアドレスを取得
- LaMetricのAPIキーを取得
- メッセージ表示API(Notifications)の実行

専用アプリからIPアドレスを確認
設置済みのLaMetricのローカルIPアドレスを調べます。LaMetricアプリから調べることができます。

LaMetricのAPIキーを取得
APIキーは、APIでどのデバイスを操作するか特定するための鍵みたいなもの。
▼LaMetric Developerサイトから取得できます。

[My devices] - [DEVICES] - [Api Key]

メッセージ表示API(Notifications)の実行
さて、ターミナルからcurlコマンドで、メッセージ表示API(Notifications)を実行してみましょう。
「<ローカルIPアドレス>」「<APIキー>」を自分用に書き換えて、ターミナルから実行してみてください。
$ /usr/bin/curl -X POST \ -u "dev:<APIキー>" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "model": { "cycles": 2, "frames": [ { "icon": 5588, "text": "HELLO!" }, { "icon": 3061, "text": "マリオだよ!!" }, { "chartData": [ 1, 2, 3, 4, 5, 6, 7 ] } ] } }' \ http://<IPアドレス>/api/v2/device/notifications
ピカチュウとマリオのアイコンが順番に出てきて、最後にグラフが表示されれば成功です。

上記以外にも、多くのパラメータが用意されてます。興味のある人は、マニュアル(英語)を見ながら、イジってみるのがおすすめ。楽しいですよ。
電気使用量をLaMetricに表示させる方法【Python】
では完成イメージで紹介した電力使用量の表示をやっていきます。Pythonスクリプトを作成して実行しています。
おさらいですが、下記の3つの情報をLaMetricに表示させています。
- 今の使用量
- 1時間の使用量
- 1時間ごとのグラフ
▼まずは、完成形のPythonスクリプトです。下記をタップすると120行のコードが表示されます。
基本的には、スクリプト上部の6つのパラメータを自分の環境に合わせて、実行すればOKです。
処理内容は大きく3つ
- ①Remo Eで電力情報を取得
- ②電力情報を使った計算&グラフ作成
- ③LaMetricでメッセージ表示
それでは、順番に補足していきます。
Remo Eで電力情報を取得
まずは、スマートメーターから情報取得するために、Remo Eのパラメータ設定が必要です。
▼下記を参考に「APIキー発行」と「Remo Eがデバイスリストの何番目」かを調べてみてください。
▼スクリプトの1つ目の関数(smame_get)で電力情報を取得しています。
# Remo Eによるスマートメーター情報の取得 def smame_get(): url = 'https://api.nature.global/1/appliances' headers = {'Authorization': 'Bearer ' + REMOAPI, 'accept':'application/json'} appliances = requests.get(url, headers=headers).json() # 取得した電力データをdictに詰め替え(我が家の場合、7個目) list = appliances[REMOCNT]['smart_meter']['echonetlite_properties'] dict={} for item in list: key=item['name'] dict[key]=item['val'] # 返却 return dict

積算電力量の計算&グラフ作成
2つ目の関数(make_graph)では、1時間前と後で取得した積算電力量の差を使って、「1時間分の電気使用量」を算出しています。
また、LaMetric側に1時間ごと過去12時間の電力使用量グラフを表示させるために、リストへデータの入れ替えや保存をしています。
def make_graph(dict): #積算電力量計測値(正方向)(normal_direction_cumulative_electric_energy) normal_direction_cumulative_electric_energy = int(dict['normal_direction_cumulative_electric_energy']) # (初回起動のみ)前回の積算データ保存ファイルの存在チェック、なければ今回のマイナス1000 if(os.path.exists(ZENKAI_PKL)): with open(ZENKAI_PKL, "rb") as f: sekisan_zenkai = pickle.load(f) #読み出し else: sekisan_zenkai = normal_direction_cumulative_electric_energy - 1000 print('Sekisan_今回:' + str(normal_direction_cumulative_electric_energy)) print('Sekisan_前回:' + str(sekisan_zenkai)) with open(ZENKAI_PKL, "wb") as f: pickle.dump(normal_direction_cumulative_electric_energy, f) #保存 #係数(coefficient) coefficient = int(dict['coefficient']) #積算電力量単位(cumulative_electric_energy_unit) cumulative_electric_energy_unit = int(dict['cumulative_electric_energy_unit']) #「(⑥積算電力量計測値(正方向) × ①係数) ÷ (10 × ②積算電力量単位)」 sekisan = ((normal_direction_cumulative_electric_energy - sekisan_zenkai) * coefficient)*(0.1) print('sekisan:' + str(sekisan) + "kWh") # グラグ作成用データファイルの読み込み、なければ作成 if(os.path.exists(DATA_PKL)): with open(DATA_PKL, "rb") as f: sekisan_list = pickle.load(f) #読み出し else: sekisan_list = [0,0,0,0,0,0,0,0,0,0,0,0] del sekisan_list[0] sekisan_list.append(sekisan * 10) print(sekisan_list) # グラフデータの保存 with open(DATA_PKL, "wb") as f: pickle.dump(sekisan_list, f) #保存 return sekisan_list, sekisan

LaMetricでメッセージ表示
最後に、LaMetricに送信する情報を作成して、APIを実行します。こちらは事前にやったcurlコマンドの内容をPythonスクリプトにしただけです。
def lametric(sekisan_list, measured_instantaneous, sekisan): headers = { # Request headers 'Accept': 'application/json', 'Content-Type': 'application/json', } url = "http://"+LAMETRICIP+":8080/api/v2/device/notifications" body = { "model": { "frames": [ { "icon":"95", "text": str(measured_instantaneous) + "W" }, { "icon": 5588, "text": str(sekisan) + "kWh" }, { "chartData": sekisan_list } ], } }

▼Pythonでスクリプト実行!
$ python3 xxxxx.py
僕はラズパイを使って、このスクリプトを毎時0分に自動起動(クーロン)させてます。
ちなみに、うちは太陽光パネル載せてるのですが、日中の発電中は積算値が増えないため、電力使用量が0kWhになってしまいます。
「積算電力量計測値(逆方向)」を加味して、マイナスもグラフ反映させたいところですね。
最後に
LaMetric TimeやNature Remo Eを持っている人はぜひお試しください。電力の見える化は楽しいです。節電意識も高まります。
もう少し初心者でもわかりやすく、丁寧に書きたいところでしたが、少々雑になってしまいました。わからないところがございましたら、気軽にお問い合わせください。わかる範囲で答えます!