iobroker.openknx 1.1.4 → 1.1.5
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/README.md +6 -3
- package/io-package.json +2 -2
- package/lib/knxproj/extractor.js +1 -1
- package/lib/tools.js +1 -1
- package/main.js +33 -18
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,15 +23,18 @@
|
|
|
23
23
|
ioBroker adapter for KNX IP communication, powered by [KNXUltimate](https://github.com/Supergiovane/knxultimate).
|
|
24
24
|
|
|
25
25
|
- Native .knxproj import (ETS4/5/6, password-protected projects supported) -- import dialog accepts both .knxproj and .xml files
|
|
26
|
+
- No adapter update needed to import new ETS versions
|
|
26
27
|
- ETS group address XML import as fallback
|
|
27
28
|
- Read/Write/Transmit/Update flags from ETS ComObjects (no more guessing)
|
|
28
29
|
- DPT inference from ComObjects when GA-level DPT is missing
|
|
29
30
|
- Room assignment (enum.rooms) from ETS building structure
|
|
31
|
+
- Extended DPT coverage (DPT-22, 213, 222, 235, 242, 249, 251, BigInt DPT29)
|
|
30
32
|
- KNX Secure (IP Secure tunneling via .knxkeys keyfile or password)
|
|
31
33
|
- Tunneling (UDP/TCP) and Routing (Multicast) protocols
|
|
34
|
+
- GA-Tools: edit all GA properties (DPT, type, role, read/write flags) with filter and tree view
|
|
35
|
+
- Direct Link: connect any ioBroker state to a KNX group address (1:1, trigger, toggle modes)
|
|
32
36
|
- Alias generation to merge action and status GAs into a single ioBroker object
|
|
33
|
-
-
|
|
34
|
-
|
|
37
|
+
- Status/Act GA linking without alias mode for migration
|
|
35
38
|
- Automatic gateway discovery
|
|
36
39
|
- Automatic reconnect with exponential backoff
|
|
37
40
|
- Autoread of configured datapoints on startup
|
|
@@ -49,7 +52,7 @@ ioBroker adapter for KNX IP communication, powered by [KNXUltimate](https://gith
|
|
|
49
52
|
Placeholder for the next version (at the beginning of the line):
|
|
50
53
|
### **WORK IN PROGRESS**
|
|
51
54
|
-->
|
|
52
|
-
### 1.1.
|
|
55
|
+
### 1.1.5 (2026-03-31)
|
|
53
56
|
|
|
54
57
|
- (TA2k) **breaking:** KNX communication switched to KNXUltimate
|
|
55
58
|
- (TA2k) **breaking:** DPT21 property names changed (outofservice → outOfService, inalarm → inAlarm, alarmeunack → alarmUnAck), values must be boolean
|
package/io-package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "openknx",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.5",
|
|
5
5
|
"news": {
|
|
6
|
-
"1.1.
|
|
6
|
+
"1.1.5": {
|
|
7
7
|
"en": "**breaking:** KNX communication switched to KNXUltimate\n**breaking:** DPT21 property names changed (outofservice → outOfService, inalarm → inAlarm, alarmeunack → alarmUnAck), values must be boolean\n**breaking:** DPT237 property names changed to camelCase\nfeature: KNX Secure support\nfeature: Native .knxproj import (ETS4/5/6, password-protected) with flags, DPT inference, room assignment\nfeature: Extended DPT coverage (9 additional DPTs, including DPT-22, 213, 222, 235, 242, 249, 251)\nfeature: Improved connection stability\nfeature: Improved role detection (switch, level, value, text, date) based on DPT type\nfeature: Direct Link all iobroker states to a KNX state\nfeature: GA-Tools: all GA properties editable (DPT, type, role, flags) with compact layout",
|
|
8
8
|
"de": "**breaking:** KNX-Kommunikation auf KNXUltimate umgestellt\n**breaking:** DPT21 Eigenschaftsnamen geändert (outofservice → outOfService, inalarm → inAlarm, alarmeunack → alarmUnAck), Werte müssen boolean sein\n**breaking:** DPT237 Eigenschaftsnamen auf camelCase geändert\nFeature: KNX Secure Unterstützung\nFeature: Nativer .knxproj Import (ETS4/5/6, passwortgeschützt) mit Flags, DPT-Erkennung, Raumzuordnung\nFeature: Erweiterte DPT-Abdeckung (9 zusätzliche DPTs, u.a. DPT-22, 213, 222, 235, 242, 249, 251)\nFeature: Verbesserte Verbindungsstabilität\nFeature: Verbesserte Rollenerkennung (switch, level, value, text, date) basierend auf DPT-Typ\nFeature: Direct Link – beliebige ioBroker-States mit KNX-Gruppenadressen verknüpfen\nFeature: GA-Tools: alle GA-Eigenschaften editierbar (DPT, Typ, Rolle, Flags) mit kompaktem Layout",
|
|
9
9
|
"ru": "**breaking:** KNX-коммуникация переключена на KNXUltimate\n**breaking:** Имена свойств DPT21 изменены (outofservice → outOfService, inalarm → inAlarm, alarmeunack → alarmUnAck), значения должны быть boolean\n**breaking:** Имена свойств DPT237 изменены на camelCase\nFeature: Поддержка KNX Secure\nFeature: Нативный импорт .knxproj (ETS4/5/6, с паролем) с флагами, определением DPT, назначением комнат\nFeature: Расширенное покрытие DPT (9 дополнительных DPT, включая DPT-22, 213, 222, 235, 242, 249, 251)\nFeature: Улучшенная стабильность соединения\nFeature: Улучшенное определение ролей (switch, level, value, text, date) на основе типа DPT\nFeature: Direct Link – привязка любых состояний ioBroker к групповым адресам KNX\nFeature: GA-Tools: все свойства GA редактируемы (DPT, тип, роль, флаги) с компактным макетом",
|
package/lib/knxproj/extractor.js
CHANGED
package/lib/tools.js
CHANGED
package/main.js
CHANGED
|
@@ -858,6 +858,29 @@ class openknx extends utils.Adapter {
|
|
|
858
858
|
}
|
|
859
859
|
}
|
|
860
860
|
|
|
861
|
+
// Reconnect delays in seconds: 10, 30, 60, 120, 120, 120, 120
|
|
862
|
+
static reconnectDelays = [10, 30, 60, 120, 120, 120, 120];
|
|
863
|
+
|
|
864
|
+
scheduleReconnect() {
|
|
865
|
+
if (this.stopping || this.reconnectCount >= openknx.reconnectDelays.length) {
|
|
866
|
+
if (!this.stopping) {
|
|
867
|
+
this.log.error(`Giving up after ${openknx.reconnectDelays.length} reconnect attempts`);
|
|
868
|
+
}
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
const delay = openknx.reconnectDelays[this.reconnectCount];
|
|
872
|
+
this.reconnectCount++;
|
|
873
|
+
this.log.info(`Reconnect attempt ${this.reconnectCount}/${openknx.reconnectDelays.length} in ${delay}s...`);
|
|
874
|
+
this.reconnectTimer = setTimeout(() => {
|
|
875
|
+
try {
|
|
876
|
+
this.startKnxStack();
|
|
877
|
+
} catch (e) {
|
|
878
|
+
this.log.error(`Reconnect failed: ${e.message || e}`);
|
|
879
|
+
this.scheduleReconnect();
|
|
880
|
+
}
|
|
881
|
+
}, delay * 1000);
|
|
882
|
+
}
|
|
883
|
+
|
|
861
884
|
startKnxStack() {
|
|
862
885
|
// Clean up previous connection (reconnect case)
|
|
863
886
|
if (this.knxConnection) {
|
|
@@ -1014,8 +1037,6 @@ class openknx extends utils.Adapter {
|
|
|
1014
1037
|
});
|
|
1015
1038
|
|
|
1016
1039
|
// Event: disconnected
|
|
1017
|
-
// Reconnect delays in seconds: 10, 30, 60, 120, 120, 120, 120
|
|
1018
|
-
const reconnectDelays = [10, 30, 60, 120, 120, 120, 120];
|
|
1019
1040
|
this.knxConnection.on(KNXClientEvents.disconnected, reason => {
|
|
1020
1041
|
if (this.connected) {
|
|
1021
1042
|
this.log.error(`Connection lost: ${reason}`);
|
|
@@ -1023,21 +1044,7 @@ class openknx extends utils.Adapter {
|
|
|
1023
1044
|
this.connected = false;
|
|
1024
1045
|
this.setState("info.connection", this.connected, true);
|
|
1025
1046
|
this.setState("info.busload", 0, true);
|
|
1026
|
-
|
|
1027
|
-
if (!this.stopping && this.reconnectCount < reconnectDelays.length) {
|
|
1028
|
-
const delay = reconnectDelays[this.reconnectCount];
|
|
1029
|
-
this.reconnectCount++;
|
|
1030
|
-
this.log.info(`Reconnect attempt ${this.reconnectCount}/${reconnectDelays.length} in ${delay}s...`);
|
|
1031
|
-
this.reconnectTimer = setTimeout(() => {
|
|
1032
|
-
try {
|
|
1033
|
-
this.startKnxStack();
|
|
1034
|
-
} catch (e) {
|
|
1035
|
-
this.log.error(`Reconnect failed: ${e.message || e}`);
|
|
1036
|
-
}
|
|
1037
|
-
}, delay * 1000);
|
|
1038
|
-
} else if (this.reconnectCount >= reconnectDelays.length) {
|
|
1039
|
-
this.log.error(`Giving up after ${reconnectDelays.length} reconnect attempts`);
|
|
1040
|
-
}
|
|
1047
|
+
this.scheduleReconnect();
|
|
1041
1048
|
});
|
|
1042
1049
|
|
|
1043
1050
|
// Event: error
|
|
@@ -1233,7 +1240,15 @@ class openknx extends utils.Adapter {
|
|
|
1233
1240
|
});
|
|
1234
1241
|
|
|
1235
1242
|
// Start connection
|
|
1236
|
-
|
|
1243
|
+
try {
|
|
1244
|
+
this.knxConnection.Connect();
|
|
1245
|
+
} catch (e) {
|
|
1246
|
+
if (e.message === "No client socket defined") {
|
|
1247
|
+
this.log.error(`Connect failed: KNX client socket was not created. Check that the configured network interface (${this.config.localInterface || "auto"}) is available and the protocol (${this.config.hostProtocol || "TunnelUDP"}) is correct.`);
|
|
1248
|
+
} else {
|
|
1249
|
+
this.log.error(`Connect failed: ${e.message}`);
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1237
1252
|
}
|
|
1238
1253
|
|
|
1239
1254
|
countObjectsNotification(cnt_withDPT) {
|