node-red-contrib-ta-cmi-coe 1.0.0
Node-RED nodes for TA CMI CoE (CAN over Ethernet)
Status: Erst-Release 27.11.2025
node-red-contrib-ta-cmi-coe
Node-RED Bibliothek zum Lesen und Schreiben von Werten an Technische Alternative CMI über CAN over Ethernet (CoE).
Funktionsumfang
- Unterstützung für CoE-Version 1 + 2
- CoE Input Node: Empfang von analogen und digitalen Einzelwerten von der CMI
- CoE Output Node: Senden einzelner Werte an das CMI/Regler
- CoE Monitor: Empfängt und überwacht Pakete von allen Quellen
- Automatische Konvertierung analoger Werte basierend auf Unit ID
- Unterstützung für von TA definierte Messgrößen
- Konfiguration von CMI und CoE-Version
Installation
Über Node-RED Palette Manager (empfohlen)
- Öffne Node-RED
- Menü → Manage palette → Install
- Suche nach
node-red-contrib-ta-cmi-coe - Installiere das Paket
Manuelle Installation
cd ~/.node-red
npm install node-red-contrib-ta-cmi-coe
Lokale Entwicklungsumgebung
cd ~/.node-red
git clone https://github.com/mayflo/node-red-contrib-ta-cmi-coe.git
cd node-red-contrib-ta-cmi-coe
npm link
cd ~/.node-red
npm link node-red-contrib-ta-cmi-coe
Starte Node-RED neu.
Voraussetzungen
- Node-RED v1.0.0 oder höher
- CMI von Technische Alternative mit Firmware 1.39.1 oder höher
- Die verwendete CoE-Version wird auf dem CMI konfiguriert (Einstellungen > CAN > CoE).
- Für Empfang: CoE-Ausgänge müssen auf der CMI konfiguriert werden (Einstellungen > Ausgänge > CoE).
- Für Senden: CAN-Eingänge müssen auf dem Regler konfiguriert werden.
- Für den Empfang von Nachrichten benötigt die verwendeten CMIs eine fest eingestellte IP-Addresse
- Die Kommunikation erfolgt über UDP-Ports, welche auf dem Node-RED-Host geöffnet werden müssen (CoE V1 Port 5441 / CoE V2 Port 5442)
Unterstützte Geräte
Die Bibliothek wurde für UVR610 entwickelt und getestet, funktioniert aber grundsätzlich mit allen Geräten, die über den CAN-Bus der CMI verbunden sind:
- UVR16x2
- UVR1611
- UVR61-3
- X2 Regler
- Andere CAN-Bus Geräte von Technische Alternative
Schnellstart
1. CMI Configuration Node erstellen
Erstelle zunächst eine CMI Configuration:
- Öffne einen beliebigen Node zur Bearbeitung
- Bei "CMI Config" auf Plus klicken → "Add new CMI config..."
- Lokale IP: IP-Adressbereich des UDP-Ports (0.0.0.0 = alle Interfaces, 127.0.0.1 = lokales Netzwerk)
- CMI Adresse: (Feste) IP-Adresse des CMI
- CoE Version: CoE V1/V2
2. CMI konfigurieren
Für Empfang (CoE Input):
Auf der CMI unter Einstellungen → Ausgänge → CoE:
- Eingang: CAN-Bus Eingang (z.B. CAN1)
- IP: IP-Adresse von Node-RED
- Knoten: Wert aus "Node Number" des Input Nodes
- Netzwerkausgang: Nummer des Ausgangs (1-32)
- Sendebedingung: Nach Bedarf
Für Senden (CoE Output):
Auf dem Regler: CAN-Eingang konfigurieren
- Knoten: Wert aus "Node Number" des Output Nodes
- Ausgangsnummer: Nummer des Ausgangs (1-32)
- Messgröße: "Automatisch" für Unit von Node-RED
3. Beispiel Flow
[
{
"id": "mycmi",
"type": "cmiconfig",
"name": "Mein CMI",
"localip": "0.0.0.0",
"address": "192.168.0.100",
"coeVersion": 1
},
{
"id": "input_example",
"type": "coe-input",
"name": "Temperatur Sensor",
"cmiconfig": "mycmi",
"nodeNumber": 10,
"outputNumber": 1,
"dataType": "analog",
"timeout": 20,
"x": 150,
"y": 100,
"wires": [["debug123"]]
},
{
"id": "debug123",
"type": "debug",
"name": "Message",
"x": 350,
"y": 100
},
{
"id": "inject1",
"type": "inject",
"name": "Setze Sollwert",
"payload": "22.5",
"payloadType": "num",
"repeat": "",
"x": 150,
"y": 200,
"wires": [["output_example"]]
},
{
"id": "output_example",
"type": "coe-output",
"name": "Sollwert Heizung",
"cmiconfig": "mycmi",
"nodeNumber": 11,
"outputNumber": 5,
"dataType": "analog",
"unit": 1,
"x": 350,
"y": 200
}
]
Node Typen
CoE Input Node
Empfängt Werte von der CMI.
Output Message:
{
payload: 22.5, // Der Wert
topic: "coe/10/analog/1", // Format: coe/{node}/{type}/{output}
coe: {
nodeNumber: 10, // CAN Knoten-Nummer
blockNumber: 1, // CoE Block-Nummer
outputNumber: 1, // Netzwerkausgang
dataType: "analog", // Typ
unit: 1, // Unit ID (z.B. 1 = °C)
unitName: "Temperatur °C", // Unit Name
unitSymbol: "°C°", // Unit Symbol
sourceIP: "192.168.1.100", // IP der CMI
raw: { ... } // Rohdaten
}
}
CoE Output Node
Sendet einzelne Werte an die CMI.
Input Message:
// Einfach:
msg.payload = 22.5;
// Mit eigener Unit:
msg.payload = 22.5;
msg.coe = { unit: 1 }; // Überschreibt Config
Troubleshooting
Keine Daten empfangen?
- CMI CoE-Ausgänge prüfen: IP und Port korrekt?
- Lokale IP: Max. Empfangsbereich mit Lokale IP = 0.0.0.0 (alle) überprüfen (insbesondere für Docker-Umgebungen)
- Firewall: Port 5441/UDP (CoE V1) bzw. 5442/UDP (CoE V2) offen?
- Node Number: Stimmt mit CMI-Konfiguration überein?
- Debug aktivieren: "Receive All" aktivieren und Debug-Output prüfen
Senden funktioniert nicht?
- CMI erreichbar? Ping zur CMI IP
- CAN-Eingang auf Regler: Knoten-Nr und Ausgangsnr korrekt?
- Timeout auf Regler? "Sende Ausgänge alle" Intervall nutzen
Mehrere CMIs?
- Verwende unterschiedliche Node Numbers
- ODER verwende unterschiedliche Blocks
- Sonst überschreiben sich die Werte gegenseitig!
Werte falsch?
- Zu große Werte: CAN-Bus V1 ist limitiert auf ±32767 (dimensionslos)
- Falsche Unit: Manche Units (Arbeitszahl, Euro) haben Einschränkungen
- Nachkommastellen: Prüfe ob korrekte Unit ID verwendet wird
Bekannte Einschränkungen
- Max. Wertbereich: CAN-Bus Version 1 ist limitiert auf ±32767 (V2 für größeren Wertebereich)
- Keine Quittierung: CoE hat keine Bestätigung (fire-and-forget)
- CMI als Gateway: Werte werden vom CMI übertragen, können aber nicht direkt an CMI gesendet werden (nur an Regler)
Erweiterte Nutzung
Periodisches Senden (verhindert Timeout)
// In Function Node:
const intervalMinutes = 5;
// Timer starten
if (!context.timer) {
context.timer = setInterval(() => {
node.send({ payload: msg.payload });
}, intervalMinutes * 60 * 1000);
}
return msg;
Custom Unit Conversion
// In Function Node vor Output:
const rawValue = msg.payload * 100; // 2 Nachkommastellen
msg.payload = rawValue;
msg.coe = { unit: 0 }; // Dimensionslos
return msg;
Lizenz
Veröffentlicht unter der Apache 2.0 Lizenz
- ✅ Private und gewerbliche Nutzung
- ⚠️ Keine Haftung für Schäden durch Nutzung
Credits
Basiert auf dem Protokoll-Verständnis und der Dokumentation von:
- SymconJoTTACoE von jotata
- Ta-CoE von DeerMaximum
Support
- Issues: GitHub Issue Tracker
- Fragen: GitHub Discussions
- Dokumentation: Siehe README und Node-RED Info-Panel
Autor
mayflo
Hinweis: Diese Bibliothek wurde in der Freizeit entwickelt. Support erfolgt nach Verfügbarkeit. Besten Dank für dein Verständnis! 😊