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 +13 -0
- package/io-package.json +14 -14
- package/lib/canCollect.js +24 -0
- package/lib/codecs.test.js +1 -1
- package/lib/didsE3.json +291 -21
- package/lib/enums.js +48 -0
- package/lib/udsScan.js +3 -3
- package/main.js +18 -3
- package/package.json +9 -19
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.
|
|
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
|
*
|
package/lib/codecs.test.js
CHANGED
package/lib/didsE3.json
CHANGED
|
@@ -4168,64 +4168,334 @@
|
|
|
4168
4168
|
"args": {}
|
|
4169
4169
|
},
|
|
4170
4170
|
"511": {
|
|
4171
|
-
"codec": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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 {
|
|
357
|
+
* @param {object} udsDidsLimits Numerical limits of dids to be scanned
|
|
358
358
|
*/
|
|
359
|
-
async scanUdsDids(ctx, udsAddrs,
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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": "^
|
|
34
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
35
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
36
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
37
|
-
"@iobroker/adapter-dev": "^1.
|
|
38
|
-
"@iobroker/eslint-config": "^2.
|
|
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/
|
|
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
|
-
"
|
|
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": [
|