Das ist Unfug, SML ist ein Standard und jeder Stromzähler mit IR-Schnittstelle gibt die Daten gemäß diesem Protokoll aus. Teilweise muss man sich den Code vom Netzbetreiber geben lassen um alle Daten des Zähler freizuschalten. Der Netzbetreiber ist verpflichtet den Code rauszugeben.
Ein Shelly oder ein Smartmeter hat immer eine Abweichung gegenüber dem Stromzähler und muss zusätzlich eingebaut werden, Der Stromzähler ist einfach immer vorhanden.
Das stimmt nicht. Ist auch technisch nicht möglich.
Perplexity:
Die Zeit, die ein Shelly benötigt, um über WLAN einen Wechselrichter abzuregeln oder zu steuern, liegt typischerweise im Bereich von wenigen Sekunden bis zu maximal etwa zwei Minuten – abhängig von den Einstellungen und den verwendeten Szenen für die Automatisierung.
…
Empfohlene Einstellungen
Verzögerungszeit von 1–2 Minuten, um unnötiges Schalten zu verhindern.
Schnelle Reaktion technisch möglich, jedoch aus Gründen der Netz- und Gerätstabilität meist verzögert eingestellt.
Kurz gesagt: Ein Shelly kann einen Wechselrichter typischerweise innerhalb von 1–2 Minuten über WLAN abregeln, wobei die Verzögerung meist auf automatisierte Szeneneinstellungen zurückzuführen ist, nicht auf das WLAN selbst.
Vielleicht ein Grund, doch auf einen Lesekopf zu wechseln? Hab kein Shelly sondern “Hichi” (Lesekopf, Volkszähler Projekt). Der kann nichts steuern, sondern nur die Messungen des Zählers “übersetzten”, in mein WLAN “morsen” und das im Sekundentakt. Die openDtu (ESP32) wertet dann aus und regelt den WR (Hoymiles) an die “Null” oder einen anderen einstellbaren Wert heran. Das dauert im Regelfall 2 Sekunden, machmal auch 10 bis 20 Sekunden, wenn es zu Verbindungsstörungen kommt.
Regelungen über Funknetze sind immer problematisch und nicht wirklich zuverlässig.
Der ESP32 bietet noch eine weitere Serial-Schnittstelle mit RS485 Pegelwandler (ca. 2 Eur) kann man ModBus machen. Auch kann der ESP32 eine CAN-Schnittstelle (Pegelwandler auch so 2-3 Eur) und man hat eine robuste Übertragung mit Latenzzeiten von 100-200 msec.
Also eine sinnlose Investition. Ich brauche einen int Wert der proportional zu Leistung ist.
Das scheint ja ein riesiges Problem zu sein, dass es da nach 3 Jahren weder einen Sketch noch eine lib für gibt. Aber bitte sollen die Nerds ihr Wissen mit ins Grab nehmen. Es geht auch mit Stromwandlern und Analogeingang am nano. Ich frage dann in 3 Jahren nochmal nach.
Habe Perplexity gefragt. Hat mir einen Sketch zum Auslesen des Datenstroms gegeben.
Den werde ich mit einem IR-Empfänger IC Testen. Ob das Signal die richtige polarität hat, wird man sehen. Wenn ich Daten bekomme, lasse ich mir den nächsten Schritt erklären.
Sicherlich sind Kabel zuverlässiger, doch der Hoy WR hat keine “Buchse”. Den erreicht man nur per Funk, entweder 865 MHz oder 2 GHz. Da beist die Maus kein Faden ab. Der Rest geht ins heimische WLAN, das recht stabil läuft.
Es dauert ganz sicher keine Minuten. Der Shelly regelt bei meiner Anlage auch nichts sondern gibt nur den aktuellen Wert über HTTP-API an den ESP (Wechselrichter) und über MQTT an den Raspberry Pi (Ladegerät) weiter und die regeln schnell über Kabel nach.
Was ist das für ein Wert? Brauchst du eine Spannung, die analog zur Leistung ist? Der ESP hat 2 Digital-Analog Ausgänge (allerdings nur 8 Bit). Damit sollte es in 256 Stufen gehen.
Das hört sich aber auch richtig interessant an. Wo kann ich mir was dazu angucken? Das würde mich interessieren.
Ich muss auch fairerweise dazu sagen, dass meine Funktion, “Laden nach Bewölkungsvorhersage”, nur an relativ wenigen Tagen im Jahr zum Tragen kommt. Nämlich von Oktober bis Februar, immer wenn dann doch mal die Sonne zum Vorschein kommt. Aber wie man in meinem YouTube Video sieht, ist das doch öfter als man erstmal vermuten würde.
Ich glaube, dass mein System recht generisch verwendet werden kann, also eine Lösung für alle bietet, da jeder z.B. die individuellen “Zusatzkosten” (Netzentgelte, Marge) seines Stromanbieters (dynamischen Stromtarif) leicht auf den Nettopreis pro kWh, aufschlagen kann. Um so zu entscheiden, welchen Preis (netto) trage ich fürs automatische Laden und welchen Preis für das Entladen in den Einstellungen des Speichers ein. Mehr muss ich ja nicht tun.
Auch die nächste Wetterstation (also der eigene Wohnort) wird einmal im System eingetragen. Wie das im Detail geht, wird im nächsten Video erklärt.
Ich hoffe, ich konnte das jetzt halbwegs verständlich rüber bringen
Die Stromzähler mit IR-Schnittstelle und SML-Protokoll liefern das. Hier meine Datenausgabe meiner beiden Stromzähler ausgelesen über die IR-Schnitstelle und über USB ausgegeben mit Timestamp
09:48:10.916 -> meter1_Rx_Task receive 468
09:48:10.961 -> == Meter 1 ==
09:48:10.961 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:10.961 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:10.961 -> Power T1+T2 (1-0:1.8.0).......: 437769.922 Wh
09:48:10.961 -> Power T1 (1-0:1.8.1).......: 0.000 Wh
09:48:10.961 -> Power T2 (1-0:1.8.2).......: 437769.922 Wh
09:48:10.961 -> Power Deliver (1-0:2.8.0).......: 7713262.875 Wh
09:48:10.961 -> Actual Power (1-0:10.7.0)......: -318.83 W
09:48:10.961 -> Voltage_L1 (1-0:20.7.0)......: 239.70 V
09:48:10.961 -> Voltage_L2 (1-0:34.7.0)......: 234.50 V
09:48:10.961 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:11.008 -> Owner number (1-0:0.0.0).......: 1ESY1163257394
09:48:11.008 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:11.008 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x01 0x00 0xC1
09:48:11.008 ->
09:48:11.240 -> meter2_Rx_Task receive 468
09:48:11.240 -> == Meter 2 ==
09:48:11.240 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:11.240 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:11.240 -> Power T1+T2 (1-0:1.8.0).......: 286440.945 Wh
09:48:11.240 -> Power T1 (1-0:1.8.1).......: 1.030 Wh
09:48:11.286 -> Power T2 (1-0:1.8.2).......: 286439.915 Wh
09:48:11.286 -> Power Deliver (1-0:2.8.0).......: 17069155.930 Wh
09:48:11.286 -> Actual Power (1-0:10.7.0)......: -2417.52 W
09:48:11.286 -> Voltage_L1 (1-0:20.7.0)......: 239.80 V
09:48:11.286 -> Voltage_L2 (1-0:34.7.0)......: 234.60 V
09:48:11.286 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:11.286 -> Owner number (1-0:0.0.0).......: 1ESY1163257400
09:48:11.286 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:11.286 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x07 0x00 0xC1
09:48:11.286 ->
09:48:11.938 -> meter1_Rx_Task receive 468
09:48:11.938 -> == Meter 1 ==
09:48:11.938 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:11.938 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:11.938 -> Power T1+T2 (1-0:1.8.0).......: 437769.922 Wh
09:48:11.938 -> Power T1 (1-0:1.8.1).......: 0.000 Wh
09:48:11.982 -> Power T2 (1-0:1.8.2).......: 437769.922 Wh
09:48:11.982 -> Power Deliver (1-0:2.8.0).......: 7713262.963 Wh
09:48:11.982 -> Actual Power (1-0:10.7.0)......: -319.05 W
09:48:11.982 -> Voltage_L1 (1-0:20.7.0)......: 239.90 V
09:48:11.982 -> Voltage_L2 (1-0:34.7.0)......: 234.70 V
09:48:11.982 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:11.982 -> Owner number (1-0:0.0.0).......: 1ESY1163257394
09:48:11.982 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:11.982 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x01 0x00 0xC1
09:48:11.982 ->
09:48:12.261 -> meter2_Rx_Task receive 468
09:48:12.261 -> == Meter 2 ==
09:48:12.261 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:12.261 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:12.261 -> Power T1+T2 (1-0:1.8.0).......: 286440.945 Wh
09:48:12.261 -> Power T1 (1-0:1.8.1).......: 1.030 Wh
09:48:12.261 -> Power T2 (1-0:1.8.2).......: 286439.915 Wh
09:48:12.261 -> Power Deliver (1-0:2.8.0).......: 17069156.600 Wh
09:48:12.261 -> Actual Power (1-0:10.7.0)......: -2409.81 W
09:48:12.261 -> Voltage_L1 (1-0:20.7.0)......: 239.80 V
09:48:12.261 -> Voltage_L2 (1-0:34.7.0)......: 235.00 V
09:48:12.308 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:12.308 -> Owner number (1-0:0.0.0).......: 1ESY1163257400
09:48:12.308 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:12.308 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x07 0x00 0xC1
09:48:12.308 ->
09:48:12.958 -> meter1_Rx_Task receive 468
09:48:12.958 -> == Meter 1 ==
09:48:12.958 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:12.958 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:12.958 -> Power T1+T2 (1-0:1.8.0).......: 437769.922 Wh
09:48:12.958 -> Power T1 (1-0:1.8.1).......: 0.000 Wh
09:48:12.958 -> Power T2 (1-0:1.8.2).......: 437769.922 Wh
09:48:12.958 -> Power Deliver (1-0:2.8.0).......: 7713263.052 Wh
09:48:12.958 -> Actual Power (1-0:10.7.0)......: -318.30 W
09:48:12.958 -> Voltage_L1 (1-0:20.7.0)......: 239.70 V
09:48:12.958 -> Voltage_L2 (1-0:34.7.0)......: 234.80 V
09:48:13.005 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:13.005 -> Owner number (1-0:0.0.0).......: 1ESY1163257394
09:48:13.005 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:13.005 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x01 0x00 0xC1
09:48:13.005 ->
09:48:13.238 -> meter2_Rx_Task receive 468
09:48:13.238 -> == Meter 2 ==
09:48:13.238 -> Manufacture ident (81-80:C7.82.03)..: ESY
09:48:13.238 -> Server - ID (1-0:0.0.9).......: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09:48:13.238 -> Power T1+T2 (1-0:1.8.0).......: 286440.945 Wh
09:48:13.238 -> Power T1 (1-0:1.8.1).......: 1.030 Wh
09:48:13.283 -> Power T2 (1-0:1.8.2).......: 286439.915 Wh
09:48:13.283 -> Power Deliver (1-0:2.8.0).......: 17069157.267 Wh
09:48:13.283 -> Actual Power (1-0:10.7.0)......: -2401.36 W
09:48:13.283 -> Voltage_L1 (1-0:20.7.0)......: 239.90 V
09:48:13.283 -> Voltage_L2 (1-0:34.7.0)......: 235.00 V
09:48:13.283 -> Voltage_L3 (1-0:48.7.0)......: 240.70 V
09:48:13.283 -> Owner number (1-0:0.0.0).......: 1ESY1163257400
09:48:13.283 -> Meter type (81-81:C7.82.08)..: EasyM60-B-2T-MZ-2R-WS3-Base
09:48:13.283 -> Meter config (81-80:C7.F0.06)..: 0x0F 0x07 0x00 0xC1
Unter der SML-Kennung 1-0:10.7.wird die aktuelle Leistung ausgegeben. Im Datenstrom ist das ein Signed-Integerwert und auch wo das Komma sitzt ist im SML-Protokoll speziziziert. Das Minuszeichen besagt liefern und Plus entsprechend Bezug. Zur Übertragung auf der USB habe ich es in ASCII konvertiert.
Am Timestamp kann mann ablesen, es kommt alle Sekunde.
Ich habe mir erlaub die Server-ID auszuixen.
Im lokalen Internet kann ich das für mich wesentliche abfragen und das sieht dann so aus:
Elektrik Status 2025.09.20 10:03 S
Haus rein 437kWh raus 7713kWh actuell -316W
Voll rein 286kWh raus 17069kWh actuell -2513W
Ich denke, wenn man die Daten alle sekunde hat braucht es keine weiteren Geräte.
Und es geht ohne in die Elektrik einzugreifen ohne zusätzliche Abweichung durch die Tolleranz anderer Geräte.
Es wird genau mit der Meßgröße gearbeitet die der Netzbetreiber zur Abrechnung nutzt.
Ich habe mal in deine HEX daten reingeschaut. Ich kann dir sagen, da stimmt was nicht. Was nicht stimmt kann ich dir leider nicht sagen.
In den HEX Daten müssten irgendwo 4x 0x1B zu finden sein, das ist nicht der Fall.
Deine C-Code würde ich um einen Punkt erweitern und zwar mit dem SmlSerial.available eine Zeit einlesen und wenn die Zeit zwischen zwei Daten größer z.B. 5-10msec ist eine Leerzeile einfügen und von vorne anfangen.Dadurch bekommst du schon mal mit wann einen Datensatz anfängt.
Was mich auch stutzig macht ist das dein Lesekopf oben auf dem Stromzähler ist. Normal ist die SML-Schnittselle auf der Frontseite und es sind 2 Dioden nebeneinander (siehe Bild)
6.1 Aufbau der Datentelegramme für OD-Typen: Telegramm Mode D: Format: fürSM-Typen: Format: nach DIN EN 625056-21 (für OD-Typen) 9600 Baud (Z=5); (7,even, 1)
Und ich habe natürlich die OD-Type. Das bedeutet, die Software kann 7E1 nicht dekodieren und ich muss über den RX Pin am Nano gehen. Das hat weitreichende Folgen. So benötige ich einen Schalter in der Leitung vom Lesekopf und ich muß eine andere app für den Monitor haben.
Dafür habe ich Realterm aufgespielt. Beim Laptop muss ich das noch. Die Hardware musste ich um einen PNP-Transistor erweitern, da ich einen 1K Pullup auf dem Nano bedienen muss.
Bevor ich mit einem Nano einen Workaround basteln würde, würde ich schauen ob ich mir einen Mega oder einen ESP32 hole. Nebenbei die ESP32 kosten etwa das Gleich wie ein Nano beim Chinesen deines Misstrauens.
Nachtrag, ich habe noch ein Papier gefunden in welchem der Aufbau von SML niedergeschrieben ist.
Und den Zähler bekommst Du mit Plösch und esp auch nicht ausgelesen, weil die SoftwareSerial kein 7E1 kann.
Was ich noch versuchen kann ist, das Signal vom Lesekopf zu invertieren.
Immerhin ist am RX eigentlich dauerhaft ein HIGH Pegel und kein LOW Pegel wie ich das jetzt habe. Also aktiv LOW.