node-red-contrib-knx-ultimate 3.3.21 → 3.3.22
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.
- package/CHANGELOG.md +5 -1
- package/nodes/knxUltimate.js +1 -1
- package/nodes/knxUltimateAlerter.js +1 -1
- package/nodes/knxUltimateAutoResponder.js +1 -1
- package/nodes/knxUltimateGarageDoorBarrierOpener.js +1 -1
- package/nodes/knxUltimateGlobalContext.js +1 -1
- package/nodes/knxUltimateHueBattery.js +2 -2
- package/nodes/knxUltimateHueButton.js +7 -7
- package/nodes/knxUltimateHueContactSensor.js +2 -2
- package/nodes/knxUltimateHueLight.js +2 -2
- package/nodes/knxUltimateHueLightSensor.js +2 -2
- package/nodes/knxUltimateHueMotion.js +2 -2
- package/nodes/knxUltimateHueScene.js +2 -2
- package/nodes/knxUltimateHueTapDial.js +2 -2
- package/nodes/knxUltimateHueTemperatureSensor.js +2 -2
- package/nodes/knxUltimateHueZigbeeConnectivity.js +2 -2
- package/nodes/knxUltimateHuedevice_software_update.js +2 -2
- package/nodes/knxUltimateLoadControl.js +1 -1
- package/nodes/knxUltimateLogger.js +1 -1
- package/nodes/knxUltimateSceneController.js +1 -1
- package/nodes/knxUltimateViewer.js +1 -1
- package/nodes/knxUltimateWatchDog.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
-
**Version 3.3.
|
|
9
|
+
**Version 3.3.22** - March 2025<br/>
|
|
10
|
+
- HUE Button: fixed random unresponsive button event.<br/>
|
|
11
|
+
- Housekeeping<br/>
|
|
12
|
+
|
|
13
|
+
**Version 3.3.21** - March 2025<br/>
|
|
10
14
|
- KNX Engine: fixed an unmeaningful error while validating DPTs.<br/>
|
|
11
15
|
|
|
12
16
|
**Version 3.3.20** - March 2025<br/>
|
package/nodes/knxUltimate.js
CHANGED
|
@@ -10,7 +10,7 @@ module.exports = function (RED) {
|
|
|
10
10
|
function knxUltimate(config) {
|
|
11
11
|
RED.nodes.createNode(this, config);
|
|
12
12
|
const node = this;
|
|
13
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
13
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
14
14
|
// 11/11/2021 Is the node server disabled by the flow "disable" command?
|
|
15
15
|
if (node.serverKNX === null) {
|
|
16
16
|
node.status({ fill: 'red', shape: 'dot', text: '[THE GATEWAY NODE HAS BEEN DISABLED]' });
|
|
@@ -10,7 +10,7 @@ module.exports = function (RED) {
|
|
|
10
10
|
|
|
11
11
|
RED.nodes.createNode(this, config);
|
|
12
12
|
const node = this;
|
|
13
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
13
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
14
14
|
node.name = config.name || 'KNX Alerter';
|
|
15
15
|
node.listenallga = true; // Dont' remove this.
|
|
16
16
|
node.notifyreadrequest = false;
|
|
@@ -35,7 +35,7 @@ module.exports = function (RED) {
|
|
|
35
35
|
function knxUltimateAutoResponder(config) {
|
|
36
36
|
RED.nodes.createNode(this, config)
|
|
37
37
|
const node = this
|
|
38
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
38
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
39
39
|
node.topic = node.name
|
|
40
40
|
node.name = config.name === undefined ? 'Auto responder' : config.name
|
|
41
41
|
node.outputtopic = node.name
|
|
@@ -17,7 +17,7 @@ module.exports = function (RED) {
|
|
|
17
17
|
function knxUltimateGarageDoorBarrierOpener(config) {
|
|
18
18
|
RED.nodes.createNode(this, config);
|
|
19
19
|
const node = this;
|
|
20
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
20
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
21
21
|
// 11/11/2021 Is the node server disabled by the flow "disable" command?
|
|
22
22
|
if (node.serverKNX === null) {
|
|
23
23
|
node.status({ fill: 'red', shape: 'dot', text: '[THE GATEWAY NODE HAS BEEN DISABLED]' });
|
|
@@ -29,7 +29,7 @@ module.exports = function (RED) {
|
|
|
29
29
|
function knxUltimateGlobalContext(config) {
|
|
30
30
|
RED.nodes.createNode(this, config)
|
|
31
31
|
const node = this
|
|
32
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
32
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
33
33
|
node.topic = node.name
|
|
34
34
|
node.name = config.name === undefined ? 'KNXGlobalContext' : config.name
|
|
35
35
|
node.outputtopic = node.name
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueBattery(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
9
9
|
node.dpt = '';
|
|
@@ -4,8 +4,8 @@ module.exports = function (RED) {
|
|
|
4
4
|
function knxUltimateHueButton(config) {
|
|
5
5
|
RED.nodes.createNode(this, config);
|
|
6
6
|
const node = this;
|
|
7
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
8
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
7
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
8
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
9
9
|
node.topic = node.name;
|
|
10
10
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
11
11
|
node.dpt = '';
|
|
@@ -93,7 +93,7 @@ module.exports = function (RED) {
|
|
|
93
93
|
if (_event.id === config.hueDevice) {
|
|
94
94
|
|
|
95
95
|
// IMPORTANT: exit if no button last_event present.
|
|
96
|
-
if (!_event.hasOwnProperty("button") || _event.button
|
|
96
|
+
if (!_event.hasOwnProperty("button") || _event.button?.last_event === undefined) return;
|
|
97
97
|
|
|
98
98
|
const knxMsgPayload = {};
|
|
99
99
|
let flowMsgPayload = true;
|
|
@@ -134,7 +134,7 @@ module.exports = function (RED) {
|
|
|
134
134
|
knxMsgPayload.dpt = config.dptshort_release;
|
|
135
135
|
knxMsgPayload.payload = node.short_releaseValue;
|
|
136
136
|
// Send to KNX bus
|
|
137
|
-
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) {
|
|
137
|
+
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined && node.serverKNX !== undefined) {
|
|
138
138
|
node.serverKNX.sendKNXTelegramToKNXEngine({
|
|
139
139
|
grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id,
|
|
140
140
|
});
|
|
@@ -159,7 +159,7 @@ module.exports = function (RED) {
|
|
|
159
159
|
knxMsgPayload.payload = node.long_pressValue ? { decr_incr: 0, data: 3 } : { decr_incr: 1, data: 3 }; // If the light is turned on, the initial DIM direction must be down, otherwise, up
|
|
160
160
|
}
|
|
161
161
|
// Send to KNX bus
|
|
162
|
-
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) {
|
|
162
|
+
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined && node.serverKNX !== undefined) {
|
|
163
163
|
node.serverKNX.sendKNXTelegramToKNXEngine({
|
|
164
164
|
grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id,
|
|
165
165
|
});
|
|
@@ -184,7 +184,7 @@ module.exports = function (RED) {
|
|
|
184
184
|
flowMsg.rawEvent = _event;
|
|
185
185
|
flowMsg.payload = flowMsgPayload;
|
|
186
186
|
node.send(flowMsg);
|
|
187
|
-
|
|
187
|
+
if (node.serverKNX === undefined) node.setNodeStatusHue({ fill: 'green', shape: 'dot', text: '', payload: flowMsg.event })
|
|
188
188
|
}
|
|
189
189
|
} catch (error) {
|
|
190
190
|
node.setNodeStatusHue({
|
|
@@ -208,7 +208,7 @@ module.exports = function (RED) {
|
|
|
208
208
|
node.isTimerDimStopRunning = false;
|
|
209
209
|
knxMsgPayload.payload = { decr_incr: 0, data: 0 }; // Payload for the output msg
|
|
210
210
|
// Send to KNX bus
|
|
211
|
-
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) {
|
|
211
|
+
if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined && node.serverKNX !== undefined) {
|
|
212
212
|
node.serverKNX.sendKNXTelegramToKNXEngine({
|
|
213
213
|
grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id,
|
|
214
214
|
});
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueContactSensor(config) {
|
|
3
3
|
RED.nodes.createNode(this, config)
|
|
4
4
|
const node = this
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue)
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined
|
|
7
7
|
node.topic = node.name
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name
|
|
9
9
|
node.dpt = ''
|
|
@@ -10,8 +10,8 @@ module.exports = function (RED) {
|
|
|
10
10
|
function knxUltimateHueLight(config) {
|
|
11
11
|
RED.nodes.createNode(this, config);
|
|
12
12
|
const node = this;
|
|
13
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
14
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
13
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
14
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
15
15
|
|
|
16
16
|
// Convert for backward compatibility
|
|
17
17
|
if (config.nameLightKelvinDIM === undefined) {
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueLightSensor(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
9
9
|
node.dpt = '';
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueMotion(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? "Hue" : config.name;
|
|
9
9
|
node.dpt = "";
|
|
@@ -6,8 +6,8 @@ module.exports = function (RED) {
|
|
|
6
6
|
function knxUltimateHueScene(config) {
|
|
7
7
|
RED.nodes.createNode(this, config);
|
|
8
8
|
const node = this;
|
|
9
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
10
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
9
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
10
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
11
11
|
node.topic = node.name;
|
|
12
12
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
13
13
|
node.dpt = '';
|
|
@@ -3,8 +3,8 @@ module.exports = function (RED) {
|
|
|
3
3
|
function knxUltimateHueTapDial(config) {
|
|
4
4
|
RED.nodes.createNode(this, config);
|
|
5
5
|
const node = this;
|
|
6
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
7
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
6
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
7
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
8
8
|
node.topic = node.name;
|
|
9
9
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
10
10
|
node.dpt = '';
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueTemperatureSensor(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
9
9
|
node.dpt = '';
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHueZigbeeConnectivity(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
9
9
|
node.dpt = '';
|
|
@@ -2,8 +2,8 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateHuedevice_software_update(config) {
|
|
3
3
|
RED.nodes.createNode(this, config);
|
|
4
4
|
const node = this;
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
6
|
-
node.serverHue = RED.nodes.getNode(config.serverHue);
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
6
|
+
node.serverHue = RED.nodes.getNode(config.serverHue) || undefined;
|
|
7
7
|
node.topic = node.name;
|
|
8
8
|
node.name = config.name === undefined ? 'Hue' : config.name;
|
|
9
9
|
node.dpt = '';
|
|
@@ -7,7 +7,7 @@ module.exports = function (RED) {
|
|
|
7
7
|
|
|
8
8
|
RED.nodes.createNode(this, config)
|
|
9
9
|
const node = this
|
|
10
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
10
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
11
11
|
node.name = config.name || 'KNX Load Control'
|
|
12
12
|
node.topic = config.topic
|
|
13
13
|
node.dpt = config.dpt
|
|
@@ -2,7 +2,7 @@ module.exports = function (RED) {
|
|
|
2
2
|
function knxUltimateLogger(config) {
|
|
3
3
|
RED.nodes.createNode(this, config)
|
|
4
4
|
const node = this
|
|
5
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
5
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
6
6
|
node.notifyreadrequestalsorespondtobus = 'false'
|
|
7
7
|
node.notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized = ''
|
|
8
8
|
node.notifyreadrequest = true
|
|
@@ -8,7 +8,7 @@ module.exports = function (RED) {
|
|
|
8
8
|
|
|
9
9
|
RED.nodes.createNode(this, config)
|
|
10
10
|
const node = this
|
|
11
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
11
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
12
12
|
node.name = config.name || 'KNX Scene Controller'
|
|
13
13
|
node.outputtopic = typeof config.outputtopic === 'undefined' ? '' : config.outputtopic
|
|
14
14
|
node.topic = config.topic || ''
|
|
@@ -5,7 +5,7 @@ module.exports = function (RED) {
|
|
|
5
5
|
function knxUltimateViewer(config) {
|
|
6
6
|
RED.nodes.createNode(this, config);
|
|
7
7
|
const node = this;
|
|
8
|
-
node.serverKNX = RED.nodes.getNode(config.server);
|
|
8
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined;
|
|
9
9
|
node.topic = node.name;
|
|
10
10
|
node.name = config.name === undefined ? 'KNXViewer' : config.name;
|
|
11
11
|
node.outputtopic = node.name;
|
|
@@ -4,7 +4,7 @@ module.exports = function (RED) {
|
|
|
4
4
|
function knxUltimateWatchDog(config) {
|
|
5
5
|
RED.nodes.createNode(this, config)
|
|
6
6
|
const node = this
|
|
7
|
-
node.serverKNX = RED.nodes.getNode(config.server)
|
|
7
|
+
node.serverKNX = RED.nodes.getNode(config.server) || undefined
|
|
8
8
|
node.dpt = '1.001'
|
|
9
9
|
node.notifyreadrequestalsorespondtobus = 'false'
|
|
10
10
|
node.notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized = ''
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"engines": {
|
|
4
4
|
"node": ">=16.0.0"
|
|
5
5
|
},
|
|
6
|
-
"version": "3.3.
|
|
6
|
+
"version": "3.3.22",
|
|
7
7
|
"description": "Control your KNX 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.",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"binary-parser": "2.2.1",
|