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
-
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”.
- In Home Assistant wird das Ganze nun so dargestellt …
Viel Spaß beim nachbauen ![]()



