Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
rucksman007
Beiträge: 138
Registriert: 04.11.2018, 13:17
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von rucksman007 » 26.10.2021, 20:02

Sorry für den langen Titel, aber kürzer gings irgendwie nicht ...

Folgendes Szenario:
  • Ein MQTT In-Node liefert alle 10 Sekunden einen gewissen Wert
  • Abhängig von der Höhe dieses Wertes, also ab einem gewissen Schwellwert, soll etwas passieren (der Wert wird noch gebraucht)
  • Es soll aber nur dann etwas passieren, wenn dieser Wert für eine gewissen Zeit (zB 2 Minuten) oberhalb des Schwellwertes geblieben ist
Ist die Bedingung erfüllt, muss dann das Gegenteil geprüft werden: Ist der Wert für eine gewissen Zeit unterhalb des Schwellwertes geblieben, dann mach etwas.

Ums konkret zu machen: Meine PV-Anlage liefert alle 10 Sekunden den Wert (in Watt), wieviel Strom gerade ins Netz eingespeist wird. Liegt dieser Wert mindestens 2 Minuten über - sagen wir mal - 1500 Watt, dann soll mein E-Auto anfangen zu laden (so einfach ist das zwar nicht, da ich mit der gleichen Warte-Mechanik die Wallbox steuern muss, also den Ampere-Wert einstellen muss, aber das kommt später). Lädt das Auto, muss wiederum geprüft werden, ob der Wert mindestens 2 Minuten unterhalb von 1500 Watt liegt. Dann soll der Ladevorgang beendet werden.

Mit einem defer-Node hab ichs schon probiert, das funktioniert aber aus mehreren Gründen nicht. Wie kann ich diese Mechanik in Node-Red umsetzen? Danke für eure Hilfe!

Zwenjo
Beiträge: 52
Registriert: 13.11.2020, 12:12
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 3 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von Zwenjo » 27.10.2021, 06:54

Guten Morgen,

hier mal mein Lösungsansatz. Gibt sicherlich elegantere Lösungen.

Unbenannt.png

Code: Alles auswählen

