UNPKG

node-red-contrib-knx-ultimate

Version:

Control your KNX and KNX Secure intallation via Node-Red! A bunch of KNX nodes, with integrated Philips HUE control, ETS group address importer, and KNX routing between interfaces. Easy to use and highly configurable.

236 lines (170 loc) 8.46 kB
<script type="text/markdown" data-help-name="knxUltimate"> ## KNX-ULTIMATE GERÄTE-NODE EINSTELLUNGEN Dieser Node steuert eine KNX-Gruppenadresse und ist der am häufigsten verwendete. [<i class="fa fa-code"></i> Beispiele findest du hier](https://supergiovane.github.io/node-red-contrib-knx-ultimate/wiki/-SamplesHome) **Konfiguration** |Eigenschaft|Beschreibung| |--|--| | Gateway | Zu verwendendes KNX-Gateway auswählen | | GA-Typ (Dropdown) | Typ der Gruppenadresse. **3-Ebenen** ist Standard (Eingabe der 3-stufigen GA oder GA-Bezeichnung, sofern ETS importiert). **Global** liest die GA beim Start aus einer globalen Variablen, **Flow** analog auf Flow-Ebene. **$Env variable** liest die GA aus einer Umgebungsvariable. **Universeller Modus (alle GAs abhören)** reagiert auf ALLE Gruppenadressen. | | Gruppenadresse | Zu steuernde Gruppenadresse. Mit importierter ETS kannst du den Gerätenamen tippen. Kann leer bleiben, wenn du sie per `msg.setConfig` setzt. | | Datenpunkt | Der zum Node gehörende Datapoint. | <br/> <br/> ### Manueller Befehlsbutton Im Editor kann pro Node ein kleiner Button angezeigt werden, über den du KNX-Telegramme ohne zusätzlichen Inject-Knoten auslösen kannst. |Eigenschaft|Beschreibung| |--|--| | Manuellen Button anzeigen | Blendet den Button im Workspace und in der Knotenliste ein bzw. aus. | | Schaltflächenaktion | Legt fest, was beim Klick geschieht. **KNX Read senden** erzeugt ein normales Read-Telegramm. **Toggle boolean** steht bei DPT 1.x zur Verfügung und wechselt zwischen _true_ und _false_. **Benutzerdefinierten Wert schreiben** sendet den angegebenen Wert (muss zum eingestellten Datapoint passen). | | Initialer Toggle-Status | (Nur für boolesche Datapoints) Startwert der Toggle-Funktion. Der Zustand bleibt mit den ankommenden KNX-Telegrammen synchron. | | Benutzerdefinierter Wert | Wert für den ModusBenutzerdefinierten Wert schreiben“. Erlaubt sind JSON-Literale wie `42`, `true`, `"Text"` oder `{ "red": 255 }`. | Der Button wird nur eingeblendet, wenn die Option aktiv ist. Im Universalmodus ist die Leseaktion deaktiviert, da keine feste Gruppenadresse vorhanden ist. <br/> <br/> ## TAB Erweiterte Optionen |Eigenschaft|Beschreibung| |--|--| || **Allgemein** | | Node-Name | Anzeigename. | | Topic | Topic der Ausgabe. Leer lassen, um die Gruppenadresse zu verwenden. | | Passthrough | Leitet die Eingangs-Nachricht an den Ausgang weiter. | || **Vom Node-EINGANG zum KNX-BUS** | | Telegrammtyp | `write` zum Senden eines Schreib-Telegramms (üblich), alternativ Reaktion auf andere Typen. | | RBE-Filter | "Report by change". Wenn aktiv, sendet nur geänderte Werte zum BUS. Für identische Wiederholungen deaktivieren. Bei Aktivierung wird "rbe" dem Nodename hinzugefügt. | | Periodisches Senden (gespeicherter Wert) | Wenn aktiv, sendet der Node den zuletzt gespeicherten Wert in festen Intervallen als _write_-Telegramm auf den KNX-Bus. Diese Option umgeht absichtlich den Output-RBE. | | Intervall periodisches Senden | Intervall in Sekunden für das periodische Senden. | || **Vom KNX-BUS zum Node-AUSGANG** | | Status beim Start lesen | Liest den GA-Status bei Editorstart und jeder Wiederverbindung. Werte werden in einer Datei gepuffert, Quelle wählbar (Datei/BUS). | | RBE-Filter | Wie oben, aber für Ausgaben zum Flow. | | Auf Schreib-Telegramme reagieren | Sendet bei eingehendem Write eine Nachricht an den Flow. | | Auf Response-Telegramme reagieren | Sendet bei Response eine Nachricht an den Flow. | | Auf Lese-Telegramme reagieren | Sendet bei Read eine Nachricht an den Flow (z. B. um eigene Werte zu liefern). | | Multiply/Decimals/Negatives | Skaliert, rundet und behandelt negative Werte (nur numerische Werte). | <br/> <br/> ## TAB KNX Function Mit JavaScript kannst du das Verhalten eingehender Nachrichten (vom Flow) und ausgehender Telegramme (zum BUS) anpassen. Der Editor stellt Hilfsobjekte und -funktionen bereit, um GA-Werte zu lesen - mit ETS (ohne DPT) oder ohne ETS (mit DPT). Der Code läuft bei jeder Eingangs-Nachricht und bei jedem BUS-Telegramm. Bei Aktivierung erscheint "f(x)" im Nodename. |Eigenschaft|Beschreibung| |--|--| | Search GA | Nur mit importierter ETS: tippen, GA wählen und das Feld in `getGAValue` einfügen. | ### Verfügbare Objekte/Funktionen |Objekt/Funktion|Beschreibung| |--|--| | `msg` | Aktuelle Nachricht. | | `getGAValue(GA, DPT?)` | Liest den Wert einer GA, z. B. `'1/0/1'` oder `'1/0/1 Bed table light'` (Text nach Leerzeichen wird ignoriert). DPT nur ohne ETS erforderlich. | | `setGAValue(GA, value, DPT?)` | Setzt den Wert der GA; DPT wie oben. | | `self(value)` | Setzt den eigenen Node-Wert und sendet ihn an den BUS (Achtung Schleifen). | | `toggle()` | Toggeln wie `self`. | | `node`, `RED`, `return(msg)` | Node-Objekt, RED-Objekt, Rückgabe der Nachricht. | ### Beispiele (Flow → BUS) ```javascript const statusGA = getGAValue('0/0/09','1.001'); if (msg.payload !== statusGA){ return msg; } else { return; } ``` ```javascript if (msg.payload){ setGAValue('0/1/8', true) setTimeout(function(){ self(off); }, 2000); } return msg; ``` ### Beispiele (BUS → Ausgang) ```javascript msg.externalTemperature = getGAValue('0/0/10'); // ohne ETS: getGAValue('0/0/10','9.001') return msg; ``` ```javascript if (msg.payload === false && getGAValue('0/0/11','1.001') === false){ return; } else { return msg; } ``` ### Inputs - **destination (string)**: 3-stufige GA, z. B. `1/1/0` - **payload (any)**: zu sendender Wert - **event (string)**: `GroupValue_Write`, `GroupValue_Response`, `Update_NoWrite` (nur interner Wert, kein BUS-Senden) - **readstatus (boolean)**: Leseauftrag an den BUS - **dpt (string)**: z. B. `1.001` - **writeraw (buffer)** + **bitlenght (int)**: RAW-Senden; `bitlenght` in Bit - **resetRBE (boolean)**: RBE-Filter zurücksetzen - **setConfig (json)**: GA/DPT des Nodes per Nachricht ändern ### setConfig Details ```javascript var config= { setGroupAddress: "0/1/2", setDPT: "1.001" }; msg.setConfig = config; return msg; ``` ```javascript var config= { setGroupAddress: "0/1/2", setDPT: "auto" }; msg.setConfig = config; return msg; ``` ### Outputs 1. Standardausgang: `payload` am PIN 1. 2. Fehler: `error` am PIN 2. ### Ausgehende Nachricht (Beispiel) ```javascript msg = { topic: "0/1/2", payload: false, previouspayload: true, payloadmeasureunit: "%", payloadsubtypevalue: "Start", devicename: "Esstischlampe", gainfo: { maingroupname: "Light actuators", middlegroupname: "First flow lights", ganame: "Table Light", maingroupnumber: "1", middlegroupnumber: "1", ganumber: "0" }, echoed: true, knx: { event: "GroupValue_Write", dpt: "1.001", dptdesc: "Humidity", source: "15.15.22", destination: "0/1/2", rawValue: "<buffer>" } } ``` --- # EINGANGS-NACHRICHT AUS DEM FLOW ## KNX-Geräte steuern Der Node nimmt Nachrichten entgegen und sendet sie auf den KNX-BUS; eingehende BUS-Telegramme werden als Nachrichten an den Flow ausgegeben. Alle Eigenschaften optional, außer `payload`. - **msg.destination**: z. B. `0/0/1` - **msg.payload**: z. B. `true/false/21/"Hello"` - **msg.event**: `GroupValue_Write`/`GroupValue_Response`/`Update_NoWrite` (bei `Update_NoWrite` geben alle Nodes mit derselben GA eine Meldung mit `event: 'Update_NoWrite'` aus) Für Read statt `event` bitte `msg.readstatus = true` verwenden. - **msg.readstatus = true**: Read an den BUS - **msg.dpt**: z. B. `1.001` (auch `9`, `"9"`, `"DPT9.001"`) - **msg.writeraw** + **msg.bitlenght**: RAW-Senden; ignoriert den am Node gesetzten DPT - **msg.resetRBE = true**: RBE-Filter zurücksetzen ## Konfiguration per Nachricht ändern [Siehe Beispielseite.](https://supergiovane.github.io/node-red-contrib-knx-ultimate/wiki/-Sample-setConfig) --- # QUICK HOW TO Weitere Beispiele [hier](https://supergiovane.github.io/node-red-contrib-knx-ultimate/wiki/-SamplesHome) **LAMPE EINSCHALTEN** ```javascript msg.payload = true; return msg; ``` **ABSOLUTES DIMMEN** ```javascript msg.payload = 30; return msg; ``` **TEXT AN DISPLAY** ```javascript msg.payload = "Output Tem. 35°C"; return msg; ``` **STATUS LESEN** ```javascript msg.readstatus = true; return msg; ``` **RAW AN BUS SENDEN** ```javascript msg.writeraw = Buffer.from('01','hex'); msg.bitlenght = 1; return msg; // Temperatur (DPT9): 18.4 °C = <0730> // msg.writeraw = Buffer.from('0730','hex'); return msg; ``` </script>