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
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://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 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. |
| 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>