NEWS
Function Node welche zwei Werte vergleicht
-
@mickym
ja bekomme die Nachricht Heute ist Sonntag -
@1984chris Ja das Retain Flag kannst Du wieder löschen - wenn Du in die gleiche Node einen leeren String injiizierst. Dann neustarten und es sollte nicht mehr kommen.
Das Retain Flag bleibt aber auf "wahr"
-
Wenn das soweit funktioniert, dann speichern wir die Laufzeit in Minuten in mqtt und lesen die dann beim Neustart wieder ein.
-
@mickym
jetzt kommt bei einem neustart ger nichts mehr....ist das so richtig? -
@1984chris Genau. Weil wir so das Retain Flag wieder löschen.
-
@mickym
ok. -
@1984chris Ok dann kannst diese Nodes wieder löschen.
Also zurück zum Flow.
Du hast jetzt das Pollintervall auf 60000 gesetzt und die Nachrichten werden mit der SwitchNode gefiltert, dass NUR Nachrichten durchkommen, wenn die WP eingeschaltet ist.Hier die ChangeNode, die die Nachrichten zählt.
Die Laufzeit kannst du in einer Debug Node ausgeben und gleichzeitig hängst Du eine mqtt Node an, in der Du die Laufzeit retained speicherst.
Wenn Du dann Deinen Kontext aufmachst (Du musst manuell aktualisieren)
Dann sollte jetzt alle Minuten (aber nur solange die WP eingeschaltet ist) hochzählen.
-
@mickym
das funktioniert. -
@1984chris Gut in der anschliessenden switch Node geben wir die maximale Laufzeit ein und prüfen, ob die Laufzeit überschritten ist. Zum Test habe ich es mal auf 5 Minuten eingestellt. Das musst Du halt später auf 300 stellen, wenn die WP max. 5 Std. am gelaufen sein darf. Sprich wenn 6 Minuten bzw. 301 Minuten erreicht sind, wird die Ruhezeit gestartet ( zum Test auf 1 Minute in der Trigger Node eingestellt - später halt die Zeit, die halt die Pause dauern soll)
- die WP ausgeschaltet
- die Pausenzeit startet
Hier der Import:Wenn es funktioniert, dann machen wir noch die Abschlussarbeiten.
-
@mickym
so habe das jetzt probiert funktioniert so nach 1 Minute Pause startet das ganze wieder von vorn... -
@1984chris sagte in Function Node welche zwei Werte vergleicht:
@mickym
so habe das jetzt probiert funktioniert so nach 1 Minute Pause startet das ganze wieder von vorn...Gut - dann müssen wir nur verhindert, dass nachdem die Pumpe ausgeschaltet wurde, die durch den anderen Flow wieder eingeschaltet wird.
Deswegen machen wir nun noch einen Filter in den oberen Ast, der die WP einschaltet, der die Nachrichten nur durchlässt, solange die max. Laufzeit noch nicht erreicht wurde
Zum Schluß lesen wir falls NodeRed neugestartet wurde via mqtt die Laufzeit wieder ein
-
@mickym
bei der Change Node setze flow.LaufzeitWP was muss ich da einstellen? -
@1984chris sagte in Function Node welche zwei Werte vergleicht:
@mickym
bei der Change Node setze flow.LaufzeitWP was muss ich da einstellen?Na die payload aus der mqtt-out Node enthält ja die gespeicherte Laufzeit und damit initialisieren wir wieder die Flowvariable LaufzeitWP
-
@mickym
Danke,werde das probieren und muss mir noch überlegen wie ich das auf die Poolpumpe übertrage. -
@1984chris
für die brauche ich ja eine Mindestlaufzeit von 6 Stunden am Tag... -
@1984chris Na ja ich denke - wenn Du die Logik begreifst, dann wirst Du das schon selbst schaffen.
-
@mickym
werde es probieren und melde mich.
Danke -
@mickym
@mickym
ich begreife die Logik nicht.
Habs probiert.
Wieso bekommt jetzt nach Ablauf der Pause der shelly kein true mehr aber Pumpe schon?[ { "id": "c00995b3e526eedf", "type": "shelly-gen2", "z": "b7365eb2cd9f043a", "hostname": "192.168.1.110", "description": "", "mode": "polling", "server": "", "outputmode": "event", "uploadretryinterval": 5000, "pollinginterval": "60000", "pollstatus": true, "getstatusoncommand": true, "devicetype": "Relay", "outputs": 1, "x": 3020, "y": 600, "wires": [ [ "f95b5910053d7931", "12d5210d37cca83a" ] ] }, { "id": "12d5210d37cca83a", "type": "debug", "z": "b7365eb2cd9f043a", "name": "Status shelly", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 3230, "y": 520, "wires": [] }, { "id": "f95b5910053d7931", "type": "switch", "z": "b7365eb2cd9f043a", "name": "Check WP", "property": "payload.switch0.output", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 3210, "y": 600, "wires": [ [ "a81280bcde91cb43" ] ] }, { "id": "a81280bcde91cb43", "type": "change", "z": "b7365eb2cd9f043a", "name": "Setze Laufzeit", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "LaufzeitWP", "tot": "flow" }, { "t": "set", "p": "payload", "pt": "msg", "to": "$exists(payload) ? payload : 0", "tot": "jsonata" }, { "t": "set", "p": "payload", "pt": "msg", "to": "payload + 1", "tot": "jsonata" }, { "t": "set", "p": "LaufzeitWP", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3400, "y": 600, "wires": [ [ "8dc301ec673ad604", "6952778507c39b73", "8b7cf8516fdd7fa9" ] ] }, { "id": "8dc301ec673ad604", "type": "debug", "z": "b7365eb2cd9f043a", "name": "Laufzeit", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 3580, "y": 520, "wires": [] }, { "id": "6952778507c39b73", "type": "mqtt out", "z": "b7365eb2cd9f043a", "name": "", "topic": "Laufzeit WP", "qos": "", "retain": "true", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "642915c7f69dceb8", "x": 3570, "y": 680, "wires": [] }, { "id": "8b7cf8516fdd7fa9", "type": "switch", "z": "b7365eb2cd9f043a", "name": "Laufzeitlimit erreicht?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "2", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 3640, "y": 600, "wires": [ [ "a99fb16f9e1aaf53" ] ] }, { "id": "a99fb16f9e1aaf53", "type": "trigger", "z": "b7365eb2cd9f043a", "name": "", "op1": "false", "op2": "0", "op1type": "bool", "op2type": "str", "duration": "0", "extend": false, "overrideDelay": false, "units": "ms", "reset": "true", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 3860, "y": 600, "wires": [ [ "d32930fee61a93db" ] ] }, { "id": "d32930fee61a93db", "type": "trigger", "z": "b7365eb2cd9f043a", "name": "PauseWP ", "op1": "false", "op2": "true", "op1type": "bool", "op2type": "bool", "duration": "1", "extend": false, "overrideDelay": false, "units": "min", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 2, "x": 4040, "y": 600, "wires": [ [ "0df1fcecdcb502cd", "b7384ed837f983ef" ], [ "878c47ba3fe7f98d", "b7384ed837f983ef" ] ] }, { "id": "d64cd3672f38dec5", "type": "debug", "z": "b7365eb2cd9f043a", "name": "Ergebnis für Shelly 1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 4480, "y": 540, "wires": [] }, { "id": "0df1fcecdcb502cd", "type": "change", "z": "b7365eb2cd9f043a", "name": "PauseWP", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{\t \"method\": \"Switch.Set\",\t \"parameters\" : {\t \"id\" : 0,\t \"on\": payload \t }\t}", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 4220, "y": 540, "wires": [ [ "d64cd3672f38dec5" ] ] }, { "id": "878c47ba3fe7f98d", "type": "change", "z": "b7365eb2cd9f043a", "name": "", "rules": [ { "t": "set", "p": "LaufzeitWP", "pt": "flow", "to": "0", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 4240, "y": 720, "wires": [ [ "a99fb16f9e1aaf53" ] ] }, { "id": "dbb3de1955f4208b", "type": "mqtt in", "z": "b7365eb2cd9f043a", "name": "", "topic": "Laufzeit WP", "qos": "2", "datatype": "auto-detect", "broker": "642915c7f69dceb8", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 3790, "y": 740, "wires": [ [ "80e2f07516e1e78f" ] ] }, { "id": "80e2f07516e1e78f", "type": "change", "z": "b7365eb2cd9f043a", "name": "", "rules": [ { "t": "set", "p": "LaufzeitWP", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3980, "y": 740, "wires": [ [] ] }, { "id": "b7384ed837f983ef", "type": "change", "z": "b7365eb2cd9f043a", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload ? \"Pumpe ein 1\" : \"Pumpe aus 0\"", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 4270, "y": 600, "wires": [ [ "f44b626f907ee971" ] ] }, { "id": "f44b626f907ee971", "type": "debug", "z": "b7365eb2cd9f043a", "name": "Ergebnis für Poolpumpe1 nach pause", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 4550, "y": 600, "wires": [] }, { "id": "642915c7f69dceb8", "type": "mqtt-broker", "name": "", "broker": "192.168.1.154", "port": "1883", "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "autoUnsubscribe": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
-
Nun Du musst den ganzen Flow beachten - sprich der obige Flow gehört ja mit dazu, da ja nicht in jedem Fall eingeschaltet werden soll, wenn die Laufzeit abgelaufen ist, sondern nur dann, wenn entsprechender Überschuss beim Pausenende vorhanden ist.
Sowas ist schon macht keinen Sinn, weil Du gleichzeit AUS- und EINSCHALTEST.
Das ist der Originalflow und der SCHALTER nur die Pumpe aus und dann startet die Pause.
Gleichzeitig musst Du aber doch den Hauptflow betrachten.
Hier wird doch ein Wiedereinschalten verhindert, weil die max. Laufzeit überschritten ist. Das Ausschalten spielt keine Rolle, weil es ja eh schon ausgeschaltet ist bzw. wie unten geändert ausgeschaltet wird.
Wenn die Zwangspause vorbei ist, dann wird gar nichts geschaltet, sondern lediglich die Laufzeit wieder auf 0 gesetzt und der Block zurückgesetzt.
Das Einschalten muss ja dann auch wieder der normalen Logik folgen und darf ja nur erfolgen, wenn Soc und Überschuss ein Einschalten erfordern. Trotzdem ist mir noch ein Fehler aufgefallen, da der Filter oben blockiert - deswegen musst Du das Ausschaltsignal nach oben zu dem Filter durchreichen! Ich zeig es dir in der folgenden Abbildung:
PS: Entschuldige manchmal meine Ausdrucksweise. Ich gebe mir wieder mehr Mühe um die korrekte Ausdrucksweise.
-
Was ggf. auch nochzu bedenken ist, ob Du die Laufzeit ggf. zurücksetzt, wenn eine Pause durch das Ausschalten der Pumpe nicht mehr erforderlich ist, da sie eh lange genug ausgeschaltet war.