NEWS
Inject Node und externer Taster
-
Hallo,
ich versuche einen Flow mittels externem Taster ein und auszuschalten. Der Flow wird mehrmals am Tag mit einer Inject-Node gestartet (Intervall) jedoch würde ich gerne den Flow über den Taster an der Wand de/aktivieren.
Ich habe schon einiges versucht, Function Noder (if - else) und auch die Combine - If Node, aber irgendwie komm ich nicht weiter.Ist es möglich mit einer Function Node bei Bedarf den Flow von außen Flow zu stoppen? Zur Zeit ist das mit einer "und" Logik gelöst.
[ { "id": "cb94dae72b52787d", "type": "tab", "label": "Flow 1", "disabled": false, "info": "", "env": [] }, { "id": "b3bab377eeb5196a", "type": "knxUltimate", "z": "cb94dae72b52787d", "server": "46bc7c174d9cbb62", "topic": "23/1/0", "outputtopic": "1", "dpt": "1.001", "initialread": 0, "notifyreadrequest": false, "notifyresponse": false, "notifywrite": true, "notifyreadrequestalsorespondtobus": false, "notifyreadrequestalsorespondtobusdefaultvalueifno tinitialized": "0", "listenallga": false, "name": "Beschattung ein/aus", "outputtype": "write", "outputRBE": false, "inputRBE": false, "formatmultiplyvalue": 1, "formatnegativevalue": "leave", "formatdecimalsvalue": 999, "passthrough": "no", "x": 260, "y": 280, "wires": [ [ "9f797de0d49f4172", "5b81a727abd404f8", "28f2e05ff898b2ec" ] ] }, { "id": "9f797de0d49f4172", "type": "debug", "z": "cb94dae72b52787d", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 570, "y": 220, "wires": [] }, { "id": "5b81a727abd404f8", "type": "knxUltimate", "z": "cb94dae72b52787d", "server": "46bc7c174d9cbb62", "topic": "23/1/1", "outputtopic": "", "dpt": "1.001", "initialread": 0, "notifyreadrequest": false, "notifyresponse": false, "notifywrite": true, "notifyreadrequestalsorespondtobus": false, "notifyreadrequestalsorespondtobusdefaultvalueifno tinitialized": "0", "listenallga": false, "name": "Beschattung status", "outputtype": "write", "outputRBE": false, "inputRBE": false, "formatmultiplyvalue": 1, "formatnegativevalue": "leave", "formatdecimalsvalue": 999, "passthrough": "no", "x": 590, "y": 280, "wires": [ [] ] }, { "id": "53b3045781867257", "type": "time-inject", "z": "cb94dae72b52787d", "name": "Inject", "nameInt": "Sonnenaufgang Ende - Sonnenuntergang B... =... ↻30min", "positionConfig": "d836509a.67bc4", "props": [ { "p": "", "pt": "msgPayload", "v": "true", "vt": "bool", "o": "", "oT": "none", "oM": "60000", "f": 0, "fS": 0, "fT": "Millisekunden UNIX-Zeit", "fI": "0", "next": true, "days": "*", "months": "*", "onlyOddDays": false, "onlyEvenDays": false, "onlyOddWeeks": false, "onlyEvenWeeks": false }, { "p": "", "pt": "msgTopic", "v": "2", "vt": "str", "o": "", "oT": "none", "oM": "60000", "f": 0, "fS": 0, "fT": "Millisekunden UNIX-Zeit", "fI": "0", "next": false, "days": "*", "months": "*", "onlyOddDays": false, "onlyEvenDays": false, "onlyOddWeeks": false, "onlyEvenWeeks": false } ], "injectTypeSelect": "interval-time", "intervalCount": "30", "intervalCountType": "num", "intervalCountMultiplier": 60000, "time": "sunriseEnd", "timeType": "pdsTime", "offset": 0, "offsetType": "none", "offsetMultiplier": 60000, "timeEnd": "sunsetStart", "timeEndType": "pdsTime", "timeEndOffset": 0, "timeEndOffsetType": "none", "timeEndOffsetMultiplier": 60000, "timeDays": "*", "timeOnlyOddDays": false, "timeOnlyEvenDays": false, "timeOnlyOddWeeks": false, "timeOnlyEvenWeeks": false, "timeMonths": "*", "timedatestart": "", "timedateend": "", "property": "", "propertyType": "none", "propertyCompare": "true", "propertyThreshold": "", "propertyThresholdType": "num", "timeAlt": "", "timeAltType": "entered", "timeAltDays": "*", "timeAltOnlyOddDays": false, "timeAltOnlyEvenDays": false, "timeAltOnlyOddWeeks": false, "timeAltOnlyEvenWeeks": false, "timeAltMonths": "*", "timeAltOffset": 0, "timeAltOffsetType": "none", "timeAltOffsetMultiplier": 60000, "once": false, "onceDelay": 0.1, "recalcTime": 2, "x": 210, "y": 380, "wires": [ [ "c8ddf5a5f8fadf07", "28f2e05ff898b2ec" ] ] }, { "id": "c8ddf5a5f8fadf07", "type": "debug", "z": "cb94dae72b52787d", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 370, "y": 440, "wires": [] }, { "id": "28f2e05ff898b2ec", "type": "BooleanLogic", "z": "cb94dae72b52787d", "name": "", "operation": "AND", "inputCount": 2, "topic": "result", "x": 520, "y": 380, "wires": [ [ "ec68c7f109cc5394", "3f146cd9e0e2d4b5" ] ] }, { "id": "ec68c7f109cc5394", "type": "debug", "z": "cb94dae72b52787d", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 690, "y": 340, "wires": [] }, { "id": "3f146cd9e0e2d4b5", "type": "switch", "z": "cb94dae72b52787d", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 990, "y": 380, "wires": [ [] ] }, { "id": "46bc7c174d9cbb62", "type": "knxUltimate-config", "host": "192.168.178.21", "port": "3671", "physAddr": "1.0.251", "suppressACKRequest": true, "csv": "", "KNXEthInterface": "Auto", "KNXEthInterfaceManuallyInput": "", "statusDisplayLastUpdate": true, "statusDisplayDeviceNameWhenALL": true, "statusDisplayDataPoint": false, "stopETSImportIfNoDatapoint": "stop", "loglevel": "error", "name": "MDT KNX IP Interface ", "localEchoInTunneling": true, "delaybetweentelegrams": "40", "delaybetweentelegramsfurtherdelayREAD": "1", "ignoreTelegramsWithRepeatedFlag": false, "keyringFileXML": "", "autoReconnect": "yes" }, { "id": "d836509a.67bc4", "type": "position-config", "name": "Johnsdorf/Brunn", "isValide": "true", "longitude": "0", "latitude": "0", "angleType": "deg", "timeZoneOffset": "99", "timeZoneDST": "0", "stateTimeFormat": "3", "stateDateFormat": "12", "contextStore": "" } ]
-
Was brauchst Du dafür eine Function Node - kompletter Nonsense. Blockiere halt einfach Deine Flows mit einer switch Node - und in dem Fall - ich importiere Deinen Flow nicht . weil ich keine Boolschen Nodes habe noch KNX - also mach lieber einen Screenshot und blockiere einfach Deinen Flow - was ist da schwierig? - kannst ja gleich hinter die Inject Node machen.
Wenn Du einen Taster hast dann kannst den DP doch auslesen und in eine FLow- oder Globale Variable stecken.
Also mach einen Screenshot mit der Inject NOde hinter die man die Blockade setzt. Dann postest Deinen Datenpunkt und ob der true oder false liefert. Und hört mit den function Nodes auf - ihr macht das Konzept von Node Red kaputt. Ihr könnt auch alle Euere Flows in einer Function NOde programmieren - damit sieht man die Logik nicht mehr - ist schwer zu debuggen und dann könnt ihr auch gleich Javascript schreiben und braucht kein Node Red dafür.
Hier mal zur Demonstration:
Und hier ein kleines Video - das zeigt - wie man mit einem iobroker Datenpunkte also Deinem Taster die Inject Node und damit den Flow blockiert oder aktiviert:
und wenn Du mehrere Flows mit Deinem Schalter blockieren willst - nimmst halt statt einer Flowvaribalen eine globale Variable. Dafür ist das Zeug ja da - das man hier assynchron arbeiten kann.
-
Vielen Dank, es funktioniert! Ich hab lange nach einer Lösung gesucht.
Ja gut man braucht also keine Function Nodes - ok ich werd es mir merken, es gibt (fast) immer eine andere Lösung.Was du mit dem Datenpunkt in iobroker meinst weiß ich allerdings nicht. Iobroker läuft bei mir als Docker Container aber hab ich nicht in Verwendung.
Lg
-
@hpgo ich verstehe nicht, warum Du den Taster (oben) mit dem Flow unten inject-Node Flow verbindest, außer Du wolltest einen direkten Trigger durch das Einschalten.