[{"id":"540149cd.6dba48","type":"inject","z":"6f84ce1d.8f20d","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1600","payloadType":"num","x":150,"y":200,"wires":[["2170aa72.8c20e6"]]},{"id":"c6b31263.0af4c","type":"inject","z":"6f84ce1d.8f20d","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"10","payloadType":"num","x":150,"y":280,"wires":[["2170aa72.8c20e6"]]},{"id":"6a4d06f8.949398","type":"switch","z":"6f84ce1d.8f20d","name":"> 1500","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"1500","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":430,"y":180,"wires":[["4b384b4d.8934e4"],["ab7f8def.70aa4"]]},{"id":"4b384b4d.8934e4","type":"trigger","z":"6f84ce1d.8f20d","name":"","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"2","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":780,"y":160,"wires":[["f2a2d4df.bd3638","da540756.6ec838"]]},{"id":"ab7f8def.70aa4","type":"change","z":"6f84ce1d.8f20d","name":"RESET","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":200,"wires":[["4b384b4d.8934e4"]]},{"id":"f2a2d4df.bd3638","type":"debug","z":"6f84ce1d.8f20d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":120,"wires":[]},{"id":"da540756.6ec838","type":"change","z":"6f84ce1d.8f20d","name":"Lädt","rules":[{"t":"set","p":"auto.lädt","pt":"global","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":950,"y":160,"wires":[[]]},{"id":"2170aa72.8c20e6","type":"switch","z":"6f84ce1d.8f20d","name":"Lädt","property":"auto.lädt","propertyType":"global","rules":[{"t":"false"},{"t":"true"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":240,"wires":[["6a4d06f8.949398"],["82601fe6.68aab"]]},{"id":"82601fe6.68aab","type":"switch","z":"6f84ce1d.8f20d","name":"<= 1500","property":"payload","propertyType":"msg","rules":[{"t":"lte","v":"1500","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":440,"y":300,"wires":[["de8b1361.c5223"],["20bda2f9.8c42ce"]]},{"id":"de8b1361.c5223","type":"trigger","z":"6f84ce1d.8f20d","name":"","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"2","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":780,"y":280,"wires":[["916c8edf.23141","434e9fe5.fc877"]]},{"id":"20bda2f9.8c42ce","type":"change","z":"6f84ce1d.8f20d","name":"RESET","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":320,"wires":[["de8b1361.c5223"]]},{"id":"916c8edf.23141","type":"debug","z":"6f84ce1d.8f20d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":320,"wires":[]},{"id":"434e9fe5.fc877","type":"change","z":"6f84ce1d.8f20d","name":"Lädt","rules":[{"t":"set","p":"auto.lädt","pt":"global","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":950,"y":280,"wires":[[]]}]
--------------------------------------------
356 Kanäle in 50 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten:
1x HmIP-CCU3, 1x HmIP-HAP, 1x CUX28, 1x HmIP-STHO-A, 2x HmIP-FSM, 1x HmIP-SPI, 1x HmIP-SAM, 1x HM-LC-Sw1-Pl-CT-R1, 1x HmIP-FSI16, 1x HmIP-SRH, 1x HmIP-eTRV-E, 6x HmIP-HEATING, 1x HmIP-BSL, 1x HmIP-FROLL, 7x HMIP-SWDO, 9x HmIP-BROLL, 6x HmIP-eTRV-2, 1x HmIP-BSM, 1x HmIP-BDT, 1x HmIP-SWSD, 2x HmIP-WTH-2, 1x HMIP-PS, 1x HmIP-PCBS, 1x HmIP-RCV-50, 1x HMIP-PSM
--------------------------------------------

rucksman007
Beiträge: 138
Registriert: 04.11.2018, 13:17
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von rucksman007 » 27.10.2021, 11:21

Vielen Dank!

Die grundsätzliche Herangehensweise verstehe ich, aber es funktioniert bei mir nicht. Ich habe den oberen Inject-Node (den mit 1600) so geändert, dass er alle 10 Sekunden den Wert schickt. Aber egal, wie lange ich warte, kommt hinter dem Trigger-Node nichts an. Erst war mein Fehler, dass die Context-Variable noch gar nicht existiert hat, die habe ich aber jetzt angelegt. Dennoch kommt wie gesagt hinter dem Trigger-Node nichts an.

Zwenjo
Beiträge: 52
Registriert: 13.11.2020, 12:12
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 3 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von Zwenjo » 27.10.2021, 11:23

Du musst die Context-Variable einmalig auf false setzen. Dann sollte es gehen.
--------------------------------------------
356 Kanäle in 50 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten:
1x HmIP-CCU3, 1x HmIP-HAP, 1x CUX28, 1x HmIP-STHO-A, 2x HmIP-FSM, 1x HmIP-SPI, 1x HmIP-SAM, 1x HM-LC-Sw1-Pl-CT-R1, 1x HmIP-FSI16, 1x HmIP-SRH, 1x HmIP-eTRV-E, 6x HmIP-HEATING, 1x HmIP-BSL, 1x HmIP-FROLL, 7x HMIP-SWDO, 9x HmIP-BROLL, 6x HmIP-eTRV-2, 1x HmIP-BSM, 1x HmIP-BDT, 1x HmIP-SWSD, 2x HmIP-WTH-2, 1x HMIP-PS, 1x HmIP-PCBS, 1x HmIP-RCV-50, 1x HMIP-PSM
--------------------------------------------

rucksman007
Beiträge: 138
Registriert: 04.11.2018, 13:17
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von rucksman007 » 27.10.2021, 12:13

Hmmm, irgendwie komme ich auf keinen grünen Zweig. Variable ist false. Es wird alle 10 Sekunden 1600 geschickt. Nach zwei Minuten greift der obere Zweig wie gewünscht, Variable wird true. Ich lasse weiterhin 1600 schicken. Zwischendurch schicke ich einmal 10. Ich wechsle in den unteren Zweig. Aber der obere Counter wird nicht resettet, sodaß die zwischendurch geschickten 10 ignoriert werden und weiterhin nach 2 Minuten der obere Trigger die payload schickt.

Egal welches Szenario ich teste, es funktioniert nicht 100%ig. Ich muss mich da heute abends mal intensiver reindenken...

Zwenjo
Beiträge: 52
Registriert: 13.11.2020, 12:12
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 3 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von Zwenjo » 27.10.2021, 12:18

Aber es soll doch so lange die Variable auto.lädt true sein bis 2 Minuten lang nur Werte unter 1500 geschickt werden.
Dann passt doch das Verhalten oder?
--------------------------------------------
356 Kanäle in 50 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten:
1x HmIP-CCU3, 1x HmIP-HAP, 1x CUX28, 1x HmIP-STHO-A, 2x HmIP-FSM, 1x HmIP-SPI, 1x HmIP-SAM, 1x HM-LC-Sw1-Pl-CT-R1, 1x HmIP-FSI16, 1x HmIP-SRH, 1x HmIP-eTRV-E, 6x HmIP-HEATING, 1x HmIP-BSL, 1x HmIP-FROLL, 7x HMIP-SWDO, 9x HmIP-BROLL, 6x HmIP-eTRV-2, 1x HmIP-BSM, 1x HmIP-BDT, 1x HmIP-SWSD, 2x HmIP-WTH-2, 1x HMIP-PS, 1x HmIP-PCBS, 1x HmIP-RCV-50, 1x HMIP-PSM
--------------------------------------------

rucksman007
Beiträge: 138
Registriert: 04.11.2018, 13:17
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von rucksman007 » 27.10.2021, 14:27

Zwenjo hat geschrieben:
27.10.2021, 12:18
Aber es soll doch so lange die Variable auto.lädt true sein bis 2 Minuten lang nur Werte unter 1500 geschickt werden.
Du hast völlig recht, mein Denkfehler. Ich schau mir das heute abend wie gesagt noch einmal ausführlich und im Detail an. Ist ja noch ein bisschen Zeit für die Implementierung, denn in den nächsten Wochen und Monaten wird der Strom aus der PV Anlage kaum zum Laden des Autos reichen :(

Danke für Deine Hilfe und Geduld!

rucksman007
Beiträge: 138
Registriert: 04.11.2018, 13:17
Hat sich bedankt: 7 Mal
Danksagung erhalten: 1 Mal

Re: Payload erst nach einer gewissen Wartezeit weiterleiten, wenn in dieser Zeit eine Bedingung erfüllt wird

Beitrag von rucksman007 » 02.11.2021, 10:56

Zwenjo hat geschrieben:
27.10.2021, 12:18
Dann passt doch das Verhalten oder?
Ich hab das jetzt ein paar Tage mit ein paar kleinen Modifikationen (nicht an der grundsätzlichen Logik) laufen lassen, und mir scheint, also ob das wie gewünscht funktioniert. Vielen Dank nochmal für Deine Hilfe! Ich muss noch an dem Intervall schrauben (mit 2 Minuten kommt in den Randzeiten zu oft ein AN/AUS) und vor allem die Logik mit der verzögerten Berechnung der Ladeleistung hinkriegen. Das wird noch eine kleinere Herausforderung. Da jetzt aber ohnehin die nächsten Monate zu wenig Sonne fürs Laden scheint, hab ich ja ein bisschen Zeit :)

Antworten

Zurück zu „RedMatic“