Entwicklung DIY-AC Speicher- Nulleinsp.- nach dyn. Stromtarifen (var. Netzentgelte) - auch ohne PV - nach Bewölkungsvorhersage

Das stimmt. Ich war auch da dran. Also es über eine IR Schnittstelle zu machen.

Aber das hat es echt in sich. Erst recht, da jeder einen anderen Zähler hat und die Lösung dann immer etwas anders aussieht.

Der Shelly funktioniert einfach gut, simpel und bei jedem gleich.

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.

2 „Gefällt mir“

Ok. Auf jeden Fall wurde es bei mir am Ende ziemlich kompliziert und hat nicht einfach so hingehauen. Ist nur meine Erfahrung

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.

L.G.

1 „Gefällt mir“

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. :grinning_face_with_smiling_eyes:

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.

L.G.

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.

OK, danke👍🏻

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.

Ich versuche mit diesem Sketch von Perplexity
[code]
#include <IRremote.h>

const byte IRPin = 11;

IRrecv irrecv(IRPin);

decode_results results;

void setup() {

Serial.begin(9600);

irrecv.enableIRIn();

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, HEX); // Rohdaten/Telegramm

irrecv.resume();

}

}
[/code]
mit den arduino Uno oder nano erstmal etwas auszulesen.
Der Sketch kompiliert, die lib scheint schon da zu sein.

Ja genau, das war auch eine der Ideen dahinter.:+1:

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 :grinning_face:

Wenn es das ist was du meinst.

Danke

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.

2 „Gefällt mir“

Hier was von meinem Zähler kommt.
Anfangen kann ich damit leider nichts.

sml.txt (30,6 KB)

[code]
#include <SoftwareSerial.h>

SoftwareSerial SmlSerial(4, 5); // RX, TX

void setup() {

Serial.begin(9600);

SmlSerial.begin(9600);

Serial.println("Starte Test: Zeige alle empfangenen Bytes...");

}

void loop() {

if (SmlSerial.available()) {

byte b = SmlSerial.read();

Serial.print("0x");

if (b < 16) Serial.print("0");

Serial.print(b, HEX);

Serial.print(" ");

}

}
[/code]

Ich hoffe mal aktiv HIGH ist korrekt.

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)

Zur Polarität kann ich dir aktuell nichts sagen bei mir ist das 2-3 Jahre her und läuft seitdem.

1 „Gefällt mir“

Grand malheur!

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.

Ohne Chat GPT geht softwareseitig gar nichts.

Oh ja, das kann man wohl sagen.

Für heute habe ich genug.

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 ich würde erstmal schauen, ob ich die Daten finde bevor ich was hole.
Es sieht nicht gut aus:

sml.txt (5,2 KB)

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.