前回までで、EcoFlow IoT Developer Platform(開発者プラットフォーム)を利用してポータブル電源のリアルタイム情報の取得と、プログラム上から任意のタイミングで充電設定の変更が行えるところまでを行いました。
今回はプログラム上からNature Remo e liteを利用して、家のリアルタイム電力量を取得する方法について記載します。
Nature Remo e liteを利用することで、電力会社から電気を買っている状態なのか、それとも発電した電気が余っていて売電している状態なのか、がプログラム上からわかるようになります。
本ブログで紹介しているポータブル電源自動入電システムでは、卒FIT後の余剰電力の有効活用として、本来売電するはずだった電気をポータブル電源に自動で充電することを目的としているので、売電量を把握するためにNature Remo e liteは重要な機器となります。
ちなみにポータブル電源自動充電システムのシステム構成とメリット・デメリットについては、以下の記事で紹介しています。
Nature Remo e lite とは
Nature Remo e lite は家庭のコンセントに設置するだけで、スマホアプリでリアルタイムに家庭の電力消費量を見える化できる簡易的なHEMS機器です。
一見するとスマホアプリで電気の使用量を確認できるだけのように思えますが、Nature Remo e lite はプログラミング向けのAPI(Nature Remo Cloud API)も提供しています。
Nature Remo Cloud API を利用することで、家庭の余剰電力量をプログラム上から把握出来るようになるので、余剰電力(売電)がある場合だけポータブル電源の充電をONにするような制御が可能となります。
Nature Remo e lite は家庭に設置されている電力メーター(スマートメーター)から電力消費量を取得しています。
そのため買電量と売電量はわかりますが、太陽光発電システムとは連携しないため、発電量はわかりません。
ちなみに Nature Remo e lite の上位機種としてliteがつかない Nature Remo e もあります。
こちらは電力消費量の見える化、だけでなく対応する太陽光発電システムや蓄電池などと連携し、それぞれの機器をコントロールすることが出来るものとなっています。
本ブログで紹介しているポータブル電源自動入電システムでは、ここまでの機能は不要なためliteの方で十分ですが、Nature Remo e でも同様の事が可能だと思います。
Bルートサービスの利用申し込み
上記、Nature Remo e liteの公式ページにも記載がありますが、Nature Remo e liteを利用するためには、管轄の電力会社にBルートサービスの利用申し込みを行う必要があります。
Nature Remo e lite は家庭に設置されている電力メーター(スマートメーター)から電力量のデータを取得するのですが、この電力メーター(スマートメーター)から情報を取得するために必要なのがBルートサービスになります。
申し込みするだけで、無料で利用できます。
Bルート認証ID、パスワードを取得するには
remoe-support.nature.global
Bルートサービスの申込方法については上記のページに詳しく記載がありますが、基本的には申込書に記入の上、その申込書を各電力会社に郵送するかたちになります。
我が家の管轄は東北電力ですが、以下の利用申込書に記載し、郵送しました。
数日後、IDとパスワードが記載された封筒が送られてきます。
電力メーター情報発信サービス(Bルートサービス)利用申込書
東北電力 Bルートサービス
家庭で利用している電力メーターがアナログメーターの場合には、スマートメーターへの変更も必要です。
アナログメーターからスマートメーターへの交換も、電力会社の方で無料でやってもらえると思います。
NatureHomeアプリへの追加
Bルートサービスの利用登録が済んだら、スマホアプリへNature Remo e lite(スマートメーター)の登録が可能となります。
以下の画像を参考に操作し、BルートサービスのIDとパスワードを入力します。
その後はアプリの指示に従うことで追加できると思います。
私は本記事執筆時点で、既にNature Remo e lite(スマートメーター)を追加済みでしたので、以降の詳しい手順は失念してしまっていますが、確かWi-Fiの設定を行ったり、Nature Remo e lite本体との接続を行ったりする手順があったと思います。
NatureHomeアプリへのNature Remo e lite(スマートメーター)の追加が完了すると、以下のように家庭の電力消費量が見れるようになります。
リアルタイム電力量の取得
Nature Remo Cloud APIを利用することで、スマホアプリだけでなく、プログラム上から家庭の電力消費量を取得することがで出来ます。
リアルタイムの消費電力量だけでなく、積算の電力量なども取得できるようです。
本記事ではポータブル電源自動入電システムに必要な、リアルタイム電力量の取得方法を紹介します。
公式ドキュメント
まずは公式ドキュメントのページを確認してみましょう。
Nature Remo Cloud API
Nature Developer Page
Nature API (swagger)
Nature API 2.0.0 OAS3
上記の2つのドキュメントを整理すると、今回利用する家庭の電力量を取得するリクエストは以下の仕様となっています。
Key | Value |
HTTPヘッダー | Authorization: Bearer {TOKEN} |
ホスト | https://api.nature.global |
URL | {HOST}/1/appliances |
メソッド | GET |
リクエストパラメータ | なし |
アクセストークンの発行
上記の公式ドキュメントにも記載がありますが、Nature Remo Cloud API を利用するためにはアクセストークンを発行する必要があります。
アクセストークンの発行は、以下のNatureホームサイトから行います。
Natureホーム
home.nature.global
手順は以下の通りとなっています。
- Step1ログインメールの送信
上記のNatureホームにアクセスすると、メールアドレスを入力する画面が表示されます。
メールアドレスを入力し「ログインメールを送る」ボタンをクリックします。 - Step2ログインメール送信完了
サイトにログインするためのメールが送信され、完了画面が表示されます。
- Step3ログインメールからログイン処理を行う。
送られてきたメールを開き「ログイン」ボタンをクリックすることで、ログイン処理が行われます。
- Step4アクセス許可
アクセストークンを発行するための許可を行います。
問題なければ「許可する」ボタンをクリックします。 - Step5Natureホームサイトへの遷移
「Go」ボタンをクリックすると、ログインされた状態でNatureホームサイトに戻ります。
- Step6アクセストークンの発行
ログイン後のNatureホームサイトでは、アクセストークンの新規発行と、発行済トークンの削除が行えます。
「Generate access token」ボタンをクリックし、アクセストークンを発行します。
Google Apps Script(GAS)でコーディング
では実際にコードを書いてみましょう。
最終的なコードは以下になります。
function appliances() {
// ① トークンとリクエストURL
const token = "※Natureホームサイトで発行したアクセストークン";
const requestUrl = "https://api.nature.global/1/appliances";
// ② リクエストオプション
let requestOptions = {
"method": "GET",
"contentType": "application/json",
"headers": {
"Authorization": "Bearer " + token
},
"muteHttpExceptions" : true
};
// ③ API実行(Nature Remo Cloud APIへのリクエスト)
let response = UrlFetchApp.fetch(requestUrl, requestOptions);
// ④ 結果(レスポンス)を取得
let responseCode = response.getResponseCode();
let resJson = JSON.parse(response.getContentText());
let responseText = JSON.stringify(resJson, null, 2);
// ⑤ 結果(レスポンス)のログ出力
Logger.log("responseCode=" + responseCode);
Logger.log("responseText=" + responseText);
// ⑥ リアルタイム電力量の取得
let homeWatts = 0;
let buyWatts = 0;
let sellWatts = 0;
for (let properties of resJson[0].smart_meter.echonetlite_properties){
if (properties.name == "measured_instantaneous") {
homeWatts = properties.val;
if (homeWatts >= 0) {
buyWatts = homeWatts;
} else {
sellWatts = -homeWatts;
}
}
}
// ⑦ リアルタイム電力量のログ出力
Logger.log("homeWatts=" + homeWatts);
Logger.log("buyWatts=" + buyWatts);
Logger.log("sellWatts=" + sellWatts);
}
コードの解説
コードの内容をそれぞれ解説していきます。
// ① トークンとリクエストURL
const token = "※Natureホームサイトで発行したアクセストークン";
const requestUrl = "https://api.nature.global/1/appliances";
Nature Remo Cloud APIにリクエストするためのアクセストークンとURLを定義しています。
Natureホームサイトにて発行したアクセストークンをここに設定してください。
// ② リクエストオプション
let requestOptions = {
"method": "GET",
"contentType": "application/json",
"headers": {
"Authorization": "Bearer " + token
},
"muteHttpExceptions" : true
};
こちらはリクエストのオプション設定になります。
公式ドキュメントに従い、メソッドはGET、リクエストヘッダーにアクセストークンを設定しています。
他、以下の指定はおまけ程度です(とりあえず無くても動くと思います)
- muteHttpExceptions
trueを指定することで、HTTPリクエスト時のエラー(例外)を抑制するオプションです。
※すべての例外を抑制できるわけではないという事と、例外が発生しないだけでエラー処理が不要になる訳では無い(本来は適切にエラー処理が必要)というところは注意が必要です。
// ③ API実行(Nature Remo Cloud APIへのリクエスト)
let response = UrlFetchApp.fetch(requestUrl, requestOptions);
ここでは実際にAPI(Nature Remo Cloud APIへのリクエスト)の実行を行っています。
UrlFetchApp.fetch()を呼び出すことで、実際の通信が行われ、結果のレスポンスがresponse(変数)に格納されます。
// ④ 結果(レスポンス)を取得
let responseCode = response.getResponseCode();
let resJson = JSON.parse(response.getContentText());
let responseText = JSON.stringify(resJson, null, 2);
ここではHTTPステータスとAPIの実行結果レスポンスをそれぞれ変数に格納しています。
APIの実行結果レスポンスについては、ログ出力用の文字列の形式と、このあとリアルタイムの電力量を取得するためのJSONオブジェクトの形式で、それぞれ格納しています。
// ⑤ 結果(レスポンス)のログ出力
Logger.log("responseCode=" + responseCode);
Logger.log("responseText=" + responseText);
ここで一旦、HTTPステータスとAPIの実行結果をログに出力しています。
// ⑥ リアルタイム電力量の取得
let homeWatts = 0;
let buyWatts = 0;
let sellWatts = 0;
for (let properties of resJson[0].smart_meter.echonetlite_properties){
if (properties.name == "measured_instantaneous") {
homeWatts = properties.val;
if (homeWatts >= 0) {
buyWatts = homeWatts;
} else {
sellWatts = -homeWatts;
}
}
}
APIの実行結果から、家のリアルタイムの電力量を取得しています。
電力会社から電気を買っている場合には正(プラス)の値、逆にソーラーパネルで発電した電気が余っている(余剰電力がある ≒ 売電している)場合には負(マイナス)の値で取得できる仕様となっています。
具体的な取得方法は以下のドキュメントページに記載があります。
⑥の実装ではこのドキュメントに従ってリアルタイムの電力量を取得しています。
電力データ算出方法
Nature Developer Page
上記の「電力データ算出方法」のドキュメントから、リアルタイム電力量の取得方法を要約すると以下となります。
- APIのレスポンスにはsmart_meterというプロパティが存在し、smart_meter配下に格納さているデータから電力利用量などのデータを求めることができる。
- smart_meter配下にはechonetlite_propertiesという配列があり、それぞれ以下のキーで構成されている。
- name: string
- epc: integer
- val: string
- updated_at: time
- 今回取得したいリアルタイム電力量(瞬時電力計測値)は、以下に格納されている。
- name: measured_instantaneous
- ecp: 0xE7(231)
- 電力量はvalに格納されていて、単位はW(ワット)
買電(正方向)の場合は正値、売電(逆方向)の場合は負値となる。
// ⑦ リアルタイム電力量のログ出力
Logger.log("homeWatts=" + homeWatts);
Logger.log("buyWatts=" + buyWatts);
Logger.log("sellWatts=" + sellWatts);
⑥の手順で取得したリアルタイムの電力量をログに出力しています。
- homeWatts:
APIから取得したそのままの電力量になります。
買電(正方向)の場合は正値、売電(逆方向)の場合は負値が格納されています。 - buyWatts:
電力会社から電気を買っている場合には、ここに電力量が格納されます。
余剰電力がある(売電している)場合は0となります。 - sellWatts:
余剰電力がある(売電している)場合に、こちらに売電量が格納されます。
電力会社から電気を買っている場合は0となります。
コード実行
コーディングを行ったら、変更を保存(フロッピーのアイコンをクリック)してから実行してみてください。
以下のような結果がレスポンスとして返ってくると思います。
上記の画像では、電力量がマイナスの値なので、余剰電力がある状態で、1,553wの電力を電力会社に売電している事がわかります。
- Q実行時に「認証が必要です」「このアプリはGoogleで確認されていません」といったセキュティの警告が表示される場合は?
- A
Google Apps Script(GAS)では、プログラムの初回実行時などに「認証が必要です」や「このアプリはGoogleで確認されていません」といったセキュリティの警告が出ることがあります。
今回のソースコードでは、外部サービス(Nature Remo Cloud API)に接続しようとしているため、その外部サービスに接続して本当に大丈夫ですか?安全ですか?とGoogleから確認されている状態です。
あなた自身がソースコードを理解し、外部サービス(Nature Remo Cloud API)に接続して問題ないと判断したのであれば以下の手順に従って、プログラムの実行を承認(許可)してください。
脅すわけではありませんが、これはセキュリティ警告です。
記事に記載してあるソースコードを鵜呑みにせず、必ずご自身で理解し、問題ないことを確認の上で『承認(許可)』の操作をお願いします。
まとめ
お疲れ様でした。
これでプログラム上から任意のタイミングで家庭の電力消費量を取得することが出来るようになりました。
以前の記事で紹介したポータブル電源の充電設定をON/OFFする方法と組み合わせることで、Google Apps Script(GAS)で定期的に家庭の余剰電力量(売電量)を取得し、その結果に応じてAC充電のON/OFF、充電スピードの変更をするような制御が可能になります。
これで卒FITを意識したポータブル電源の自動充電システムを構築することが出来ると思います。
次回はスマートプラグ(スイッチボット)を利用して、ポータブル電源のパススルー問題を解決する方法を記載していければと思っています。