Ankündigung

Einklappen
Keine Ankündigung bisher.

Node-red: Hinterhertriggern von Werten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Node-red: Hinterhertriggern von Werten

    Hallo allerseits,

    in meinem Flur (und in anderen Räumen) habe ich (derzeit über Linknx) folgende Lichtsteuerung zum Ansprechen verschiedener Helligkeiten zu unterschiedlichen Tageszeiten realisiert:
    • Eine Zeitschaltuhr sendet je nach Uhrzeit einen Zahlenwert von 1 bis 4 auf eine GA (1/3/10). Damit wird "Nacht"==1, "Morgen"==2, "Tag"==3 und "Abend"==4 definiert.
    • Der Bewegungsmelder sendet stumpf den 8-Bit Wert "12" auf die GA (8/4/2), wenn eine Bewegung erkannt wird. *1)
    • Je nach Tageszeit erkennt Linknx den Befehl und schickt dann entsprechend eine andere Helligkeit hinterher (also z.B. bei Tag den 8-Bit Wert "220").
    Hierdurch habe ich eine Logik realisiert, die mir auch bei Ausfall noch eine benutzbare Helligkeit gewährleistet. Das Ganze läuft momentan noch auf einem (recht alten) Wiregate. Das funktioniert so schnell, dass man die erste Helligeitsstufe gar nicht wahrnimmt. Ich möchte das Wiregate allerdings ersetzen und spiele mit Node-Red, welches schon ein paar Logiken übernommen hat. Jetzt würde ich dieses Verhalten gerne über Node-Red nachbilden.

    Grundsätzlich funktioniert es auch (mal an einer Testlampe):
    image_119863.png


    Wenn man die 60 injiziert, wird direkt auf 10 heruntergedimmt. Soweit, so gut, aber die Verzweigung zu den unterschiedlichen Tageszeiten bekomme ich noch nicht hin.

    Was ich erreichen will:
    • Wenn auf GA (8/4/2) der Wert "12" kommt, wird je nach Tageszeit eine entsprechende Helligkeit hinterhergetriggert (also je nach Zustand der (GA 1/3/10) z.B. 85 oder 200 (oder 10 bei Nacht, um keine zyklische Widerholung zu provozieren).
    • Wenn auf der (1/3/10) ein neuer Wert gesendet wird, soll sich erst einmal nichts ändern. Ideal wäre es aber natürlich, wenn die Helligkeiten der Lampen entsprechend angepasst werden, die gerade aktuell in Betrieb sind (das ist aber ggf. was für später ...)
    • Auf keinen Fall darf die Beleuchtung angehen, wenn die Lampe gerade aus ist und eine neue Tageszeit auf der GA (1/3/19) gesendet wird.
    Habt Ihr Ideen, wie ich so etwas realisieren kann? Natürlich kann ich die GA 1/3/10 mit einem Change-Node in die gewünschten Helligkeitswerte umsetzen, aber ich bekomme es nicht hin, dass das Senden der "12" dann entsprechend das Nachtriggern auslöst.

    Hat jemand dazu eine Idee?

    Viele Grüße,

    Stefan



    *1) Die Helligkeit "12" (ca. 5 %) ist der Mindestwert, den man nachts benötigt, um gefahrlos die Räume zu betreten (ohne, dass jemand in den angrenzenden Zimmern gestört wird).


    Code:
    [
    {
    "id": "20724c.f3bf15b4",
    "type": "knxUltimate",
    "z": "eb6b0926.c219e",
    "server": "eeafd508.dd2ad8",
    "topic": "2/1/5",
    "outputtopic": "",
    "dpt": "5.001",
    "initialread": false,
    "notifyreadrequest": false,
    "notifyresponse": false,
    "notifywrite": true,
    "notifyreadrequestalsorespondtobus": false,
    "notifyreadrequestalsorespondtobusdefaultvalueifno tinitialized": "0",
    "listenallga": false,
    "name": "Wandlampe Wert",
    "outputtype": "write",
    "outputRBE": false,
    "inputRBE": false,
    "formatmultiplyvalue": 1,
    "formatnegativevalue": "leave",
    "formatdecimalsvalue": 999,
    "passthrough": "yes",
    "x": 530,
    "y": 400,
    "wires": [
    [
    "ff4f503e.2ed3a"
    ]
    ]
    },
    {
    "id": "e08f342d.d77b4",
    "type": "inject",
    "z": "eb6b0926.c219e",
    "name": "",
    "topic": "",
    "payload": "0",
    "payloadType": "num",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 270,
    "y": 360,
    "wires": [
    [
    "20724c.f3bf15b4"
    ]
    ]
    },
    {
    "id": "9e177da8.46a78",
    "type": "inject",
    "z": "eb6b0926.c219e",
    "name": "",
    "topic": "",
    "payload": "64",
    "payloadType": "num",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 270,
    "y": 400,
    "wires": [
    [
    "20724c.f3bf15b4"
    ]
    ]
    },
    {
    "id": "3d589402.6f64ac",
    "type": "inject",
    "z": "eb6b0926.c219e",
    "name": "",
    "topic": "",
    "payload": "60",
    "payloadType": "num",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 270,
    "y": 440,
    "wires": [
    [
    "20724c.f3bf15b4"
    ]
    ]
    },
    {
    "id": "ff4f503e.2ed3a",
    "type": "change",
    "z": "eb6b0926.c219e",
    "name": "",
    "rules": [
    {
    "t": "change",
    "p": "payload",
    "pt": "msg",
    "from": "60",
    "fromt": "num",
    "to": "10",
    "tot": "num"
    }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 780,
    "y": 400,
    "wires": [
    [
    "71a1236.88e24dc"
    ]
    ]
    },
    {
    "id": "8b9b107b.41a8d",
    "type": "knxUltimate",
    "z": "eb6b0926.c219e",
    "server": "eeafd508.dd2ad8",
    "topic": "2/1/5",
    "outputtopic": "",
    "dpt": "5.001",
    "initialread": false,
    "notifyreadrequest": false,
    "notifyresponse": false,
    "notifywrite": true,
    "notifyreadrequestalsorespondtobus": false,
    "notifyreadrequestalsorespondtobusdefaultvalueifno tinitialized": "0",
    "listenallga": false,
    "name": "Wandlampe Wert",
    "outputtype": "write",
    "outputRBE": true,
    "inputRBE": true,
    "formatmultiplyvalue": 1,
    "formatnegativevalue": "leave",
    "formatdecimalsvalue": 999,
    "passthrough": "yes",
    "x": 1220,
    "y": 400,
    "wires": [
    []
    ]
    },
    {
    "id": "eb53cd8d.1ef4e",
    "type": "comment",
    "z": "eb6b0926.c219e",
    "name": "If \"60\" is read from \"Wandlampe Wert\", change it to \"10\" and send it.",
    "info": "",
    "x": 820,
    "y": 340,
    "wires": []
    },
    {
    "id": "71a1236.88e24dc",
    "type": "function",
    "z": "eb6b0926.c219e",
    "name": "Wipe origin",
    "func": "return {payload:msg.payload};",
    "outputs": 1,
    "noerr": 0,
    "x": 990,
    "y": 400,
    "wires": [
    [
    "8b9b107b.41a8d"
    ]
    ]
    },
    {
    "id": "eeafd508.dd2ad8",
    "type": "knxUltimate-config",
    "z": "",
    "host": "192.168.1.13",
    "port": "3671",
    "physAddr": "15.15.22",
    "suppressACKRequest": true,
    "csv": "",
    "KNXEthInterface": "Auto",
    "KNXEthInterfaceManuallyInput": "",
    "statusDisplayLastUpdate": true,
    "statusDisplayDeviceNameWhenALL": true,
    "statusDisplayDataPoint": true,
    "stopETSImportIfNoDatapoint": "skip",
    "loglevel": "error",
    "name": "Multicast KNX Gateway",
    "localEchoInTunneling": true,
    "delaybetweentelegrams": "40",
    "delaybetweentelegramsfurtherdelayREAD": "1"
    }
    ]
    Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

    #2
    Hi Stefan,

    ich habe einen ähnlichen Ansatz:
    Grundsätzlich nutzen bei mir die PMs einfach nur ein Ein-Signal (geht genau genommen auf die Bitszenen in den AKD-LED-Dimmern, da nur darüber ein Einschalten auf einen Wert möglich ist ohne die Farbtemperatur zu verändern). Dies ist dann immer 50% - 70% (je nach Ort), damit im Fehlerfall (wenn Node-RED mal wirklich nicht läuft oder was schief geht) brauchbares Licht vorhanden ist. Dimmgeschwindigkeit 10s, würde also je nach dem 5 - 7s dauern, bis die Zielhelligkeit erreicht ist. 10% wären dabei immerhin 1s, genug Zeit für den "Luxuspart" durch Node-RED. Hier hab ich einen Node geschrieben, der den Schalt- und Dimmstatus, Tag/Nacht, Putzmodus kennt sowie die Signale fürs Einschalten vom PM sowie manueller Tastendruck kennt.

    Licht aus und Signal vom PM (inkl. externer Taster): Nachsenden eines absoluten Dimmwertes (je nach Tag/Nacht)
    Licht an und Signal vom Taster: Erhöhen der Helligkeit um (aktuell) 25%
    Signal vom PM/Taster und bei aktivem Putzmodus: Direkt auf 100%
    Licht bereits an und Putzmodus wird aktiv: Direkt auf 100%

    Vielleicht kommt später noch dazu, optional beim Wechsel in den Nachtmodus die Helligkeit direkt zu reduzieren, das wäre dann analog "Licht an und Wechsel in Putzmodus".

    Das ganze ist aktuell als Subflow implementiert und hier beigefügt, vielleicht bietet das ja ein paar Anregungen. Erwartet werden 5 verschiedene Eingangsnachrichten (unterschieden durch das gesetzte Topic, siehe Description des Subflows (auch am Anfang des Codes unten). Zusätzlich wird erwartet, dass die globalen Variablen "Tagmodus" und "Putzmodus" gesetzt sind. Dazu hab ich jeweils eine Function-Node mit den entsprechenden KNX-GA verknüpft, siehe zweiter Code als Beispiel.

    Grüße,
    Chris

    Code:
    [
    {
    "id": "ef12432b4dae428a",
    "type": "subflow",
    "name": "Lichtcontroller",
    "info": "# Lichtcontroller\n(Über)Steuert Dimmer in Abhängigkeit von Tag/Nacht und Putzmodus.\n\nEingangs-Topics:\n - **Putzmodus**: Statuswechsel des Putzmodus. Bei aktivem Licht wird dieses direkt auf \"Helligkeit Putzen\" gesetzt.\n - **Schaltstatus**: Schaltstatus des Aktors.\n - **Absolutstatus**: Dimmstatus des Aktors.\n - **BitSchalten**: Schaltsignal zwischen PM und Aktor. Auf ein Einschalten findet die Übersteuerung statt.\n - **PM-Schalten**: Schaltsignal für manuelle Steuerungen (zwischen Steuerung und PM). Bei bereits aktivem Kanal triggert dieses ein stufenweises Erhöhen der Helligkeit.",
    "category": "",
    "in": [
    {
    "x": 40,
    "y": 80,
    "wires": [
    {
    "id": "e1ac85dc37190902"
    },
    {
    "id": "c3a12d98cfd0563f"
    }
    ]
    }
    ],
    "out": [
    {
    "x": 720,
    "y": 80,
    "wires": [
    {
    "id": "e1ac85dc37190902",
    "port": 0
    }
    ]
    }
    ],
    "env": [
    {
    "name": "HELLIGKEIT_TAG",
    "type": "num",
    "value": "60",
    "ui": {
    "label": {
    "en-US": "Helligkeit Tag"
    },
    "type": "input",
    "opts": {
    "types": [
    "num"
    ]
    }
    }
    },
    {
    "name": "HELLIGKEIT_NACHT",
    "type": "num",
    "value": "10",
    "ui": {
    "label": {
    "en-US": "Helligkeit Nacht"
    },
    "type": "input",
    "opts": {
    "types": [
    "num"
    ]
    }
    }
    },
    {
    "name": "HELLIGKEIT_PUTZEN",
    "type": "num",
    "value": "100",
    "ui": {
    "label": {
    "en-US": "Helligkeit Putzen"
    },
    "type": "input",
    "opts": {
    "types": [
    "num"
    ]
    }
    }
    },
    {
    "name": "HELLIGKEIT_STUFE",
    "type": "num",
    "value": "25",
    "ui": {
    "label": {
    "en-US": "Helligkeit Stufe"
    },
    "type": "input",
    "opts": {
    "types": [
    "num"
    ]
    }
    }
    },
    {
    "name": "DEBUG",
    "type": "bool",
    "value": "false",
    "ui": {
    "icon": "font-awesome/fa-bug",
    "label": {
    "en-US": "Debug In/Out"
    },
    "type": "input",
    "opts": {
    "types": [
    "bool"
    ]
    }
    }
    }
    ],
    "meta": {
    "version": "0.1.0",
    "author": "Christian Illy <christian@illy.bz>",
    "desc": "Steuert Licht in abhängigkeit von Tag/Nacht, Putzmodus"
    },
    "color": "#FDF0C2",
    "icon": "font-awesome/fa-lightbulb-o"
    },
    {
    "id": "e1ac85dc37190902",
    "type": "function",
    "z": "ef12432b4dae428a",
    "name": "Lichtcontroller",
    "func": "var helligkeitTag = env.get(\"HELLIGKEIT_TAG\");\nvar helligkeitNacht = env.get(\"HELLIGKEIT_NACHT\");\nvar helligkeitPutzen = env.get(\"HELLIGKEIT_PUTZEN\");\nvar helligkeitStufe = env.get(\"HELLIGKEIT_STUFE\");\n\nvar dateObj = new Date();\nvar time = dateObj.getHours() + dateObj.getMinutes() / 60;\n\nvar origMsg = msg;\nmsg = null;\n\nvar tagmodus = global.get (\"Tagmodus\");\nif (tagmodus === undefined) {\n tagmodus = true;\n}\nvar putzmodus = global.get(\"Putzmodus\") || false;\nif (origMsg.topic == \"Putzmodus\") {\n putzmodus = origMsg.payload;\n}\n\nvar aktuellerStatus = context.get(\"status\") || false;\nvar aktuelleHelligkeit = context.get(\"helligkeit\") || 0;\n\nswitch (origMsg.topic) {\n case \"Putzmodus\":\n if (origMsg.payload && aktuellerStatus) {\n // Putzmodus wird aktiviert und Licht bereits an -> Direkt auf Putzhelligkeit\n msg = { payload: helligkeitPutzen, _msgid: origMsg._msgid };\n }\n break;\n case \"Schaltstatus\":\n context.set(\"status\", origMsg.payload);\n break;\n case \"Absolutstatus\":\n context.set(\"helligkeit\", origMsg.payload);\n break;\n case \"BitSchalten\":\n if (!origMsg.payload) {\n // Abschalten -> Ignorieren\n // ??? Eventuell 0% senden, damit der schnellere Dimmvorgang verwendet wird beim Abschalten?\n break;\n }\n if (putzmodus) {\n msg = { payload: helligkeitPutzen, _msgid: origMsg._msgid };\n } else if (tagmodus) {\n msg = { payload: helligkeitTag, _msgid: origMsg._msgid };\n } else {\n msg = { payload: helligkeitNacht, _msgid: origMsg._msgid };\n }\n break;\n case \"PM-Schalten\":\n // Tastersignal\n if (!origMsg.payload) {\n // Abschalten -> Ignorieren, PM behandelt dies\n break;\n }\n \n if (!aktuellerStatus) {\n // Wenn aktuell aus -> PM schaltet ein\n break;\n }\n \n if (aktuelleHelligkeit >= 99.5) {\n // Bereits maximale Helligkeit\n break;\n }\n \n // Wenn bereits an -> Erhöhe um eine Stufe\n var helligkeitNeu = aktuelleHelligkeit + helligkeitStufe;\n if (helligkeitNeu > 100) {\n helligkeitNeu = 100;\n }\n msg = { payload: helligkeitNeu, _msgid: origMsg._msgid };\n break;\n}\n\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 300,
    "y": 80,
    "wires": [
    [
    "3334c771fd0bb0da"
    ]
    ]
    },
    {
    "id": "c86bdbe35031fe20",
    "type": "debug",
    "z": "ef12432b4dae428a",
    "name": "Output",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "true",
    "targetType": "full",
    "statusVal": "",
    "statusType": "auto",
    "x": 670,
    "y": 160,
    "wires": []
    },
    {
    "id": "c3a12d98cfd0563f",
    "type": "function",
    "z": "ef12432b4dae428a",
    "name": "Debug",
    "func": "if (env.get(\"DEBUG\")) {\n return msg;\n}\n\nreturn null;",
    "outputs": 1,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 190,
    "y": 160,
    "wires": [
    [
    "28b403e1a31d53b3"
    ]
    ]
    },
    {
    "id": "3334c771fd0bb0da",
    "type": "function",
    "z": "ef12432b4dae428a",
    "name": "Debug",
    "func": "if (env.get(\"DEBUG\")) {\n return msg;\n}\n\nreturn null;",
    "outputs": 1,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 530,
    "y": 160,
    "wires": [
    [
    "c86bdbe35031fe20"
    ]
    ]
    },
    {
    "id": "28b403e1a31d53b3",
    "type": "debug",
    "z": "ef12432b4dae428a",
    "name": "Input",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "true",
    "targetType": "full",
    "statusVal": "",
    "statusType": "auto",
    "x": 330,
    "y": 160,
    "wires": []
    }
    ]
    Code:
    [
    {
    "id": "e61fad18ff169a6f",
    "type": "function",
    "z": "e9aa6561.ba21c8",
    "name": "Global Tagmodus",
    "func": "global.set (\"Tagmodus\", msg.payload);\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 350,
    "y": 1740,
    "wires": [
    []
    ]
    }
    ]
    Chris

    Kommentar


      #3
      Hallo Chris,

      vielen Dank für die Antwort. OK - also alles über function nodes. Dann muss ich mich wohl noch ausführlicher mit denen (und vor allem der Syntax) beschäftigen. Deine Umsetzung kann ich bestimmt sehr gut als Ansatz verwenden

      Viele Grüße,

      Stefan
      Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

      Kommentar


        #4
        Geht vermutlich alles auch mit einzelnen "Standard"-Nodes, aber da kommt dann schon einiges zusammen und am Ende ist es komplexer, als ein Function-Node mit entsprechendem Code
        Chris

        Kommentar


          #5
          Bin halt kein Experte

          Also aktuell so gelöst, dass je nach Zeit (im Beispiel nicht dargestellt, sondern mit inject-Nodes gemacht) eine Zahl für Tag, Nacht etc. gesendet wird - und die macht mir dann eine globale Variable mit dem gewüschten Helligkeitswert.

          Bei Empfang eines Telegrams auf dem Helligkeitswert vom Bus (aktuell auch nur mit inject-Nodes simuliert) wird dann entsprechend bei richtigem Wert ("12") die globale Variable wieder zugewiesen. Der Flow wird dann über ein Gate gestoppt und die payload aus einem temporären Objekt kopiert:
          lobo_flow2.png
          ... kann sicher noch verbessert werden, sollte aber so erstmal funktionieren (wenn ich beim Testen nix vergessen habe). Der Frage des Anpassens der Helligkeit beim Umschalten von Tag auf Nacht etc. widme ich mich dann danach ...

          Viele Grüße,

          Stefan




          Code:
          [{"id":"c8d62c86.2b6ee8","type":"change","z":"eb6b0926.c219e","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"0","fromt":"num","to":"10","tot":"num"},{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"85","tot":"num"},{"t":"change","p":"payload","pt":"msg","from":"2","fromt":"num","to":"220","tot":"num"},{"t":"change","p":"payload","pt":"msg","from":"3","fromt":"num","to":"85","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"zielwert","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":1600,"wires":[["a4bc29e6.2cf978"]]},{"id":"36a2384c.b0bfd","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"0","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1520,"wires":[["c8d62c86.2b6ee8"]]},{"id":"acdb05c5.b950c8","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"1","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1560,"wires":[["c8d62c86.2b6ee8"]]},{"id":"5ba07fca.06cac","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"2","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1600,"wires":[["c8d62c86.2b6ee8"]]},{"id":"e766437.32753c","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"3","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1640,"wires":[["c8d62c86.2b6ee8"]]},{"id":"d6dc313e.49efc","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"12","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1700,"wires":[["910f0429.366d48"]]},{"id":"f0e8738e.bb7228","type":"debug","z":"eb6b0926.c219e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1270,"y":1740,"wires":[]},{"id":"d01c0fc0.4f3358","type":"inject","z":"eb6b0926.c219e","name":"","topic":"","payload":"15","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1760,"wires":[["910f0429.366d48"]]},{"id":"910f0429.366d48","type":"change","z":"eb6b0926.c219e","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"istwert","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":1740,"wires":[["a114b2e4.b761f"]]},{"id":"a114b2e4.b761f","type":"function","z":"eb6b0926.c219e","name":"Nachtriggern","func":"var topic = msg.topic;\nvar ist = msg.payload;\nvar soll = global.get('TNMode');\nvar control;\nnode.warn(\"TNMode=\"+soll);\nnode.warn(\"ist=\"+ist);\nif (ist == 12){\n    output = soll;\n    control = \"open\";\n} else {\n    output = null;\n    control = \"close\";\n}\nmsg.topic = \"control\";\nmsg.payload = control;\nmsg.wert = output;\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":1740,"wires":[["846f021c.b649"]]},{"id":"a4bc29e6.2cf978","type":"function","z":"eb6b0926.c219e","name":"Global TNMode","func":"global.set (\"TNMode\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":660,"y":1600,"wires":[[]]},{"id":"846f021c.b649","type":"gate","z":"eb6b0926.c219e","name":"","controlTopic":"control","defaultState":"open","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","statusCmd":"status","persist":false,"storeName":"memory","x":830,"y":1740,"wires":[["45f7f5c2.ffe24c"]]},{"id":"afef13a.42b667","type":"knxUltimate","z":"eb6b0926.c219e","server":"eeafd508.dd2ad8","topic":"2/1/5","outputtopic":"","dpt":"5.001","initialread":false,"notifyreadrequest":false,"notifyresponse":false,"notifywrite":true,"notifyreadrequestalsorespondtobus":false,"notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized":"0","listenallga":false,"name":"Wandlampe Wert","outputtype":"write","outputRBE":true,"inputRBE":true,"formatmultiplyvalue":1,"formatnegativevalue":"leave","formatdecimalsvalue":999,"passthrough":"yes","x":1300,"y":1660,"wires":[[]]},{"id":"45f7f5c2.ffe24c","type":"change","z":"eb6b0926.c219e","name":"","rules":[{"t":"move","p":"wert","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1030,"y":1740,"wires":[["afef13a.42b667","f0e8738e.bb7228"]]},{"id":"eeafd508.dd2ad8","type":"knxUltimate-config","z":"","host":"192.168.1.13","port":"3671","physAddr":"15.15.22","suppressACKRequest":true,"csv":"","KNXEthInterface":"Auto","KNXEthInterfaceManuallyInput":"","statusDisplayLastUpdate":true,"statusDisplayDeviceNameWhenALL":true,"statusDisplayDataPoint":true,"stopETSImportIfNoDatapoint":"skip","loglevel":"error","name":"Multicast KNX Gateway","localEchoInTunneling":true,"delaybetweentelegrams":"40","delaybetweentelegramsfurtherdelayREAD":"1"}]
          Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

          Kommentar

          Lädt...
          X