Da aktuell die meisten Projekte zum Auslesen von Stromzählern mit dem SML-Protokoll und ESP32/ ESP8266 aus Tasmota beruhen, hier mal meine Erfolgreiche Implementation mit ESPHome.
Ich habe mir die TTL-Version des Volkszählers auf eBay besorgt und mit einem Wemos D1 mini verbunden. Ground und Spannung kommen an die 5V und Ground vom ESP RX und TX-Leitungen des Volkszählers über kreuz an die RX/TX-Pins des ESP.
Hier sind meine YAML-Einstellungen um den Stromzähler auszulesen.
uart:
id: uart_bus
tx_pin: 1
rx_pin: 3
baud_rate: 9600
debug:
sml:
id: mysml
uart_id: uart_bus
sensor:
- platform: sml
name: "Total energy"
sml_id: mysml
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 0
device_class: energy
state_class: total_increasing
filters:
- throttle_average: 60s
Ich habe beim Suchen ein Beispiel gefunden, was die UART-Baudrate auf 300 hatte. Damit kamen im Debug-Log des ESP zwar ständig UART-Daten, aber keine dekodierten SML-Daten. Toll war aber, dass man sehen konnte, dass der Zähler etwas sendet. Beim Abnehmen des Sensors vom Zähler ist das UART-Log sofort ruhig geworden. Nach dem Umstellen auf 9600 Baud dekodierte er dann sofort die UART-Daten zu SML. Dann kann man auch sehen, welche OBIS-Codes der Zähler sendet. Das sieht dann bei mir so aus:
[16:40:14][D][sml:065]: OBIS info:
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:96.50.1 [0x12345]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:96.1.0 [0x013124234]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:1.8.0 [0x31ba]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:0.2.0 [0x31234345]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:96.90.2 [0xa90a]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:97.97.0 [0x0000]
[16:40:14][D][sml:071]: (0a014546521901d94a67) 1-0:96.50.1 [0x12345677898]
Mit dieser Info kann man dann auf der Tasmota-SML-Seite nachschauen, ob die einzelnen OBIS-Werte nützlich sind. Leider gibt mein Zähler nicht die aktuelle Wirkleistung aus. Hier muss ich mir wohl noch die PIN meines Zählers von meiner Netzgesellschaft holen.
Mein ESP8266 hängt aktuell an einer Powerbank, da ich keine Steckdose in der Nähe des Zählers habe. Mal sehen wie lange das hält.
Update
Nach einer Woche kam jetzt die PIN für meinen Stromzähler. Durch das aktivieren des erweiterten Modus bei meinem Stromzähler tauchte nun auch die aktuelle Wirkleistung auf. Das ist echt toll. Auch der Zählerstand hat plötzlich drei Nachkommastellen. Das führte dazu, dass ich nach der Umstellung die Wert nochmal anpassen musste.
uart:
id: uart_bus
tx_pin: 1
rx_pin: 3
baud_rate: 9600
debug:
sml:
id: mysml
uart_id: uart_bus
sensor:
- platform: sml
name: "Total energy"
sml_id: mysml
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 3
device_class: energy
state_class: total_increasing
filters:
- multiply: 0.0001
- throttle_average: 300s
- platform: sml
name: "Current Power"
sml_id: mysml
obis_code: "1-0:16.7.0"
unit_of_measurement: W
accuracy_decimals: 0
device_class: power
state_class: measurement
- platform: sml
name: "Current Voltage"
sml_id: mysml
obis_code: "1-0:32.7.0"
unit_of_measurement: V
accuracy_decimals: 1
device_class: voltage
state_class: measurement
filters:
- multiply: 0.1
- platform: sml
name: "Current Current"
sml_id: mysml
obis_code: "1-0:31.7.0"
unit_of_measurement: A
accuracy_decimals: 2
device_class: current
state_class: measurement
filters:
- multiply: 0.01
- platform: sml
name: "Current Frequency"
sml_id: mysml
obis_code: "1-0:14.7.0"
unit_of_measurement: Hz
accuracy_decimals: 3
device_class: frequency
state_class: measurement
filters:
- multiply: 0.1