ニチコン蓄電池の充放電時刻をプログラム経由で自動設定する

IoT

以前の記事では蓄電池の充電時間を天気に応じて調整すると光熱費低減につながることが分かりましたが、天気予報を気にして毎日設定を変更するのは現実的ではありません。ニチコンによる自動制御もあるものの、自分の家の場合まだまだ精度は高くなかったので、自分でプログラム制御できないか探ってみることにしました。

以前の記事:

スポンサーリンク

まずは真っ当な方法を調べる

国内の電気設備が連携する際には、たいがい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で制御できるかわからないですが、はじめの一歩はデータをダンプするところから。

(参考)昔からこういうのよくやるので…

CANUSBを使ってRX-8の各種データを取り出してみる
前回のエントリまで使っていたELM327チップですが、どうも全てのデータのログを取ろうとするとバッファが溢れてしまうようで...。ただせっかく乗りかかった船なので、CANUSBという代物を購入してRX-8のデータをリアルタイムに取り出してみることにしました。 上記の画像においてグラフの意味は以下の通りです。 赤 線:車速 青 線:エンジン回転数 紫 線:ラジエータ水温 水色線:エアインテーク温度 黄色線:アクセル開度 赤領域:フットブレーキを踏んでいる 青領域:クラッチが切れている 緑領域:(高さに合わせて)ギアポジション CANはまぁここでは車内LANのようなものだと考えておけばいいと思います。自動車内のコンピュータとその他センサや計器類との間で情報をやり取りするときのプロトコルなのですが、特徴の一つはブロードキャストだということです。 なので、OBD-IIのようにポーリングしてデータを取り出すのと違い、ネットワーク内を流れているデータであれば「盗み聞き」することができるため、車内コンピュータへの負荷が(おそらく)ありません。 コンピュータに負荷がかかった場合にもおそらくフェイルセー...

世の中にはいくつかECHONET Liteのライブラリが存在しますが、今回はnode.js向けのライブラリを使ってみることにします。プロパティ一覧が取得するというそのものズバリなサンプルコードがあったためです。

GitHub - Hiroshi-Sugimura/echonet-lite.js: This project is creating npm module for providing ECHONET Lite API.
This project is creating npm module for providing ECHONET Lite API. - GitHub - Hiroshi-Sugimura/echonet-lite.js: This project is creating npm module for providing ECHONET Lite API.

こちらのページにある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が(動作モードと)充放電時刻を表現していることがわかりました。

そして、このプロパティは読み出すだけでなく、設定することもできることがわかりました。

次のステップは、翌日の天気予報をもとに充電時間を調整し、このプログラムを使ってその時間を設定することです。時間を作ってトライしてみようと思います。

(追記:やってみました!)

コメント

タイトルとURLをコピーしました