node-red-contrib-ccu 4.4.4 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/README.md +35 -0
  3. package/nodes/ccu-alexa.html +12 -14
  4. package/nodes/ccu-connection.html +63 -95
  5. package/nodes/ccu-connection.js +812 -115
  6. package/nodes/ccu-get-value.html +18 -15
  7. package/nodes/ccu-get-value.js +16 -0
  8. package/nodes/ccu-homeassistant.html +0 -48
  9. package/nodes/ccu-mqtt.html +0 -8
  10. package/nodes/ccu-poll.html +0 -17
  11. package/nodes/ccu-program.html +0 -53
  12. package/nodes/ccu-rpc-event.html +0 -34
  13. package/nodes/ccu-rpc.html +0 -64
  14. package/nodes/ccu-script.html +0 -8
  15. package/nodes/ccu-set-value.html +0 -62
  16. package/nodes/ccu-set-value.js +6 -11
  17. package/nodes/ccu-signal.html +0 -64
  18. package/nodes/ccu-switch.html +12 -24
  19. package/nodes/ccu-sysvar.html +0 -64
  20. package/nodes/ccu-value.html +23 -95
  21. package/nodes/ccu-value.js +8 -2
  22. package/nodes/lib/initretry.js +46 -9
  23. package/nodes/lib/localccu.js +21 -3
  24. package/nodes/lib/metaprovider.js +47 -19
  25. package/nodes/lib/party.js +103 -0
  26. package/nodes/lib/topic.js +22 -1
  27. package/nodes/lib/transport.js +80 -0
  28. package/nodes/locales/de/ccu-alexa.html +4 -0
  29. package/nodes/locales/de/ccu-connection.html +103 -0
  30. package/nodes/locales/de/ccu-get-value.html +16 -0
  31. package/nodes/locales/de/ccu-homeassistant.html +23 -0
  32. package/nodes/locales/de/ccu-mqtt.html +21 -0
  33. package/nodes/locales/de/ccu-poll.html +8 -0
  34. package/nodes/locales/de/ccu-program.html +26 -0
  35. package/nodes/locales/de/ccu-rpc-event.html +32 -0
  36. package/nodes/locales/de/ccu-rpc.html +31 -0
  37. package/nodes/locales/de/ccu-script.html +13 -0
  38. package/nodes/locales/de/ccu-set-value.html +46 -0
  39. package/nodes/locales/de/ccu-signal.html +29 -0
  40. package/nodes/locales/de/ccu-switch.html +18 -0
  41. package/nodes/locales/de/ccu-sysvar.html +43 -0
  42. package/nodes/locales/de/ccu-value.html +98 -0
  43. package/nodes/locales/de/ccu-value.json +1 -0
  44. package/nodes/locales/en-US/ccu-alexa.html +4 -0
  45. package/nodes/locales/en-US/ccu-connection.html +41 -0
  46. package/nodes/locales/en-US/ccu-get-value.html +13 -0
  47. package/nodes/locales/en-US/ccu-homeassistant.html +23 -0
  48. package/nodes/locales/en-US/ccu-mqtt.html +21 -0
  49. package/nodes/locales/en-US/ccu-poll.html +7 -0
  50. package/nodes/locales/en-US/ccu-program.html +25 -0
  51. package/nodes/locales/en-US/ccu-rpc-event.html +31 -0
  52. package/nodes/locales/en-US/ccu-rpc.html +30 -0
  53. package/nodes/locales/en-US/ccu-script.html +13 -0
  54. package/nodes/locales/en-US/ccu-set-value.html +45 -0
  55. package/nodes/locales/en-US/ccu-signal.html +29 -0
  56. package/nodes/locales/en-US/ccu-switch.html +6 -0
  57. package/nodes/locales/en-US/ccu-sysvar.html +42 -0
  58. package/nodes/locales/en-US/ccu-value.html +81 -0
  59. package/nodes/locales/en-US/ccu-value.json +1 -0
  60. package/package.json +1 -1
