Wir haben endlich unsere Solaranlage auf dem Dach. Alles funktioniert bestens. Auch die Anzeige am Stromzähler ist immer korrekt. Aber sobald größere Mengen ins Netz nach draußen gehen, stimmt die Momentananzeige in HA nicht mehr. Kleinere Werte werden sauber mit einem Minus dargestellt. Bei großen Werten (also 1kW und mehr) sind es über 115.000W die da in HA angezeigt werden. Da die Anzeige am Zähler ja korrekt ist, muss es meiner Meinung nach am Sensor liegen. Ich benutze einen ESP01s mit einem IR-Transistor und ESPhome.
Mein Verdacht geht ja in Richtung Integer in ESPhome.
Hat hier jemand vielleicht eine Idee?
Thomas
Hallo,
liest du über SML aus oder zählst du nur die Impulse des Zählers?
Ich lese mittels SML aus.
Das Script ruft alle OBIS-Codes ab, die der Zähler liefert.
# letzter Zählertstand: input_number.zaehlerstand_letze_abrechnung
# GPIO2 als UART für IR-Transistor
esphome:
name: stromzaehler
friendly_name: Stromzähler
esp8266:
board: esp01_1m
logger:
level: WARN
# Enable Home Assistant API
api:
# OTA zum Einslielen von Updates per WLAN
ota:
- platform: esphome
# WLAN
wifi:
networks:
- ssid: !secret secret_wifi_ssid1
password: !secret secret_wifi_password1
- ssid: !secret secret_wifi_ssid2
password: !secret secret_wifi_password2
manual_ip:
static_ip: .....
gateway: .....
subnet: .....
dns1: .......
# Fallback-Hotspot, wenn kein WLAN
ap:
ssid: .........
password: .........
captive_portal:
# eigene Weboberfläche zur Anzeige
web_server:
port: 80
ota: False
include_internal: True
time:
- platform: homeassistant
id: homeassistant_time
external_components:
- source: github://alengwenus/esphome_components@main
refresh: 0s
components: [sml]
# IR-LED an GPIO2
uart:
rx_pin: GPIO2
baud_rate: 9600
data_bits: 8
parity: NONE
stop_bits: 1
# SML aktivieren
sml:
id: mysml
# Sensordaten
sensor:
# Zählerstand letzte Abrechnung
- platform: homeassistant
id: zstandabrech
name: "Zählerstand letzte Abrechnung"
entity_id: input_number.zaehlerstand_letze_abrechnung
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
state_class: total_increasing
# Verbrauch total
- platform: sml
name: "Zählerstand"
sml_id: mysml
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
state_class: total_increasing
id: energieverbrauch_total_kwh
filters:
- multiply: 0.0001
# Verbrauch seit letzter Abrechnung
- platform: sml
name: "Verbrauch seit letzter Abrechnung"
sml_id: mysml
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
state_class: total_increasing
id: energieverbrauch_abrzeitraum_kwh
filters:
# alter Zählerstand in HA gespeichert
- lambda: 'return (0.0001 * x)-id(zstandabrech).state;'
# Momentanverbrauch
- platform: sml
name: "aktuelle Leistung"
sml_id: mysml
obis_code: "1-0:16.7.0"
unit_of_measurement: W
accuracy_decimals: 2
device_class: power
state_class: measurement
id: energieverbrauch_aktuell_w
filters:
- multiply: 0.01
# Einspeisung aus Photovoltaik
- platform: sml
name: "Einspeisung total"
sml_id: mysml
obis_code: "1-0:2.8.0"
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
id: einspeisung_total_kwh
state_class: total_increasing
filters:
- multiply: 0.0001
text_sensor:
- platform: sml
name: "Zählertyp"
sml_id: mysml
obis_code: "1-0:96.50.1*1"
format: text
Es geht um den Momentanverbrauch. Wenn aus dem Netz bezogen wird, stimmt der Wert. Und wenn die Einspeisung ins Netz relativ niedrig ist, stimmt der Wert auch. Aber sobald die Einspeisung in den kW-Bereich geht, weil der Akku voll ist und weder Waschmaschine, noch Herd eingeschaltet ist, stehen extrem hohe Zahlen da. Ich habe schon gerechnet, ob da was mit int und long nicht stimmen könnte, aber das passt auch nicht, wenn ich größere negative Zahlen als uint32_t oder uint64_t interpretiere. Ich habe auch schon den Maximalwert für uint32_t genommen und den Betrag abgezogen. Auch das passt nicht.
Da der Totalverbrauch am Tag aus dem Momentanverbrauch berechnet wird, stimmt der natürlich auch nicht, da hohe Einseisungen als Verbrauch gezählt werden.
Geliefert wird ein “Rohwert” ohne Nachkommastellen. also 100,00W kommen als 10000 an, ohne das Komma. Wenn ich dann den Rohwert für-4500,00W betrachte, komme ich auf -450000. Da ist eigentlich bei int32_t noch viel Luft nach oben.
Wie sehen denn deine “Log´s” aus, während die Porbleme auftreten und wie sehen die aus, wenn alles in Ordnung ist?
Eigentlich sollte der Zähler die el. Arbeit als kWh mit 4 Stellen hinter dem Komma ausgeben (zumindest ist das bei meinem Zähler (Hager EHz361) so. Dann müsstest du auch nicht umrechnen (x0,0001).
Momentan gehen laut Wechselrichter ca. 1240W raus ins Netz. Das passt aber in keinster Weise zum Sensorwert.
Auszüge aus der Log:
[18:17:33][D][sml:071]: (1DZG…) 1-0:16.7.0*255 [0xfe881a]
[18:17:33][W][component:237]: Component sml took a long time for an operation (106 ms).
[18:17:33][W][component:238]: Components should block for at most 30 ms.
…
[18:17:34][D][sensor:093]: ‘aktuelle Leistung’: Sending state 166809.31250 W with 2 decimals of accuracy
[18:17:34][D][sensor:093]: ‘aktuelle Leistung X’: Sending state 16680932.00000 W with 0 decimals of accuracy
Der Hex-Wert aus der sml-Zeile passt aber zum anzeigten Dezimalwert. Also kommt es schon irgendwo falsch her. Ist nur die Frage, woher. Liefert der Zähler einen falschen Wert oder macht die Firmeware den Unfug beim Verarbeiten der übertragenen Werte? Wie bekommt man das heraus?
Bei der Leistung mit dem X hinten dran, habe ich einfach auf den Filter mit der Division und auf die Begrenzung der Kommastellen verzichtet. Das ist quasi der Rohwert, wenn ich nichts rechne. Beim Totalverbrauch ist es analog. Ich muss also Umrechnen, wenn ich einen vernünftigen Wert haben möchte.
… ist das Zufall, oder System?
In der ersten Zeile von 18:17:34 steht am Ende 1250W, das wäre ja nicht weit weg von der Wechselrichterangabe!
Was soll dann der Rest von dieser Zahl?
Das ist momental aktuell:
[20:55:14][D][sml:071]: (1DZG…) 1-0:16.7.0*255 [0x01ca]
[20:55:14][W][component:237]: Component sml took a long time for an operation (105 ms).
[20:55:14][W][component:238]: Components should block for at most 30 ms.
[20:55:15][D][sensor:093]: ‘aktuelle Leistung’: Sending state 0.42000 W with 2 decimals of accuracy
[20:55:15][D][sensor:093]: ‘aktuelle Leistung X’: Sending state 42.00000 W with 0 decimals of accuracy
Der Wert ist klein genug, so dass er korrekt angezeigt wird.
Ich habe das Gefühl dass es mit großen negativen Beträgen zusammenhängt.
Die Frage ist nur, ob der Zähler den Mist sendet oder ob die Firmeware spinnt.