Open genmad opened 4 months ago
Ich habe eine Fehlermeldung beim Starten:
Uncaught Error: Too many running timers. 22:19:47 at Timer.set( DELAY * ONE_SECOND, false, powerMeterCall); 22:19:47 ^ 22:19:47 in function called from system
Läuft da das andere script auch noch? Wir dürfen nicht mehr als 5 oder 10 Timer haben.
Nein, alle Scripts sind aus
OK, ich lasse das Script heute mit einem Wechselrichter laufen
Ich bin zurueck auf die aeltere Version weil ich den zweiten Wechselrichter heute Nacht brauche... Funktioniert SUPER 😄
The (old) script is working 24hrs now 👍 Ich musste am Wochenende an paar Aenderungen an der Verkablung machen (der Victron 250/60 hatte Overvoltage) und habe dadurch festgestellt, die Laenge der Kabel ist falsch 🤦♂️ Ich habe einen grossen Unterschied (8A gegen 6,7A) zwischen der zwei Seiten. Das macht einen 130W Unterschied, dadurch wird die Balanzierung durch dein Script schwieriger.
The (old) script is working 36hrs now 👍 Die Kabel der HM1500 haben eine "Schieflage" von fast 20% Prozent: eine Seite produziert 2,5+2,5=5kWh waehrend die andere 2,1+2,1=nur 4,2kWh 🤦♂️
Dadurch ist es "Unfair" von deiner Software zu verlangen, die Nulleinspeisung zu erreichen: Die Hoymiles kann die Ziel Leistung jedes Mal nicht korrekt liefern, die eine Seite wird 20% weniger liefert. Insgesamt gesehen, meine HM-1500 liefert ca 10% Prozent WENIGER als die Ziel Leistung die vorgegeben wird!
Gut zu wissen... fuer alle Personen die eines Tages sich beschwerden werden, dass deine Software "unruhig" regelt... 😆
Hast du ein neues Script hoch geladen? Ausser der zusaetzlichen Erklaerungen, hast du etwas geaendert?
Habe targetGridConsumption_Watt eingeführt. Aber das war ja schon beim letzten mal.
Habe das Http Thema abgeschlossen und das Skript ist jetzt im Master verfügbar.
Hattest du mal die TargetGridConsumption ausprobiert?
Hattest du mal die TargetGridConsumption ausprobiert?
Nein, das Script funktioniert nicht wenn man mehr als einen Wechselrichter nutzt. https://github.com/genmad/shellyAPIGen2AndAboveScripts/issues/4#issuecomment-2103357984
Mit nur einen Wechselrichter funktioniert es problemlos.
Ich glaube hier liegt ein Missverständnis vor, es gibt jetzt zwei skripte. Ich meinte dass jetzt hier: https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/master/src/openDTUonBattery/virtualPowerMeters_oDoB.js
An dem anderen bin ich noch dran dass zu beheben: Uups, habe ich vergessen im neuen Branch 4-paralleles-steuern-von-mehreren-odobs zu pushen.
Also ich blicke nicht durch mit deinen Versionen 😞 Ich benutze Version 0.1.3 vom 01.05.2024 Dein Link https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/master/src/openDTUonBattery/virtualPowerMeters_oDoB.js verweist auf eine Version 0.1.3 die aber nicht gleich ist, wie meine 0.1.3 vom 01.05.2024!
Vielleicht waere es besser mit Releases zu arbeiten, damit wir die Aenderungen besser erkennen koennen 😉
Ich habe vergessen die Versionsnummer anzupassen. 😔 wie meinst du das mit releases zu arbeiten? Das Problem bei den scripten auf dem shelly ist ja dass man die immer rüberkopieren muss und die Versionsnummer manuell anpassen muss. Und wenn man da nicht aufpasst, … dann hat man den überblick verloren. 😞
wie meinst du das mit releases zu arbeiten?
Ich meinte das: https://github.com/helgeerbe/OpenDTU-OnBattery/releases damit man jederzeit erkennen kann welches Script man runtergeladen hat.
Ich habe den gleichen Fehler mit dem aktuellen Script das heute 19.05.2024 unter diesem Link sich befindet: https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/master/src/openDTUonBattery/virtualPowerMeters_oDoB.js
Uncaught Error: Too many running timers. 11:51:44 at Timer.set( DELAY * ONE_SECOND, false, powerMeterCall); 11:51:44 ^ 11:51:44 in function called from system
Ich glaube let scriptId=8;
spielt keine Rolle.
Entscheidend ist nur die Position des Scripts auf der Liste in SHELLY selbst.
@genmad Manchmal hoert das Script einfach auf und muss neu gestartet werden. Ich sehe keine Meldung im Log.
Heute hat das Script drei Mal aufgehoert OHNE Fehlermeldung...
Ohne Fehlermeldung ist schlecht. Was heißt das es aufgehört hat? War einfach nur nicht mehr auf Running in der shelly Script Oberfläche ?
Ohne Meldung kann ich nichts machen. 🤷♂️
Hi @genmad
Ohne Fehlermeldung ist schlecht. Was heißt das es aufgehört hat? War einfach nur nicht mehr auf Running in der shelly Script Oberfläche ?
Genau. Mein Server schickt mir eine Telegram Nachricht sobald das Script aufgehoert hat. Und plotzlich ist es passiert...
FHEM_Fuhrmann, [21.05.2024 19:19] Shelly Script3 STOPPED FHEM_Fuhrmann, [21.05.2024 19:42] Shelly Script3 STOPPED FHEM_Fuhrmann, [21.05.2024 19:46] Shelly Script3 STOPPED FHEM_Fuhrmann, [21.05.2024 19:51] Shelly Script3 STOPPED
Ich vermute, es sind WiFi Verbindungs Probleme. Ich weiss nicht warum, aber der FritzRepeater verhaelt sich koemisch.
Wichtig ist, ich sehe gar keine Fehler Meldung im Log, obwohl es geoeffnet auf eine Browser Seite war, alle diese Male als das Script aufgehoert hat (ich war Online auf dem Server als es passiert ist).
Wie sieht denn dein Netzwerk aus? Kommunizieren alle über Wlan? Kann es sein das teile noch miteinander kommuniziert haben, also odob mit shelly oder shelly mit tasmota, oder wie genau ist dein Netzwerk aufgebaut und welche Verbindungen haben deiner Meinung nach nicht mehr funktioniert?
Nicht einfach zu erklaeren, es ist ein sehr grosses Gebiet und auf einer Ecke ist die Test Installation die ich benutze.
Ich habe einen FritzRepeater installiert um die Qualitaet zu sichern. Ploetzlich aber sehe ich TestController1 = die HM1500 OpenDTUoB, sowie TestController4 = wird nicht benutzt, nicht mehr am FritzRepeater3000 angeschlossen, sondern auf den Fritz7590Repeater. Obwohl aller vier TestController neben einander platziert sind.
Es koennte also sein, dass die Verbindung ausbricht. Warum dein Script keine Meldung gibt, kann ich nicht erklaeren. Ich dachte es sollte das machen. Ich benutze Version 0.1.3 vom 01.05.2024 (alle anderen funktionieren nicht)
Wenn du schon mitbekommst, dass das script nicht läuft, könntest du es auch automatisch starten mittels
curl -X POST -d '{"id":1, "method":"Script.Start", "params":{"id":<scriptid>}}'\ http://${SHELLY}/rpc
siehe hier: https://shelly-api-docs.shelly.cloud/gen2/Scripts/Tutorial
Ich habe zu viele re-transmits. Das ist das Problem!
[DPL::announceStatus] inverter is offline (polling enabled? radio okay?)
Kann es sein, dass das Script aufhoert ohne eine Fehler Meldung zu geben? https://pastebin.com/z272XNn8
Hmmm... ich brauche ein bisschen Hilfe 😭
Obwohl ich scriptid und SHELLY parameter definiert habe,
C:>curl -X POST -d '{"id":3, "method":"Script.Stop", "params":{"id":
${Shelly} musst du durch die ip deines shellys ersetzen. Es sieht so aus, dass die erste id immer 1 sein muss. Bei der id in params musst du die scriptid angeben. Da ist im Moment auch eine } zu viel.
Was wertest du denn aus um mitzubekommen dass das script nicht läuft?
Bei der id in params musst du die scriptid angeben. Da ist im Moment auch eine } zu viel.
Nein, das ist nicht der Fall. Bring es Bitte zum laufen mit deiner Shelly (Entweder mit Variables, oder mit direkte Eingabe von ID und Shelly-IP) und schick mir die Eingabe die du benutzt hast. Mit Variables bekomme ich die Fehler Meldung "Das System kann die angegebene Datei nicht finden." Mit direkte Eingabe der ID und Shelly IP bekomme ich "eine } zu viel."
Was wertest du denn aus um mitzubekommen dass das script nicht läuft?
Ich bekomme per MQTT die Information ob Script_3 is running (true/false) params_script_3_running
Das Script laeuft seit gestern, ohne Probleme 👍 Ich weiss nicht was gestern die drei Stoerungen verursacht hat. Am liebsten koenntest du fuer mich ein Shelly Script schreiben, dass prueft ob Script3 laeuft und falls nicht, wartet 39 Sekunden und startet Script3 erneut ❤️
Die Gruene Linie ist der Stromzaehler Die Blaue Linie (neu, seit 10:30) zeichnet die zwei HM die an der Batterie haengen. Die Lilla Linie zeigt alle vier HM die Tagsueber einspeisen wenn Sonne da ist. Nachts ist die Lilla Linie gleich wie die Blaue.
Nicht schlecht!
19:48 ist etwas angegangen, 2000W Verbrauch (gruener Balken). Binnen 20 Sekunden wurde es angepasst, die Wechselrichter haben 2000W geliefert (blauer Balken) bis 19:51 19:51 ist der Verbraucher ausgegangen, Stromverbrauch ist runter auf minus2000W gegangen (gruener Balken). Binnen 10Sek. haben sich die Wechselrichter angepasst. 👍🥂
Hmmm... ich brauche ein bisschen Hilfe 😭
Obwohl ich scriptid und SHELLY parameter definiert habe, C:>curl -X POST -d '{"id":3, "method":"Script.Stop", "params":{"id":}}'\ http://${SHELLY}/rpc bekomme ich folgende Fehlermeldung: "Das System kann die angegebene Datei nicht finden."
Also wenn ich bei mir
curl -X POST -d '{"id":42, "method":"Script.Start", "params":{"id":2}}' http://1.2.3.4/rpc
eingebe kommt als Antwort
{"id":42,"src":"shellypro3em-0cb815fcb6f4","result":{"was_running":false}}
und das ausgewählte script wird gestartet.
Wobei id:42 frei gewählt werden kann und unter params id:2 das script angibt das ich aufrufe. 1.2.3.4 ist natürlich durch die ip des Shellys zu ersetzen.
Aber mal wieder zurück zum Thema. Habe das Timer problem im script gelöst.
@Manos1966 Kannst du ja mal ausprobieren: https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/4-paralleles-steuern-von-mehreren-odobs/src/openDTUonBattery/virtualPowerMeters_oDoBParallel.js und bescheid geben was jetzt für Fehler auftauchen.
Not working binnen 1 Minute:
Configs: 1 ControllerCall: 1 Uncaught Error: No response off 192.168.178.65 for 1 minutes. at throw new Error(message);
ich habe die Wechselrichter-Reihe gedreht. Der Fehler ist wieder nach einer Minute aufgetaucht. Es ist immer der erste Wechselrichter der als Fehler auftaucht. Configs: 1 ControllerCall: 1 Uncaught Error: No response off 192.168.178.93 for 1 minutes. at throw new Error(message);
Ok, dann habe ich das falsch repariert, …
Naja beim nächsten mal wirds besser.
Kein Stress 👍
Wenn ich irgendetwas machen kann um dir bei der Fehlersuche zu helfen, sag Bescheid.
Also wenn ich bei mir curl -X POST -d '{"id":42, "method":"Script.Start", "params":{"id":2}}' http://1.2.3.4/rpc eingebe kommt als Antwort {"id":42,"src":"shellypro3em-0cb815fcb6f4","result":{"was_running":false}} und das ausgewählte script wird gestartet. Wobei id:42 frei gewählt werden kann und unter params id:2 das script angibt das ich aufrufe. 1.2.3.4 ist natürlich durch die ip des Shellys zu ersetzen.
Ich gebe den Befehl im Terminal Fenster, richtig (cmd.exe)? Script.Stop sowie Script.Start geben bei mir den gleichen Fehler 😭
C:\Users>curl -X POST -d '{"id":42, "method":"Script.Stop", "params":{"id":3}}' http://192.168.178.92/rpc curl: (3) URL rejected: Port number was not a decimal number between 0 and 65535 curl: (3) unmatched close brace/bracket in URL position 13: params:{id:3}}' ^
C:\Users>curl -X POST -d '{"id":42, "method":"Script.Start", "params":{"id":3}}' http://192.168.178.92/rpc curl: (3) URL rejected: Port number was not a decimal number between 0 and 65535 curl: (3) unmatched close brace/bracket in URL position 13: params:{id:3}}' ^
C:\Users>curl -X POST -d '{"id":42, "method":"Script.Start", "params":{"id":3}}“ http://192.168.178.92/rpc
Unter windows ist es etwas anders, du musst die „ escapen.
Also so:
curl -X POST -d "{\"id\":42, \"method\":\"Script.Start\", \"params\":{\"id\":3}}“ http://192.168.178.92/rpc
It was still not working but I found out why: The URL Address has to go infront. C:\Users>curl -X POST http://192.168.178.92/rpc -d "{\"id\":42, \"method\":\"Script.Start\", \"params\":{\"id\":3}}“ {"id":42,"src":"shellyplus1pm","result":{"was_running":true}}
a million thanks! 💯 👍
Wie funktioniert das mir curl? Wird es im Hintergrund ausgeführt und startet jedes Mal das Skript neu wenn es aufgehört hat? Oder nur einmalig? Ist schon klar warum das Skript überhaupt stoppt?
Hallo @gitisgreat2023 hast du angefangen das Script zu testen?
Ich nutze den curl Befehl noch nicht. Bei mir stoppt das Script aufgrund der schlechten WiFi Verbindung zwischen Stromzaehler und Kontrollern (ich habe einen FritzRepeater der oft die MESH verliert und viele Geraete sind daraufhin unerreichbar).
@Manos1966 Nein, warte auf Alex's board (akkudoktorforum) und das schiebt immer mehr in die Zukunft... :-( Ich habe alles schon, nur die PCB fehlt noch...sobald die da ist melde ich mich sofort mit Testergebnisse. Bgzl mesh, okay, ich habe genau das gleiche aber ich glaube es ist stabil... am liebsten hätte ich beide OoD boards mittels LAN angebunden aber standard haben die boards von Alex nur WiFi. (glaube wegen SPI Knappheit).
Hallo, ein paar Fragen zu eurem Skript:
Die zwei WR werden hier definiert:
let configs=[ { nominalPower_Watt: 100, minRequiredPower_Watt: 50, controllerIp: '192.168.178.67', inverterSerialNumber: 116182803975} , { nominalPower_Watt: 800, minRequiredPower_Watt: 80, controllerIp: '192.168.178.68', inverterSerialNumber: 000} ];
Controlller Ip würde dann die IP der Opendtu?
Warum ist hier im nachfolgenden Auszug nur ein WR vorgesehen. Muss der Code nicht für 2 WR erweitert werden?
Muss der jsonPath irgendwie auch auf die zwei WR angepasst werden mit der laufenden Nummer?
// configure http access ( path to the power reading) let httpConfig = { address: "http://192.168.178.67/api/livedata/status?inv=116182803975" // the address of the http powerreading required , jsonPath: "inverters/0/AC/0/Power/v" // jsonPath for parsing the message for the powerreading, seperate every field by a '/' // e.g.: inverters[0].name needs to be represented as: inverters.0.name }; // configure http access ( path to the power reading) let httpConfig = { address: "http://192.168.178.67/api/livedata/status?inv=116182803975" // the address of the http powerreading required , jsonPath: "inverters/0/AC/0/Power/v" // jsonPath for parsing the message for the powerreading, seperate every field by a '/' // e.g.: inverters[0].name needs to be represented as: inverters.0.name };
Müssen dann in der OpenDtu on battery unter dem Menüpunkt Stromzähler Einstellung diese Pfade eingetragen werden? bei zwei WR dann auf Phase 1 und Phase 2? oder wo trage ich dann die beiden WR mit dem PWR2 und PWR1 ein?
// then use: http://1.2.3.4/script/7/pwr2 // the Json path is always 'PWR'
Hallo, ein paar Fragen zu eurem Skript:
Die zwei WR werden hier definiert:
let configs=[ { nominalPower_Watt: 100, minRequiredPower_Watt: 50, controllerIp: '192.168.178.67', inverterSerialNumber: 116182803975} , { nominalPower_Watt: 800, minRequiredPower_Watt: 80, controllerIp: '192.168.178.68', inverterSerialNumber: 000} ];
- Controlller Ip würde dann die IP der Opendtu?
ja, @BKW1800 controllerIp == ip der openDtu
- Warum ist hier im nachfolgenden Auszug nur ein WR vorgesehen. Muss der Code nicht für 2 WR erweitert werden?
In der config wird das für die n<6 WR konfiguriert, danach laufen die WR's unabhängig, deswegen sieht es so aus, als ob es nur für einen WR geschrieben ist, was es auch ist, aber jeder WR ruft die Funktionen dann für sich auf.
- Muss der jsonPath irgendwie auch auf die zwei WR angepasst werden mit der laufenden Nummer?
// configure http access ( path to the power reading) let httpConfig = { address: "http://192.168.178.67/api/livedata/status?inv=116182803975" // the address of the http powerreading required , jsonPath: "inverters/0/AC/0/Power/v" // jsonPath for parsing the message for the powerreading, seperate every field by a '/' // e.g.: inverters[0].name needs to be represented as: inverters.0.name }; // configure http access ( path to the power reading) let httpConfig = { address: "http://192.168.178.67/api/livedata/status?inv=116182803975" // the address of the http powerreading required , jsonPath: "inverters/0/AC/0/Power/v" // jsonPath for parsing the message for the powerreading, seperate every field by a '/' // e.g.: inverters[0].name needs to be represented as: inverters.0.name };
der JsonPath ist der json Pfad zur gesamt Momentan Leistung des Energiezählers. Der Energiezähler wird ja mit dem address Feld angesprochen.
Das müsstest schon vorher in deiner openDTU an der Stelle des Powermeters eingetragen gewesen sein, wenn du die Gesamtleistung benutzt hast und nicht jede Phase einzeln.
Müssen dann in der OpenDtu on battery unter dem Menüpunkt Stromzähler Einstellung diese Pfade eingetragen werden? bei zwei WR dann auf Phase 1 und Phase 2? oder wo trage ich dann die beiden WR mit dem PWR2 und PWR1 ein?
Für jeden WR brauche man eine eigenen openDTUonBattery. Und bei der trägt man dann ein, beim Stromzähler unter Gesamtleistung, die Adresse: http://<shellyip>/script/<scriptnr>/pwr<i>
// then use: http://1.2.3.4/script/7/pwr2 // the Json path is always 'PWR'
Hallo besten Dank für die Infos, Wie ist bei der Regelung die Hysterese festgelegt? bei OpenDtU on Battery stellt man den Regelwert und die Hysterese ein. Erst wenn der Ist-Wert ausserhalb des Regelsollwertes inkl. Hysterese ist, dann regelt der WR nach. Wie ist das bei dem Skript?
Das skript simuliert nur einen bzw. Mehrere Leistungsmesser in dem es die benötigte Leistung einfach anders verteilt und mindest Leistungen odob schickt, damit die Wr‘s nicht aus gehen. Die Einstellungen der Hysterese sind nichts was das Skript beeinflussen kann. Die odob Controller sind weiterhin für alles zuständig.
Um dir Ärger zu ersparen nimm bitte dieses skript: https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/master/src/openDTUonBattery/virtualPowerMeters_oDoB.js
Das oben erwähnte ist noch nicht funktional.
Hallo, eine Frage zu deinem Skript. Sehe ich es richtig, dass sie minimale und die maximale Wechselrichterleistung dann über den Shelly der Opendtu durch den nachfolgenden Codeausschnitt mitgeteilt wird?
{ nominalPower_Watt: 100, minRequiredPower_Watt: 50, controllerIp: '192.168.178.67', inverterSerialNumber: 116182803975}
Wäre es dann nicht möglich auch der OpenDtu für die Regelung den Netzbezugswert und auch den Hysteresewert in dem Code festzulegen?
Hätte den Vorteil, dass man nicht über VPN auf die OpenDTU muss, wenn man was anpassen will.
Hast du hierzu eine Idee? Vermutlich wirst du ja sogar über die entsprechenden Befehle gestolpert sein, wenn man auch die Wechselrichterleistungen (Min, Max) übermitteln kann. Kannst du mir hierzu eine Info geben, wo man den Code wie anpassen muss?
Hallo, eine Frage zu deinem Skript. Sehe ich es richtig, dass sie minimale und die maximale Wechselrichterleistung dann über den Shelly der Opendtu durch den nachfolgenden Codeausschnitt mitgeteilt wird?
Deine Annahme ist falsch. Das skript teilt odoB nichts mit. Man konfiguriert hier den virtuellen Leistungsmesser, den Odob dann abfragt und auf dessen Leistungsdaten dann geregelt wird.
{ nominalPower_Watt: 100, minRequiredPower_Watt: 50, controllerIp: '192.168.178.67', inverterSerialNumber: 116182803975}
Wäre es dann nicht möglich auch der OpenDtu für die Regelung den Netzbezugswert und auch den Hysteresewert in dem Code festzulegen?
Warum willst du den Netzbezugswert und die Hysterese ändern?
Die Frage ist was du erreichen willst. Da ich dass noch nicht weiß/verstanden habe, kann ich dir auch nicht helfen. Beschreibe dein Szenario und was du erreichen willst, dann könnte ich dazu was sagen.
z.b. im Sommerfall: Speise ich mit -50 watt ins öffentliche Netz ein weil ich sowieso mit meiner Anlage viel zu viel Strom habe und der Speicher locker voll wird. im Winter ist das aber schlecht, weil hier weniger kWh von den Platten kommen und dadurch möchte ich eher auf vllt. +50 Watt regeln, damit ich wirklich soviel kWh wie möglich nutzen kann. Dazu muss ich aber dann in die OpenDTU gehen und das umstellen. Problem ist ich nur, dass ich selten bei meiner Anlage Vorort bin. d.h. ich müsste über VPN auf openDTU zugreifen. Könnte man sich sparen wenn man das mit deinen Shelly Skript direkt dem WR mitteilt. Würde dann einfach zwei Skripte anlegen (Sommer/Winter) und die dann starten oder deaktivieren über den Shelly pro 3EM wann ich es brauche. so wäre mein Gedanke.
Du kannst in dem skript den targetGridConsumption_Watt Wert setzen das ist genau das was du haben willst, aber dann als Summe für alle Wr‘s.
Und dann erstellst du dir 2 skripte und passt den Wert dann so an wie du ihn haben willst.
Wenn man mehrere WR's /odobs parallel stört anstatt zu kaskadieren, kann das Vorteile haben.
Diese Vorteile erkaufen wir dann wahrscheinlich aber mit einem unruhigeren Regelverhalten der odob's ???? Nur eine Vermutung.
Dieses Skript ist nicht auf eine gemeinsame DC Seite beschränkt. Mehrere verschiedene Solarfelder inclusive. Batterien könnten wahrscheinlich kombiniert werden. Wenn eine odob ihren Anteil n nicht liefern kann, dann Regeln die anderen ihre Leistung in den nächsten Zyklen nach. Das Läuft dann asymptotisch gegen die benötigte Leistung.
@Manos1966 Bin mal gespannt wie sich das bei dir macht. https://github.com/genmad/shellyAPIGen2AndAboveScripts/blob/HTTP/src/openDTUonBattery/virtualPowerMeters_oDoBParallel.js