JavaScriptを有効にしてください

BルートをHome Assistantで動かす

 ·   ·  ☕ 3 分で読めます

あらすじ

Bルートをお手製ハードウェア・ソフトウェアで受信している方々は、コンソールでそのまま読んだり、M5Stackに送信したり、Mackerelに送信したりと様々な方法で統計を取ったり閲覧したりしているようです。
しかしながら我が家ではHome Assistantというオープンソースのスマートホーム実装が動作しており、電力管理もビルトインされているので、使わない手はありません。
ということで、今回はBルートをHome AssistantのEnergy等に連携させてみたいと思います。

1. Bルートの申込みをする

例えば東京電力の管轄内であれば、電力自由化で別の事業者と契約していても一律で東京電力パワーグリッドに申し込みをします。
ちなみにこの項目はどうやら「電気工事店さま・電気主任技術者さま」の欄にあるようです。流石に個人でWi-SUNを喋り始める人は想定されていないようですね…(汗

2. templateとwebhookを用いてデータの受け入れができるようにする

HomeAssistant側のconfiguration.yamlに以下のような記述を追加し、データソースとしてBルートを使えるようにします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
template:
  - trigger:
      - platform: webhook
        webhook_id: webhook_id_you_prefer
    sensor:
      - name: "積算電力計測値"
        state: "{{ trigger.json.kwh }}"
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: kWh
      - name: "瞬時電力計測値"
        state: "{{ trigger.json.wattage }}"
        device_class: power
        unit_of_measurement: W

jsonのkey名やnameはかなり適当なので、webhook_idと合わせていい感じに変えてください。

3. データを取得する

先人の知恵を借りて、データを取得します。
ただし、MB-RL7023-11(秋月の例の基板にも搭載されている)を使っている人は、プログラムを改変する必要があります。
Qiitaの記事では瞬時電力値を計測していますが、他にどのような値を取得できるかは、APPENDIX ECHONET機器オブジェクト詳細規定の"低圧スマート電力量メータクラス規定"に記載されています。例えば、積算電力量計測値が欲しい場合は、コマンドフレーム末尾あたりの\xE7\xE0に差し替えます。
他の方が詳しい解説をしてくださっているので、そちらも参考にしてください。

4. WebhookへPOSTする

ここまでできたらあとはそのデータを数値としてPOSTするだけです。
例えば、Pythonのrequestsを使ってPOSTする場合は以下のようになります。

1
requests.post("https://hass.your.domain/api/webhook/your_webhook_id", json={"kwh": kwh, "wattage": wattage})

jsonのkey名を変更した場合は、コードも同様に変更してください。

5. Profit

ここまでくれば、Home Assistantの「エネルギー」タブで「積算電力計測値」が設定できるようになっているはずです。
煮るなり焼くなりしましょう。
「瞬時電力計測値」はダッシュボードにゲージカードとして追加しておくと現在の状況がわかりやすく良いと思います。

Future Work

  • 少なくとも私が契約している電力小売業者は段階制の料金を採用しており、単純計算ができません。ということで、電気料金を表示するにはうまいこと段階制の料金を計算してあげる必要があります。
  • 上のような電気料金の計算をするときに、月初からの積算電力を取得できると良いですね。
  • 通信状況等によっては結果取得が遅れたり前後することがあり、そういった状況ではプログラムが落ちることがあります。また、セッション切れもあり得るので、そういった状況を想定したプログラムに修正する必要もあります。
共有

hayabusa2yk
著者
hayabusa2yk
Dev/Admin of servers