Itron Smartmeter per Infrarot und ESPHome auslesen

Hallo Community,

da wir dieses Thema nicht direkt gefunden haben und es da ein paar Fallstricke gab möchten wir hier einfach unsere Lösung mit euch teilen …

Ziel:

Auslesen eines Itron Smartmeters …

… per Infrarot-Schnittstelle und Einbindung in Home Assistant über ESPHome.

Lösung:

Hardware:

  • Schreib-/Lesekopf


    … in unserem Fall kommt dieser von Weidmann Elektronik.

    Erster Fallstrick: die Sende-Diode des Smartmeters ist die rechte, die RX-Diode des Schreib-/Lesekopfs ist die rechte (von hinten betrachtet mit Anschlusskabel nach unten). RX des Schreib-/Lesekopfs muss mit RX des Microcontrollers verbunden werden.
    Haben das zuerst versucht mit einer KI zu analysieren … wegen geht “schneller”, “effizienter”, … landeten aber mit den Hinweisen der KI komplett im Wald :wink:

  • ESP32

    … der übliche ESP32. In unserem Fall ein ESP32-WROOM-32.

ESPHome:

Die YAML Datei sieht bei uns wie folgt aus …

esphome:
  name: smartmeter
  friendly_name: Smartmeter
    
esp32:
  board: esp32dev
  framework:
    type: arduino
    
time:
  - platform: homeassistant
    id: current_time

logger:
  level: ERROR

wifi:
  ssid: "<your WLAN>"
  password: "<your password>"

ota:
  platform: esphome

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 9600

sml:
  id: sml_id

sensor:
  - platform: sml
    name: "Bezug Gesamt"
    id: "esphome_smartmeter_energy_consumed"
    obis_code: "1-0:1.8.0"
    unit_of_measurement: "kWh"
    accuracy_decimals: 2
    icon: "mdi:flash"
    filters:
      - multiply: 0.0001    

  - platform: sml
    name: "Einspeisung Gesamt"
    id: "esphome_smartmeter_energy_provided"
    obis_code: "1-0:2.8.0"
    unit_of_measurement: "kWh"
    accuracy_decimals: 2
    icon: "mdi:flash"
    filters:
      - multiply: 0.0001

  - platform: sml
    name: "Momentanleistung"
    id: "esphome_smartmeter_power_actual"
    obis_code: "1-0:16.7.0"
    unit_of_measurement: "W"
    accuracy_decimals: 0
    icon: "mdi:flash"
    internal: true
    on_value:
      then:
        - lambda: |-
            auto p = id(esphome_smartmeter_power_actual).state;
            id(esphome_smartmeter_power_provided).publish_state(p < 0 ? -p : 0);
            id(esphome_smartmeter_power_consumed).publish_state(p > 0 ? p : 0);

  - platform: template
    name: "Momentanleistung Einspeisung"
    id: "esphome_smartmeter_power_provided"
    unit_of_measurement: "W"
    accuracy_decimals: 0
    icon: "mdi:flash"
    lambda: return 0;
    update_interval: never

  - platform: template
    name: "Momentanleistung Bezug"
    id: "esphome_smartmeter_power_consumed"
    unit_of_measurement: "W"
    accuracy_decimals: 0    
    icon: "mdi:flash"
    lambda: return 0;
    update_interval: never
    
web_server:
  port: 80    

api:

Zu beachten hier ist/bzw. Fallstricke hier sind:

  • Bezug bzw. Einspeisung Gesamt müssen mit 0.0001 multipliziert werden, da sonst die Skalierung nicht stimmt
  • Unser Zähler hat keinen expliziten Kanel für die aktuelle Einspeisung, sondern liefert diese als negativen Wert. Wir nutzen folglich den aktuellen Verbrauchswert ausschliesslich innerhalb von ESPHome (internal: true) und splitten ihn via Template in “Momentanleistung Einspeisung” bzw. “Momentanleistung Bezug”, die dann innerhalb von Home Assistant sichtbar werden.
  • Um die Werte ausschliesslich bei einem Update zu senden, verwenden wir …
    on_value:
      then:
        - lambda: |-
            auto p = id(esphome_smartmeter_power_actual).state;
            id(esphome_smartmeter_power_provided).publish_state(p < 0 ? -p : 0);
            id(esphome_smartmeter_power_consumed).publish_state(p > 0 ? p : 0);

