iobroker.e3oncan 0.10.13 → 0.10.14

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 CHANGED
@@ -116,6 +116,10 @@ CAN-address=98: data points with odd IDs
116
116
  ## Limitation of collecting data
117
117
  * At present, the communication protocol is known only for Vitocal (listener on CAN id 0x693 on internal CAN), Vitocharge VX3 and Vitoair (both listener on CAN id 0x451 on external and internal CAN).
118
118
 
119
+ ## Limitation of scan range for data points
120
+ * Numerical range for scan of data points is limited to min. and max. value of common data point list, e.g. 256 to 3338 @ version 0.10.14
121
+ * You may scan for data points beyond this scope for a specific device by using "ReadByDid" command: Edit `e3oncan.0.<DEVICE>.cmnd.udsReadByDid` and add your list of desired data points, e.g. `[3350,3351,3352,3353]`. If a requested data point is available the value will show up in the object tree. It's also possible to use such data points within read schedules of device configuration. If a requested data point is **not** available an error message ("Negative response") will appear in iobroker's log.
122
+
119
123
  ## What is different to open3e project?
120
124
  * Obviously, the main differece is the direct integration to ioBroker. Configuration can be done via dialogs, data get's directly listed in object trees.
121
125
  * In addition to open3e real time collecting of data via listening is supported.
@@ -138,6 +142,15 @@ If you enjoyed this project — or just feeling generous, consider buying me a b
138
142
  Placeholder for the next version (at the beginning of the line):
139
143
  ### **WORK IN PROGRESS**
140
144
  -->
145
+ ### 0.10.14 (2025-11-03)
146
+ * (MyHomeMyData) Added elements to enums.js based of PR no. 182 of open3e
147
+ * (MyHomeMyData) Simplified configuration of dids scan limits in source code
148
+ * (MyHomeMyData) Extended scan up to did 3338
149
+ * (MyHomeMyData) Added hint regarding scan range in Readme
150
+ * (MyHomeMyData) Fixes for issue #169 (repository checker)
151
+ * (MyHomeMyData) Bugfix: Manual change of device specific dids was not evaluated for collect workers
152
+ * (MyHomeMyData) Update of list of data points for E3 devices to version 20251102
153
+
141
154
  ### 0.10.13 (2025-09-30)
142
155
  * (MyHomeMyData) Fix for issue #162
