NEWS
mit Node-Red per HomeConnect den Geschirrspüler starten
-
@Dancekid
Hi, ich selber habe den Connect Adapter nicht. Zeig doch mal was du da für Datenpunkte hast. Was wird denn in den Datenpunkt reingeschrieben wenn du über das Dropdown Menü ein Programm auswählst? Dann könntest du mal zeigen was du schon an Flow erstellt hast.
Verfügbare States auslesen kann man mit Node Red eigentlich nicht, sondern nur den aktuellen State. Entweder mit ner Iobrker In Node, aber dann bekommst du nur bei aktualisierung oder Änderung was raus.
Man kann sonst ne Get Node nehmen und die mit etwas Triggern, zum testen zum Beispiel ne Injekt Node, dann kriegst du aber auch nur den aktuellen Status.
-
Guten Abend Frankyboy,
anbei eine Hardcopy.
Ich möchte auf 3 Bedingungen prüfen:
- Ist am Geschirrspüler Fernstart aktiviert (TRUE) ?
- Läuft derzeit kein Programm (TRUE) ?
- ist die PV-Leistung > 5.000 Watt (Zahl größer 5.000). ggf auch umwandeln in TRUE
Dann eine Function Node die prüft, ob alle 3 Inputs = TRUE sind und dann den Trigger unten startet.
Wie baue ich die Function Node ?
Zusätzlich soll die Prüfung alle 10 Minuten erneut erfolgen. Wie stelle ich das ein ?
Grüße Michael
-
Hi, wo durch soll die Abfrage denn ausgelöst werden? Wann soll das 10 Minuten Abfrage Intervall beendet werden? Was für Werte kommen aus dem Active Programm raus, wenn keins aktiv ist.
Ich habe da erst mal was zusammengestellt, so wie ich es verstanden habe, Auslöser für die Abfrage ist eine Änderung bei den 3 Datenpunkten, sind die 3 Bedingungen erfüllt, starte ich den Trigger, solange sie erfüllt sind wird alle 10 Minuten wieder abgefragt, ist eine nicht mehr erfüllt, läuft der Trigger nicht mehr weiter. Ich habe eine Lösung mit Switches gemacht und eine mit ner Funktion Node, bei der mit der Funktion Node musst du darauf achten das du bei den Get Nodes unterschiedliche Atribute einträgst, für die Abfrage in der Funktion Node, in meinem Beispiel var1, var2, var3. Auf was ich bei Active Programm abfragen musste weiß ich nicht, das musst du dann anpassen.
[ { "id": "2b76f1ca.e8102e", "type": "ioBroker get", "z": "523fbe1.477244", "name": "Geschirrspüler Fernsatrt", "topic": "", "attrname": "payload", "payloadType": "value", "x": 550, "y": 420, "wires": [ [ "2b07f4f3.6d117c" ] ] }, { "id": "716681ac.d4726", "type": "ioBroker get", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "attrname": "payload", "payloadType": "value", "x": 890, "y": 420, "wires": [ [ "39b85f5c.1eff2" ] ] }, { "id": "4ce27e2e.97643", "type": "ioBroker get", "z": "523fbe1.477244", "name": "PV Leistung", "topic": "", "attrname": "payload", "payloadType": "value", "x": 1190, "y": 420, "wires": [ [ "28778076.67cd9" ] ] }, { "id": "2b07f4f3.6d117c", "type": "switch", "z": "523fbe1.477244", "name": "true", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 730, "y": 420, "wires": [ [ "716681ac.d4726" ] ] }, { "id": "39b85f5c.1eff2", "type": "switch", "z": "523fbe1.477244", "name": "false?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 1050, "y": 420, "wires": [ [ "4ce27e2e.97643" ] ] }, { "id": "28778076.67cd9", "type": "switch", "z": "523fbe1.477244", "name": ">5000", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "5000", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 1330, "y": 420, "wires": [ [ "e8bd78aa.07e778" ] ] }, { "id": "e8bd78aa.07e778", "type": "trigger", "z": "523fbe1.477244", "op1": "", "op2": "0", "op1type": "nul", "op2type": "str", "duration": "10", "extend": false, "units": "min", "reset": "", "bytopic": "all", "name": "", "x": 800, "y": 560, "wires": [ [ "2b76f1ca.e8102e" ] ] }, { "id": "6cb99cda.d76024", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Geschirspüler Fernstart", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 140, "y": 360, "wires": [ [ "2b76f1ca.e8102e" ] ] }, { "id": "173d04d9.1d8bcb", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 120, "y": 420, "wires": [ [ "2b76f1ca.e8102e" ] ] }, { "id": "2dc61cad.57acb4", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "PV Leistung", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 110, "y": 460, "wires": [ [ "2b76f1ca.e8102e" ] ] } ]
[ { "id": "1a82aa35.49d156", "type": "function", "z": "523fbe1.477244", "name": "Funktion", "func": "if(msg.var1 == 'true' & msg.var2 == 'false' & msg.var3 > '5000') {\n msg.payload = true;\n }\nelse{\n msg.payload = false;\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, "x": 1060, "y": 760, "wires": [ [ "60d618ca.eaf2d8" ] ] }, { "id": "af010997.431768", "type": "ioBroker get", "z": "523fbe1.477244", "name": "Geschirrspüler Fernsatrt", "topic": "", "attrname": "var1", "payloadType": "value", "x": 470, "y": 760, "wires": [ [ "c6fb15af.f84dd8" ] ] }, { "id": "c6fb15af.f84dd8", "type": "ioBroker get", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "attrname": "var2", "payloadType": "value", "x": 710, "y": 760, "wires": [ [ "d5b8df78.b0363" ] ] }, { "id": "d5b8df78.b0363", "type": "ioBroker get", "z": "523fbe1.477244", "name": "PV Leistung", "topic": "", "attrname": "var3", "payloadType": "value", "x": 890, "y": 760, "wires": [ [ "1a82aa35.49d156" ] ] }, { "id": "d7b3b3e4.6348b", "type": "trigger", "z": "523fbe1.477244", "op1": "", "op2": "0", "op1type": "nul", "op2type": "str", "duration": "10", "extend": false, "units": "min", "reset": "", "bytopic": "all", "name": "", "x": 800, "y": 840, "wires": [ [ "af010997.431768" ] ] }, { "id": "7f3c83e8.f3b03c", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Geschirspüler Fernstart", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 160, "y": 700, "wires": [ [ "af010997.431768" ] ] }, { "id": "12106976.2c09d7", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 140, "y": 760, "wires": [ [ "af010997.431768" ] ] }, { "id": "aa63298e.f587d8", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "PV Leistung", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 130, "y": 800, "wires": [ [ "af010997.431768" ] ] }, { "id": "60d618ca.eaf2d8", "type": "switch", "z": "523fbe1.477244", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 1210, "y": 760, "wires": [ [ "d7b3b3e4.6348b" ] ] } ]
-
Hi, mir fällt da gerade ein, du brauchst ja auch ne Ausgabe ob die Bedingung nicht erfüllt ist und bei der Lösung mit Switches auch ein true und false als Ausgabe. Habe das noch mal angepasst.
[ { "id": "d73c98e2.9ea268", "type": "ioBroker get", "z": "523fbe1.477244", "name": "Geschirrspüler Fernsatrt", "topic": "", "attrname": "payload", "payloadType": "value", "x": 530, "y": 340, "wires": [ [ "3e8c5459.06247c" ] ] }, { "id": "38f320e2.91c3a", "type": "ioBroker get", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "attrname": "payload", "payloadType": "value", "x": 870, "y": 340, "wires": [ [ "3a22e2f.e30901e" ] ] }, { "id": "2a5d258b.fb779a", "type": "ioBroker get", "z": "523fbe1.477244", "name": "PV Leistung", "topic": "", "attrname": "payload", "payloadType": "value", "x": 1170, "y": 340, "wires": [ [ "7ab1948f.c52f3c" ] ] }, { "id": "3e8c5459.06247c", "type": "switch", "z": "523fbe1.477244", "name": "true", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 710, "y": 340, "wires": [ [ "38f320e2.91c3a" ] ] }, { "id": "3a22e2f.e30901e", "type": "switch", "z": "523fbe1.477244", "name": "false?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 1030, "y": 340, "wires": [ [ "2a5d258b.fb779a" ] ] }, { "id": "7ab1948f.c52f3c", "type": "switch", "z": "523fbe1.477244", "name": ">5000", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "5000", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 1310, "y": 340, "wires": [ [ "612dcfe.fca2b3", "5a698f6b.d4c9a" ] ] }, { "id": "612dcfe.fca2b3", "type": "trigger", "z": "523fbe1.477244", "op1": "", "op2": "0", "op1type": "nul", "op2type": "str", "duration": "10", "extend": false, "units": "min", "reset": "", "bytopic": "all", "name": "", "x": 780, "y": 480, "wires": [ [ "d73c98e2.9ea268" ] ] }, { "id": "d0e58f58.bd0d6", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Geschirspüler Fernstart", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 120, "y": 280, "wires": [ [ "d73c98e2.9ea268", "defb4feb.df46b" ] ] }, { "id": "aa3d10f9.ea131", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 100, "y": 340, "wires": [ [ "d73c98e2.9ea268", "213c853d.36504a" ] ] }, { "id": "4ac82860.d64cd8", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "PV Leistung", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 90, "y": 380, "wires": [ [ "d73c98e2.9ea268", "8a00def.c6d192" ] ] }, { "id": "defb4feb.df46b", "type": "switch", "z": "523fbe1.477244", "name": "false", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "false", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 450, "y": 440, "wires": [ [ "bdf487ac.319b58" ] ] }, { "id": "213c853d.36504a", "type": "switch", "z": "523fbe1.477244", "name": "true?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 450, "y": 480, "wires": [ [ "bdf487ac.319b58" ] ] }, { "id": "8a00def.c6d192", "type": "switch", "z": "523fbe1.477244", "name": "<5000", "property": "payload", "propertyType": "msg", "rules": [ { "t": "lt", "v": "5000", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 450, "y": 520, "wires": [ [ "bdf487ac.319b58" ] ] }, { "id": "5a698f6b.d4c9a", "type": "function", "z": "523fbe1.477244", "name": "true", "func": "msg.payload = true;\nreturn msg;", "outputs": 1, "noerr": 0, "x": 1450, "y": 340, "wires": [ [] ] }, { "id": "bdf487ac.319b58", "type": "function", "z": "523fbe1.477244", "name": "false", "func": "msg.payload = false;\nreturn msg;", "outputs": 1, "noerr": 0, "x": 1450, "y": 400, "wires": [ [] ] } ]
[ { "id": "ca75efe.bc75c1", "type": "function", "z": "523fbe1.477244", "name": "Funktion", "func": "if(msg.var1 == 'true' & msg.var2 == 'false' & msg.var3 > '5000') {\n msg.payload = true;\n }\nelse{\n msg.payload = false;\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, "x": 1100, "y": 640, "wires": [ [ "bb820c17.dc36c" ] ] }, { "id": "8b1d74e.9d92688", "type": "ioBroker get", "z": "523fbe1.477244", "name": "Geschirrspüler Fernsatrt", "topic": "", "attrname": "var1", "payloadType": "value", "x": 510, "y": 640, "wires": [ [ "d53f73a2.7eb0c" ] ] }, { "id": "d53f73a2.7eb0c", "type": "ioBroker get", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "attrname": "var2", "payloadType": "value", "x": 750, "y": 640, "wires": [ [ "4ff8f925.9c6d78" ] ] }, { "id": "4ff8f925.9c6d78", "type": "ioBroker get", "z": "523fbe1.477244", "name": "PV Leistung", "topic": "", "attrname": "var3", "payloadType": "value", "x": 930, "y": 640, "wires": [ [ "ca75efe.bc75c1" ] ] }, { "id": "b6a16e59.16b1e", "type": "trigger", "z": "523fbe1.477244", "op1": "", "op2": "0", "op1type": "nul", "op2type": "str", "duration": "10", "extend": false, "units": "min", "reset": "", "bytopic": "all", "name": "", "x": 840, "y": 720, "wires": [ [ "8b1d74e.9d92688" ] ] }, { "id": "65763ff.16b89c", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Geschirspüler Fernstart", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 200, "y": 580, "wires": [ [ "8b1d74e.9d92688" ] ] }, { "id": "3a49ef16.452ba", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "Active Programm", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 180, "y": 640, "wires": [ [ "8b1d74e.9d92688" ] ] }, { "id": "8a00676c.b3ea98", "type": "ioBroker in", "z": "523fbe1.477244", "name": "", "topic": "PV Leistung", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "x": 170, "y": 680, "wires": [ [ "8b1d74e.9d92688" ] ] }, { "id": "bb820c17.dc36c", "type": "switch", "z": "523fbe1.477244", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 650, "y": 720, "wires": [ [ "b6a16e59.16b1e" ] ] } ]
-
Guten Morgen Frankyboy,
die Prüfung alle 10 Minuten kann man auch weglassen, wenn er selber feststellt wann alle 3 Eingänge richtig sind.
Leider ist der Fernstart=TRUE auch nach dem Start des Geschirrspülers noch aktiv....Hatte zuerst versucht das in Blockly zu bauen
Prüfe alle 10 Minuten in der Zeit zwischen 10.00 - 18.00 Uhr, ob alle 3 Bedingungen = TRUE sind, dann starte das Programm.
Die 3. Bedingung prüft, ob bereits ein Programm läuft und müßte lauten:
Wenn BSH_Common_Root_ActiveProgramm = leer / null, dann starteDanke für die Beispiele.
Schaue mir gleich Deine Beispiele an. Besonders wie man die 3 Bedingungen in eine Function einbaut ist wichtig für mich.
Gruß Michael
-
Hallo Frankyboy,
habe zuerst 'null' probiert und dann ''.
Mit der 2. Variante funktioniert es jetzt.
Vielen Dank.
Grüße Michael Roth
-
@Dancekid
Hi, das freut mich.
Falls du mit ner Zeitlichen Abfrage arbeiten willst, Cron/Zeitplan gibts auch für Node Red, falls du das noch nicht weißt. Muss aber erst installiert werden. Unter Palette, installieren. node-red-contrib-cron -
Guten Morgen Frankyboy,
das schaue ich mir gleich noch an mit CRON; wo muss ich den denn einfügen ?
Derzeit läuft Node-Red jede Minute durch; wollte eigentlich nur die unnötigen Läufe vermeiden.Jetzt sagt er CRON Expression falsch.
0 0/10 9-18 ? * * *
Laut CRON Expression Generator sollte das bedeuten: zwischen 09.00 und 18.00 alle 10 Minuten starten ?!Muss man immer IOBroker IN + IOBroker GET verwenden oder reicht nur GET ?
Was ist der Unterschied zwischen GET und GET Objekt ?
Gruß Michael
-
@Dancekid
Hi, der Node Red Contrib Cron ist etwas anders als der Standart. Der erste Stern ist für die Sekunde, wenn man die nicht braucht macht man den einfach weg. Für deinen Fall sollte das so Klappen 0/10 9-18 * * *, Von Minute 0 an jede 10. Minute bis Minute 59, in der Zeit zwischen 9 bis 18.
Du musst nicht immer In und Get verwenden. Die In Nodes senden ne Message bei Änderung oder Aktualisierung, je nachdem was eingestellt ist. Die Get Nodes holen sich einen Wert wenn sie durchlaufen werden. Dafür braucht man dann allerdings nen Trigger der ein Signal an ihren Eingang schickt, entweder ne In Node oder ne Injekt oder Cron, usw.
Mit der Get Objekt habe ich mich noch nicht so viel beschäftigt. Da wird glaube ich eher der Name, bzw. das Topic des Objekts ausgelesen, damit man es weiter verarbeiten kann um eventuell Anzuzeigen welches Geträt etwas gemeldet hat. Bei der Get Node ist es der Zustand bzw. der Wert, man kann die Get aber auch auf Objekt umstellen. -
Hallo Frankyboy,
ich habe noch ein Problem beim Start des Geschirrspülers.
In den Objekten wird der State "BSH_Common_Root_ActiveProgram" als "leer" angezeigt.
Beim Auslesen über Node-Red wird allerdings noch der letzte Status angezeigt.
Habe IOBroker-Get und IOBroker-IN probiert.Gibt es da noch einen Trick ?
Gruß Michael
-
@Dancekid
Hi, eigentlich kann nur das ausgelesen werden was auch in dem Moment im Objekt drin steht. Wenn ich da was reinschreibe und das Objekt dann wieder leer mache, wird es mir auch sofort als leer angezeigt. Auch nur ein Leerzeichen wird mir als Leerzeichen angezeigt. Mache ich das weg, wird auch wieder nix angezeigt. Warum das bei dir so nicht klappt verstehe ich nicht. Node Red speichert selber keine Objektinhalte, sondern holt sich die Werte aus den Objekten, bei der In Node bei Änderung oder Aktualisierung, bei der Get Node wenn sie durchlaufen wird.
Man kann höchsten hinter die IN Node oder die Get Node ne Verzögerung machen, z.B. 10 Minuten, dann holt die Node sich den Wert und der wird dann erst 10 Minuten später weitergegeben, dann hätte man nen 10 Minuten alten Wert und keinen aktuellen.
Sonst zeig doch mal deinen aktuellen Flow.
-
Guten Morgen Frankyboy,
habe jetzt den Flow geändert und lese jetzt den Betriebsstatus aus.
ausgeschaltet = ...inactive
geschlossen & angeschaltet = ...readySo funktioniert der Start bei mir ab 6.000 PV-Leistung.
Gruß Michael
-
@Dancekid
Hi, danke für die Rückmeldung, schön das du es hinbekommen hast.Ich habe gesehen das du hinter der Funktion Node noch einen Switch hast, wahrscheinlich um die Nachricht nur durchzulassen wenn ein true kommt.
Falls es dich interessiert, das kann man auch in der Funktion Node lösen. Habe ich aber auch erst die Tage gecheckt wie das geht. Dazu das else payload = false wegmachen. Das return Message mit in die Klammer vom true rein. Dann wird nur eine Nachricht ausgegeben wenn diese Bedingung erfüllt ist. Macht man das return msg nicht mit in die Klammer und die Bedingung ist nicht erfüllt, leitet die Funktion Node die ankommenden Nachrichten einfach durch, was dann zu Problemen führen kann.
Will man mehrere Bedingungen Abfragen und nur ne Ausgabe haben wenn eine von denen erfüllt ist, aber wenn keine erfüllt ist auch keine Ausgabe, muss man das return msg bei jeder Abfrage hinten in die Klammer mit einfügen.
Aber das nur zur Info, viel Erfolg weiterhin.