@@ -0,0 +1,80 @@
1
+ /* TLS and authentication for the connections to the CCU (task 5, #27).
2
+
3
+ Both belong to the CCU's web server, which fronts the interface processes
4
+ for the LAN: XML-RPC on 2000/2001/2010/9292 in plain text and on
5
+ 42000/42001/42010/49292 over TLS, the ReGaHSS on 8181 and 48181 - a CCU3
6
+ switches them on in its firewall settings, openccu-lite on its remote
7
+ access page ("classic RPC"). The processes themselves listen on the
8
+ loopback (31999, 32000, 32001, 32010, 39292) with neither. Hence:
9
+
10
+ - a local connection (Node-RED on the CCU) reaches the processes directly,
11
+ so TLS and credentials are not used whatever the dialog says: https to a
12
+ plain port or credentials in a BIN-RPC frame only break the connection;
13
+ - BIN-RPC has neither. With TLS on, BidCos-RF goes XML-RPC over TLS even
14
+ when BIN-RPC was asked for (the hidden `bcrfBinRpc` property); with
15
+ authentication and without TLS the option stays, and a warning says the
16
+ CCU will refuse it;
17
+ - CUxD (BIN-RPC on 8701) has neither, on any connection;
18
+ - the callback server Node-RED runs for the CCU's events stays plain: the
19
+ CCU presents no credentials and cannot verify our certificate.
20
+
21
+ Pure: the connection node feeds it the config and logs the notes. */
22
+
23
+ /**
24
+ * @typedef {object} Transport
25
+ * @property {boolean} tls the XML-RPC and ReGa clients use TLS (the 4xxxx ports)
26
+ * @property {boolean} auth the clients send the username and password (HTTP basic)
27
+ * @property {boolean} inSecure invalid certificates are accepted (only with tls)
28
+ * @property {boolean} bcrfBinRpc BidCos-RF goes over BIN-RPC on a remote connection
29
+ * @property {Array<{level: 'info'|'warn', message: string}>} notes what to log once
30
+ */
31
+
32
+ /**
33
+ * @param {object} config
34
+ * @param {boolean} config.isLocal Node-RED runs on the CCU (lib/localccu.js)
35
+ * @param {boolean} [config.tls]
36
+ * @param {boolean} [config.authentication]
37
+ * @param {boolean} [config.inSecure]
38
+ * @param {boolean} [config.bcrfBinRpc]
39
+ * @returns {Transport}
40
+ */
41
+ function resolveTransport({isLocal, tls, authentication, inSecure, bcrfBinRpc}) {
42
+ const notes = [];
43
+
44
+ if (isLocal) {
45
+ if (tls || authentication) {
46
+ notes.push({
47
+ level: 'info',
48
+ message:
49
+ 'local connection: TLS and authentication are not used, the interface processes are reached directly',
50
+ });
51
+ }
52
+
53
+ return {tls: false, auth: false, inSecure: false, bcrfBinRpc: false, notes};
54
+ }
55
+
56
+ const useTls = Boolean(tls);
57
+ const useAuth = Boolean(authentication);
58
+ let binRpc = Boolean(bcrfBinRpc);
59
+
60
+ if (binRpc && useTls) {
61
+ binRpc = false;
62
+ notes.push({
63
+ level: 'warn',
64
+ message: 'BidCos-RF: BIN-RPC has no TLS - using XML-RPC over TLS (port 42001) instead',
65
+ });
66
+ } else if (binRpc && useAuth) {
67
+ notes.push({
68
+ level: 'warn',
69
+ message: 'BidCos-RF: BIN-RPC carries no credentials - the CCU refuses it while authentication is on',
70
+ });
71
+ }
72
+
73
+ if (useAuth && !useTls) {
74
+ notes.push({level: 'warn', message: 'authentication without TLS: the credentials are sent in plain text'});
75
+ }
76
+
77
+ return {tls: useTls, auth: useAuth, inSecure: useTls && Boolean(inSecure), bcrfBinRpc: binRpc, notes};
78
+ }
79
+
80
+ module.exports = {resolveTransport};
@@ -0,0 +1,4 @@
1
+ <script type="text/html" data-help-name="ccu-alexa">
2
+ <p>Homematic Geräte mit node-red-contrib-alexa-smart-home verbinden. Am Eingang den Node "alexa smart home v3"
3
+ anschließen, am Ausgang "alexa smart home v3 state".</p>
4
+ </script>
@@ -0,0 +1,103 @@
1
+ <script type="text/html" data-help-name="ccu-connection">
2
+ <p>Im Connection Node wird die Verbindung zu den CCU Schnittstellenprozessen und zur Logikschicht verwaltet.</p>
3
+ <h3>Konfiguration</h3>
4
+ <ul>
5
+ <li><b>Name</b>: Frei wählbarer Name für die aktuelle CCU-Konfiguration. Er dient zur Unterscheidung falls mehrere CCUs an RedMatic angebunden werden und erscheint in allen anderen CCU Nodes.</li>
6
+ </ul>
7
+ <ul>
8
+ <li><b>CCU Address</b>: Die IP-Adresse oder der Hostname der CCU. Wird das CCU-Addon RedMatic genutzt, läuft Node-RED auf dem selben Server weshalb die Loopback-Adresse <code>localhost</code> bzw. <code>127.0.0.1</code> gewählt werden kann.</li>
9
+ </ul>
10
+ <ul>
11
+ <li><b>Listen Address</b>: Die IP-Adresse des Netzwerk-Interfaces auf welchem die RedMatic RPC Server "lauschen" sollen. Läuft RedMatic auf der CCU wird hier ebenfalls <code>localhost</code> bzw. <code>127.0.0.1</code> verwendet. Um auf allen Interfaces zu lauschen kann <code>0.0.0.0</code> verwendet werden.</li>
12
+ </ul>
13
+ <ul>
14
+ <li><b>Init Address</b>: entspricht normalerweise <i>Listen address</i>, Die Adresse unter der Node-RED von der
15
+ CCU aus erreichbar ist. Das Eingabefeld kann leer gelassen werden.</p>
16
+ <p>Für fortgeschrittene User: Wenn auf allen Interfaces gelauscht wird (Adresse 0.0.0.0) oder wenn Node-RED in
17
+ einem Container (z.B. Docker) mit NAT-Netzwerk läuft oder in anderen spezielleren Netzwerkumgebungen kann es
18
+ notwendig sein <i>Init address</i> und <i>Listen Address</i> auf unterschiedliche Werte zu setzen.</li>
19
+ </ul>
20
+ <ul>
21
+ <li><b>BinRPC Port</b>: Der Port des RedMatic BinRPC Dienstes an den die CCU Events schickt. Werden Verbindungen zu mehreren CCUs hergestellt (mehrere instanzen des ccu-configuration Node) braucht jede Verbindung einen exklusiven Port.</li>
22
+ </ul>
23
+ <ul>
24
+ <li><b>XMLRPC Port</b>: Der Port des RedMatic XMLRPC Dienstes an den die CCU Events schickt. Werden Verbindungen zu mehreren CCUs hergestellt braucht jede Verbindung einen exklusiven Port.</li>
25
+ </ul>
26
+ <ul>
27
+ <li><b>Interfaces</b>: Hier können die zu verwendenden Schnittstellen angegeben werden. Nutzt man Beispielsweise keinen CUxD oder HmIP Geräte, kann der Haken entfernt werden was die entsprechenden ungenutzten Komponenten deaktiviert.
28
+ <ul>
29
+ <li>ReGaHSS: Die Logikschicht der CCU, verwaltet CCU-Programme und CCU-Systemvariablen</li>
30
+ <li>BidCos-RF: Homematic Funk</li>
31
+ <li>BidCos-Wired: Homematic Wired</li>
32
+ <li>HmIP-RF: Homematic-IP Funk</li>
33
+ <li>VirtualDevices: Heizungsgruppen, in CCU eingebundene Systeme wie Osram Lightify</li>
34
+ <li>CUxD</li>
35
+ <li>CCU-Jack: XMLRPC-Schnittstelle des <a href="https://github.com/mdzio/ccu-jack" target="_blank">CCU-Jack</a> Addons (Port konfigurierbar, Standard 2121 bzw. 2122 mit TLS)</li>
36
+ </ul>
37
+
38
+ </li>
39
+ </ul>
40
+ <ul>
41
+ <li><b>RPC Ping-Timeout</b>: Zeitinterval in Sekunden in dem die Verbindung zu den Schnittstellenprozessen geprüft wird.</li>
42
+ </ul>
43
+ <ul>
44
+ <li><b>ReGaHSS Polling</b>: Änderungen von CCU-Systemvariablen werden nicht automatisch an RedMatic übermittelt. Mit aktiviertem Polling fragt RedMatic die Variablen und deren Werte in den per Poll-Interval eingestellten Zeitintervallen ab.</li>
45
+ </ul>
46
+ <ul>
47
+ <li><b>ReGaHSS Poll-Interval</b>:
48
+ Das Zeitintervall in Sekunden in dem Systemvariablen von der CCU abgefragt werden.</li>
49
+ </ul>
50
+ <ul>
51
+ <li><b>Context-Store</b>: Hier wird der Node-RED Context-Store festgelegt in dem RedMatic die Zustände aller Geräte/Variablen vorhält.
52
+
53
+ Weiteres unter <a target="_blank" href="https://nodered.org/docs/user-guide/context">Working</a> with context in der Node-RED Dokumentation.</li>
54
+ </ul>
55
+ <ul>
56
+ <li><b>openccu-lite Token</b>: Nur für <a href="https://github.com/hobbyquaker/openccu-lite" target="_blank">openccu-lite</a>,
57
+ eine CCU-Firmware ohne ReGaHSS. Namen, Räume und Gewerke kommen dort aus der Metadaten-API des Systems;
58
+ dafür wird ein Token benötigt, das dort unter <i>Benutzer</i> erzeugt wird. Läuft Node-RED
59
+ auf dem System selbst (RedMatic), bleibt das Feld leer – das lokale Token wird dann automatisch gelesen.
60
+ Das Token wird wie das Passwort in den Node-RED-Credentials gespeichert (verschlüsselt in
61
+ <code>flows_cred.json</code>, nie im Flow und nie im Export).
62
+ Eine CCU/RaspberryMatic/OpenCCU ignoriert das Feld vollständig. Systemvariablen, Programme und
63
+ HM-Scripte gibt es auf openccu-lite nicht; die entsprechenden Nodes bleiben im Flow, melden aber pro
64
+ Nachricht einen Fehler.</li>
65
+ </ul>
66
+ <ul>
67
+ <li><b>openccu-lite Port</b>: Nur nötig, wenn der Webserver des Systems nicht auf Port 80 bzw. 443 (TLS) läuft.</li>
68
+ </ul>
69
+ <ul>
70
+ <li><b>Device data / Re-read device data</b>: Liest die Geräteliste jeder verbundenen Schnittstelle neu ein.
71
+ Neue und geänderte Geräte (z.&nbsp;B. ein Kanal, dessen Typ sich geändert hat) bekommen ihre Datenpunkte neu
72
+ geholt, entfernte verschwinden aus der Tabelle. Ein Gerät, das die CCU mit geändertem Typ oder geänderter Version
73
+ meldet, wird auch ohne Klick automatisch neu eingelesen. Der Knopf setzt eine deployte Verbindung voraus.</li>
74
+ </ul>
75
+ <ul>
76
+ <li><b>Authentication</b>: Verschlüsselung und Anmeldung für eine CCU im Netzwerk (Node-RED läuft nicht auf der CCU).
77
+ Beides gehört zum Webserver der CCU, der die Schnittstellenprozesse nach außen vertritt: auf einer CCU3 werden
78
+ TLS und Authentifizierung in den Firewall-Einstellungen eingeschaltet, auf openccu-lite unter <i>Fernzugriff</i>
79
+ (klassisches RPC). Läuft Node-RED auf dem System selbst (RedMatic; Adresse <code>localhost</code> bzw.
80
+ <code>127.0.0.1</code>), werden die Prozesse direkt über den Loopback erreicht, BidCos per BIN-RPC – ohne TLS und
81
+ ohne Anmeldung; die Einstellungen werden dann nicht verwendet.
82
+ <ul>
83
+ <li>Enabled: Benutzer und Passwort werden bei jedem Aufruf mitgeschickt (HTTP Basic Auth) – an alle
84
+ XML-RPC-Schnittstellen (BidCos-RF, BidCos-Wired, HmIP-RF, VirtualDevices, CCU-Jack) und an die ReGaHSS. BIN-RPC
85
+ (CUxD, die versteckte BIN-RPC-Option für BidCos-RF) kennt keine Anmeldung. Ohne TLS gehen die Zugangsdaten im
86
+ Klartext über das Netz; der Dialog schaltet TLS deshalb mit ein.</li>
87
+ <li>TLS/SSL: Transportverschlüsselung. Die Schnittstellen werden über die TLS-Ports der CCU erreicht (42000, 42001,
88
+ 42010, 49292, ReGaHSS 48181, CCU-Jack 2122), die Metadaten-API von openccu-lite über Port 443. BIN-RPC kennt kein
89
+ TLS: mit TLS geht BidCos-RF immer über XML-RPC.</li>
90
+ <li>Ignore invalid TLS Certificates: Node-RED akzeptiert auch ein nicht vertrauenswürdiges Zertifikat. Nötig,
91
+ solange die CCU ihr selbst ausgestelltes Zertifikat verwendet.</li>
92
+ <li>Username: Ein Benutzer der sich an der CCU anmelden darf.</li>
93
+ <li>Password: Das Passwort des Benutzers. Es wird in den Node-RED-Credentials gespeichert
94
+ (verschlüsselt in <code>flows_cred.json</code>), nicht im Flow. Ein Flow aus einer Version vor 4.4.6,
95
+ der es noch im Klartext enthält, wird beim ersten Start übernommen; der nächste Deploy entfernt es aus
96
+ <code>flows.json</code>.</li>
97
+ </ul>
98
+ Die Gegenrichtung bleibt unverschlüsselt: Die CCU schickt ihre Ereignisse an den XML-RPC- bzw. BIN-RPC-Server, den
99
+ Node-RED dafür öffnet (<i>Listen Address</i>, <i>BinRPC Port</i>, <i>XMLRPC Port</i>), ohne TLS und ohne Anmeldung –
100
+ sie kann sich dort nicht anmelden und unser Zertifikat nicht prüfen. Diese Ports sollten in der Firewall des
101
+ Node-RED-Hosts nur für die CCU offen sein.</li>
102
+ </ul>
103
+ </script>
@@ -0,0 +1,16 @@
1
+ <script type="text/html" data-help-name="ccu-get-value">
2
+ <p>Dieser Node gibt bei jeder eingehenden Message den aktuellen zwischengespeicherten Zustand eines Datenpunktes oder einer CCU Systemvariable aus.</p>
3
+ <h3>Konfiguration</h3>
4
+ Um über die eingehende Message die Attribute <code>iface</code>, <code>channel</code>, <code>datapoint</code> und <code>sysvar</code> setzen zu können müssen die entsprechenden Konfigurationsoptionen leer gelassen werden.
5
+ <ul>
6
+ <li><b>Topic</b>: <code>msg.topic</code> der ausgehenden Nachricht, dieselbe Vorlage wie in den anderen Nodes
7
+ (<code>${CCU}</code>, <code>${Interface}</code>, <code>${device}</code>, <code>${deviceName}</code>,
8
+ <code>${channel}</code>, <code>${channelName}</code>, <code>${channelType}</code>, <code>${channelIndex}</code>,
9
+ <code>${datapoint}</code>; bei einer Systemvariable <code>${Name}</code>), z.&nbsp;B.
10
+ <code>${CCU}/${Interface}/${channel}/${datapoint}</code>. Leer (Voreinstellung): <code>msg.topic</code> bleibt
11
+ wie es hereinkam.</li>
12
+ </ul>
13
+ <h3>Input</h3>
14
+ <h3>Output</h3>
15
+ <p>Was ein Datenpunkt bedeutet, sein Wertebereich und seine Einheit: die <a href="https://www.eq-3.de/Downloads/eq3/download%20bereich/hm_web_ui_doku/HmIP_Device_Documentation.pdf" target="_blank">eQ-3 HmIP-Gerätedokumentation (PDF)</a>.</p>
16
+ </script>
@@ -0,0 +1,23 @@
1
+ <script type="text/html" data-help-name="ccu-homeassistant">
2
+ <p>Veröffentlicht Home-Assistant-MQTT-Discovery-Konfigurationen für ausgewählte Geräte.</p>
3
+ <p>Der Node ist ein Begleiter zum <b>ccu-mqtt</b>-Node: er übernimmt dessen Topic-Vorlagen und
4
+ Payload-Format, so dass die Discovery-Konfigurationen auf die Topics zeigen, die ccu-mqtt bereits
5
+ veröffentlicht bzw. entgegennimmt. Status und Befehle laufen weiterhin über ccu-mqtt.</p>
6
+ <h3>Verkabelung</h3>
7
+ <p>Den Ausgang mit demselben <b>mqtt out</b>-Node verbinden wie den ccu-mqtt-Node. Der Node sendet
8
+ <code>msg.topic</code>, <code>msg.payload</code> und <code>msg.retain</code>.</p>
9
+ <h3>Geräteauswahl</h3>
10
+ <p>Nur angehakte Geräte werden an Home Assistant gemeldet (ein HA-Gerät pro Homematic-Gerät).
11
+ Wird ein zuvor angehaktes Gerät abgehakt, sendet der Node beim nächsten Deploy eine leere
12
+ Konfiguration, die das Gerät in Home Assistant entfernt.</p>
13
+ <h3>Entitäten</h3>
14
+ <p>Schalter, Dimmer (light), Rollladen/Jalousie (cover), Thermostate (climate), Kontakte/Bewegung/
15
+ Rauch/Wasser (binary_sensor), Tasten (event), KeyMatic (lock), Energie/Wetter (sensor). Mit der
16
+ Option <i>weitere Datenpunkte</i> werden alle übrigen Datenpunkte als standardmäßig deaktivierte
17
+ Entitäten mitgeliefert.</p>
18
+ <h3>Eingang</h3>
19
+ <p>Jede eingehende Nachricht veröffentlicht die Discovery-Konfigurationen erneut.</p>
20
+ <h3>Voraussetzungen</h3>
21
+ <p>Home Assistant ≥ 2024.11 (gerätebasierte Discovery). Die Verfügbarkeit der Geräte wird aus dem
22
+ UNREACH-Datenpunkt des Wartungskanals abgeleitet.</p>
23
+ </script>
@@ -0,0 +1,21 @@
1
+ <script type="text/html" data-help-name="ccu-mqtt">
2
+ <p>Die CCU an MQTT anbinden: Events der Geräte und Änderungen der Systemvariablen gehen als Nachrichten mit fertigem Topic heraus, eingehende Nachrichten schalten, lesen oder rufen RPC-Methoden auf. Verdrahtet wird der Node zwischen einem <i>mqtt in</i>- und einem <i>mqtt out</i>-Node.</p>
3
+ <h3>Konfiguration</h3>
4
+ <ul>
5
+ <li><b>CCU</b>: Die zu verwendende CCU-Konfiguration.</li>
6
+ <li><b>Cache</b>: Beim Start werden die zwischengespeicherten Werte aller Datenpunkte einmal ausgegeben.</li>
7
+ <li><b>Topics</b>, jeweils eine Vorlage mit Platzhaltern (<code>${channelName}</code>, <code>${channelNameOrAddress}</code>, <code>${datapoint}</code>, <code>${name}</code>, <code>${iface}</code>, <code>${paramset}</code>, <code>${param}</code>, <code>${method}</code>, <code>${callid}</code>, <code>${rxtx}</code>):
8
+ <ul>
9
+ <li><b>Event</b>: ausgehende Geräte-Events, Standard <code>hm/status/${channelName}/${datapoint}</code>.</li>
10
+ <li><b>setValue</b>: eingehend, schreibt <code>payload</code> in den Datenpunkt; <code>${channelNameOrAddress}</code> nimmt den Kanalnamen oder die Adresse.</li>
11
+ <li><b>get</b>: eingehend, gibt den zwischengespeicherten Wert des Datenpunkts auf dem Event-Topic aus.</li>
12
+ <li><b>Sysvar/Program Change</b>: ausgehend, Änderungen von Systemvariablen und Programmen; <b>Sysvar/Program Set</b>: eingehend, setzt eine Variable bzw. startet ein Programm.</li>
13
+ <li><b>putParam</b>, <b>putParamset</b>: eingehend, schreibt einen Parameter bzw. einen ganzen Parametersatz (<code>MASTER</code>, <code>VALUES</code>) als JSON.</li>
14
+ <li><b>RPC</b>: eingehend, ruft eine RPC-Methode der Schnittstelle auf (<code>payload</code>: die Parameter als JSON-Array); die Antwort geht auf dem <b>RPC Response</b>-Topic mit derselben <code>${callid}</code> heraus.</li>
15
+ <li><b>Message Counters</b>: ausgehend, die Zähler empfangener und gesendeter Nachrichten je Schnittstelle (<code>${rxtx}</code> = <code>rx</code>/<code>tx</code>).</li>
16
+ </ul>
17
+ </li>
18
+ <li><b>Output Payload</b>: <i>Plain</i> (nur der Wert), <i>MQTT-Smarthome JSON Basic</i> (<code>{"val", "ts", "lc"}</code>) oder <i>MQTT-Smarthome JSON Extended</i> (zusätzlich die Homematic-Eigenschaften der Nachricht: <code>hm.iface</code>, <code>hm.channel</code>, <code>hm.datapoint</code> usw.). Eingehend werden ein nackter Wert und ein Objekt mit <code>val</code> gleichermaßen verstanden.</li>
19
+ </ul>
20
+ <p>Für Home Assistant gibt es den <i>ccu-homeassistant</i>-Node, der die Discovery-Konfigurationen zu diesen Topics erzeugt.</p>
21
+ </script>
@@ -0,0 +1,8 @@
1
+ <script type="text/html" data-help-name="ccu-poll">
2
+ <p>Führt einen sofortigen Poll von ReGaHSS Systemvariablen durch.</p>
3
+ <p>Dieser Node ist dazu vorgesehen die Änderung von Systemvariablen mit möglichst geringer Verzögerung zu empfangen.
4
+ Hierzu kann man ein Programm auf der CCU anlegen dass bei Änderung von Variablen einen virtuellen Taster betätigt.
5
+ In Node-RED wird dann ein <i>rpc event</i> oder <i>value</i> Node so konfiguriert dass er diese
6
+ "Tastenbetätigungen" empfängt und über den <i>ccu poll</i> Node eine Aktualisierung der Variablenwerte auslöst.
7
+ </p>
8
+ </script>
@@ -0,0 +1,26 @@
1
+ <script type="text/html" data-help-name="ccu-program">
2
+ <p>Führt ein ReGaHSS Programm aus.</p>
3
+ <h3>Inputs</h3>
4
+ <dl class="message-properties">
5
+ <dt>payload
6
+ <span class="property-type">*</span>
7
+ </dt>
8
+ <dd>
9
+ Ist der Payload vom Typ boolean wird das Programm bei <code>true</code> aktiviert und ausgeführt und bei
10
+ <code>false</code> deaktiviert. In allen anderen Fällen (Payload ist z.B. ein leerer String) wird das
11
+ Programm ausgeführt.
12
+ </dd>
13
+ </dl>
14
+ <h3>Outputs</h3>
15
+ <ol class="node-ports">
16
+ <li>Output
17
+ <dl class="message-properties">
18
+ <dt>payload <span class="property-type">string</span></dt>
19
+ <dd>
20
+ Im Payload ist der Zeitstempel der letzten Programmausführung (Attribut <code>ts</code>) sowie
21
+ die Information ob ein Programm aktiv oder inaktiv ist (Attribut <code>active</code>) enthalten.
22
+ </dd>
23
+ </dl>
24
+ </li>
25
+ </ol>
26
+ </script>
@@ -0,0 +1,32 @@
1
+ <script type="text/html" data-help-name="ccu-rpc-event">
2
+ <p>Gibt RPC Events aus.</p>
3
+ <h3>Konfiguration</h3>
4
+ <ul>
5
+ <li><b>CCU</b>: Die zu verwendende CCU-Konfiguration.</li>
6
+ <li><b>topic</b>: <code>msg.topic</code> ausgehender Nachrichten, mit Platzhaltern: <code>${CCU}</code>,
7
+ <code>${Interface}</code>, <code>${device}</code>, <code>${deviceName}</code>, <code>${deviceType}</code>,
8
+ <code>${channel}</code>, <code>${channelName}</code>, <code>${channelType}</code>, <code>${channelIndex}</code>,
9
+ <code>${datapoint}</code>, <code>${datapointName}</code>. Dieselbe Vorlage gibt es in jedem Node, der Nachrichten
10
+ ausgibt (value, get value, sysvar, program, rpc, script).</li>
11
+ <li><b>interface</b>: Die Schnittstelle über welche die gewüschten Geräte angebunden sind. <code>*</code> erlaubt Events aller verbundenen Schnittstellen.</li>
12
+ <li><b>room</b>: Raum Filter. Beispiel: <code>Wohnzimmer</code>.</li>
13
+ <li><b>function</b>: Gewerk Filter. Beispiel: <code>Taster</code></li>
14
+ <li><b>device</b>: Die Seriennummer der Homematic Komponente. Beispiel: <code>OEQ1662328</code></li>
15
+ <li><b>deviceName</b>: Der in der CCU vergebene Name der Homematic Komponente. Beispiel: <code>Rauchmelder Arbeitszimmer</code>; alle Rauchemelder über RegEx: <code>Rauchmelder.*</code></li>
16
+ <li><b>deviceType</b>: Die Typen-Bezeichnung der Homematic Komponente. Beispiel: <code>HM-Sec-SD-2</code></li>
17
+ <li><b>channel</b>: Die Kanaladresse bestehend aus Serien- und Kanalnummer. Beispiel: <code>OEQ1245312:4</code></li>
18
+ <li><b>channelName</b>: Der in der CCU vergebene Kanalname. Beispiel: <code>Bad Lichte Decke PIR</code></li>
19
+ <li><b>channelType</b>: Der Typ des Kanals. Beispiel: <code>VIRTUAL_KEY</code> oder <code>DIMMER</code></li>
20
+ <li><b>channelIndex</b>: Der Index des Kanals. Beispiel: <code>2</code>
21
+ <li><b>datapoint</b>: Der Datenpunkt des Kanals. Beispiel: <code>PRESS_SHORT</code> oder <code>ACTUAL_TEMPERATURE</code>. Was ein Datenpunkt bedeutet:
22
+ die <a href="https://www.eq-3.de/Downloads/eq3/download%20bereich/hm_web_ui_doku/HmIP_Device_Documentation.pdf" target="_blank">eQ-3 HmIP-Gerätedokumentation (PDF)</a>.</li>
23
+ <li><b>Nur geänderte Werte ausgeben</b> - Ein Event wird nur dann erzeugt, wenn sich der Wert seit dem letztn Event verändert hat.</li>
24
+ <li><b>Während WORKING keine Werte ausgeben</b> - Es gibt Aktoren, z.B. Dimmer oder Rolladen, die während einer Rampe (Öffnen/Schließen eines Rollladen, Dimmen einer Lampe) fortwährend den aktuellen Zustand ausgeben. Um nur den End-Status auszugeben kann diese Option benutzt werden. Gebräuchlich auch bei Verwendung mit Dashboard-Nodes um "springende" Slider zu verhindern.</li>
25
+ <li><b>Beim Start letzten bekannten Wert ausgeben</b> - Wenn Node-RED gestartet wird, dann wird der letzte Wert (sofern in der ReGaHSS bekannt) ausgegeben. Z.B. um beim Start einen korrekten Wert an das Dashboard zu übergeben. <b>Achtung:</b> Wird durch die ausgegebene Nachricht im weiteren Verlauf des Flows ein Homematic Wert gesetzt wirkt sich jedes (Full-)Deployment negativ auf den DutyCycle aus.</li>
26
+ </ul>
27
+
28
+ <p>Jeder Filter ist ein Text oder, mit dem Wahlschalter daneben, ein regulärer Ausdruck; ein leerer Filter passt auf alles. Eine Nachricht muss alle gesetzten Filter passieren.</p>
29
+
30
+ <h3>Output</h3>
31
+ <p>Eine Nachricht pro Event. Neben <code>payload</code> (dem Wert) trägt sie den Kontext des Datenpunkts: <code>ccu</code>, <code>iface</code>, <code>device</code>, <code>deviceName</code>, <code>deviceType</code>, <code>channel</code>, <code>channelName</code>, <code>channelType</code>, <code>channelIndex</code>, <code>datapoint</code>, <code>datapointName</code>, <code>datapointType</code>, <code>datapointMin</code>, <code>datapointMax</code>, <code>datapointEnum</code>, <code>datapointDefault</code>, <code>datapointControl</code>, <code>value</code>, <code>valuePrevious</code>, <code>valueEnum</code>, <code>valueStable</code>, <code>rooms</code>/<code>room</code>, <code>functions</code>/<code>function</code>, <code>ts</code>, <code>tsPrevious</code> und <code>lc</code> (Zeitpunkt des Events, des vorigen Events, der letzten Änderung), <code>change</code>, <code>cache</code> (true für einen beim Start ausgegebenen Wert), <code>working</code>, <code>direction</code>, <code>uncertain</code> sowie <code>topic</code> wie konfiguriert.</p>
32
+ </script>
@@ -0,0 +1,31 @@
1
+ <script type="text/html" data-help-name="ccu-rpc">
2
+ <p>Führt eine RPC Methode aus und gibt das Ergebnis zurück.</p>
3
+ <h3>Inputs</h3>
4
+ <dl class="message-properties">
5
+ <dt>topic
6
+ <span class="property-type">String</span>
7
+ </dt>
8
+ <dd>
9
+ Die Methode die aufgerufen werden soll. Siehe <a href="https://www.eq-3.de/Downloads/eq3/download%20bereich/hm_web_ui_doku/HM_XmlRpc_API.pdf">XMLRPC API Dokumentation</a>
10
+ </dd>
11
+ <dt>payload
12
+ <span class="property-type">Array|String</span>
13
+ </dt>
14
+ <dd>
15
+ Ein Array oder ein in einem JSON-string enthaltenes Array von Parametern die für den RPC Methodenaufruf
16
+ genutzt werden.
17
+ </dd>
18
+
19
+ </dl>
20
+ <h3>Outputs</h3>
21
+ <ol class="node-ports">
22
+ <li>Output
23
+ <dl class="message-properties">
24
+ <dt>payload <span class="property-type">array</span></dt>
25
+ <dd>
26
+ Die Rückgabe des RPC Methodenaufrufs.
27
+ </dd>
28
+ </dl>
29
+ </li>
30
+ </ol>
31
+ </script>
@@ -0,0 +1,13 @@
1
+ <script type="text/html" data-help-name="ccu-script">
2
+ <p>Führt ein HM-Script (ReGaHSS) auf der CCU aus und gibt das Ergebnis aus.</p>
3
+ <h3>Konfiguration</h3>
4
+ <ul>
5
+ <li><b>CCU</b>: Die zu verwendende CCU-Konfiguration.</li>
6
+ <li><b>Topic</b>: <code>msg.topic</code> der ausgehenden Nachricht, Vorlage mit Platzhaltern (<code>${CCU}</code>, <code>${Interface}</code>), Standard <code>${CCU}/${Interface}</code>.</li>
7
+ <li><b>Script</b>: Das Script. Bleibt das Feld leer, wird <code>msg.payload</code> der eingehenden Nachricht als Script ausgeführt.</li>
8
+ </ul>
9
+ <h3>Input</h3>
10
+ <p>Jede eingehende Nachricht startet das Script; ohne konfiguriertes Script ist <code>msg.payload</code> das Script.</p>
11
+ <h3>Output</h3>
12
+ <p><code>msg.payload</code> ist die Ausgabe des Scripts (was es mit <code>WriteLine</code> schreibt), <code>msg.objects</code> die Werte der Variablen, die das Script gesetzt hat, dazu <code>iface</code> (<code>ReGaHSS</code>) und <code>ccu</code>. Ein Script, das nicht bis zum Ende läuft, meldet <i>Script call failed</i>. Auf openccu-lite gibt es keine ReGaHSS; der Node meldet dort pro Nachricht einen Fehler.</p>
13
+ </script>
@@ -0,0 +1,46 @@
1
+ <script type="text/html" data-help-name="ccu-set-value">
2
+ <p>Einen Wert in mehrere Geräte auf einmal schreiben: alle Kanäle, auf die die Filter passen, bekommen <code>msg.payload</code> in den gewählten Datenpunkt.</p>
3
+ <h3>Konfiguration</h3>
4
+ <ul>
5
+ <li><b>CCU</b>: Die zu verwendende CCU-Konfiguration.</li>
6
+ <li><b>Interface</b>: Die Schnittstelle, deren Geräte angesprochen werden; <code>*</code> für alle verbundenen Schnittstellen.</li>
7
+ <li><b>room</b>, <b>function</b>: Raum- und Gewerke-Filter, z.&nbsp;B. <code>Wohnzimmer</code>, <code>Licht</code>.</li>
8
+ <li><b>device</b>, <b>deviceName</b>, <b>deviceType</b>: Filter auf Seriennummer, CCU-Name und Typ des Geräts, z.&nbsp;B. <code>OEQ1662328</code>, <code>Deckenlampe.*</code>, <code>HM-LC-Sw1-FM</code>.</li>
9
+ <li><b>channel</b>, <b>channelName</b>, <b>channelType</b>, <b>channelIndex</b>: Filter auf Kanaladresse (<code>OEQ1245312:4</code>), Kanalname, Kanaltyp (<code>SWITCH</code>, <code>DIMMER</code>) und Kanalindex.</li>
10
+ <li><b>datapoint</b>: Der Datenpunkt, in den geschrieben wird, z.&nbsp;B. <code>STATE</code> oder <code>LEVEL</code>. Was ein Datenpunkt bedeutet, sein Wertebereich und seine Einheit:
11
+ die <a href="https://www.eq-3.de/Downloads/eq3/download%20bereich/hm_web_ui_doku/HmIP_Device_Documentation.pdf" target="_blank">eQ-3 HmIP-Gerätedokumentation (PDF)</a>.</li>
12
+ <li><b>force</b>: Schreibt auch dann, wenn der Cache den Wert schon kennt (siehe <i>Queue und Erzwingen</i> beim value Node).</li>
13
+ </ul>
14
+ <p>Jeder Filter ist ein Text oder, mit dem Wahlschalter daneben, ein regulärer Ausdruck; ein leerer Filter passt auf alles. Geschrieben wird in jeden Kanal, der alle gesetzten Filter passiert und den Datenpunkt hat.</p>
15
+
16
+ <h3>Input</h3>
17
+ <p><code>msg.payload</code> ist der Wert, der geschrieben wird. Leer gelassene Filter füllen gleichnamige Eigenschaften der Nachricht (<code>msg.iface</code>, <code>msg.rooms</code>, <code>msg.channel</code>, <code>msg.datapoint</code> usw.); <code>msg.config</code> überschreibt die Konfiguration für genau diese Nachricht (siehe unten).</p>
18
+
19
+ <h3>Party-/Urlaubsmodus (HmIP)</h3>
20
+ <p>Ein HmIP-Thermostat (eTRV, WTH) nimmt <code>PARTY_TIME_START</code>, <code>PARTY_TIME_END</code> und
21
+ <code>PARTY_SET_POINT_TEMPERATURE</code> nur gemeinsam an; einzeln geschrieben setzt er die anderen beiden zurück. Ein
22
+ Schreiben auf einen der drei Datenpunkte geht deshalb als ein <code>putParamset</code> mit allen dreien hinaus – die
23
+ beiden anderen aus dem letzten eigenen Schreiben, dem Wertecache oder einem Lesen vom Gerät. Die Zeiten können als
24
+ Gerätestring <code>YYYY_MM_DD HH:MM</code>, als JavaScript-Date, ISO-String oder Millisekunden angegeben werden; sie
25
+ werden in lokaler Zeit für das Gerät formatiert. Ältere HM-Thermostate (<code>PARTY_MODE_SUBMIT</code>) sind nicht
26
+ abgedeckt.</p>
27
+
28
+ <h3>Dynamische Konfiguration</h3>
29
+ <p><code>msg.config</code> ist ein Objekt, dessen Eigenschaften die Konfiguration dieses Nodes für genau diese Nachricht überschreiben. Die gespeicherte Konfiguration bleibt unverändert.</p>
30
+ <ul>
31
+ <li><code>iface</code></li>
32
+ <li><code>rooms</code></li>
33
+ <li><code>functions</code></li>
34
+ <li><code>device</code></li>
35
+ <li><code>deviceType</code></li>
36
+ <li><code>deviceName</code></li>
37
+ <li><code>channel</code></li>
38
+ <li><code>channelType</code></li>
39
+ <li><code>channelIndex</code></li>
40
+ <li><code>channelName</code></li>
41
+ <li><code>datapoint</code></li>
42
+ <li><code>force</code></li>
43
+ <li>sowie die zugehörigen <code>...Rx</code>-Selektoren</li>
44
+ </ul>
45
+ <p>Zusätzlich füllen gleichnamige Eigenschaften der Nachricht selbst (<code>msg.rooms</code> usw.) leer gelassene Felder — so war es schon immer.</p>
46
+ </script>
@@ -0,0 +1,29 @@
1
+ <script type="text/html" data-help-name="ccu-signal">
2
+ <p>Senden von LED- und Tonsignalen an Displaytaster und Funk-Gongs.</p>
3
+
4
+ <h3>Dynamische Konfiguration</h3>
5
+ <p><code>msg.config</code> ist ein Objekt, dessen Eigenschaften die Konfiguration dieses Nodes für genau diese Nachricht überschreiben. Die gespeicherte Konfiguration bleibt unverändert.</p>
6
+ <ul>
7
+ <li><code>iface</code></li>
8
+ <li><code>channel</code></li>
9
+ <li><code>channelType</code></li>
10
+ <li><code>chime</code></li>
11
+ <li><code>led</code></li>
12
+ <li><code>signal</code></li>
13
+ <li><code>volume</code></li>
14
+ <li><code>repeat</code></li>
15
+ <li><code>repetitions</code></li>
16
+ <li><code>durationUnit</code></li>
17
+ <li><code>durationValue</code></li>
18
+ <li><code>rampTimeUnit</code></li>
19
+ <li><code>rampTimeValue</code></li>
20
+ <li><code>acousticAlarmSelection</code></li>
21
+ <li><code>opticalAlarmSelection</code></li>
22
+ <li><code>dimmerLevel</code></li>
23
+ <li><code>dimmerColor</code></li>
24
+ <li><code>dimmerList</code></li>
25
+ <li><code>soundLevel</code></li>
26
+ <li><code>soundList</code></li>
27
+ </ul>
28
+ <p><code>soundList</code> und <code>dimmerList</code> akzeptieren auch ein einfaches Array von Werten, z.B. <code>msg.config.soundList = [1, 2]</code>.</p>
29
+ </script>
@@ -0,0 +1,18 @@
1
+ <script type="text/html" data-help-name="ccu-switch">
2
+ <p>Nachricht abhängig von einem Zustand eines Aktors oder einer Systemvariablen weiterleiten.</p>
3
+ <h3>Details</h3>
4
+ <p>Der ccu switch Node verhält sich ähnlich wie der switch Node von Node-RED. Er leitet eine Nachricht abhängig von einem Zustand eines Aktors oder einer Systemvariablen weiter, wahlweise auch je nach Zustand an unterschiedliche Ausgänge.</p>
5
+ <h4>Dokumentation</h4>
6
+ <a target="_blank" href="https://github.com/rdmtc/RedMatic/wiki/CCU-Nodes#ccu-switch-node">ccu switch node im RedMatic Wiki</a>
7
+
8
+ <h3>Dynamische Konfiguration</h3>
9
+ <p><code>msg.config</code> ist ein Objekt, dessen Eigenschaften die Konfiguration dieses Nodes für genau diese Nachricht überschreiben. Die gespeicherte Konfiguration bleibt unverändert.</p>
10
+ <ul>
11
+ <li><code>iface</code></li>
12
+ <li><code>channel</code></li>
13
+ <li><code>datapoint</code></li>
14
+ <li><code>datapointProperty</code></li>
15
+ <li><code>sysvar</code></li>
16
+ <li><code>sysvarProperty</code></li>
17
+ </ul>
18
+ </script>
@@ -0,0 +1,43 @@
1
+ <script type="text/html" data-help-name="ccu-sysvar">
2
+ <p>Setzen und lesen von ReGaHSS Systemvariablen.</p>
3
+ <h3>Inputs</h3>
4
+ <dl class="message-properties">
5
+ <dt>payload
6
+ <span class="property-type">*</span>
7
+ </dt>
8
+ <dd>
9
+ Der Wert der der Systemvariablen zugewiesen werden soll.
10
+ </dd>
11
+ </dl>
12
+ <h3>Outputs</h3>
13
+ <ol class="node-ports">
14
+ <li>Output
15
+
16
+ <code>msg</code> Beispiel:<br>
17
+ <pre><code>
18
+ {
19
+ "ccu": "localhost",
20
+ "iface": "ReGaHSS",
21
+ "type": "SYSVAR",
22
+ "name": "Anwesenheit",
23
+ "payload": false,
24
+ "value": false,
25
+ "valueType": "boolean",
26
+ "valueEnum": "nicht anwesend",
27
+ "ts": 1525197999611,
28
+ "lc": 1525197999611,
29
+ "enum": ["nicht anwesend", "anwesend"],
30
+ "id": 950,
31
+ "topic": "ReGaHSS/Anwesenheit"
32
+ }
33
+ </code></pre>
34
+ </li>
35
+ </ol>
36
+
37
+ <h3>Dynamische Konfiguration</h3>
38
+ <p><code>msg.config</code> ist ein Objekt, dessen Eigenschaften die Konfiguration dieses Nodes für genau diese Nachricht überschreiben. Die gespeicherte Konfiguration bleibt unverändert.</p>
39
+ <ul>
40
+ <li><code>name</code></li>
41
+ </ul>
42
+ <p>Woher der zu schreibende Wert kommt, stellt das Feld <em>Wert aus</em> ein (msg/flow/global/env) — er muss nicht mehr in <code>msg.payload</code> stehen.</p>
43
+ </script>