143
156
 
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "e3oncan",
4
- "version": "0.10.13",
4
+ "version": "0.10.14",
5
5
  "news": {
6
+ "0.10.14": {
7
+ "en": "Added elements to enums.js based of PR no. 182 of open3e\nSimplified configuration of dids scan limits in source code\nExtended scan up to did 3338\nAdded hint regarding scan range in Readme\nFixes for issue #169 (repository checker)\nBugfix: Manual change of device specific dids was not evaluated for collect workers\nUpdate of list of data points for E3 devices to version 20251102",
8
+ "de": "Elemente zu enums.js hinzugefügt, basierend auf PR-Nr. 182 von open3e\nVereinfachte Konfiguration der Grenzen des Datenpunt-Scans im Quellcode\nErweiterter Scan bis Datenpunkt 3338\nHinweis auf Scan-Bereich in Readme hinzugefügt\nFixes für Issue #169 (Repository Checker)\nBugfix: Manuelle Änderung der gerätespezifischen Datenpunkte wurde nicht für Collect-Worker aktualisiert\nAktualisierung der Liste der Datenpunkte für E3 Geräte auf Version 20251102",
9
+ "ru": "Добавлены элементы в enums.js на основе PR No 182 open3e\nУпрощенная конфигурация ограничений сканирования в исходном коде\nРасширенное сканирование до 3338\nДобавлен намек на диапазон сканирования в Readme\nИсправления для выпуска #169 (проверка хранилища)\nBugfix: ручная смена устройств не оценивалась для коллекционных работников\nОбновление списка точек данных для устройств E3 до версии 20251102",
10
+ "pt": "Elementos adicionados a enums.js baseados em PR n.o 182 de open3e\nConfiguração simplificada dos limites de digitalização do dids no código fonte\nEscaneamento estendido até 3338\nAdicionada dica sobre o intervalo de varredura no Readme\nCorrecções para o número 169 (verificador de repositório)\nBugfix: Não foi avaliada a mudança manual de dids específicos do dispositivo para trabalhadores de coleta\nActualização da lista de pontos de dados para os dispositivos E3 na versão 20251102",
11
+ "nl": "Toegevoegd elementen aan enums.js op basis van PR nr. 182 van open3e\nVereenvoudigde configuratie van dids-scanlimieten in broncode\nUitgebreide scan tot 3338\nTips toegevoegd met betrekking tot scanbereik in Readme\nFixes voor nummer #169 (repository checker)\nBugfix: Handmatige verandering van apparaat specifieke dids werd niet geëvalueerd voor collect werknemers\nUpdate van de lijst van gegevenspunten voor E3-apparaten naar versie 20251102",
12
+ "fr": "Ajout d'éléments à enums.js basés sur le PR n° 182 de open3e\nConfiguration simplifiée des limites de dids scan dans le code source\nScannage étendu jusqu'à 3338\nAjout d'un indice concernant la plage de balayage dans Readme\nCorrections pour l'émission #169 (vérificateur de dépôt)\nBugfix: La modification manuelle des dids spécifiques de l'appareil n'a pas été évaluée pour les travailleurs de collecte\nMise à jour de la liste des points de données pour les appareils E3 vers la version 20251102",
13
+ "it": "Aggiunto elementi a enums.js basato di PR n. 182 di open3e\nConfigurazione semplificata dei limiti di scansione dei fatti nel codice sorgente\nControllo esteso fino a 3338\nAggiunto suggerimento per quanto riguarda la gamma di scansione in Readme\nCorrezioni per numero #169 (repository checker)\nBugfix: Il cambio manuale dei dispositivi specifici non è stato valutato per i lavoratori collettivi\nAggiornamento dell'elenco dei punti di dati per i dispositivi E3 alla versione 20251102",
14
+ "es": "Elementos añadidos a enums.js basado en PR No 182 de open3e\nConfiguración simplificada de los límites de escaneado en código fuente\nEscaneo extendido hasta 3338\nInsinuación agregada con respecto al rango de exploración en Readme\nArreglos para el número #169 (repositorio)\nBugfix: No se evaluó el cambio manual de piezas específicas del dispositivo para los trabajadores coleccionistas\nActualización de la lista de puntos de datos para dispositivos E3 a la versión 20251102",
15
+ "pl": "Dodano elementy enums.js oparte na PR nr 182 open3e\nUproszczona konfiguracja didów w kodzie źródłowym\nRozszerzone skanowanie do 3338\nDodano podpowiedź odnośnie zakresu skanowania w Readme\nFixes for issue # 169 (repository checker)\nBugfix: Ręczna zmiana dysków specyficznych dla urządzenia nie była oceniana dla pracowników zbierających\nAktualizacja wykazu punktów danych dla urządzeń E3 do wersji 20251102",
16
+ "uk": "Додано елементи для enums.js на основі PR No 182 відкрито3e\nСпрощена конфігурація лімітів сканування даних у вихідному коді\nРозширене сканування до 3338\nДодано підказок про діапазон сканування в Readme\nВиправлення для випуску #169 (репозиторійний чекер)\nВиправлення помилок: Ручна зміна параметрів пристрою не оцінювалася для збору робітників\nОновлення списку точок даних для пристроїв E3 до версії 20251102",
17
+ "zh-cn": "在基于open3e第182号公关规则的enums.js中添加元素\n简化源代码中 dos 扫描限制的配置\n扩展扫描至完成 3338\n关于Readme 扫描范围的添加提示\n修复第169期(仓库检查器)\nBugfix:没有评估收集工人手动更改设备特定操作\nE3设备数据点列表更新至20251102版本"
18
+ },
6
19
  "0.10.13": {
7
20
  "en": "Fix for issue #162",
8
21
  "de": "Fix für Issue #162",
@@ -80,19 +93,6 @@
80
93
  "pl": "Bugfix dla wydania # 117\nZaktualizowany punkt danych 381, proszę odnieść się do dyskusji https: / / github.com / open3e / open3e / dyskussions / 212\nAktualizacja wykazu punktów danych dla urządzeń E3 do wersji 20250307",
81
94
  "uk": "Помилки No117\nОновлено точку даних 381, див. на обговорення https://github.com/open3e/open3e/discussions/212\nОновлення списку точок даних для пристроїв E3 до версії 20250307",
82
95
  "zh-cn": "第117期错误修正\n更新数据点381,参见讨论. https://github.com/open3e/open3e/讨论/212\nE3设备数据点列表更新至20250307版本"
83
- },
84
- "0.10.7": {
85
- "en": "Updated dependencies according to issue #111",
86
- "de": "Abhängigkeiten aktualisiert gemäß Issue #111",
87
- "ru": "Обновленные зависимости по номеру #111",
88
- "pt": "Dependências atualizadas de acordo com a edição #111",
89
- "nl": "Bijgewerkt afhankelijkheden volgens probleem #111",
90
- "fr": "Dépendances actualisées selon le numéro 11",
91
- "it": "Dipendenze aggiornate secondo il numero #111",
92
- "es": "Dependencias actualizadas según el número #111",
93
- "pl": "Aktualizacja zależności według wydania # 111",
94
- "uk": "Оновлені залежності за випуском #111",
95
- "zh-cn": "根据问题111更新的依赖关系"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/lib/canCollect.js CHANGED
@@ -105,6 +105,30 @@ class collect {
105
105
  ctx.cntWorkersActive -= 1;
106
106
  }
107
107
 
108
+ /**
109
+ * Returns actual operation mode of uds worker
110
+ */
111
+ async getWorkerOpMode() {
112
+ return this.storage.getOpMode();
113
+ }
114
+
115
+ /**
116
+ * Handle user request
117
+ *
118
+ * @param {object} ctx Adapter context
119
+ * @param {object} ctxWorker Worker context
120
+ * @param {Array} id Chaged id
121
+ * @param {object} state State reference
122
+ */
123
+ async onUdsStateChange(ctx, ctxWorker, id, state) {
124
+ if (id.includes(this.storage.storageDids.didsSpecId)) {
125
+ // User requests change of UDS device specific datapoint definition
126
+ await this.storage.storageDids.readKnownDids(ctx, await this.getWorkerOpMode());
127
+ await ctx.setStateAsync(id, { val: state.val, ack: true }); // Acknowlegde user command
128
+ return;
129
+ }
130
+ }
131
+
108
132
  /**
109
133
  * Evaluate received CAN message and perform decoding if possible
110
134
  *
@@ -9,7 +9,7 @@
9
9
 
10
10
  // tslint:disable:no-unused-expression
11
11
 
12
- const { expect } = require('chai');
12
+ const { expect } = require('@iobroker/testing/node_modules/chai');
13
13
  const E3 = require('./codecs');
14
14
  const E3DidsDict = require('./didsE3.json');
15
15
 
package/lib/didsE3.json CHANGED
@@ -4168,64 +4168,334 @@
4168
4168
  "args": {}
4169
4169
  },
4170
4170
  "511": {
4171
- "codec": "RawCodec",
4171
+ "codec": "O3EComplexType",
4172
4172
  "len": 8,
4173
4173
  "id": "HolidayPhase",
4174
- "args": {}
4174
+ "args": {
4175
+ "subTypes": [
4176
+ {
4177
+ "codec": "O3ESdate",
4178
+ "len": 3,
4179
+ "id": "PhaseBegin",
4180
+ "args": {}
4181
+ },
4182
+ {
4183
+ "codec": "O3ESdate",
4184
+ "len": 3,
4185
+ "id": "PhaseEnd",
4186
+ "args": {}
4187
+ },
4188
+ {
4189
+ "codec": "O3EByteVal",
4190
+ "len": 1,
4191
+ "id": "Planned",
4192
+ "args": {}
4193
+ },
4194
+ {
4195
+ "codec": "O3EByteVal",
4196
+ "len": 1,
4197
+ "id": "Active",
4198
+ "args": {}
4199
+ }
4200
+ ]
4201
+ }
4175
4202
  },
4176
4203
  "512": {
4177
- "codec": "RawCodec",
4204
+ "codec": "O3EComplexType",
4178
4205
  "len": 8,
4179
4206
  "id": "HolidayAtHomePhase",
4180
- "args": {}
4207
+ "args": {
4208
+ "subTypes": [
4209
+ {
4210
+ "codec": "O3ESdate",
4211
+ "len": 3,
4212
+ "id": "PhaseBegin",
4213
+ "args": {}
4214
+ },
4215
+ {
4216
+ "codec": "O3ESdate",
4217
+ "len": 3,
4218
+ "id": "PhaseEnd",
4219
+ "args": {}
4220
+ },
4221
+ {
4222
+ "codec": "O3EByteVal",
4223
+ "len": 1,
4224
+ "id": "Planned",
4225
+ "args": {}
4226
+ },
4227
+ {
4228
+ "codec": "O3EByteVal",
4229
+ "len": 1,
4230
+ "id": "Active",
4231
+ "args": {}
4232
+ }
4233
+ ]
4234
+ }
4181
4235
  },
4182
4236
  "513": {
4183
- "codec": "RawCodec",
4237
+ "codec": "O3EComplexType",
4184
4238
  "len": 8,
4185
4239
  "id": "HolidayPhaseCircuitOne",
4186
- "args": {}
4240
+ "args": {
4241
+ "subTypes": [
4242
+ {
4243
+ "codec": "O3ESdate",
4244
+ "len": 3,
4245
+ "id": "PhaseBegin",
4246
+ "args": {}
4247
+ },
4248
+ {
4249
+ "codec": "O3ESdate",
4250
+ "len": 3,
4251
+ "id": "PhaseEnd",
4252
+ "args": {}
4253
+ },
4254
+ {
4255
+ "codec": "O3EByteVal",
4256
+ "len": 1,
4257
+ "id": "Planned",
4258
+ "args": {}
4259
+ },
4260
+ {
4261
+ "codec": "O3EByteVal",
4262
+ "len": 1,
4263
+ "id": "Active",
4264
+ "args": {}
4265
+ }
4266
+ ]
4267
+ }
4187
4268
  },
4188
4269
  "514": {
4189
- "codec": "RawCodec",
4270
+ "codec": "O3EComplexType",
4190
4271
  "len": 8,
4191
4272
  "id": "HolidayAtHomePhaseCircuitOne",
4192
- "args": {}
4273
+ "args": {
4274
+ "subTypes": [
4275
+ {
4276
+ "codec": "O3ESdate",
4277
+ "len": 3,
4278
+ "id": "PhaseBegin",
4279
+ "args": {}
4280
+ },
4281
+ {
4282
+ "codec": "O3ESdate",
4283
+ "len": 3,
4284
+ "id": "PhaseEnd",
4285
+ "args": {}
4286
+ },
4287
+ {
4288
+ "codec": "O3EByteVal",
4289
+ "len": 1,
4290
+ "id": "Planned",
4291
+ "args": {}
4292
+ },
4293
+ {
4294
+ "codec": "O3EByteVal",
4295
+ "len": 1,
4296
+ "id": "Active",
4297
+ "args": {}
4298
+ }
4299
+ ]
4300
+ }
4193
4301
  },
4194
4302
  "515": {
4195
- "codec": "RawCodec",
4303
+ "codec": "O3EComplexType",
4196
4304
  "len": 8,
4197
4305
  "id": "HolidayPhaseCircuitTwo",
4198
- "args": {}
4306
+ "args": {
4307
+ "subTypes": [
4308
+ {
4309
+ "codec": "O3ESdate",
4310
+ "len": 3,
4311
+ "id": "PhaseBegin",
4312
+ "args": {}
4313
+ },
4314
+ {
4315
+ "codec": "O3ESdate",
4316
+ "len": 3,
4317
+ "id": "PhaseEnd",
4318
+ "args": {}
4319
+ },
4320
+ {
4321
+ "codec": "O3EByteVal",
4322
+ "len": 1,
4323
+ "id": "Planned",
4324
+ "args": {}
4325
+ },
4326
+ {
4327
+ "codec": "O3EByteVal",
4328
+ "len": 1,
4329
+ "id": "Active",
4330
+ "args": {}
4331
+ }
4332
+ ]
4333
+ }
4199
4334
  },
4200
4335
  "516": {
4201
- "codec": "RawCodec",
4336
+ "codec": "O3EComplexType",
4202
4337
  "len": 8,
4203
4338
  "id": "HolidayAtHomePhaseCircuitTwo",
4204
- "args": {}
4339
+ "args": {
4340
+ "subTypes": [
4341
+ {
4342
+ "codec": "O3ESdate",
4343
+ "len": 3,
4344
+ "id": "PhaseBegin",
4345
+ "args": {}
4346
+ },
4347
+ {
4348
+ "codec": "O3ESdate",
4349
+ "len": 3,
4350
+ "id": "PhaseEnd",
4351
+ "args": {}
4352
+ },
4353
+ {
4354
+ "codec": "O3EByteVal",
4355
+ "len": 1,
4356
+ "id": "Planned",
4357
+ "args": {}
4358
+ },
4359
+ {
4360
+ "codec": "O3EByteVal",
4361
+ "len": 1,
4362
+ "id": "Active",
4363
+ "args": {}
4364
+ }
4365
+ ]
4366
+ }
4205
4367
  },
4206
4368
  "517": {
4207
- "codec": "RawCodec",
4369
+ "codec": "O3EComplexType",
4208
4370
  "len": 8,
4209
4371
  "id": "HolidayPhaseCircuitThree",
4210
- "args": {}
4372
+ "args": {
4373
+ "subTypes": [
4374
+ {
4375
+ "codec": "O3ESdate",
4376
+ "len": 3,
4377
+ "id": "PhaseBegin",
4378
+ "args": {}
4379
+ },
4380
+ {
4381
+ "codec": "O3ESdate",
4382
+ "len": 3,
4383
+ "id": "PhaseEnd",
4384
+ "args": {}
4385
+ },
4386
+ {
4387
+ "codec": "O3EByteVal",
4388
+ "len": 1,
4389
+ "id": "Planned",
4390
+ "args": {}
4391
+ },
4392
+ {
4393
+ "codec": "O3EByteVal",
4394
+ "len": 1,
4395
+ "id": "Active",
4396
+ "args": {}
4397
+ }
4398
+ ]
4399
+ }
4211
4400
  },
4212
4401
  "518": {
4213
- "codec": "RawCodec",
4402
+ "codec": "O3EComplexType",
4214
4403
  "len": 8,
4215
4404
  "id": "HolidayAtHomePhaseCircuitThree",
4216
- "args": {}
4405
+ "args": {
4406
+ "subTypes": [
4407
+ {
4408
+ "codec": "O3ESdate",
4409
+ "len": 3,
4410
+ "id": "PhaseBegin",
4411
+ "args": {}
4412
+ },
4413
+ {
4414
+ "codec": "O3ESdate",
4415
+ "len": 3,
4416
+ "id": "PhaseEnd",
4417
+ "args": {}
4418
+ },
4419
+ {
4420
+ "codec": "O3EByteVal",
4421
+ "len": 1,
4422
+ "id": "Planned",
4423
+ "args": {}
4424
+ },
4425
+ {
4426
+ "codec": "O3EByteVal",
4427
+ "len": 1,
4428
+ "id": "Active",
4429
+ "args": {}
4430
+ }
4431
+ ]
4432
+ }
4217
4433
  },
4218
4434
  "519": {
4219
- "codec": "RawCodec",
4435
+ "codec": "O3EComplexType",
4220
4436
  "len": 8,
4221
4437
  "id": "HolidayPhaseCircuitFour",
4222
- "args": {}
4438
+ "args": {
4439
+ "subTypes": [
4440
+ {
4441
+ "codec": "O3ESdate",
4442
+ "len": 3,
4443
+ "id": "PhaseBegin",
4444
+ "args": {}
4445
+ },
4446
+ {
4447
+ "codec": "O3ESdate",
4448
+ "len": 3,
4449
+ "id": "PhaseEnd",
4450
+ "args": {}
4451
+ },
4452
+ {
4453
+ "codec": "O3EByteVal",
4454
+ "len": 1,
4455
+ "id": "Planned",
4456
+ "args": {}
4457
+ },
4458
+ {
4459
+ "codec": "O3EByteVal",
4460
+ "len": 1,
4461
+ "id": "Active",
4462
+ "args": {}
4463
+ }
4464
+ ]
4465
+ }
4223
4466
  },
4224
4467
  "520": {
4225
- "codec": "RawCodec",
4468
+ "codec": "O3EComplexType",
4226
4469
  "len": 8,
4227
4470
  "id": "HolidayAtHomePhaseCircuitFour",
4228
- "args": {}
4471
+ "args": {
4472
+ "subTypes": [
4473
+ {
4474
+ "codec": "O3ESdate",
4475
+ "len": 3,
4476
+ "id": "PhaseBegin",
4477
+ "args": {}
4478
+ },
4479
+ {
4480
+ "codec": "O3ESdate",
4481
+ "len": 3,
4482
+ "id": "PhaseEnd",
4483
+ "args": {}
4484
+ },
4485
+ {
4486
+ "codec": "O3EByteVal",
4487
+ "len": 1,
4488
+ "id": "Planned",
4489
+ "args": {}
4490
+ },
4491
+ {
4492
+ "codec": "O3EByteVal",
4493
+ "len": 1,
4494
+ "id": "Active",
4495
+ "args": {}
4496
+ }
4497
+ ]
4498
+ }
4229
4499
  },
4230
4500
  "521": {
4231
4501
  "codec": "O3EInt16",
@@ -33300,5 +33570,5 @@
33300
33570
  ]
33301
33571
  }
33302
33572
  },
33303
- "Version": "20250903"
33573
+ "Version": "20251102"
33304
33574
  }
package/lib/enums.js CHANGED
@@ -2289,6 +2289,54 @@ const enums = {
2289
2289
  2: 'Installed',
2290
2290
  3: 'Factory Installed',
2291
2291
  },
2292
+ Roomtypes: {
2293
+ 2: 'Bathroom',
2294
+ 3: 'Bedroom',
2295
+ 4: 'Hallway',
2296
+ 5: 'Living Room',
2297
+ 6: 'Childrens Room',
2298
+ 7: 'Kitchen',
2299
+ 8: 'Office',
2300
+ 9: 'Guest Toilet',
2301
+ 11: 'Others',
2302
+ },
2303
+
2304
+ TemperatureControlLevels: {
2305
+ 1: 'MaximumEco',
2306
+ 2: 'MoreEco',
2307
+ 3: 'Eco',
2308
+ 4: 'Komfort (Default)',
2309
+ 5: 'More Comfort',
2310
+ 6: 'Maximum Comfort',
2311
+ },
2312
+
2313
+ WindowDetectionStates: {
2314
+ 0: 'Not Active',
2315
+ 1: 'Active',
2316
+ },
2317
+
2318
+ ViCareDeviceTypes: {
2319
+ 1: 'Climate sensor',
2320
+ 2: 'Thermostatic radiator valve',
2321
+ 4: 'Actuator underfloor heating - normally powerless closed',
2322
+ 5: 'Actuator underfloor heating - normally powerless open',
2323
+ 7: 'Repeater',
2324
+ },
2325
+
2326
+ CurrentWorkingModeLevels: {
2327
+ 0: 'StandBy',
2328
+ 64: 'Heating',
2329
+ },
2330
+
2331
+ ViCareThermostaticRadiatorValveDisplayModeStates: {
2332
+ 0: 'Standard',
2333
+ 1: 'Turned',
2334
+ },
2335
+
2336
+ ViCareThermostaticRadiatorValveChildLockStates: {
2337
+ 0: 'Not Active',
2338
+ 1: 'Active',
2339
+ },
2292
2340
  };
2293
2341
 
2294
2342
  module.exports = {
package/lib/udsScan.js CHANGED
@@ -354,9 +354,9 @@ class udsScan {
354
354
  *
355
355
  * @param {object} ctx Adapter context
356
356
  * @param {Array} udsAddrs List of device addresses to be scanned
357
- * @param {number} udsMaxCntDids Total number of DIDs to be scanned
357
+ * @param {object} udsDidsLimits Numerical limits of dids to be scanned
358
358
  */
359
- async scanUdsDids(ctx, udsAddrs, udsMaxCntDids) {
359
+ async scanUdsDids(ctx, udsAddrs, udsDidsLimits) {
360
360
  function range(size, startAt = 0) {
361
361
  return [...Array(size).keys()].map(i => i + startAt);
362
362
  }
@@ -384,7 +384,7 @@ class udsScan {
384
384
  this.udsScanDidsCntRetries = 0;
385
385
  this.udsScanDidsCntSuccess = 0;
386
386
  this.udsScanDidsCntDone = 0;
387
- const dids = range(udsMaxCntDids, 256);
387
+ const dids = range(udsDidsLimits.max - udsDidsLimits.min + 1, udsDidsLimits.min);
388
388
  for (const addr of Object(udsAddrs).values()) {
389
389
  await this.startupScanUdsDids(ctx, addr, dids);
390
390
  await this.sleep(ctx, 50);
package/main.js CHANGED
@@ -66,7 +66,7 @@ class E3oncan extends utils.Adapter {
66
66
  this.udsScanDevices = []; // UDS devices found during scan
67
67
  this.udsDevAddrs = [];
68
68
  this.udsDevStateNames = [];
69
- this.udsDidsMaxNmbr = 3000; // Max. number of dids per device for scan
69
+ this.udsDidsLimits = { min: 256, max: 3338 }; // Min. and max. numerical value of dids for scan of data points. Should meet range defined in didsE3,json
70
70
 
71
71
  //this.on('install', this.onInstall.bind(this));
72
72
  this.on('ready', this.onReady.bind(this));
@@ -609,9 +609,24 @@ class E3oncan extends utils.Adapter {
609
609
  if (state && !state.ack) {
610
610
  // The state was changed and ack == false
611
611
  this.log.silly(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
612
+ // Check for necessary measures for all UDS workers
612
613
  for (const worker of Object.values(this.E3UdsWorkers)) {
613
614
  if (id.includes(`${this.namespace}.${worker.config.stateBase}`)) {
614
- this.log.silly(`Call worker for ${worker.config.stateBase}`);
615
+ this.log.silly(`Call UDS worker for ${worker.config.stateBase}`);
616
+ worker.onUdsStateChange(this, worker, id, state);
617
+ }
618
+ }
619
+ // Check for necessary measures for all collect workers on external CAN
620
+ for (const worker of Object.values(this.E3CollectExt)) {
621
+ if (id.includes(`${this.namespace}.${worker.config.stateBase}`)) {
622
+ this.log.silly(`Call internal collect worker for ${worker.config.stateBase}`);
623
+ worker.onUdsStateChange(this, worker, id, state);
624
+ }
625
+ }
626
+ // Check for necessary measures for all collect workers on internal CAN
627
+ for (const worker of Object.values(this.E3CollectInt)) {
628
+ if (id.includes(`${this.namespace}.${worker.config.stateBase}`)) {
629
+ this.log.silly(`Call internal collect worker for ${worker.config.stateBase}`);
615
630
  worker.onUdsStateChange(this, worker, id, state);
616
631
  }
617
632
  }
@@ -723,7 +738,7 @@ class E3oncan extends utils.Adapter {
723
738
  if (!this.udsDidScanIsRunning) {
724
739
  this.udsDidScanIsRunning = true;
725
740
  this.log.silly(`Received data - ${JSON.stringify(obj)}`);
726
- await this.udsScanWorker.scanUdsDids(this, this.udsDevAddrs, this.udsDidsMaxNmbr);
741
+ await this.udsScanWorker.scanUdsDids(this, this.udsDevAddrs, this.udsDidsLimits);
727
742
  //await this.udsScanWorker.scanUdsDids(this,this.udsDevAddrs,300);
728
743
  this.sendTo(obj.from, obj.command, this.udsDevices, obj.callback);
729
744
  this.udsDidScanIsRunning = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.e3oncan",
3
- "version": "0.10.13",
3
+ "version": "0.10.14",
4
4
  "description": "Collect data on CAN bus for Viessmann E3 devices, e.g. Vitocal, Vitocharge, Energy Meters E380CA and E3100CB",
5
5
  "author": {
6
6
  "name": "Juergen",
@@ -30,28 +30,18 @@
30
30
  "socketcan": "^4.0.7"
31
31
  },
32
32
  "devDependencies": {
33
- "@alcalzone/release-script": "^3.8.0",
34
- "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
35
- "@alcalzone/release-script-plugin-license": "^3.7.0",
36
- "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
37
- "@iobroker/adapter-dev": "^1.4.0",
38
- "@iobroker/eslint-config": "^2.1.0",
33
+ "@alcalzone/release-script": "^5.0.0",
34
+ "@alcalzone/release-script-plugin-iobroker": "^4.0.0",
35
+ "@alcalzone/release-script-plugin-license": "^4.0.0",
36
+ "@alcalzone/release-script-plugin-manual-review": "^4.0.0",
37
+ "@iobroker/adapter-dev": "^1.5.0",
38
+ "@iobroker/eslint-config": "^2.2.0",
39
39
  "@iobroker/testing": "^5.1.1",
40
40
  "@tsconfig/node22": "^22.0.2",
41
- "@types/chai": "^5.2.2",
42
- "@types/chai-as-promised": "^8.0.2",
43
- "@types/mocha": "^10.0.10",
44
- "@types/node": "^24.3.0",
41
+ "@types/node": "^24.9.2",
45
42
  "@types/proxyquire": "^1.3.31",
46
- "@types/sinon": "^17.0.4",
47
- "@types/sinon-chai": "^4.0.0",
48
- "chai": "^6.0.1",
49
- "chai-as-promised": "^8.0.2",
50
- "mocha": "^11.7.1",
51
43
  "proxyquire": "^2.1.3",
52
- "sinon": "^21.0.0",
53
- "sinon-chai": "^4.0.1",
54
- "typescript": "~5.9.2"
44
+ "typescript": "~5.9.3"
55
45
  },
56
46
  "main": "main.js",
57
47
  "files": [