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 and ETS group address importer. Easy to use and highly configurable.
212 lines (156 loc) • 8.25 kB
HTML
<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://github.com/Supergiovane/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. |
| Group Addr. | Zu steuernde Gruppenadresse. Mit importierter ETS kannst du den Gerätenamen tippen. Kann leer bleiben, wenn du sie per `msg.setConfig` setzt. |
| Datapoint | 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-Leseanforderung senden** erzeugt ein normales Read-Telegramm. **Boolean umschalten (Schreiben)** 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 Modus „Benutzerdefinierten 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. |
|| **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)
```json
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://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/-Sample-setConfig)
---
# QUICK HOW TO
Weitere Beispiele [hier](https://github.com/Supergiovane/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>