NEWS
Lichtschalterlogik mit NodeRed Flows
-
Hallo zusammen,
ich hatte mit mickym schon Kontakt (DANKE hierfür=). Nun wurde es aber doch zu "viel", sodass ich nun einen Thread eröffne.
Mein Ziel ist es, mit einem NodeRed-Flow einen Shelly auf eine bestimmte Helligkeit einzuschalten Das ganze aber in Abhängigkeit mit ein paar Abhängigkeiten. Involviert sind:
Türkontakt der Wohnungstüre bei geöffnet = true
Bewegungsmelder innen bei "keine Bewegung" = false
Tag/Nacht-Variable (kommt von Homematic) bei Nacht = 1
Licht shelly = 0Man mag sich über den Bewegungsmelder wundern. Ist aber Absicht. Er befindet sich innen und durch die "KEINE Bewegung" erkenne ich, dass die Türe von außen geöffnet wurde. Das Licht soll also nur beim heimkommen angeschaltet werden.
Den Zustand des Shellys würde ich mit Abfragen, damit die Helligkeit nicht nochmal gesetzt wird, falls dieser schon an ist.Das Licht soll also nur Nachts beim heimkommen angehen und nicht überschrieben werden, falls es schon an ist.
Also WENN Türkontakt=true, UND Tag/Nacht = 1, UND Bewegungsmelder = false, UND shelly = false
DANN shelly = true + helligkeit = 50%Hier mein Test-Flow, der offensichtlich falsch ist. Müsste die Bedingungen irgendwie mit einem UND verknüpfen statt diese in einer Reihe zu haben.
[ { "id": "755fb288.0a7324", "type": "tab", "label": "TEST", "disabled": false, "info": "" }, { "id": "14218750.b755f1", "type": "ioBroker in", "z": "755fb288.0a7324", "name": "Kontakt Wohnungstüre:1.STATE", "topic": "hm-rpc.0.OEQ0702785.1.STATE", "payloadType": "value", "onlyack": false, "func": "rbe", "gap": "", "x": 150, "y": 180, "wires": [ [ "f338dfa9.155c18" ] ] }, { "id": "dc2b55f6.8ce4", "type": "comment", "z": "755fb288.0a7324", "name": "Flurlicht bei Türkontakt", "info": "", "x": 121, "y": 131, "wires": [] }, { "id": "f338dfa9.155c18", "type": "switch", "z": "755fb288.0a7324", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 390, "y": 180, "wires": [ [ "4ed48962.63c838" ] ] }, { "id": "1adaf79c.334de8", "type": "change", "z": "755fb288.0a7324", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "eiiiin", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 991, "y": 180, "wires": [ [ "60f4c46c.4cd724" ] ] }, { "id": "60f4c46c.4cd724", "type": "ui_text", "z": "755fb288.0a7324", "group": "61162a7c.03086c", "order": 10, "width": 0, "height": 0, "name": "", "label": "text", "format": "{{msg.payload}}", "layout": "row-spread", "x": 1190, "y": 184, "wires": [] }, { "id": "f6c595f7.a9c188", "type": "ioBroker in", "z": "755fb288.0a7324", "name": "Tag/Nacht-Modus", "topic": "hm-rega.0.2161", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 548, "y": 130, "wires": [ [ "4ed48962.63c838", "5c9cb3fc.9a4a54" ] ] }, { "id": "4ed48962.63c838", "type": "switch", "z": "755fb288.0a7324", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "1", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 548, "y": 180, "wires": [ [ "1ba1c30f.0d997d" ] ] }, { "id": "5c9cb3fc.9a4a54", "type": "debug", "z": "755fb288.0a7324", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 730, "y": 56, "wires": [] }, { "id": "1ba1c30f.0d997d", "type": "switch", "z": "755fb288.0a7324", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 769, "y": 180, "wires": [ [ "1adaf79c.334de8" ] ] }, { "id": "be640c5d.caa7d8", "type": "ioBroker in", "z": "755fb288.0a7324", "name": "Bewegungsmelder", "topic": "hm-rpc.0.OEQ0488147.1.MOTION", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 768, "y": 133, "wires": [ [ "5c9cb3fc.9a4a54", "1ba1c30f.0d997d" ] ] }, { "id": "61162a7c.03086c", "type": "ui_group", "name": "Schalter", "tab": "d083d97.c27afa8", "order": 1, "disp": true, "width": "7", "collapse": false }, { "id": "d083d97.c27afa8", "type": "ui_tab", "name": "Licht", "icon": "dashboard", "order": 3, "disabled": false, "hidden": false } ]
Ich danke euch schonmal für eure Ideen bzw. Gedankenanstöße. Vll lässt sich das auch schicker regeln? Wie macht Ihr sowas?
-
@tomily Du kannst das schon so machen, aber wie gesagt die Nachrichten warten nicht auf Dich. Speichere den Status des Tag/Nacht Modus und des Bewegungsmelders in einer Flow Variablen dann geht das schon so mit dem Flow. In den switch Nodes vergleichst Du aber nicht die payload, sondern mit dem Zustand der Flow Variablen.
Ich würde mir auch mal überlegen, ob Du nicht doch die Adaptereinstellungen änderst und wirklich immer alles als Strings bearbeiten willst. Ich empfehle das umzustellen je eher desto besser - dann musst Du aber auch mit den richtigen Datentypen arbeiten und nicht mit Strings. Je später Du das machst, desto größer wäre später der Umstellungsaufwand. Du musst dann alle Flows überrpüfen mit iobroker in Nodes.Die Flow-Variablen müssen halt gleich beim Start des Flows gefüllt werden, deshalb in den In-Nodes die entsprechende Einstellung wählen. (Fire by start).
Wie gesagt die Nachrichten - so wie Du sie gestellt hast, warten nicht auf Dich. Habe Deinen Flow dementsprechend angepasst!
Der Status des Shelly war nicht in dem Flow - den musst halt dann ebenfalls in einer Flowvariable abspeichern. UND Verknüpfungen in Reihe/Serie sind schon richtig. ODER Verknüpfungen parallel - wobei man die in einer switch Node mit verschiedenen Ausgängen zusammenfassen kann. Falls diese nicht unterschiedlich behandelt werden, führt man sie halt anschließend wieder zusammen.
Nur die Zustände Deiner Bedingungen müssen jederzeit im Flow verfügbar sein, deswegen müssen die states der Datenpunkte in Flowvariablen gespeichert werden. -
@mickym Ach sehr geil!!!!
Ich hatte mir das Beispiel angeschaut aber nicht ganz verstanden. Durch deine Anpassung an meine Datenpunkte ist es mir aber klar geworden. Und siehe da....es hat sofort funktioniert.Werde das gleich kopieren und auf mehrere Szenarien anwenden.
DANKE!!!!!!
-
@mickym
Hey, ich dachte ich hatte es verstanden und habe mir die Logik einfach kopiert und leicht angepasst. Ich wollte, dass beim Umschalten auf Nacht, EINMALIG alle Helligkeiten gesetzt werden.Das klappt auch, allerdings ist jedes Mal bei NACHT + Ausgeschaltetem Licht die Bedingung erfüllt, sodass sich der Wert nach jedem ausschalten des Lichtes zurück setzt
Vermutlich wird die Variable Tag/Nacht ständig aktualisiert? Kann ich das auch noch abfangen?
-
-
@mickym
Es steht schon auf diesem Wert. Hier der Flow:[ { "id": "2e430224.ada696", "type": "tab", "label": "TEST", "disabled": false, "info": "" }, { "id": "49a28ceb.5873ec", "type": "switch", "z": "2e430224.ada696", "name": "tag ?", "property": "nacht", "propertyType": "flow", "rules": [ { "t": "eq", "v": "0", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 310, "y": 140, "wires": [ [ "b3ee6219.89e688" ] ] }, { "id": "34b29f5e.7ef208", "type": "ioBroker out", "z": "2e430224.ada696", "name": "Shelly1.Brightness", "topic": "shelly.0.SHDM-2#40F520010A41#1.lights.brightness", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 948, "y": 140, "wires": [] }, { "id": "ff465606.3027a", "type": "change", "z": "2e430224.ada696", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "100", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 710, "y": 140, "wires": [ [ "34b29f5e.7ef208" ] ] }, { "id": "1c3e979f.79d078", "type": "ioBroker in", "z": "2e430224.ada696", "name": "Shelly1.Switch", "topic": "shelly.0.SHDM-2#40F520010A41#1.lights.Switch", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 330, "y": 83, "wires": [ [ "2215cb91.1dd0bc" ] ] }, { "id": "2215cb91.1dd0bc", "type": "change", "z": "2e430224.ada696", "name": "", "rules": [ { "t": "set", "p": "shelly1", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 510, "y": 83, "wires": [ [] ] }, { "id": "b3ee6219.89e688", "type": "switch", "z": "2e430224.ada696", "name": "shelly1 false?", "property": "shelly1", "propertyType": "flow", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 501, "y": 140, "wires": [ [ "ff465606.3027a" ] ] }, { "id": "5cb0c981.a7513", "type": "ioBroker in", "z": "2e430224.ada696", "name": "Tag/Nacht-Modus", "topic": "hm-rega.0.2161", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "fireOnStart": "true", "x": 119, "y": 140, "wires": [ [ "49a28ceb.5873ec", "d5441f96.629298" ] ] }, { "id": "d5441f96.629298", "type": "switch", "z": "2e430224.ada696", "name": "nacht ?", "property": "nacht", "propertyType": "flow", "rules": [ { "t": "eq", "v": "1", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 320, "y": 182, "wires": [ [ "2b4e6103.d8fb6e" ] ] }, { "id": "39b72367.ee655c", "type": "change", "z": "2e430224.ada696", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "30", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 711, "y": 182, "wires": [ [ "34b29f5e.7ef208" ] ] }, { "id": "2b4e6103.d8fb6e", "type": "switch", "z": "2e430224.ada696", "name": "shelly1 false?", "property": "shelly1", "propertyType": "flow", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 502, "y": 182, "wires": [ [ "39b72367.ee655c" ] ] } ]
-
@tomily Na dann darf es nur bei Änderungen raus kommen. Wenn das dauernd wechselt - dann stimmt doch was an dem Datenpunkt nicht.
Hänge mal eine Debug Node dran und beobachte was da wann rauskommt.
Was für ein Homematic Punkt gibt Dir den Tag/Nacht Signale ?? (hm-rega.0.2161).
Du kannst ja sowohl eine Debug Node direkt am Anfang setzen und eine an die beiden Change Nodes - dann siehst Du ja auch ob wirklich was in die out Node geschickt wird. Das ist ja das schöne an Node Red, dass da so einfach zu überprüfen ist.Wäre es da nicht sinnvoller eine Scheduler Node dranzuhängen - schau Dir mal den Lightscheduler an, den finde ich super und nutze den. Diese Node habe ich im Übrigen auch hier nochmal ausführlich besprochen/vorgestellt?
Mit dem Ausschalten des Lichts hat das übrigens nichts zu tun. Der Flow wird ja ausschließlich von der Tag/Nacht Node getriggert.
-
@mickym
Moinsen,habe beim debuggen herausgefunden, dass die Tag/Nacht sekündlich neu getriggert wurde, da ich in einem ganz anderen Node durch den Input/Output Passtrough einen Loop gebaut habe
Habe diesen entfernt und das Problem scheint gelöst. Da das Licht nach dem Ausschalten die letzte Bedingung erfüllt hat und der Tag/Nacht ständig neu getriggert hat, hat es für mich so ausgesehen, als ob es ständig nach dem ausschalten passiert.
Also wieder was gelernt und das Problem beisitigt
Danke für den Tipp mit der NOde. Sieht gut aus und ich finde definitiv auch verwendung dafür. Da die Homematic in diesem Fall das führende System ist, macht die Tag/Nacht Variable für mich hier am meisten Sinn.
Liebe Grüße und schönen Rest-Feiertag