以前の記事では蓄電池の充電時間を天気に応じて調整すると光熱費低減につながることが分かりましたが、天気予報を気にして毎日設定を変更するのは現実的ではありません。ニチコンによる自動制御もあるものの、自分の家の場合まだまだ精度は高くなかったので、自分でプログラム制御できないか探ってみることにしました。
以前の記事:
まずは真っ当な方法を調べる
国内の電気設備が連携する際には、たいがいECHONET Lite規格で通信しています。自宅のニチコン蓄電池ESS-T3FSもECHONET Lite準拠なので、まずはECHONET Liteでどういったことを制御できるか調べてみます。
オフィシャルウェブサイトで”ESS-T3″を検索すると、蓄電池関連でこちらのページが見つかります。
このページによれば、
- AIF仕様名:蓄電池・HEMSコントローラ間 Ver.1.10
- Appendixバージョン: Release K
などのことがわかります。また、この製品が蓄電池クラスで定義しているどのプロパティに対応しているかが「詳細情報」としてまとまっています。
この詳細情報を見ると、
- 蓄電残量の取得
- 運転動作状態の取得・変更
などができることがわかります。
ただ、残念ながら充放電時刻の設定は見当たりません。そもそも蓄電池・HEMSコントローラ間 Ver.1.10にそのようなプロパティが用意されていないようです。Release Kのドキュメントはもう少し詳しくプロパティの説明があるものの、載っているプロパティそのものには変化がありません。
というわけで、何か違う制御方法がないか調べることにしました。ニチコンのAI制御はネットワーク経由で設定変更できているわけで、何らかのやり方があるのではないかという淡い期待を抱きつつ…。
蛇足:
これらのドキュメントからわかるのは、ECHONET Liteとしては蓄電池というのはHEMSから指示を受けて充放電を行うユースケースを想定していて、自発的に充放電時刻を管理することは考えていなそうだということです。役割分担としては自分もこちらのほうが真っ当な気がしますが、パワコン単体として機能を成立させたいメーカーの思いも理解できます…。
ECHONET Liteで読めるプロパティを確認する
そもそもECHONET Liteで制御できるかわからないですが、はじめの一歩はデータをダンプするところから。
(参考)昔からこういうのよくやるので…
世の中にはいくつかECHONET Liteのライブラリが存在しますが、今回はnode.js向けのライブラリを使ってみることにします。プロパティ一覧が取得するというそのものズバリなサンプルコードがあったためです。
こちらのページにあるController demoを動かします。すると、elsとして以下のような情報が取得できます。
(前略)
DETAILs: {
'80': '30',
'81': '58',
'82': '00004b00',
(後略)
といった感じで、各プロパティの値が取得できていることがわかります。
上記の「詳細情報」にはプロパティが0xE6までしか規定されていないのですが、その後ろに0xF0, 0xF8, 0xF9, 0xFA, 0xFB, 0xFCのデータも表示されました。なんですかねこれは。
…こういう時は、充放電時刻をリモコン経由で変えてみて再度データを取得し、diffをとってみましょう。
結果、0xF8に以下のような差がありました。
- 充電時刻4:30 – 5:30, 放電時刻6:00 – 4:15:02041e051e0600040f
- 充電時刻4:40 – 5:30, 放電時刻6:00 – 4:15:020428051e0600040f
おっ、これは普通に2桁ずつ16進で時刻を表現してますね。
最初の02はよくわからなかったので、勘で蓄電池の動作モードを変えて試してみました。
- グリーンモード:充電時刻4:30 – 5:30, 放電時刻6:00 – 4:15
- 0xF0: 02
- 0xF8: 02041e051e0600040f
- 売電モード:充電時刻1:00 – 5:59, 放電時刻6:00 – 0:50
- 0xF0: 01
- 0xF8: 010100053b06000032
- 蓄電池充電モード:
- 0xF0: 03
- 0xF8: 010100053b06000032
なるほどなるほど。
- 0xF0: 動作モード(1:売電、2:グリーン、3:充電)
- 0xF8: {動作モード}{HH}{MM}{HH}{MM}{HH}{MM}{HH}{MM}
(動作モードがグリーンモードと売電モードの場合)
って感じでしょうか(V2Hがつながった時にどうなるかはわかりませんが)。
あとは、この情報が取得だけではなく、設定もできると良いのですが。ものは試し、やってみましょう。
充放電時刻(と動作モード)をECHONET Lite経由で指定する
sendOPC1を使って、蓄電池に対して0xF8の値をセットできるか試してみます。
const EL = require('echonet-lite');
var a = EL.sendOPC1('蓄電池のIPアドレス',[0x05,0xff,0x01],[0x02,0x7d],EL.SETI,0xf8,[0x02,0x04,0x1e,0x05,0x1e,0x06,0x00,0x04,0x0f]);
- ‘蓄電池のIPアドレス’は、実際のIPアドレスに置き換えます
- [0x05, 0xff, 0x01]は、コントローラからの指示であることを示しています
- [0x02, 0x7d]は、蓄電池クラスのオブジェクトコード
- EL.SETIは、プロパティ値書き込み要求(応答不要)
- 0xf8は、プロパティのEPCコード
- [0x02,0x04,0x1e,0x05,0x1e,0x06,0x00,0x04,0x0f]は、グリーンモードで充電時刻4:30 – 5:30, 放電時刻6:00 – 4:15
コードを実行してみたら、「ピッ」とリモコンから音がして、その時間に充放電時刻を変更できました。
ちなみに、[0x01,0x04,0x1e,0x05,0x1e,0x06,0x00,0x04,0x0f]にして送信すると、動作モードが売電モードに変更され、売電モードの充放電時刻も変更されました。
…というわけで、すんなりと充放電時刻と動作モードの変更が実現できてしまいました。
まとめ
ECHONET Liteの蓄電池クラスのプロパティには充放電時刻は存在しませんが、オブジェクトのプロパティを出力すると、0xF8が(動作モードと)充放電時刻を表現していることがわかりました。
そして、このプロパティは読み出すだけでなく、設定することもできることがわかりました。
次のステップは、翌日の天気予報をもとに充電時間を調整し、このプログラムを使ってその時間を設定することです。時間を作ってトライしてみようと思います。
(追記:やってみました!)
コメント
こんにちは。素晴らしい情報ですね。ありがとうございます。
私は、蓄電池は100%になったら携帯にアラート出せるような仕組みを作りたいです。(100%になったらテスラを充電する、V2H対応していないので面倒ですね)。
もし何か共有できる情報・プログラムなどがあれば是非教えてください。(RaspberryPIで動かせると良い!)