Closed Manos1966 closed 6 months ago
Also,
Zunächst einmal muss der shelly auf dem das script laufen soll mit dem Mqtt server konfiguriert werden. Das geht unter settings -> mqtt.
Danach kopiert man das script auf den shelly und setzt scriptId im script auf 1 ( falls es das erste script ist das auf dem shelly läuft.) Weiterhin kann man die Werte für die httpServerEndpoint anpassen.
Mit dieser Konfiguration ergeben sich dann die virtuellen Leistungsmesser für die controller der Wechselrichter zu:
http://<shellyip>/script/<scriptid>/<httpServerEndpoint>
, bei dir wären dass dann:
http://192.168.178.10/script/1/pwr1 und http://192.168.178.10/script/1/pwr2. Diese trägst du dann bei den Controllern im Powermeter Bereich ein. Powermeter musst du dann auf http(s) + Json stellen und nur eine Phase verwenden/eintragen.
Die mqtt Adresse setzt sich aus den Einstellungen die du in deinem Controller (oDoB) im mqtt Bereich gemacht hast. Dort gibt es ein Basic Topic. Also trägt man bei address folgenden Wert ein: <BasicTopic>/ac/power
für den jeweiligen Controller.
Nehmen wir mal an dein topic auf controller1 ist solar/dtuOnBattery1 und auf controller2 solar/dtuOnBattery2.
Dann sind die Werte die du unter address eintragen musst solar/dtuOnBattery1/ac/power und solar/dtuOnBattery2/ac/power.
Ich das mal heute Abend noch anpassen, damit ist inline erklärt ist und einfacher.
Ich hoffe das war verständlich.
Oh man, bin ich Doof! ich muss nur das Basis-Topic bei jeder OpenDTU aendern!!!!!! Grrrr....
Ins script auf dem shelly gehen und die Kommentare vor den print entfernen und neue hinzufügen. Alternativ kannst du auch einen curl Befehl absetzen. dass ist das was die dtv auch macht. auf dem Mac ist das commando so: curl -X POST -d '{"id":1,"method":"Ws.GetConfig"}' http://192.168.178.10/script/1/pwr1
Habe ich etwas verpasst, oder warum steht in deiner dtu nicht die ip des Shellys (192.168.178.10)? Hast du die geändert? Oben sagst du dein shelly hat die ip 192.168.178.10 aber du verwendest überall die ip 192.168.188.187. Ist das die ip deines fhem servers?
Ich habe alles zu Hause gebracht (ausser Batterien) weil es draussen am Test-Gelaende zu windig und regnerisch heute ist.
jetzt sind die IP Adressen: 192.168.188.187 Shelly Plus1PM 192.168.188.202 MQTT Server (FHEM) 192.168.188.155 First OpenDTUonBattery: solarMulti1/ac/power 192.168.188.156 Second OpenDTUonBattery: solarMulti2/ac/power 192.168.188.141 Volkszaehler OpenDTUonBattery: solarStromZaehler/powermeter/power1
Aha ich sehe dass du nun andere Ip Adressen verwendest.
Mhmm, dann werde ich heute Abend wohl noch mqtt als Ausgabe für den virtual PowerMeter implementieren. Dann solltest du auf jedenfall im mqtt server Ergebnisse sehen.
Mit neuen hinzufügen meinte ich print( wert der mich interessiert). Dass du dir auch selber print ausgaben erzeugen kannst an stellen die dich interessieren.
Beim json im Powermeter muss PWR stehen.
Das script hast du auch gestartet, oder? Dann solltest du jetzt in der console print ausgaben sehen.
Dann solltest du jetzt in der console print ausgaben sehen
Console? von der Shelly? YEEEES! ich musste Websockets aktivieren! Grrrr... jetzt sind Daten da!!!
EDIT: Überflüssig
Wir müssen erstmal den 404 Fehler weg bekommen. Dann kriegen wir den rest auch hin. Also du kannst am schnellsten mit dem curl befehl testen. Wenn das läuft kannst du auf die Controller gehen und da alles einstellen.
Ich bin nutzlos....Es hat nicht funktioniert. Ich gehe jetzt schrittweise nach vorn und habe alles bei mir zu Hause gebracht und stelle alles hier zusammen:
Erste Schritt(e): a. Stromzaehler Daten empfangen, b. Script auf die Shelly laufen lassen, c. Ergebnis pwr1 und pwr2 empfangen
- Zu Hause habe ich einen Volkzaehler fuer den Stromzaehler (Alt Lasten...) Dadurch habe ich eine dritte OpenDTU angeschlossen, um die Daten vom Volkszaehler abzufragen und zum MQTT Server zu schicken - Funktioniert! MQTT: OpenDTU_6912664 OpenDTU_6912664:solar/powermeter/power1 zeigt den Stromzähler Verbrauch! Diese OpentDTU (192.168.188.41) liesst den Stromzaehler korrekt, und sendet per MQTT (OpenDTU_6912664) die Daten zum Server als OpenDTU_6912664:solar/powermeter/power1
In FHEM sehe dass die Daten dieser OpenDTU per MQTT korrekt empfangen werden: https://pastebin.com/01RsDanW
Daraufhin habe ich dein Script angepasst: let netPowerConfig = { type: "mqtt" , address: "OpenDTU_6912664:solar/powermeter/power1" };
- Meine Shelly Plus1PM 192.168.188.187 shellyplus1pm-d48afc76ad84 MQTT Funktioniert (MQTT Server 192.168.188.202) ich empfange alle Daten https://pastebin.com/vsGTk5k2
Der Script laeuft und das sieht man an die Information: params_script_1_id | 1 params_script_1_mem_free | 25200 params_script_1_running | true
Trotzdem sehe ich keine Ergebnisse:
- weder auf mein FHEM (sollte ich nicht pm1 und pm2 als neue Readings bekommen?)
- noch wenn ich eine direkte Abfrage per Browser mache:
Dein Script auf die Shelly sieht wie folgt aus: https://pastebin.com/QXwf7s3f
Daraufhin kann ich keine StromzaehlerDaten auf die zwei OpetDTUs die ich fuer Wechselrichter habe, empfangen.
Dein 1500 Watt wechselrichter sollte für den http endpoint auf pwr2 stehen in der config
Auf jedem Fall, ich sehe (Endlich!) Daten auf meine Shelly-Script-Console! Dann muss du keine Daten extra per MQTT senden (wenn du nicht willst).
Aber, ich sehe nur "GenPower" Daten. Sollte ich auch nicht pwr1 und pwr2 Daten da sehen koennen?
Naechste Frage: Ich sehe Daten wie GenPower: -2568.2080080999910.4 GenPower: -2588.3080080999920.8 GenPower: -2598.7080080999910.6
ZWEI Komma Zeichen (und sogar Punkte?)
Wenn http anfragen kommen, dann sieht man auch andere printouts. Im moment kommen nur die mqtt updates der Wechselrichter an. Warum das bei dir so komisch aussieht weiß ich nicht.🤷♂️ Vermute das die Daten falsch verarbeitet werden die ankommen. Musst mal die generatedPower mit deinem mqtt server vergleichen und da die momentane Leistung deiner Wr‘s addieren. Das sollte gleich sein.
Von allen Prints die aktiviert wurden, nur das print("GenPower: " + generatedPower); funktioniert und sendet Daten. Das wurde bedeuten, dass keine andere Daten (pwr1, pwr2) erstellt werden, oder?
Die anderen Daten werden erst berechnet wenn diese auch mittels webrequest abfragt. Also z.b. curl . Da das aus welchen Gründen auch immer noch nicht funktioniert, wird aktuell nur die summe der Wr Leistung ausgegeben.
Ah sooooo!!!!!!
Aber dann, eine Webrequest wie http://192.168.188.187/script/1/pwr1 vom Browser, haette eine Berechnung starten sollen. oder muss es unbedingt CURL sein?
Von allen Prints die aktiviert wurden, nur das print("GenPower: " + generatedPower); funktioniert und sendet Daten. Das wurde bedeuten, dass keine andere Daten (pwr1, pwr2) erstellt werden, oder? Hier ist der Script der z.Zeit laeuft: https://pastebin.com/MJFZdGf3
Die httpEndpoints dürfen nur auf pwr1 und pwr2 lauten. Das ganze zeug was aktuell da davor steht wird automatisch ergänzt vom shelly.
Siehe mein orginal script
Ah sooooo!!!!!!
Aber dann, eine Webrequest wie http://192.168.188.187/script/1/pwr1 vom Browser, haette eine Berechnung starten sollen. oder muss es unbedingt CURL sein?
Ja, hätte sollen. Curl oder web ist egal. Aber bis eben hatte es ja noch nicht funtioniert.
Die httpEndpoints dürfen nur auf pwr1 und pwr2 lauten. Das ganze zeug was aktuell da davor steht wird automatisch ergänzt vom shelly.
Warum hast du es nicht frueher gesagt? 🤣 🤣 🤣 🤣 Tut mir leid, ich habe deine Anleitung von heute Vormittag falsch verstanden 🤦♂️
Jetzt kommen viele Daten auf die Console 🍾
Webrequest http://192.168.188.187/script/1/pwr1 funktioniert
PWR: 486
Die Antwort vom Webrequest ist aber auch kein JSON Format, oder?
Mach ich heute Abend + includiere verschiedene Erfahrungen.
Habe jetzt den Bug gefixt, so dass er jetzt Json zurück gibt. Weiterhin habe ich aus der config httpServerEndpoint rausgeschmissen und gegen eine hoffentlich einigermassen gute Erklärung ersetzt. Ausserdem hab ich die mqttControllerPowerTopic gegen ein anderen Namen und einen kürzeren Pfad ausgetauscht.
Also bevor du das Skript einspielst, sichere dir deine Config und übernehme sie und passe sie an. Du brauchst jetzt nur noch das basis topic angeben!!!!
Vielen Dank fuer alle Erklaerungen @genmad ich habe einiges gelernt dadurch! 👍 😄
Es ist etwas frueh um pingelig zu sein aber nur zur Info:
let scriptId=3; und /script/1 passen nicht zusammen
// define in Powermeter the mode https + Json and use http://
/script/ /pwr e.g. for controller2 -> http://1.1.1.1/script/1/pwr2
Die http addresse sollte nur ein Beispiel sein für die davor abstrakte schreibweise eines Pfades. Da muss ich also nochmal ran um das bsp. klarer zu machen.
Draussen tobt der Baehr... ich kann nichts machen, daher spiele ich ein bisschen mit Simulationen.
Ich glaube es gibt ein "Dreher" zwischen den Geraeten: IP: 192.168.188.156 ist die HM1200 MQTT:solarMulti1 (siehe Bild) IP: 192.168.188.155 ist die HM1500 MQTT:solarMulti2 (siehe Bild)
Stromverbrauch: 1776W
Ich gebe ein: { nominalPower_Watt: 2000, minRequiredPower_Watt: 51, mqttControllerBasicTopic: 'solarMulti1/ac/power'} { nominalPower_Watt: 800, minRequiredPower_Watt: 52, mqttControllerBasicTopic: 'solarMulti2/ac/power'}
Da der 1776W Verbrauch kleiner ist als die Max Leistung von 2000W der solarMulti1 , dann gehe ich davon aus, deine Berechnung wird:
Anstatdessen sehe ich
Oder sehe ich das falsch?
Vielleicht liegt es daran, dass du mit Null anfaengst:
Ja, es scheint fest zu sein: Auch bei niedrigerer Einstellung, 0 VPM bleibt bei 1776,36
Schau ich mir an. Was brauchst du zur simulation? Weitere odob Controller? Oder hast du da was anderes?
Ich habe 3 verschiedene Stromzaehler (von TASMOTA bis Volkszaehler) um mich herum (ich organisiere die OpeDTUs fuer meine Nachbarn), fuenf OpenDTUs, Victron Emulation um mich herum. Da alles dunkel ist und stürmt sind die Pylontech-Batterien leer, daher teste ich deine Software Tagsueber, bevor ich sie zur Test-Umgebung (ein paar Km weiter) installieren kann.
Wenn deine Simulatoren nicht zurück melden was dass sie Leistung erzeugen, dann sind die werte richtig. In der Startphase gibt es genau das von dir beobachtete überschwingen. Das regelt aich dann weg wenn die Controller melden das sie Strom erzeugen.
Wenn in deinem basic topic unter ac/power 0 zurück kommt habe ich recht, ansonsten ist das ein Fehler.
Sie meldeten zurueck, aber sie hatten nur ein paar Watt Leistung. Alles ist dunkel hier, seit gestern Nachmittag...
Ich hoffe wir haben ein bisschen Sonne morgen...
Trotzdem, wenn { nominalPower_Watt: 2000, minRequiredPower_Watt: 51, mqttControllerBasicTopic: 'solarMulti1/ac/power'} { nominalPower_Watt: 800, minRequiredPower_Watt: 52, mqttControllerBasicTopic: 'solarMulti2/ac/power'}
Es kann nicht sein, dass solarMulti1 anstatt dessen die Anforderung 52W bekommt 😉
Wenn in deinem basic topic unter ac/power 0 zurück kommt habe ich recht, ansonsten ist das ein Fehler.
Moment, das hat mir eine Idee gegeben, was ich pruefen sollte 🤔
OK, ich nehme alles zurueck! Das Program funktioniert wie gewolt 👍 Ich habe nur die Powermeter Eingaben verkehrt rum eingegeben 🤦♂️ http://192.168.188.187/script/1/pwr1 da wo MQTT: solarMulti2/ http://192.168.188.187/script/1/pwr2 da wo MQTT: solarMulti1/
scheint gut zu funktionieren, leider aber muss der Regen aufhoeren, damit die Batterien geladen werden und einen zweiten Wechselrichter an die Batterie anschliessen kann (die Busbars sind draussen und beim Wind und Regen nicht so einfach zu erreichen) 😞
Zu Hause sieht es gut aus, da aber keine Sonne zur Zeit, reicht die Solar Leistung nicht aus, um den Stromzaehler auf Null oder minus Werte zu setzen und dadurch testen wie der Algorithmus reagiert... Aergerlich 😭
Ich brauche etwas Hilfe
Ich benutze den DPL eingestellt auf PV Paneele (keine Batterie) Die Limits 31W (HM1200) sowie 42W (HM1500) habe ich auch im DPL eingegeben
Der Virtuelle Stromzaehler pendelt auf 0 W Daraufhin setzt dein Program korrekt die Limits auf die Minimums 31 W & 42 W
Die eingestellte Limits laut DPL sind auf 48W (HM1200) aber bleiben auf 150W fuer den HM1500 😨 Dein Program sendet die richtigen Werte. ist das vielleicht ein DPL Problem?
Ich frage mich, was braucht der DPL um nach unten zu regeln???? Vielleicht erst wenn der Stromzaehler negative Werte liefert???? Dein algorithmus gibt sie nicht.
Erstmal hoch auf 2000W (mehr als die beide Wechselrichter liefern koennen, per DPL sind sie auf max 800W)
Danach runter auf -200W Beide Wechselrichter haben sofort reagiert. Aber anstatt 31W und 42W wie der Stromzaehler zeigt zu erreichen, haben sich ein Limit von 120W und 225W empfangen! Das ist mir neu... Ich glaube es hat mit der DPL Logik zu tun...
es ist die Logik! 5 Minuten spaeter (ich habe nichts geaendert) sind die Limits auf 84W und 150W
...und spaeter
...spaeter
...spaeter
OK, das geht so langsam runter, es wuerde die Batterie unnoetig entleeren.
OK, ich habe den Wechselrichter getestet: Nur wenn negative Werte ankommen, passt der DPL die Leistung radikal nach unten!
Du muss ein paar negative Werte fuer eine gewisse Zeit 4-5 Sekunden(?) senden, bevor du sie auf die minRequiredPower_Watt einpendeln lassen kannst.
Steuerst du den Leistungsmesser(LM)? Oder ist das ein richtiger? ( Wo du wirklich die Leistung abrufst)
Ich glaube da gibt es ein Verständnis Problem. Leistungsanforderungen von 500W. Dann reagieren die Wr und die Leistung am LM geht auf null ( Wr‘S liefern 500 W). Abwerfen der Leistung LM zeigt -500W Wr reagieren LM zeigt 0 Watt und die Wrs liefern dass was du in deinem Netz verbrauchst.
So ist mein Verständnis von dem was wir da machen. Wie siehst du das?
Also ich nehme an, dass der LM immer die Summe der Verbräuche und Erzeugung anzeigt. So ist es implementiert.
Du kannst die Nummer loeschen...
Dein Beispiel:
Ich sage nicht, dass es dein Fehler ist. Es ist die Art und Weise wie der DPL regelt. Oder das, was ich gerade erlebt habe!
OK, ich kann es anders ausdrucken:
So lange der Stromzaehler Positive Werte gibt, das bedeutet, die Wechselrichter produzieren nicht genug, um den Stromzaehler auf Null zu bringen. Waren sie also am 1000W am produzieren, dann bleiben sie auch da, weil der Stromzaehler positive Werte zeigt (in meinem Fall +42 oder +31) Waren sie am 500W am produzieren, dann bleiben sie auch da, weil der Stromzaehler positive Werte zeigt (in meinem Fall +42 oder +31)
In Wirklichkeit, haben die OpenDTUonBattery Jungs sogar eine Sicherheit programmiert, die die Leistung "drosselt". Und das ist die Situation die ich gesehen habe. Es gibt sogar eine Sicherheit falls der Stromzaehler keine Daten liefert.
Ok, dazu whats appen wir dann heute abend.
So wie ich das verstehe aus deinem 2000W Beispiel, ist das Problem, dass die Leistung der Wechselrichter über Mqtt nicht bzw. nicht richtig an den shelly zurück geliefert werden. Prüfe mal bitte was über deine Eingestellten mqttBasicTopics (ac/power) gesendet wird und ob das auch in dem Skript richtig ankommt.
Kannst mir mal ne whats app schicken, dann melde ich mich wenns passt.
mqttBasicTopics (ac/power) gesendet wird und ob das auch in dem Skript richtig ankommt.
Ich brauche Hilfe, ein Print der ac/power zu erstellen.
Ich bin der Meinung, du brauchst das Current Limit lesen. Weicht es zu weit von eingegeben PWR und ist das minimum als PWR eingestellt., dann sollte das PWR negativ werden, damit der Wechselrichter schneller runter regelt.
Guten Morgen @genmad
zu wenig Sonne heute um richtig zu testen, aber ES FUNKTIONIERT! Die minus-Werte sind da! 🎉 Du hattest Rest, es waren meine Grundeinstellungen und dass ich die Werte regelmaessig und leicht unterschiedlich publizieren muss 🤦♂️ Die zwei "Absicherungen" der OpenDTUonBattery haben danach den Rest gemacht...
Jetzt werden minus Daten an beide Wechselrichter geliefert und die Anpassung der Leistung ist sehr fix 👍
Hi @genmad , ich habe ein paar Verständnis Fragen 🤦♂️
Angenommen: 192.168.178.10 Meine Shelly Plus 1PM (gen2) 192.168.178.11 Mein MQTT Server 192.168.178.12 Meine erster Hoymiles 192.168.178.13 Mein zweiter Hoymiles
{ nominalPower_Watt: 100, minRequiredPower_Watt: 50, httpServerEndpoint: 'pwr1', mqttControllerPowerTopic: 'solar/dtuOnBattery/ac/power'}
// or http e.g. this script is running on a gen2 device which can not measure net power and pulls the power readings by http requests -- not yet supported/implemented // or mqtt get the power readings delivered by mqtt topic ( provide the topic in address) , address: "solar/dtuOnBattery/ac/power" // the address of the powerreading required for http or mqtt