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 CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
- **Version 3.3.20** - March 2025<br/>
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/>
@@ -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.last_event === undefined) return;
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
- // node.setNodeStatusHue({ fill: 'blue', shape: 'ring', text: 'HUE->KNX', payload: flowMsg.rawEvent + ' ' + flowMsg.payload })
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.21",
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",