iobroker.device-watcher 2.8.5 → 2.9.0

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
@@ -189,6 +189,12 @@ It's possible to select:
189
189
  Placeholder for the next version (at the beginning of the line):
190
190
  ### **WORK IN PROGRESS**
191
191
  -->
192
+ ### 2.9.0 (2023-04-26)
193
+
194
+ - (ciddi89) Fixed: Deactivated instances were not displayed in the daily message about deactivated instances
195
+ - (ciddi89) Added: Viessmann devices, Homekit-Controller devices
196
+ - (ciddi89) Improvements: Text of overview messages
197
+
192
198
  ### 2.8.5 (2023-04-20)
193
199
 
194
200
  - (ciddi89) Fixed: Error that instances can not be added to the blacklist because of the popup message [#172](https://github.com/ciddi89/ioBroker.device-watcher/issues/172)
@@ -142,6 +142,13 @@
142
142
  "lg": 3,
143
143
  "label": "Home Connect"
144
144
  },
145
+ "homekitControllerDevices": {
146
+ "type": "checkbox",
147
+ "sm": 6,
148
+ "md": 6,
149
+ "lg": 3,
150
+ "label": "Homekit-Controller"
151
+ },
145
152
  "hs100Devices": {
146
153
  "type": "checkbox",
147
154
  "sm": 6,
@@ -352,6 +359,13 @@
352
359
  "lg": 3,
353
360
  "label": "Unifi"
354
361
  },
362
+ "viessmannDevices": {
363
+ "type": "checkbox",
364
+ "sm": 6,
365
+ "md": 6,
366
+ "lg": 3,
367
+ "label": "Viessmann"
368
+ },
355
369
  "wledDevices": {
356
370
  "type": "checkbox",
357
371
  "sm": 6,
@@ -1875,6 +1889,18 @@
1875
1889
  "hidden": "!data.homeconnectDevices",
1876
1890
  "hideOnlyControl": false
1877
1891
  },
1892
+ "homekitControllerMaxMinutes": {
1893
+ "type": "number",
1894
+ "min": -1,
1895
+ "max": 100000,
1896
+ "sm": 6,
1897
+ "md": 6,
1898
+ "lg": 3,
1899
+ "label": "Homekit-Controller",
1900
+ "help": "in minutes",
1901
+ "hidden": "!data.homekitControllerDevices",
1902
+ "hideOnlyControl": false
1903
+ },
1878
1904
  "hs100MaxMinutes": {
1879
1905
  "type": "number",
1880
1906
  "min": 1,
@@ -2247,6 +2273,18 @@
2247
2273
  "hidden": "!data.unifiDevices",
2248
2274
  "hideOnlyControl": false
2249
2275
  },
