iobroker.openknx 0.1.9 → 0.1.13
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 +230 -81
- package/admin/i18n/de/translations.json +11 -2
- package/admin/i18n/en/translations.json +11 -2
- package/admin/i18n/es/translations.json +7 -1
- package/admin/i18n/fr/translations.json +7 -1
- package/admin/i18n/it/translations.json +7 -1
- package/admin/i18n/nl/translations.json +7 -1
- package/admin/i18n/pl/translations.json +7 -1
- package/admin/i18n/pt/translations.json +7 -1
- package/admin/i18n/ru/translations.json +7 -1
- package/admin/i18n/zh-cn/translations.json +7 -1
- package/admin/index_m.html +439 -366
- package/admin/words.js +83 -206
- package/io-package.json +9 -4
- package/lib/doubleKeyedMap.js +56 -0
- package/lib/knx/package-lock.json +675 -0
- package/lib/knx/src/dptlib/dpt11.js +1 -1
- package/lib/knx/src/dptlib/dpt14.js +1 -1
- package/lib/knx/src/dptlib/dpt18.js +1 -1
- package/lib/knx/src/dptlib/dpt2.js +5 -3
- package/lib/knx/src/dptlib/dpt21.js +4 -2
- package/lib/knx/src/dptlib/dpt232.js +1 -1
- package/lib/knx/src/dptlib/dpt237.js +1 -1
- package/lib/knx/src/dptlib/dpt3.js +1 -1
- package/lib/knx/src/dptlib/dpt4.js +1 -1
- package/lib/knx/src/dptlib/dpt7.js +8 -1
- package/lib/projectImport.js +146 -48
- package/lib/projectImport.test.js +14 -7
- package/lib/tools.js +47 -26
- package/main.js +103 -104
- package/package.json +8 -20
- package/admin/exportGA.png +0 -0
package/admin/words.js
CHANGED
|
@@ -2,209 +2,86 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
systemDictionary = {
|
|
5
|
-
"Extracted %s states": {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
},
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"zh-cn": "重新启动适配器...",
|
|
89
|
-
},
|
|
90
|
-
"Unsupported file format": {
|
|
91
|
-
en: "Unsupported file format",
|
|
92
|
-
de: "Nicht unterstütztes Dateiformat",
|
|
93
|
-
ru: "Неподдерживаемый формат файла",
|
|
94
|
-
pt: "Formato de arquivo não suportado",
|
|
95
|
-
nl: "Niet ondersteund bestandsformaat",
|
|
96
|
-
fr: "Format de fichier non pris en charge",
|
|
97
|
-
it: "Formato file non supportato",
|
|
98
|
-
es: "Formato de archivo no soportado",
|
|
99
|
-
pl: "Niewspierany format pliku",
|
|
100
|
-
"zh-cn": "不支持的文件格式",
|
|
101
|
-
},
|
|
102
|
-
"add only new Objects": {
|
|
103
|
-
en: "Add only new Objects",
|
|
104
|
-
de: "Nur neue Objekte hinzufügen",
|
|
105
|
-
ru: "Добавляйте только новые объекты",
|
|
106
|
-
pt: "Adicionar apenas novos objetos",
|
|
107
|
-
nl: "Alleen nieuwe objecten toevoegen",
|
|
108
|
-
fr: "Ajouter uniquement de nouveaux objets",
|
|
109
|
-
it: "Aggiungi solo nuovi oggetti",
|
|
110
|
-
es: "Agregar solo nuevos objetos",
|
|
111
|
-
pl: "Dodaj tylko nowe obiekty",
|
|
112
|
-
"zh-cn": "仅添加新对象",
|
|
113
|
-
},
|
|
114
|
-
"invalid IP address": {
|
|
115
|
-
en: "invalid IP address",
|
|
116
|
-
de: "ungültige IP-Adresse",
|
|
117
|
-
ru: "неверный IP-адрес",
|
|
118
|
-
pt: "endereço IP inválido",
|
|
119
|
-
nl: "ongeldig IP-adres",
|
|
120
|
-
fr: "adresse IP invalide",
|
|
121
|
-
it: "indirizzo IP non valido",
|
|
122
|
-
es: "Dirección IP inválida",
|
|
123
|
-
pl: "nieprawidłowy adres IP",
|
|
124
|
-
"zh-cn": "无效的 IP 地址",
|
|
125
|
-
},
|
|
126
|
-
"invalid port number": {
|
|
127
|
-
en: "invalid port number",
|
|
128
|
-
de: "ungültige Portnummer",
|
|
129
|
-
ru: "неверный номер порта",
|
|
130
|
-
pt: "número de porta inválido",
|
|
131
|
-
nl: "ongeldig poortnummer",
|
|
132
|
-
fr: "numéro de port invalide",
|
|
133
|
-
it: "numero di porta non valido",
|
|
134
|
-
es: "número de puerto no válido",
|
|
135
|
-
pl: "nieprawidłowy numer portu",
|
|
136
|
-
"zh-cn": "无效的端口号",
|
|
137
|
-
},
|
|
138
|
-
"local network interface": {
|
|
139
|
-
en: "local network interface",
|
|
140
|
-
de: "lokale Netzwerkschnittstelle",
|
|
141
|
-
ru: "локальный сетевой интерфейс",
|
|
142
|
-
pt: "interface de rede local",
|
|
143
|
-
nl: "lokale netwerkinterface",
|
|
144
|
-
fr: "interface réseau local",
|
|
145
|
-
it: "interfaccia di rete locale",
|
|
146
|
-
es: "interfaz de red local",
|
|
147
|
-
pl: "lokalny interfejs sieciowy",
|
|
148
|
-
"zh-cn": "本地网络接口",
|
|
149
|
-
},
|
|
150
|
-
"min 1": {
|
|
151
|
-
en: "minimum is 1",
|
|
152
|
-
de: "Minimum ist 1",
|
|
153
|
-
ru: "минимум 1",
|
|
154
|
-
pt: "mínimo é 1",
|
|
155
|
-
nl: "minimum is 1",
|
|
156
|
-
fr: "le minimum est 1",
|
|
157
|
-
it: "il minimo è 1",
|
|
158
|
-
es: "el mínimo es 1",
|
|
159
|
-
pl: "minimum to 1",
|
|
160
|
-
"zh-cn": "最小值为 1",
|
|
161
|
-
},
|
|
162
|
-
"override object path": {
|
|
163
|
-
en: "override object path",
|
|
164
|
-
de: "Objektpfad überschreiben",
|
|
165
|
-
ru: "переопределить путь к объекту",
|
|
166
|
-
pt: "substituir o caminho do objeto",
|
|
167
|
-
nl: "objectpad overschrijven",
|
|
168
|
-
fr: "remplacer le chemin de l'objet",
|
|
169
|
-
it: "sovrascrivere il percorso dell'oggetto",
|
|
170
|
-
es: "anular la ruta del objeto",
|
|
171
|
-
pl: "nadpisz ścieżkę obiektu",
|
|
172
|
-
"zh-cn": "覆盖对象路径",
|
|
173
|
-
},
|
|
174
|
-
"physical KNX address": {
|
|
175
|
-
en: "physical KNX address",
|
|
176
|
-
de: "physikalische KNX-Adresse",
|
|
177
|
-
ru: "физический адрес KNX",
|
|
178
|
-
pt: "endereço KNX físico",
|
|
179
|
-
nl: "fysiek KNX-adres",
|
|
180
|
-
fr: "adresse physique KNX",
|
|
181
|
-
it: "indirizzo fisico KNX",
|
|
182
|
-
es: "dirección KNX física",
|
|
183
|
-
pl: "fizyczny adres KNX",
|
|
184
|
-
"zh-cn": "物理 KNX 地址",
|
|
185
|
-
},
|
|
186
|
-
"physical KNX address in format a/b/c not valid": {
|
|
187
|
-
en: "physical KNX address in format a/b/c not valid",
|
|
188
|
-
de: "physikalische KNX-Adresse im Format a/b/c ungültig",
|
|
189
|
-
ru: "физический адрес KNX в формате a / b / c недействителен",
|
|
190
|
-
pt: "endereço KNX físico em formato a / b / c inválido",
|
|
191
|
-
nl: "fysiek KNX-adres in formaat a/b/c niet geldig",
|
|
192
|
-
fr: "adresse physique KNX au format a/b/c non valide",
|
|
193
|
-
it: "indirizzo fisico KNX in formato a/b/c non valido",
|
|
194
|
-
es: "dirección KNX física en formato a / b / c no válida",
|
|
195
|
-
pl: "fizyczny adres KNX w formacie a/b/c nieważny",
|
|
196
|
-
"zh-cn": "格式为 a/b/c 的物理 KNX 地址无效",
|
|
197
|
-
},
|
|
198
|
-
"this is not a number": {
|
|
199
|
-
en: "this is not a number",
|
|
200
|
-
de: "das ist keine Zahl",
|
|
201
|
-
ru: "это не число",
|
|
202
|
-
pt: "este não é um número",
|
|
203
|
-
nl: "dit is geen nummer",
|
|
204
|
-
fr: "ce n'est pas un nombre",
|
|
205
|
-
it: "questo non è un numero",
|
|
206
|
-
es: "esto no es un numero",
|
|
207
|
-
pl: "to nie jest liczba",
|
|
208
|
-
"zh-cn": "这不是一个数字",
|
|
209
|
-
},
|
|
210
|
-
};
|
|
5
|
+
"Extracted %s states": { "en": "Extracted %s states", "de": "Extrahierte %s-Zustände", "ru": "Извлечено% s состояний", "pt": "Estados% s extraídos", "nl": "Geëxtraheerde %s staten", "fr": "États %s extraits", "it": "%s stati estratti", "es": "Estados% s extraídos", "pl": "Wyodrębnione stany %s", "zh-cn": "提取 %s 状态"},
|
|
6
|
+
"Frames per second": { "en": "Frames per second", "de": "Bilder pro Sekunde", "ru": "Кадров в секунду", "pt": "Quadros por segundo", "nl": "Beelden per seconde", "fr": "Images par seconde", "it": "Fotogrammi al secondo", "es": "Cuadros por segundo", "pl": "Klatki na sekundę", "zh-cn": "每秒帧数"},
|
|
7
|
+
"Import XML from ETS": { "en": "Import XML from ETS", "de": "Import XML aus ETS", "ru": "Экспорт GA XML из ETS", "pt": "Exportação GA XML de ETS", "nl": "GA XML-export vanuit ETS", "fr": "Exportation XML GA depuis ETS", "it": "Esportazione XML GA da ETS", "es": "Exportación GA XML desde ETS", "pl": "Eksport XML GA z ETS", "zh-cn": "从 ETS 导出 GA XML"},
|
|
8
|
+
"Gateway IP": { "en": "Gateway IP", "de": "Gateway-IP", "ru": "IP шлюза", "pt": "IP do gateway", "nl": "Gateway IP", "fr": "IP de la passerelle", "it": "IP gateway", "es": "IP de acceso", "pl": "IP bramy", "zh-cn": "网关IP"},
|
|
9
|
+
"How to export GA XML from ETS:": { "en": "How to export GA XML from ETS:", "de": "So exportieren Sie GA-XML aus der ETS:", "ru": "Как экспортировать GA XML из ETS:", "pt": "Como exportar GA XML do ETS:", "nl": "GA XML exporteren vanuit ETS:", "fr": "Comment exporter GA XML depuis ETS :", "it": "Come esportare GA XML da ETS:", "es": "Cómo exportar GA XML desde ETS:", "pl": "Jak wyeksportować GA XML z ETS:", "zh-cn": "如何从 ETS 导出 GA XML:"},
|
|
10
|
+
"KNXproj are not supported, please open in ETS the Group Adresses and right click on group addresses and then group adresse export": {"en": "KNXproj are not supported, please open in ETS the Group Adresses and right click on group addresses and then group adresse export", "de": "KNXproj werden nicht unterstützt, bitte öffnen Sie in der ETS die Gruppenadressen und klicken Sie mit der rechten Maustaste auf Gruppenadressen und dann Gruppenadressen-Export", "ru": "KNXproj не поддерживаются, откройте в ETS групповые адреса и щелкните правой кнопкой мыши по групповым адресам, а затем экспортируйте групповые адреса.", "pt": "KNXproj não são suportados, por favor, abra no ETS o Group Adresses e clique com o botão direito nos endereços de grupo e então a exportação de endereço de grupo", "nl": "KNXproj worden niet ondersteund, open in ETS de groepsadressen en klik met de rechtermuisknop op groepsadressen en exporteer groepsadressen", "fr": "KNXproj ne sont pas pris en charge, veuillez ouvrir dans ETS les adresses de groupe et faites un clic droit sur les adresses de groupe, puis exportez l'adresse de groupe", "it": "KNXproj non sono supportati, aprire in ETS gli indirizzi di gruppo e fare clic con il pulsante destro del mouse sugli indirizzi di gruppo e quindi esportare gli indirizzi di gruppo", "es": "KNXproj no es compatible, abra en ETS las direcciones del grupo y haga clic con el botón derecho en las direcciones del grupo y luego exportar la dirección del grupo.", "pl": "KNXproj nie są obsługiwane, otwórz w ETS adresy grup i kliknij prawym przyciskiem adresy grup, a następnie wyeksportuj adresy grup", "zh-cn": "不支持KNXproj,请在ETS中打开群组地址,右键点击群组地址,然后群组地址导出"},
|
|
11
|
+
"Port": { "en": "Port", "de": "Hafen", "ru": "Порт", "pt": "Porta", "nl": "Haven", "fr": "Port", "it": "Porta", "es": "Puerto", "pl": "Port", "zh-cn": "港口"},
|
|
12
|
+
"Regex to identify Status GAs (ending with status, rm, rückmeldung..).": {"en": "Regex to identify Status GAs (ending with status, rm, rückmeldung..)", "de": "Regex zum Erkennen von Status-GAs (Endung mit status, rm, rückmeldung..)", "ru": "Регулярное выражение для определения GA состояния (заканчивающееся на status, rm, rückmeldung ..). ", "pt": "Regex para identificar Status GAs (terminando com status, rm, rückmeldung ..). ", "nl": "Regex om Status GA's te identificeren (eindigend met status, rm, rückmeldung..). ", "fr": "Regex pour identifier les Status GA (se terminant par status, rm, rückmeldung..). ", "it": "Regex per identificare gli Status GA (che termina con status, rm, rückmeldung..). ", "es": "Regex para identificar estados GA (terminando con status, rm, rückmeldung ..). ", "pl": "Regex do identyfikacji statusów GA (kończących się na status, rm, rückmeldung...). ", "zh-cn": "用于识别状态 GA 的正则表达式(以状态、rm、rückmeldung 结尾...)。"},
|
|
13
|
+
"Restarting adapter": { "en": "Restarting adapter...", "de": "Adapter neu starten...", "ru": "Перезапуск адаптера ...", "pt": "Reiniciando o adaptador ...", "nl": "Adapter opnieuw opstarten...", "fr": "Redémarrage de l'adaptateur...", "it": "Riavvio dell'adattatore...", "es": "Reiniciando el adaptador ...", "pl": "Ponowne uruchamianie adaptera...", "zh-cn": "重新启动适配器..."},
|
|
14
|
+
"Unsupported file format": { "en": "Unsupported file format", "de": "Nicht unterstütztes Dateiformat", "ru": "Неподдерживаемый формат файла", "pt": "Formato de arquivo não suportado", "nl": "Niet ondersteund bestandsformaat", "fr": "Format de fichier non pris en charge", "it": "Formato file non supportato", "es": "Formato de archivo no soportado", "pl": "Niewspierany format pliku", "zh-cn": "不支持的文件格式"},
|
|
15
|
+
"add only new Objects": { "en": "Add only new Objects", "de": "Nur neue Objekte hinzufügen", "ru": "Добавляйте только новые объекты", "pt": "Adicionar apenas novos objetos", "nl": "Alleen nieuwe objecten toevoegen", "fr": "Ajouter uniquement de nouveaux objets", "it": "Aggiungi solo nuovi oggetti", "es": "Agregar solo nuevos objetos", "pl": "Dodaj tylko nowe obiekty", "zh-cn": "仅添加新对象"},
|
|
16
|
+
"invalid IP address": { "en": "invalid IP address", "de": "ungültige IP-Adresse", "ru": "неверный IP-адрес", "pt": "endereço IP inválido", "nl": "ongeldig IP-adres", "fr": "adresse IP invalide", "it": "indirizzo IP non valido", "es": "Dirección IP inválida", "pl": "nieprawidłowy adres IP", "zh-cn": "无效的 IP 地址"},
|
|
17
|
+
"invalid port number": { "en": "invalid port number", "de": "ungültige Portnummer", "ru": "неверный номер порта", "pt": "número de porta inválido", "nl": "ongeldig poortnummer", "fr": "numéro de port invalide", "it": "numero di porta non valido", "es": "número de puerto no válido", "pl": "nieprawidłowy numer portu", "zh-cn": "无效的端口号"},
|
|
18
|
+
"local network interface": { "en": "local network interface", "de": "lokale Netzwerkschnittstelle", "ru": "локальный сетевой интерфейс", "pt": "interface de rede local", "nl": "lokale netwerkinterface", "fr": "interface réseau local", "it": "interfaccia di rete locale", "es": "interfaz de red local", "pl": "lokalny interfejs sieciowy", "zh-cn": "本地网络接口"},
|
|
19
|
+
"min 1": { "en": "minimum is 1", "de": "Minimum ist 1", "ru": "минимум 1", "pt": "mínimo é 1", "nl": "minimum is 1", "fr": "le minimum est 1", "it": "il minimo è 1", "es": "el mínimo es 1", "pl": "minimum to 1", "zh-cn": "最小值为 1"},
|
|
20
|
+
"override object path": { "ru": "переопределить путь к объекту", "pt": "substituir o caminho do objeto", "nl": "objectpad overschrijven", "fr": "remplacer le chemin de l'objet", "it": "sovrascrivere il percorso dell'oggetto", "es": "anular la ruta del objeto", "pl": "nadpisz ścieżkę obiektu", "zh-cn": "覆盖对象路径"},
|
|
21
|
+
"physical KNX address": { "en": "physical KNX address", "de": "physikalische KNX-Adresse", "ru": "физический адрес KNX", "pt": "endereço KNX físico", "nl": "fysiek KNX-adres", "fr": "adresse physique KNX", "it": "indirizzo fisico KNX", "es": "dirección KNX física", "pl": "fizyczny adres KNX", "zh-cn": "物理 KNX 地址"},
|
|
22
|
+
"physical KNX address in format a/b/c not valid": {"en": "physical KNX address in format a/b/c not valid", "de": "physikalische KNX-Adresse im Format a/b/c ungültig", "ru": "физический адрес KNX в формате a / b / c недействителен", "pt": "endereço KNX físico em formato a / b / c inválido", "nl": "fysiek KNX-adres in formaat a/b/c niet geldig", "fr": "adresse physique KNX au format a/b/c non valide", "it": "indirizzo fisico KNX in formato a/b/c non valido", "es": "dirección KNX física en formato a / b / c no válida", "pl": "fizyczny adres KNX w formacie a/b/c nieważny", "zh-cn": "格式为 a/b/c 的物理 KNX 地址无效"},
|
|
23
|
+
"this is not a number": { "en": "this is not a number", "de": "das ist keine Zahl", "ru": "это не число", "pt": "este não é um número", "nl": "dit is geen nummer", "fr": "ce n'est pas un nombre", "it": "questo non è un numero", "es": "esto no es un numero", "pl": "to nie jest liczba", "zh-cn": "这不是一个数字"},
|
|
24
|
+
"using old knx path for objects": { "ru": "использование старого пути knx для объектов", "pt": "usando o caminho antigo do knx para objetos", "nl": "oud knx-pad gebruiken voor objecten", "fr": "utiliser l'ancien chemin knx pour les objets", "it": "usando il vecchio percorso knx per gli oggetti", "es": "usando la vieja ruta knx para objetos", "pl": "używając starej ścieżki knx dla obiektów", "zh-cn": "对对象使用旧的 knx 路径"},
|
|
25
|
+
"using old knx path for objects (Before importing, delete old objects manually)": {"ru": "использование старого пути knx для объектов (перед импортом удалите старые объекты вручную)", "pt": "usando o caminho antigo do knx para objetos (antes de importar, exclua os objetos antigos manualmente)", "nl": "het oude knx-pad voor objecten gebruiken (verwijder oude objecten handmatig voordat u ze importeert)", "fr": "en utilisant l'ancien chemin knx pour les objets (Avant d'importer, supprimez les anciens objets manuellement)", "it": "utilizzando il vecchio percorso knx per gli oggetti (prima dell'importazione, elimina manualmente i vecchi oggetti)", "es": "utilizando la ruta de knx antigua para los objetos (antes de importar, elimine los objetos antiguos manualmente)", "pl": "używanie starej ścieżki knx dla obiektów (Przed importem usuń ręcznie stare obiekty)", "zh-cn": "使用对象的旧 knx 路径(导入前,手动删除旧对象)"},
|
|
26
|
+
"Minimum Similarity 0-1": {
|
|
27
|
+
"en": "Minimum Similarity 0-1",
|
|
28
|
+
"de": "Mindest Ähnlichkeit 0-1",
|
|
29
|
+
"ru": "Минимальное сходство 0-1",
|
|
30
|
+
"pt": "Similaridade mínima 0-1",
|
|
31
|
+
"nl": "Minimale gelijkenis 0-1",
|
|
32
|
+
"fr": "Similitude minimale 0-1",
|
|
33
|
+
"it": "Somiglianza minima 0-1",
|
|
34
|
+
"es": "Similitud mínima 0-1",
|
|
35
|
+
"pl": "Minimalne podobieństwo 0-1",
|
|
36
|
+
"zh-cn": "最小相似度 0-1"
|
|
37
|
+
},
|
|
38
|
+
"Alias path": {
|
|
39
|
+
"en": "Alias path",
|
|
40
|
+
"de": "Alias-Pfad",
|
|
41
|
+
"ru": "Путь псевдонима",
|
|
42
|
+
"pt": "Caminho de alias",
|
|
43
|
+
"nl": "Aliaspad",
|
|
44
|
+
"fr": "Chemin d'alias",
|
|
45
|
+
"it": "Alias percorso",
|
|
46
|
+
"es": "Ruta de alias",
|
|
47
|
+
"pl": "Ścieżka aliasu",
|
|
48
|
+
"zh-cn": "别名路径"
|
|
49
|
+
},
|
|
50
|
+
"generate aliases": {
|
|
51
|
+
"en": "generate aliases",
|
|
52
|
+
"de": "Aliase generieren",
|
|
53
|
+
"ru": "генерировать псевдонимы",
|
|
54
|
+
"pt": "gerar apelidos",
|
|
55
|
+
"nl": "aliassen genereren",
|
|
56
|
+
"fr": "générer des alias",
|
|
57
|
+
"it": "generare alias",
|
|
58
|
+
"es": "generar alias",
|
|
59
|
+
"pl": "generować aliasy",
|
|
60
|
+
"zh-cn": "生成别名"
|
|
61
|
+
},
|
|
62
|
+
"To merge Action and Status GA in one ioBroker Object you can let the Adapter generate": {
|
|
63
|
+
"en": "To merge Action and Status GA in one ioBroker Object you can let the Adapter generate",
|
|
64
|
+
"de": "Um Aktor und Zustand GA in einem ioBroker-Objekt zusammenzuführen, können Sie den Adapter Aliase generieren lassen.",
|
|
65
|
+
"ru": "Чтобы объединить Action и Status GA в один объект ioBroker, вы можете позволить адаптеру сгенерировать",
|
|
66
|
+
"pt": "Para mesclar Action e Status GA em um objeto ioBroker, você pode deixar o adaptador gerar",
|
|
67
|
+
"nl": "Om Action en Status GA in één ioBroker-object samen te voegen, kunt u de Adapter laten genereren:",
|
|
68
|
+
"fr": "Pour fusionner l'action et le statut GA dans un seul objet ioBroker, vous pouvez laisser l'adaptateur générer",
|
|
69
|
+
"it": "Per unire Action e Status GA in un oggetto ioBroker puoi lasciare che l'adattatore generi",
|
|
70
|
+
"es": "Para fusionar Acción y Estado GA en un Objeto ioBroker, puede dejar que el Adaptador genere",
|
|
71
|
+
"pl": "Aby połączyć działanie i status GA w jednym obiekcie ioBroker, możesz pozwolić adapterowi na generowanie",
|
|
72
|
+
"zh-cn": "要将 Action 和 Status GA 合并到一个 ioBroker 对象中,您可以让适配器生成"
|
|
73
|
+
},
|
|
74
|
+
"Click here for a manual to migrate from knx.0 to openknx.0": {
|
|
75
|
+
"en": "Click here for a manual to migrate from knx.0 to openknx.0",
|
|
76
|
+
"de": "Klicken Sie hier für eine Anleitung zur Migration von knx.0 zu openknx.0",
|
|
77
|
+
"ru": "Щелкните здесь, чтобы получить руководство по переходу с knx.0 на openknx.0",
|
|
78
|
+
"pt": "Clique aqui para obter um manual para migrar de knx.0 para openknx.0",
|
|
79
|
+
"nl": "Klik hier voor een handleiding om te migreren van knx.0 naar openknx.0",
|
|
80
|
+
"fr": "Cliquez ici pour un manuel de migration de knx.0 vers openknx.0",
|
|
81
|
+
"it": "Fare clic qui per un manuale per migrare da knx.0 a openknx.0",
|
|
82
|
+
"es": "Haga clic aquí para obtener un manual para migrar de knx.0 a openknx.0",
|
|
83
|
+
"pl": "Kliknij tutaj, aby uzyskać instrukcję migracji z knx.0 do openknx.0",
|
|
84
|
+
"zh-cn": "单击此处获取从 knx.0 迁移到 openknx.0 的手册"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
};
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "openknx",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.13",
|
|
5
5
|
"news": {
|
|
6
6
|
"0.1.9": {
|
|
7
7
|
"en": "Test Release",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"readme": "https://github.com/iobroker-community-adapters/ioBroker.openknx/blob/master/README.md",
|
|
60
60
|
"loglevel": "info",
|
|
61
61
|
"mode": "daemon",
|
|
62
|
-
"type": "
|
|
62
|
+
"type": "iot-systems",
|
|
63
63
|
"compact": true,
|
|
64
64
|
"connectionType": "local",
|
|
65
65
|
"dataSource": "push",
|
|
@@ -73,14 +73,19 @@
|
|
|
73
73
|
{
|
|
74
74
|
"js-controller": ">=3.0.0"
|
|
75
75
|
}
|
|
76
|
-
]
|
|
76
|
+
],
|
|
77
|
+
"tier": 2
|
|
77
78
|
},
|
|
78
79
|
"native": {
|
|
79
80
|
"gwip": "",
|
|
80
81
|
"gwipport": "3671",
|
|
81
82
|
"eibadr": "1.1.1",
|
|
82
83
|
"bind": "",
|
|
83
|
-
"frameInterval": 50
|
|
84
|
+
"frameInterval": 50,
|
|
85
|
+
"statusRegex": "stat(e|us)| rm|rückmeldung|\\svalue",
|
|
86
|
+
"regexSimil": 0.9,
|
|
87
|
+
"aliasPath": "alias.0",
|
|
88
|
+
"aliasRange": false
|
|
84
89
|
},
|
|
85
90
|
"objects": [],
|
|
86
91
|
"instanceObjects": [
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
module.exports = class DoubleKeyedMap {
|
|
4
|
+
constructor() {
|
|
5
|
+
//id, ga
|
|
6
|
+
this.keymap = new Map();
|
|
7
|
+
//id, iobroker object
|
|
8
|
+
this.data = new Map();
|
|
9
|
+
//id, knx dp
|
|
10
|
+
this.dp = new Map();
|
|
11
|
+
}
|
|
12
|
+
//update or add
|
|
13
|
+
set(id, address, data) {
|
|
14
|
+
this.keymap.set(address, id);
|
|
15
|
+
this.data.set(id, data);
|
|
16
|
+
}
|
|
17
|
+
//only dp returns transformed value, hold a reference to it
|
|
18
|
+
setDpById(id, dp) {
|
|
19
|
+
this.dp.set(id, dp);
|
|
20
|
+
}
|
|
21
|
+
getDpById(id) {
|
|
22
|
+
return this.dp.get(id);
|
|
23
|
+
}
|
|
24
|
+
getDpByAddress(address) {
|
|
25
|
+
return this.dp.get(this.keymap.get(address));
|
|
26
|
+
}
|
|
27
|
+
getDataById(id) {
|
|
28
|
+
return this.data.get(id);
|
|
29
|
+
}
|
|
30
|
+
getDataByAddress(address) {
|
|
31
|
+
return this.data.get(this.keymap.get(address));
|
|
32
|
+
}
|
|
33
|
+
getIdByAddress(address) {
|
|
34
|
+
return this.keymap.get(address);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//key value is id
|
|
38
|
+
[Symbol.iterator]() {
|
|
39
|
+
return {
|
|
40
|
+
index: -1,
|
|
41
|
+
data: this.data,
|
|
42
|
+
next() {
|
|
43
|
+
if (++this.index < this.data.size) {
|
|
44
|
+
return {
|
|
45
|
+
done: false,
|
|
46
|
+
value: Array.from(this.data.keys())[this.index],
|
|
47
|
+
};
|
|
48
|
+
} else {
|
|
49
|
+
return {
|
|
50
|
+
done: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|