… dieser Teil hängt an dem vom Smartmeter bereitgestellten Wert und triggered den Update von “Momentanleistung Einspeisung” bzw. “Momentanleistung Bezug”.

Viel Spaß beim nachbauen :grinning_face:

Anleitungen sind immer gut, :+1: aber ich habe eine Frage: Warum hast Du den Weg per ESPHome gewählt und nicht per Tasmota? Weil die meisten User - incl. mir - nutzen zum auslesen eines Stromzählers per IR-Lesekopf ja Tasmota. Ist Dein Zähler nicht ein Itron eHZ-B und wenn ja sollte das auslesen und dann einbinden bei HA doch eigentlich auch mit einem einfachen IR-Lesekopf von Hichi oder bitShake und einem passenden Tasmota Script wie z.B.

>D
>B
=>sensor53 r
>M 1
+1,3,s,16,9600,Itron,1
1,77070100010800ff@1000,Verbrauch,kWh,E_in,3
1,77070100020800ff@1000,Einspeisung,kWh,E_out,3
1,77070100100700ff@1,akt. Leistung,W,Power,0
1,=h--
1,77070100600100ff@#,Zählernummer,,Wert,0
#

Oder ggf.

>D
>B
=>sensor53 r
>M 1
+1,3,s,0,9600,ELZ,1
1,77070100600100ff@#,Zählernummer,,Wert,0
1,77070100010800ff@1000,Verbrauch,kWh,ELZ_PV_1.8.0,1
1,77070100020800ff@1000,Erzeugung,kWh,ELZ_PV_2.8.0,1
#

Oder ggf.

>D
>B
=>sensor53 r
>M 1
+1,12,s,0,9600,ELZ
1,77070100600100ff@#,Zählernummer,,Wert,0
1,77070100010800ff@1000,Verbrauch,kWh,ELZ_PV_1.8.0,1
1,77070100020800ff@1000,Erzeugung,kWh,ELZ_PV_2.8.0,1
#

funktionieren. Zumindest findet man zu einem Itron eHZ-B solche Tasmota Scripte. Oder wolltest Du absichtlich ESPHome nehmen und eine mögliche Lösung per Tasmota hat Dich ggf. gar nicht interessiert?

VG Jim

1 „Gefällt mir“

Hallo @Jim_OS : Tasmota benötigt MQTT, korrekt? Bisher haben wir das nicht am Laufen … dazu kommt, dass bisher alle unsere Erweiterungen von Home Assistant auf ESPHome basieren. Wollten also einfach ein homogenes Environment aufrechterhalten :wink:
Trotzdem noch einmal Danke für deinen Hinweis.

Ach ja, vergaß zu erwähnen: die PIN am Smartmeter muss per “Morserei” abgeschaltet und “Inf” ebenfalls per “morsen” angeschaltet werden. Ansonsten klappt das Ganze nicht.

Ja wenn Du bisher nur ESPHome nutzt und die Zählereinbindung darüber funktioniert, dann macht es nicht wirklich Sinn sich nur für das auslesen des Zählers auch noch Tasmota zu installieren. :slightly_smiling_face:

Bei mir ist es eher anders herum, sprich aktuell nutze ich ESPHome nur noch für ein einziges Gerät und weil mir die vielen ESPHome Updates ziemlich auf den Keks gehen, :laughing: werde ich dieses eine Gerät dann demnächst wohl auch noch auf MQTT umstellen und mich von ESPHome dann kompl. verabschieden.

VG Jim