2276
+ "viessmannMaxMinutes": {
2277
+ "type": "number",
2278
+ "min": -1,
2279
+ "max": 100000,
2280
+ "sm": 6,
2281
+ "md": 6,
2282
+ "lg": 3,
2283
+ "label": "Viessmann",
2284
+ "help": "in minutes",
2285
+ "hidden": "!data.viessmannDevices",
2286
+ "hideOnlyControl": false
2287
+ },
2250
2288
  "wledMaxMinutes": {
2251
2289
  "type": "number",
2252
2290
  "min": -1,
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "device-watcher",
4
- "version": "2.8.5",
4
+ "version": "2.9.0",
5
5
  "news": {
6
+ "2.9.0": {
7
+ "en": "Fixed: Deactivated instances were not displayed in the daily message about deactivated instances\nAdded: Viessmann devices, Homekit-Controller devices\nImprovements: Text of overview messages",
8
+ "de": "Behoben: Deaktivierte Instanzen wurden nicht in den Übersichtnachrichten über deaktivierte Instanzen angezeigt\nHinzugefügt: Viessmann Geräte, Homekit-Controller Geräte\nVerbesserungen: Text der Übersichtsnachrichten",
9
+ "ru": "Исправлено: Отключенные экземпляры не отображались в ежедневном сообщении о деактивированных инстанциях\nДобавлены: Viessmann устройства, Homekit-Controller устройства\nУлучшения: Текст обзорных сообщений",
10
+ "pt": "Corrigido: As instâncias desativadas não foram exibidas na mensagem diária sobre instâncias desativadas\nAdicionado: dispositivos Viessmann, dispositivos Homekit-Controller\nMelhorias: Texto de mensagens de visão geral",
11
+ "nl": "Gedeactiveerde instanties werden niet getoond in de dagelijkse boodschap over gedeactiveerde instanties\nVertaling:\nImprovementen: Text of overzicht berichten",
12
+ "fr": "Correction : Les instances désactivées n'ont pas été affichées dans le message quotidien concernant les instances désactivées\nAjouté: Appareils Viessmann, Dispositifs Homekit-Controller\nAméliorations : Texte des messages d ' aperçu",
13
+ "it": "Risolto: Le istanze disattivate non sono state visualizzate nel messaggio quotidiano sulle istanze disattivate\nAggiunto: dispositivi Viessmann, dispositivi Homekit-Controller\nMiglioramenti: Testo dei messaggi di panoramica",
14
+ "es": "Fijo: No se mostraron casos desactivados en el mensaje diario sobre casos desactivados\nAñadido: dispositivos Viessmann, dispositivos Homekit-Controller\nMejoras: Texto de los mensajes de visión general",
15
+ "pl": "Na przykładzie uaktywniono: Zdeaktywowane instancje nie były wyświetlane w codziennym wiadomości o deaktywowanych instancjach\nAdded: urządzenia Viessmanna\nPoprawa: Tekst overview",
16
+ "uk": "Виправлено: Деактивовані екземпляри не відображалися в щоденному повідомленні про деактивовані екземпляри\nДодано: пристрої Viessmann, пристрої Homekit-Controller\nУдосконалення: Текст повідомлення",
17
+ "zh-cn": "Fixed:Deactiving cases的每日信息未显示有关违犯事件的报道。\n增 编:维斯曼装置、家里克特-Controller装置\n改进: 总讯案文"
18
+ },
6
19
  "2.8.5": {
7
20
  "en": "Fixed: Error that instances can not be added to the blacklist because of the popup message [#172](https://github.com/ciddi89/ioBroker.device-watcher/issues/172)\nFixed: That messages have been sent when the instance has briefly jumped from Enabled to Disabled and back to Enabled [#173](https://github.com/ciddi89/ioBroker.device-watcher/issues/173)",
8
21
  "de": "Behoben: Fehler, dass Instanzen aufgrund der Popup-Nachricht nicht zur Blacklist hinzugefügt werden können [#172](https://github.com/ciddi89/ioBroker.device-watcher/issues/172)\nBehoben: Das Meldungen gesendet wurden, wenn die Instanz kurz von Aktiviert auf Deaktiviert und zurück zu Aktiviert gesprungen ist [#173](https://github.com/ciddi89/ioBroker.device-watcher/issues/173)",
@@ -80,19 +93,6 @@
80
93
  "pl": "Added: wsparcie dla LOQED Smart Lock\nAdded: Option to add user/group api key\nAdded: Option, aby wysłać powiadomienie, czy instancja została zatrzymana\nAdded: Option to send castule notification with overview of a zatrzymane instancje\nFixed: Wydanie, jeśli powiadomienia zostały wysłane z przerwy, ale opcja nie została wybrana\nFixed: Ignore akumulatory 0%, jeśli nie były one mniejsze niż 5% przed rozpoczęciem budowy",
81
94
  "uk": "Доданий: Підтримка LOQED Смарт блокування\nДодано: Параметри, щоб додати ключ користувача / групи Api для Pushover\nДоданий: Опція надсилати повідомлення, якщо було припинено\nДодано: Опція для відправки повідомлень про скидання з оглядом припинених екземплярів\nВиправлено: Питання, якщо повідомлення було відправлено припинено, але варіант не був обраний\nВиправлено: значення Ignore батареї 0%, якщо вони не менше 5% до",
82
95
  "zh-cn": "增加:支持LOQED Smart Lock\n增 编:增加用户/集群的备选办法\n增加:如果某一例子被停止,可发出通知。\n增 编:发出简写通知,概述停止事件\nIxed:如果发出通知被阻止,但选择是选择的。\n固定:Ignore电池数值.0%"
83
- },
84
- "2.7.1": {
85
- "en": "Added: Support for Ecovacs-Deebot\nUpdated: Dependencies\nImprovements: Small fixes",
86
- "de": "Hinzugefügt: Unterstützung für Ecovacs-Deebot\nAktualisiert: Abhängigkeiten\nVerbesserungen: Kleine Verbesserungen",
87
- "ru": "Добавлена: Поддержка Ecovacs-Deebot\nОбновлено: зависимости\nУлучшения: Небольшие исправления",
88
- "pt": "Adicionado: Suporte para Ecovacs-Deebot\nAtualizado: Dependências\nMelhorias: Pequenas correções",
89
- "nl": "Vertaling:\nOpgepast\nImprovementen: Kleine fixes",
90
- "fr": "Ajouté: Soutien à Ecovacs-Deebot\nActualisé : dépenses\nAméliorations : Petites corrections",
91
- "it": "Aggiunto: Supporto per Ecovacs-Deebot\nAggiornato: Dipendenze\nMiglioramenti: Piccole correzioni",
92
- "es": "Añadido: Apoyo para Ecovacs-Deebot\nActualizado: Dependencias\nMejoras: Arreglos pequeños",
93
- "pl": "Wsparcie dla Ecovac-Deebota\nZastrzeżenie: Zależność\nPoprawa: drobne rozwiązanie",
94
- "uk": "Додано: Підтримка Ecovacs-Deebot\nОновлено: Залежності\nУдосконалення: Маленькі кріплення",
95
- "zh-cn": "增加:支持Ecovacs-Deebot\n更新:属地\n改进: 小型配件"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -234,6 +234,8 @@
234
234
  "hmrpcMaxMinutes": 0,
235
235
  "homeconnectDevices": false,
236
236
  "homeconnectMaxMinutes": 0,
237
+ "homekitControllerDevices": false,
238
+ "homekitControllerMaxMinutes": 0,
237
239
  "hs100Devices": false,
238
240
  "hs100MaxMinutes": 300,
239
241
  "hueDevices": false,
@@ -295,6 +297,8 @@
295
297
  "tradfriMaxMinutes": 0,
296
298
  "unifiDevices": false,
297
299
  "unifiMaxMinutes": 0,
300
+ "viessmannDevices": false,
301
+ "viessmannMaxMinutes": 0,
298
302
  "wledDevices": false,
299
303
  "wledMaxMinutes": 0,
300
304
  "yeelightDevices": false,
package/lib/arrApart.js CHANGED
@@ -183,6 +183,7 @@ const arrApart = {
183
183
  battery: 'none',
184
184
  reach: '.unreach',
185
185
  isLowBat: '.lowBat',
186
+ upgrade: '.info.updateState',
186
187
  },
187
188
  hmrpc: {
188
189
  Selektor: 'hm-rpc.*.RSSI_PEER',
@@ -212,6 +213,18 @@ const arrApart = {
212
213
  id: '.name',
213
214
  upgrade: 'none',
214
215
  },
216
+ homekitController: {
217
+ Selektor: 'homekit-controller.*.connected',
218
+ timeSelector: '.lastDiscovered',
219
+ adapterID: 'homekitController',
220
+ adapter: 'Homekit Controller',
221
+ rssiState: 'none',
222
+ battery: 'none',
223
+ reach: '.connected',
224
+ isLowBat: 'none',
225
+ id: 'none',
226
+ upgrade: 'none',
227
+ },
215
228
  hs100: {
216
229
  Selektor: 'hs100.*.last_update',
217
230
  timeSelector: '.last_update',
@@ -525,6 +538,18 @@ const arrApart = {
525
538
  id: 'none',
526
539
  upgrade: '.upgradable',
527
540
  },
541
+ viessmann: {
542
+ Selektor: 'viessmann.*.info.connection',
543
+ timeSelector: '.lastPoll',
544
+ adapterID: 'viessmann',
545
+ adapter: 'Viessmann',
546
+ rssiState: 'none',
547
+ battery: 'none',
548
+ reach: '.connection',
549
+ isLowBat: 'none',
550
+ id: 'none',
551
+ upgrade: 'none',
552
+ },
528
553
  wled: {
529
554
  Selektor: 'wled.*._online',
530
555
  timeSelector: '._online',
package/main.js CHANGED
@@ -122,6 +122,7 @@ class DeviceWatcher extends utils.Adapter {
122
122
  hmiP: this.config.hmiPDevices,
123
123
  hmrpc: this.config.hmrpcDevices,
124
124
  homeconnect: this.config.homeconnectDevices,
125
+ homekitController: this.config.homekitControllerDevices,
125
126
  hs100: this.config.hs100Devices,
126
127
  hue: this.config.hueDevices,
127
128
  hueExt: this.config.hueExtDevices,
@@ -153,6 +154,7 @@ class DeviceWatcher extends utils.Adapter {
153
154
  tapo: this.config.tapoDevices,
154
155
  tradfri: this.config.tradfriDevices,
155
156
  unifi: this.config.unifiDevices,
157
+ viessmann: this.config.viessmannDevices,
156
158
  wled: this.config.wledDevices,
157
159
  yeelight: this.config.yeelightDevices,
158
160
  zigbee: this.config.zigbeeDevices,
@@ -178,6 +180,7 @@ class DeviceWatcher extends utils.Adapter {
178
180
  hmiP: this.config.hmiPMaxMinutes,
179
181
  hmrpc: this.config.hmrpcMaxMinutes,
180
182
  homeconnect: this.config.homeconnectMaxMinutes,
183
+ homekitController: this.config.homekitControllerMaxMinutes,
181
184
  hs100: this.config.hs100MaxMinutes,
182
185
  hue: this.config.hueMaxMinutes,
183
186
  hueExt: this.config.hueextMaxMinutes,
@@ -209,6 +212,7 @@ class DeviceWatcher extends utils.Adapter {
209
212
  tapo: this.config.tapoMaxMinutes,
210
213
  tradfri: this.config.tradfriMaxMinutes,
211
214
  unifi: this.config.unifiMaxMinutes,
215
+ viessmann: this.config.viessmannMaxMinutes,
212
216
  wled: this.config.wledMaxMinutes,
213
217
  yeelight: this.config.yeelightMaxMinutes,
214
218
  zigbee: this.config.zigbeeMaxMinutes,
@@ -447,8 +451,8 @@ class DeviceWatcher extends utils.Adapter {
447
451
  // device updates
448
452
  case deviceData.UpdateDP:
449
453
  if (state.val !== deviceData.Upgradable) {
450
- deviceData.Upgradable = state.val;
451
- if (state.val === true || state.val === 1) {
454
+ deviceData.Upgradable = await this.checkDeviceUpdate(deviceData.adapterID, state.val);
455
+ if (deviceData.Upgradable === true) {
452
456
  if (this.config.checkSendDeviceUpgrade && !this.blacklistNotify.includes(deviceData.Path)) {
453
457
  await this.sendStateNotifications('updateDevice', device);
454
458
  }
@@ -1001,18 +1005,24 @@ class DeviceWatcher extends utils.Adapter {
1001
1005
  /*=============================================
1002
1006
  = Get update data =
1003
1007
  =============================================*/
1004
- const deviceUpdateDP = currDeviceString + this.selAdapter[i].upgrade;
1005
1008
  let isUpgradable;
1009
+ let deviceUpdateDP;
1006
1010
 
1007
1011
  if (this.config.checkSendDeviceUpgrade) {
1008
- const deviceUpdateSelector = await this.getInitValue(deviceUpdateDP);
1012
+ deviceUpdateDP = currDeviceString + this.selAdapter[i].upgrade;
1013
+ let deviceUpdateSelector = await this.getInitValue(deviceUpdateDP);
1014
+ if (deviceUpdateSelector === undefined) {
1015
+ deviceUpdateDP = shortCurrDeviceString + this.selAdapter[i].upgrade;
1016
+ deviceUpdateSelector = await this.getInitValue(deviceUpdateDP);
1017
+ if (deviceUpdateSelector === undefined) {
1018
+ const shortShortCurrDeviceString = shortCurrDeviceString.slice(0, shortCurrDeviceString.lastIndexOf('.') + 1 - 1);
1019
+ deviceUpdateDP = shortShortCurrDeviceString + this.selAdapter[i].upgrade;
1020
+ deviceUpdateSelector = await this.getInitValue(deviceUpdateDP);
1021
+ }
1022
+ }
1009
1023
 
1010
1024
  if (deviceUpdateSelector !== undefined) {
1011
- if (deviceUpdateSelector) {
1012
- isUpgradable = true;
1013
- } else if (!deviceUpdateSelector) {
1014
- isUpgradable = false;
1015
- }
1025
+ isUpgradable = await this.checkDeviceUpdate(adapterID, deviceUpdateSelector);
1016
1026
  } else {
1017
1027
  isUpgradable = ' - ';
1018
1028
  }
@@ -1107,6 +1117,8 @@ class DeviceWatcher extends utils.Adapter {
1107
1117
  case 'wled':
1108
1118
  case 'mqttNuki':
1109
1119
  case 'loqedSmartLock':
1120
+ case 'viessmann':
1121
+ case 'homekitController':
1110
1122
  if (shortDeviceObject && typeof shortDeviceObject === 'object') {
1111
1123
  deviceName = shortDeviceObject.common.name;
1112
1124
  }
@@ -1441,21 +1453,21 @@ class DeviceWatcher extends utils.Adapter {
1441
1453
  if (this.configMaxMinutes[adapterID] <= 0) {
1442
1454
  if (deviceUnreachState === 1) {
1443
1455
  deviceState = 'Offline'; //set online state to offline
1444
- linkQuality = '0%'; // set linkQuality to nothing
1456
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1445
1457
  }
1446
1458
  } else if (lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID] && deviceUnreachState === 1) {
1447
1459
  deviceState = 'Offline'; //set online state to offline
1448
- linkQuality = '0%'; // set linkQuality to nothing
1460
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1449
1461
  }
1450
1462
  break;
1451
1463
  case 'proxmox':
1452
1464
  if (this.configMaxMinutes[adapterID] <= 0) {
1453
1465
  if (deviceUnreachState !== 'running' && deviceUnreachState !== 'online') {
1454
- deviceState = 'Offline'; //set online state to offline
1466
+ if (linkQuality !== ' - ') deviceState = 'Offline'; //set online state to offline
1455
1467
  }
1456
1468
  } else if (lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID] && deviceUnreachState !== 'running' && deviceUnreachState !== 'online') {
1457
1469
  deviceState = 'Offline'; //set online state to offline
1458
- linkQuality = '0%'; // set linkQuality to nothing
1470
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1459
1471
  }
1460
1472
  break;
1461
1473
  case 'hmiP':
@@ -1463,11 +1475,11 @@ class DeviceWatcher extends utils.Adapter {
1463
1475
  if (this.configMaxMinutes[adapterID] <= 0) {
1464
1476
  if (deviceUnreachState) {
1465
1477
  deviceState = 'Offline'; //set online state to offline
1466
- linkQuality = '0%'; // set linkQuality to nothing
1478
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1467
1479
  }
1468
1480
  } else if (lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID] && deviceUnreachState) {
1469
1481
  deviceState = 'Offline'; //set online state to offline
1470
- linkQuality = '0%'; // set linkQuality to nothing
1482
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1471
1483
  }
1472
1484
  break;
1473
1485
  case 'apcups':
@@ -1483,22 +1495,22 @@ class DeviceWatcher extends utils.Adapter {
1483
1495
  if (this.configMaxMinutes[adapterID] <= 0) {
1484
1496
  if (!deviceUnreachState) {
1485
1497
  deviceState = 'Offline'; //set online state to offline
1486
- linkQuality = '0%'; // set linkQuality to nothing
1498
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1487
1499
  }
1488
1500
  } else if (!deviceUnreachState && lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID]) {
1489
1501
  deviceState = 'Offline'; //set online state to offline
1490
- linkQuality = '0%'; // set linkQuality to nothing
1502
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1491
1503
  }
1492
1504
  break;
1493
1505
  case 'mqttClientZigbee2Mqtt':
1494
1506
  if (this.configMaxMinutes[adapterID] <= 0) {
1495
1507
  if (deviceUnreachState !== 'online') {
1496
1508
  deviceState = 'Offline'; //set online state to offline
1497
- linkQuality = '0%'; // set linkQuality to nothing
1509
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1498
1510
  }
1499
1511
  } else if (deviceUnreachState !== 'online' && lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID]) {
1500
1512
  deviceState = 'Offline'; //set online state to offline
1501
- linkQuality = '0%'; // set linkQuality to nothing
1513
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1502
1514
  }
1503
1515
  break;
1504
1516
  case 'mihome':
@@ -1506,21 +1518,21 @@ class DeviceWatcher extends utils.Adapter {
1506
1518
  if (this.configMaxMinutes[adapterID] <= 0) {
1507
1519
  if (!deviceUnreachState) {
1508
1520
  deviceState = 'Offline'; //set online state to offline
1509
- linkQuality = '0%'; // set linkQuality to nothing
1521
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1510
1522
  }
1511
1523
  } else if (lastContact && lastContact > this.configMaxMinutes[adapterID]) {
1512
1524
  deviceState = 'Offline'; //set online state to offline
1513
- linkQuality = '0%'; // set linkQuality to nothing
1525
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1514
1526
  }
1515
1527
  } else {
1516
1528
  if (this.config.mihomeMaxMinutes <= 0) {
1517
1529
  if (this.configMaxMinutes[adapterID] <= 0) {
1518
1530
  deviceState = 'Offline'; //set online state to offline
1519
- linkQuality = '0%'; // set linkQuality to nothing
1531
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1520
1532
  }
1521
1533
  } else if (lastContact && lastContact > this.configMaxMinutes[adapterID]) {
1522
1534
  deviceState = 'Offline'; //set online state to offline
1523
- linkQuality = '0%'; // set linkQuality to nothing
1535
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1524
1536
  }
1525
1537
  }
1526
1538
  break;
@@ -1528,22 +1540,22 @@ class DeviceWatcher extends utils.Adapter {
1528
1540
  if (this.configMaxMinutes[adapterID] <= 0) {
1529
1541
  if (deviceUnreachState === 'OFFLINE') {
1530
1542
  deviceState = 'Offline'; //set online state to offline
1531
- linkQuality = '0%'; // set linkQuality to nothing
1543
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1532
1544
  }
1533
1545
  } else if (deviceUnreachState === 'OFFLINE' && lastDeviceUnreachStateChange > this.configMaxMinutes[adapterID]) {
1534
1546
  deviceState = 'Offline'; //set online state to offline
1535
- linkQuality = '0%'; // set linkQuality to nothing
1547
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1536
1548
  }
1537
1549
  break;
1538
1550
  default:
1539
1551
  if (this.configMaxMinutes[adapterID] <= 0) {
1540
1552
  if (!deviceUnreachState) {
1541
1553
  deviceState = 'Offline'; //set online state to offline
1542
- linkQuality = '0%'; // set linkQuality to nothing
1554
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1543
1555
  }
1544
1556
  } else if (lastContact && lastContact > this.configMaxMinutes[adapterID]) {
1545
1557
  deviceState = 'Offline'; //set online state to offline
1546
- linkQuality = '0%'; // set linkQuality to nothing
1558
+ if (linkQuality !== ' - ') linkQuality = '0%'; // set linkQuality to nothing
1547
1559
  }
1548
1560
  break;
1549
1561
  }
@@ -1583,8 +1595,35 @@ class DeviceWatcher extends utils.Adapter {
1583
1595
  }
1584
1596
  }
1585
1597
 
1598
+ /**
1599
+ * @param {any} adapterID
1600
+ * @param {string | number | boolean | null} deviceUpdateSelector
1601
+ */
1602
+ async checkDeviceUpdate(adapterID, deviceUpdateSelector) {
1603
+ let isUpgradable;
1604
+
1605
+ switch (adapterID) {
1606
+ case 'hmiP':
1607
+ if (deviceUpdateSelector === 'UPDATE_AVAILABLE') {
1608
+ isUpgradable = true;
1609
+ } else {
1610
+ isUpgradable = false;
1611
+ }
1612
+ break;
1613
+ default:
1614
+ if (deviceUpdateSelector) {
1615
+ isUpgradable = true;
1616
+ } else if (!deviceUpdateSelector) {
1617
+ isUpgradable = false;
1618
+ }
1619
+ }
1620
+
1621
+ return isUpgradable;
1622
+ }
1623
+
1586
1624
  /**
1587
1625
  * Create Lists
1626
+ * @param {string | undefined} [adptName]
1588
1627
  */
1589
1628
  async createLists(adptName) {
1590
1629
  this.linkQualityDevices = [];
@@ -3057,10 +3096,22 @@ class DeviceWatcher extends utils.Adapter {
3057
3096
  }
3058
3097
  }
3059
3098
  if (list.length === 0) return;
3060
- message = `Tägliche Meldung über Geräte mit niedrigen Batteriezuständen: ${list}`;
3099
+
3100
+ switch (checkDays.length) {
3101
+ case 1:
3102
+ message = `Wöchentliche Übersicht über Geräte mit niedrigen Batteriezuständen: ${list}`;
3103
+ break;
3104
+ case 7:
3105
+ message = `Tägliche Übersicht über Geräte mit niedrigen Batteriezuständen: ${list}`;
3106
+ break;
3107
+ default:
3108
+ message = `Übersicht über Geräte mit niedrigen Batteriezuständen: ${list}`;
3109
+ break;
3110
+ }
3061
3111
  setMessage(message);
3062
3112
  });
3063
3113
  break;
3114
+
3064
3115
  case 'offlineDevices':
3065
3116
  // push the selected days in list
3066
3117
  if (this.config.checkOfflineMonday) checkDays.push(1);
@@ -3093,10 +3144,22 @@ class DeviceWatcher extends utils.Adapter {
3093
3144
  }
3094
3145
 
3095
3146
  if (list.length === 0) return;
3096
- message = `Tägliche Meldung über offline Geräte: ${list}`;
3147
+
3148
+ switch (checkDays.length) {
3149
+ case 1:
3150
+ message = `Wöchentliche Übersicht über offline Geräte: ${list}`;
3151
+ break;
3152
+ case 7:
3153
+ message = `Tägliche Übersicht über offline Geräte: ${list}`;
3154
+ break;
3155
+ default:
3156
+ message = `Übersicht über offline Geräte: ${list}`;
3157
+ break;
3158
+ }
3097
3159
  setMessage(message);
3098
3160
  });
3099
3161
  break;
3162
+
3100
3163
  case 'updateDevices':
3101
3164
  // push the selected days in list
3102
3165
  if (this.config.checkUpgradeMonday) checkDays.push(1);
@@ -3128,10 +3191,22 @@ class DeviceWatcher extends utils.Adapter {
3128
3191
  }
3129
3192
  }
3130
3193
  if (list.length === 0) return;
3131
- message = `Tägliche Meldung über verfügbare Geräte Updates: ${list}`;
3194
+
3195
+ switch (checkDays.length) {
3196
+ case 1:
3197
+ message = `Wöchentliche Übersicht über verfügbare Geräte Updates: ${list}`;
3198
+ break;
3199
+ case 7:
3200
+ message = `Tägliche Übersicht über verfügbare Geräte Updates: ${list}`;
3201
+ break;
3202
+ default:
3203
+ message = `Übersicht über verfügbare Geräte Updates: ${list}`;
3204
+ break;
3205
+ }
3132
3206
  setMessage(message);
3133
3207
  });
3134
3208
  break;
3209
+
3135
3210
  case 'updateAdapter':
3136
3211
  // push the selected days in list
3137
3212
  if (this.config.checkAdapterUpdateMonday) checkDays.push(1);
@@ -3158,10 +3233,22 @@ class DeviceWatcher extends utils.Adapter {
3158
3233
  list = `${list}\n${id.Adapter}: v${id['Available Version']}`;
3159
3234
  }
3160
3235
  if (list.length === 0) return;
3161
- message = `Tägliche Meldung über verfügbare Adapter Updates: ${list}`;
3236
+
3237
+ switch (checkDays.length) {
3238
+ case 1:
3239
+ message = `Wöchentliche Übersicht über verfügbare Adapter Updates: ${list}`;
3240
+ break;
3241
+ case 7:
3242
+ message = `Tägliche Übersicht über verfügbare Adapter Updates: ${list}`;
3243
+ break;
3244
+ default:
3245
+ message = `Übersicht über verfügbare Adapter Updates: ${list}`;
3246
+ break;
3247
+ }
3162
3248
  setMessage(message);
3163
3249
  });
3164
3250
  break;
3251
+
3165
3252
  case 'errorInstance':
3166
3253
  // push the selected days in list
3167
3254
  if (this.config.checkFailedInstancesMonday) checkDays.push(1);
@@ -3212,13 +3299,24 @@ class DeviceWatcher extends utils.Adapter {
3212
3299
  cron = '5 ' + time[1] + ' ' + time[0] + ' * * ' + checkDays;
3213
3300
  schedule.scheduleJob(cron, () => {
3214
3301
  list = '';
3215
-
3216
3302
  for (const id of this.listDeactivatedInstances) {
3217
- if (this.blacklistInstancesNotify.includes(id)) continue;
3218
- list = `${list}\n${id}`;
3303
+ if (this.blacklistInstancesNotify.includes(id.Instance)) continue;
3304
+ list = `${list}\n${id.Instance}`;
3219
3305
  }
3306
+
3220
3307
  if (list.length === 0) return;
3221
- message = `Tägliche Meldung über deaktivierte Instanzen: ${list}`;
3308
+
3309
+ switch (checkDays.length) {
3310
+ case 1:
3311
+ message = `Wöchentliche Übersicht über deaktivierte Instanzen: ${list}`;
3312
+ break;
3313
+ case 7:
3314
+ message = `Tägliche Übersicht über deaktivierte Instanzen: ${list}`;
3315
+ break;
3316
+ default:
3317
+ message = `Übersicht über deaktivierte Instanzen: ${list}`;
3318
+ break;
3319
+ }
3222
3320
  setMessage(message);
3223
3321
  });
3224
3322
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.device-watcher",
3
- "version": "2.8.5",
3
+ "version": "2.9.0",
4
4
  "description": "Watchdog for devices",
5
5
  "author": {
6
6
  "name": "Christian Behrends",