NEWS
Blockly, Trigger und 2 Timeouts
-
Edit : Für besseres Verständniss siehe Post 8 hier
Hallo miteinander
Ich ärgere mich ein wenig grün und blau, weil etwas IRGENDWIE funktioniert lach
Folgendes Hier ein Screenshot des Zustandes:Der Trigger (falls geändert) liegt auf der "Einspeiseleistung" (Damit ist allerdings ein Wert gemeint, der auf die Kommunikationsschnittstelle , wo gemeinsam 2 Wechselrichter vorhanden sind, übertragen wird.
Ich hab mit einem Shelly Plus Uni (RS485_1 und RS485_2) Die Kommunikationsleitung zu EINEM Wechselrichter unter Kontrolle.(Die kann ich trennen - damit ist der Wechselrichter ausser Funktion)
Falls Einspeiseleistung ist größer als 600 Watt, soll er die RS485 EINSCHALTEN und falls Kleiner Soll er sie ausschalten.
Beispiel: Angeforderte Leistung ist ÜBER EINEN ZEITRAUM von 4250 ms (Beispielhaft) GRÖSSER 600 Watt: RS485 (beide) werden aktiviert, und per MQTT erfolgt eine Änderung an meine Steuerung der Wechselrichteranzahl auf 2.die intern die Leistung auf 2 Geräte aufteilt (Halbiert), Jeder Wechselrichter ballert somit mit 300 Watt rein.
Nun falls aber die Leistung kleiner als 600 Watt ist : Wird die RS485 Verbindung zu einem Wechselrichter getrennt, und der Steuerung per MQTT Übermittelt, das sie den Wert nichtmehr zu halbieren braucht (1). Der zweite schaltet, da er keine Signale mehr über die Schnittstelle bekommt ab, und einer erledigt die arbeit.
Was ja tadellos funktioniert.
Ich habe das Problem: Der Kühlschrank schaltet ein und zieht nun 1,7kw (Einschaltstrom) für 2-3 Sekunden. In diesem Fall will ich NICHT das auf 2 Wechselrichter umgeschaltet wird (4250 ms pause)
Ich denk aus dem Script geht hervor was ich vorhabe . Das ABSCHALTEN (Also der erste Block) (Vorsicht: Seitenverkehrt) NACH 60 sekunden (Falls 2 Wechselrichter aktiv waren) funktioniert.Um der Waschmaschine und Kaffeemaschine gerecht zu werden
Er macht aber beim EINSCHALTEN (der Zweite block) diese 4250ms Pause nicht, oder nicht immer, oder wie er will.
Ich hab da irgendwo einen Denkfehler drin.Sonst , von der Funktion her, passt alles. da geschieht alles korrekt. Nur die "Hysterese" passt nicht beim einschalten.
Das "Steuerbefehl" ist nur für mich, um zu schauen , wieviele Befehle da "umgesetz" werden, um Panikschaltungen zu vermeiden (Bin da bei Triggern in Testphasen immer vorsichtig)
Grund dieses Spektakels: Effizienz des Batteriespeichers gegenüber. Es müssen bei Leistungen kleiner 600W nicht beide WR laufen. (Wobei ich grossteils eh nur 150W herumnukkel)
Bitte Hilfe, Vielen Dank vorab.
LG -
@sonny sagte in Blockly, Trigger und 2 Timeouts:
Der Trigger (falls geändert) liegt auf der "Einspeiseleistung"
Bitte alles zeigen!
-
Schau, unterhalb liegen lediglich Captions (Beschriftungen für den Energiefluss erweitert)
Das ist alles was im Trigger lauft. -
was ist das für ein zweiter Trigger?
was macht der? -
Der Autobetrieb steht im Regelfall immer auf "1".
Er geht bei Fehlern und im Handbetrieb, automatisch auf "0" (Das ist in der Gegenseite, der Steuerung, fest integriert)
unten bei den Captions siehst du, Wenn der Wert "0" ist, gilt der Handbetrieb (Die Leistung gebe ich ihm händisch fix vor)
Die interne Steuerung nimmt von extern (iobroker, mqtt usw) dann aber keine Befehle mehr entgegen. Den Handbetrieb muss ich manuell einschalten.Der Autobetrieb hat auf das "Regelverhalten" was mein Problemchen hier betrifft , keinen Einfluss.
Ich hab das nur willkürlich so benannt.Autobetrieb 1 = Alles regelt automatisch.
Autobetrieb 0 = Steuerung extern abgeschalten oder Fehlerfall, oder Handbetrieb (In allen Fällen ignoriert die Steuerung alles was von extern kommt)
Der Handbetrieb: da sag ich ihm eine Fixe Leistung, die er umsetzt (Was man eh nie braucht)
Er wirde nur für eine Beschriftung verwendet hier. -
@sonny Aah, da steht "Autobetrieb"
ist nicht zu entziffern.darunter scheint zu stehen
"Anzahl Wechselrichter ändern"es wird auch auf Anzahl ungleich 1 oder ungleich 2 geprüft.
aber wo wird der Wert gesetzt? -
Der wird per MQTT übertragen
und von der Gegenseite auch sofort umgesetzt.(Das geschieht natürlich in Echtzeit)Ja ich prüf das immer gerne gegen, das sich nix "verschlucken" kann
-
So hab das ganze jetzt etwas anders "zusammengebastelt" : aus dem, so glaube ich, klarer hervorgeht was ich da vorhab.
Ob das so nun klappt , weiss ich nicht lach (Zellen Einzelbalancierung bis morgen)
Ich hab aber ein folgendes Szenario welches es zu beachten gilt.
Momentan 1 WR aktiv.
Nun passiert folgendes: Anforderung 1700 W ("Einspeiseleistung)- und der Wert ändert sich nichtmehr (Das wäre Vollast- der höchste zulässige Wert bei mir)
Das Script wartet nun das Timeout von 3 Sekunden. ab, und macht dann was ?
Garnichtsmehr ?
Der Wert von 1700 ändert sich in diesem Beispiel NICHT , also der Trigger wird nicht neu ausgeführt (Praxisbeispiel ich hab Geschirrspüler und Toaster gleichzeitig laufen)Was passiert hier: WARTET der Trigger die 3 Sekunden ab und schaltet dann beide WR ein , also er führt das aus, ODER muss er "neu getriggert" werden ? (Erwartet also eine Wertänderung das es ausgeführt wird) . Kann mit dem Scripten erst morgen Nachmittag weiterprobieren.
Folgendes sollte bewerkstelligt werden:
Ist der angeforderte Wert größer als 600 soll, nach 3 Sekunden wartezeit (Um Einschaltströme auszubügeln)-wenn immer noch >600 angefordert werden, auf "2" umgestellt werden.
Ist der Wert kleiner wie 600, soll nach 60 sekunden Wartezeit - wieder auf 1 umgeschaltet werden.
-
So Hab das nochmal umgestaltet, nachdem ich mir das tolle "Blockly für Dummies" vom Codierknecht durchgesehen hab Respekt - Danke für die tollen Infos dort !
(Hab eigentlich gleich alle meine Scripte entsprechend angepasst)Hab das nun so wie auf dem Screenshot - Es funktioniert nicht wie es soll... Er schaltet zu früh ein (Frisst einschaltströme also), aber auch willkürlich (Für mich nicht nachvollziehbar) vor den 60 sekunden wieder ab. Ich hab auch statt "Setze Delayxxx=null" das "Stop Delay" selbst probiert.
Vielleicht hat jemand die zündende Idee
LG derweil. -
Falls es jemandem von Nutzen ist : Das hier scheint zu funktionieren Bin noch am Testen.
Jetzt ist die ZEIT des ein und abschaltens für mich nachvollziehbar. Da er ja willkührlich die Timer zu zählen angefangen hat, hab ich mit den STOPs einfach festgelegt, WANN er wieder "von vorne" anfangen soll. Das ist in dem Fall auch notwendig . Musste da ein wenig umdenken.