iobroker.device-watcher 2.4.0 → 2.4.1

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
@@ -179,6 +179,11 @@ It's possible to select:
179
179
  Placeholder for the next version (at the beginning of the line):
180
180
  ### **WORK IN PROGRESS**
181
181
  -->
182
+ ### 2.4.1 (2023-01-14)
183
+
184
+ - (ciddi89) send online and offline notifications only, if the connection to device (zigbee stick etc.) is longer then few seconds. Should prevent multiple messages at a stroke
185
+ - (ciddi89) fixed issue that all devices was listed even though only batterie devices was selected
186
+
182
187
  ### 2.4.0 (2023-01-10)
183
188
 
184
189
  - (ciddi89) make onStateChanges only, when device instance is alive
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "device-watcher",
4
- "version": "2.4.0",
4
+ "version": "2.4.1",
5
5
  "news": {
6
+ "2.4.1": {
7
+ "en": "send online and offline notifications only, if the connection to device (zigbee stick etc.) is longer then few seconds. Should prevent multiple messages at a stroke\nfixed issue that all devices was listed even though only batterie devices was selected",
8
+ "de": "senden Sie nur Online- und Offline-Benachrichtigungen, wenn die Verbindung zum Gerät (Zickbee-Stick etc.) länger ist, dann wenige Sekunden. Sollte mehrere Nachrichten bei einem Schlaganfall verhindern\nfestes problem, dass alle geräte aufgeführt wurden, obwohl nur batteriegeräte ausgewählt wurden",
9
+ "ru": "отправлять онлайн и оффлайн уведомления только, если подключение к устройству (zigbee Stick и т.д.) дольше, чем несколько секунд. Должны предотвратить несколько сообщений в инсульте\nисправлена проблема, что все устройства были перечислены, хотя только батареи устройства были выбраны",
10
+ "pt": "enviar notificações on-line e off-line apenas, se a conexão ao dispositivo (zigbee stick etc) é mais longo, em seguida, poucos segundos. Deve prevenir várias mensagens em um curso\nproblema fixo que todos os dispositivos foram listados mesmo que apenas dispositivos de batterie foram selecionados",
11
+ "nl": "verstuur online en offline berichten alleen, als de connectie met apparaat (zigbee stok etc is langer dan een paar seconden. Moet meerdere berichten voorkomen bij een beroerte\nalhoewel alleen batterij apparatuur is geselecteerd",
12
+ "fr": "envoyer des notifications en ligne et hors ligne seulement, si la connexion à l'appareil (colonne de zigbee etc.) est plus longue puis quelques secondes. Devrait prévenir plusieurs messages à un AVC\nproblème fixe que tous les appareils ont été répertoriés même si seuls les appareils à batterie ont été sélectionnés",
13
+ "it": "inviare notifiche online e offline solo, se la connessione al dispositivo (zigbee stick ecc.) è più lunga allora pochi secondi. Dovrebbe impedire più messaggi a un ictus\nproblema fisso che tutti i dispositivi sono stati elencati anche se solo i dispositivi batterie sono stati selezionati",
14
+ "es": "enviar notificaciones en línea y fuera de línea solamente, si la conexión al dispositivo (pegamento de zigbee etc.) es más largo entonces pocos segundos. Debe prevenir múltiples mensajes en un accidente cerebrovascular\ncuestión fija que todos los dispositivos fueron listados a pesar de que sólo los dispositivos de batterie fueron seleccionados",
15
+ "pl": "wysyłanie notyfikacji online i offline tylko wtedy, gdy połączenie z urządzeniem (zigbee stick etc.) jest dłuższe, wtedy kilka sekund. W razie potrzeby zapobiegać wielokrotnym wiadomościom w wyniku udaru\nzastrzeżenie, że wszystkie urządzenia zostały wymienione, mimo że wybrano tylko urządzenia fałszerskie",
16
+ "uk": "надсилайте онлайн і офлайн повідомлення тільки, якщо підключення до пристрою (зигніть палицю і т.д.) довший час, потім кілька секунд. Не допустити декількох повідомлень при інсульті\nвиправлено проблему, що всі пристрої були перераховані, хоча тільки пристрої баттері були вибрані",
17
+ "zh-cn": "只发出在线和线外通知,如果与装置(zigbee stick等)的联系较短。 如果能防止在场上的多条信息。\n尽管只选定电池器,但所有装置都列入了固定问题。"
18
+ },
6
19
  "2.4.0": {
7
20
  "en": "make onStateChanges only, when device instance is alive\nHomeconnect and Smartgarden Adapter added",
8
21
  "de": "auf der Karte Änderungen nur, wenn Geräteinstanz lebendig ist\nHomeconnect und Smartgarden Adapter hinzugefügt",
@@ -80,19 +93,6 @@
80
93
  "pl": "Muzyka Yamaha dodać dodarzenia\nuaktualnienie wiadomości\ndatapoint i planowane powiadomienie dla urządzeń aktualizowanych dodano dodatki\nreakcja zmian w punktach dostępu do baterii została dodana\nwysyłanie i pisanie listy bezpośrednio, jeśli jeden urządzenie posiada niską baterię\nwysyłanie wiadomości i pisanie list, jeśli urządzenie zachodzi online lub offline",
81
94
  "uk": "Yamaha Музика Додані адаптери\nнадіслати повідомлення про зміну стану\nдодано дані та планове сповіщення для оновлених пристроїв\nдодана реакція на зміни умов акумулятора\nнадсилайте повідомлення та напишіть списки безпосередньо, якщо один пристрій має низький акумулятор\nнадсилати повідомлення та написати списки безпосередньо, якщо на пристрої йде онлайн або офлайн",
82
95
  "zh-cn": "2. Yamaha Music 卡普雷加\n发出最新信息,说明国家变化\n数据点和准备通知可更新装置\n对电池数据点状况变化的反应增加\n如果一个装置低电池,则直接发送信息和写名单\n直接发送信息和书面名单,如果装置上网或线外线"
83
- },
84
- "2.1.0": {
85
- "en": "optionally show adapter name in notification\noptionally receive a message when an update for an device is available [#87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nupdate message for shelly adapter added\nupdate message for unifi devices added\nfixed devices are not reported in case battery is 0% [#86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSynoChat added [#85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT added ([#82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82))",
86
- "de": "optional adaptername in benachrichtigung anzeigen\noptional eine Nachricht erhalten, wenn ein Update für ein Gerät verfügbar ist #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nupdate-nachricht für shelly adapter hinzugefügt\nupdate-nachricht für unifi-geräte hinzugefügt\nfeste Geräte werden nicht gemeldet, falls Batterie 0% #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSynthetische Chat hinzugefügt #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT hinzugefügt #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
87
- "ru": "дополнительно показать имя адаптера в уведомлении\nопционально получайте сообщение, когда обновление для устройства доступно #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nобновление сообщение для shelly адаптер добавлен\nобновление сообщения для устройств unifi добавлено\nстационарные устройства не сообщаются в случае батареи 0% #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nСино Чат добавлен #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT добавлен #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
88
- "pt": "opcionalmente mostrar o nome do adaptador na notificação\nopcionalmente receber uma mensagem quando uma atualização para um dispositivo está disponível #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nmensagem de atualização para adaptador shelly adicionado\nmensagem de atualização para dispositivos unifi adicionados\ndispositivos fixos não são relatados caso a bateria seja 0% #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSyno Chat adicionado #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT adicionado #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
89
- "nl": "vertaling:\neen bericht ontvangen als een update voor een apparaat beschikbaar is\nvertaling:\nvertaling:\ngerepareerde apparaten zijn niet gerapporteerd in het geval dat batterij 0% is\nSyno. Chat voegde er 85 bij\nMQT NukiHub, MQTT-Cliigbee2MQT voegde £2 82: jitttubcom/ciddi-ioBroker devicewatwat-wat-wat-wat 82",
90
- "fr": "afficher en option le nom de l'adaptateur dans la notification\nrecevoir en option un message lorsqu ' une mise à jour pour un dispositif est disponible #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nmessage de mise à jour pour adaptateur shelly ajouté\nmessage de mise à jour pour les périphériques unifi ajouté\nles appareils fixes ne sont pas signalés dans le cas où la batterie est de 0 % #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSyno Chat ajouté #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT ajouté #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
91
- "it": "mostra il nome dell'adattatore nella notifica\n*[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\naggiornamento messaggio per adattatore shelly aggiunto\nmessaggio di aggiornamento per dispositivi unifi aggiunti\ni dispositivi fissi non sono segnalati nel caso in cui la batteria sia 0% #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nTraduzione: Chat aggiunta #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT aggiunto #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
92
- "es": "opcionalmente mostrar el nombre del adaptador en notificación\nopcionalmente recibe un mensaje cuando se dispone de una actualización para un dispositivo #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nmensaje de actualización para adaptador de jalea añadido\nmensaje de actualización para dispositivos unificados\nno se reportan dispositivos fijos en caso de batería es el 0% #[86](https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSino Chat added #[85](https://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT added #[82](https://github.com/ciddi89/ioBroker.device-watcher/issues/82)",
93
- "pl": "opcjonalnie marka adapterowa\nopcjonalnie otrzyma wiadomość, gdy aktualizacja urządzenia jest dostępna na #87(https:/github.com/ciddi89/ioBroker.device-watcher/issues/87)\nuaktualnienie\nuaktualnienie urządzeń unifiowych dodano do wiadomości aktualizację\nurządzenia stałe nie są doniesione w przypadku baterii 0% #86(https:/github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSyno Chat dodał #85 (https:/github.com/ciddi89/ioBroker).device-watcher/issues/issues/\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT dodał #82 (https:/github.com/ciddi89/ioBroker.device-watcher/issues/82)",
94
- "uk": "додатково показати назву адаптера в повідомлення\nдодатково отримайте повідомлення при оновленні пристрою доступно #[87](https://github.com/ciddi89/ioBroker.device-watcher/issues/87)\nоновлення повідомлення для адаптера оболонки додано\nдодано оновлення повідомлення для пристроїв unifi\n0% #[86] (https://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nСино Чат додано #[85](https://github.com/ciddi89/ioBroker.device-watcher/products/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT додано #[82](https://github.com/ciddi89/ioBroker.device-watcher/products/82)",
95
- "zh-cn": "选择性地展示通知的适应人名\n当一个装置的更新可查阅第[87]号(http://github.com/ciddi89/ioBroker.device-watcher/issues/87)\na. 炮击器的更新信息\n光明装置最新信息\n(http://github.com/ciddi89/ioBroker.device-watcher/issues/86)\nSyno 查特增加第[85]号(http://github.com/ciddi89/ioBroker.device-watcher/issues/85)\nMQTT NukiHub, MQTT-Clien Zigbee2MQTT 补充了第[82]号(http://github.com/ciddi89/ioBroker.device-watcher/issues/82)"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/main.js CHANGED
@@ -250,16 +250,23 @@ class DeviceWatcher extends utils.Adapter {
250
250
  let contactData;
251
251
  let oldStatus;
252
252
  let isLowBatValue;
253
+ let instanceDeviceConnectionDpTS;
254
+ const instanceDeviceConnectionDpTSminTime = 5;
255
+
256
+ // Wait if the conection to device was lost to avoid multiple messages.
257
+ // const delay = (n) => new Promise((r) => setTimeout(r, n * 100));
253
258
 
254
259
  for (const device of this.listAllDevicesRaw) {
255
260
  // On statechange update available datapoint
256
261
  switch (id) {
257
- case device.instanceAliveDP:
258
- device.instanceAlive = state.val;
262
+ case device.instanceDeviceConnectionDP:
263
+ if (state.val !== device.instancedeviceConnected) {
264
+ device.instancedeviceConnected = state.val;
265
+ }
259
266
  break;
260
267
 
261
268
  case device.UpdateDP:
262
- if (device.instanceAlive) {
269
+ if (state.val !== device.Upgradable) {
263
270
  device.Upgradable = state.val;
264
271
  if (state.val) {
265
272
  if (!this.blacklistNotify.includes(device.Path)) {
@@ -270,91 +277,89 @@ class DeviceWatcher extends utils.Adapter {
270
277
  break;
271
278
 
272
279
  case device.SignalStrengthDP:
273
- if (device.instanceAlive) {
274
- device.SignalStrength = await this.calculateSignalStrength(state, device.adapterID);
275
- }
280
+ device.SignalStrength = await this.calculateSignalStrength(state, device.adapterID);
276
281
  break;
277
282
 
278
283
  case device.batteryDP:
279
- if (device.instanceAlive) {
280
- if (device.isBatteryDevice) {
281
- oldLowBatState = device.LowBat;
282
- batteryData = await this.getBatteryData(state.val, oldLowBatState, device.adapterID);
283
-
284
- device.Battery = batteryData[0];
285
- device.BatteryRaw = batteryData[2];
286
- if (device.LowBatDP !== 'none') {
287
- isLowBatValue = await this.getInitValue(device.LowBatDP);
288
- } else {
289
- isLowBatValue = undefined;
290
- }
291
- device.LowBat = await this.setLowbatIndicator(state.val, isLowBatValue, device.faultReport, device.adapterID);
284
+ if (device.isBatteryDevice) {
285
+ oldLowBatState = device.LowBat;
286
+ batteryData = await this.getBatteryData(state.val, oldLowBatState, device.adapterID);
287
+
288
+ device.Battery = batteryData[0];
289
+ device.BatteryRaw = batteryData[2];
290
+ if (device.LowBatDP !== 'none') {
291
+ isLowBatValue = await this.getInitValue(device.LowBatDP);
292
+ } else {
293
+ isLowBatValue = undefined;
294
+ }
295
+ device.LowBat = await this.setLowbatIndicator(state.val, isLowBatValue, device.faultReport, device.adapterID);
292
296
 
293
- if (device.LowBat && oldLowBatState !== device.LowBat) {
294
- if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
295
- await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
296
- }
297
+ if (device.LowBat && oldLowBatState !== device.LowBat) {
298
+ if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
299
+ await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
297
300
  }
298
301
  }
299
302
  }
300
303
  break;
301
304
 
302
305
  case device.LowBatDP:
303
- if (device.instanceAlive) {
304
- if (device.isBatteryDevice) {
305
- oldLowBatState = device.LowBat;
306
- batteryData = await this.getBatteryData(device.BatteryRaw, state.val, device.adapterID);
307
- device.Battery = batteryData[0];
308
- device.BatteryRaw = batteryData[2];
309
- device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, state.val, device.faultReport, device.adapterID);
310
-
311
- if (device.LowBat && oldLowBatState !== device.LowBat) {
312
- if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
313
- await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
314
- }
306
+ if (device.isBatteryDevice) {
307
+ oldLowBatState = device.LowBat;
308
+ batteryData = await this.getBatteryData(device.BatteryRaw, state.val, device.adapterID);
309
+ device.Battery = batteryData[0];
310
+ device.BatteryRaw = batteryData[2];
311
+ device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, state.val, device.faultReport, device.adapterID);
312
+
313
+ if (device.LowBat && oldLowBatState !== device.LowBat) {
314
+ if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
315
+ await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
315
316
  }
316
317
  }
317
318
  }
318
319
  break;
319
320
 
320
321
  case device.faultReportDP:
321
- if (device.instanceAlive) {
322
- if (device.isBatteryDevice) {
323
- oldLowBatState = device.LowBat;
324
- batteryData = await this.getBatteryData(device.BatteryRaw, oldLowBatState, device.adapterID);
325
-
326
- device.Battery = batteryData[0];
327
- device.BatteryRaw = batteryData[2];
328
- device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, undefined, state.val, device.adapterID);
329
-
330
- if (device.LowBat && oldLowBatState !== device.LowBat) {
331
- if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
332
- await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
333
- }
322
+ if (device.isBatteryDevice) {
323
+ oldLowBatState = device.LowBat;
324
+ batteryData = await this.getBatteryData(device.BatteryRaw, oldLowBatState, device.adapterID);
325
+
326
+ device.Battery = batteryData[0];
327
+ device.BatteryRaw = batteryData[2];
328
+ device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, undefined, state.val, device.adapterID);
329
+
330
+ if (device.LowBat && oldLowBatState !== device.LowBat) {
331
+ if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
332
+ await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
334
333
  }
335
334
  }
336
335
  }
337
336
  break;
338
337
 
339
338
  case device.UnreachDP:
340
- if (device.instanceAlive) {
341
- oldStatus = device.Status;
342
- device.UnreachState = await this.getInitValue(device.UnreachDP);
343
- contactData = await this.getOnlineState(
344
- device.timeSelector,
345
- device.adapterID,
346
- device.UnreachDP,
347
- device.SignalStrength,
348
- device.UnreachState,
349
- device.DeviceStateSelectorDP,
350
- device.rssiPeerSelectorDP,
351
- );
352
- if (contactData !== undefined) {
353
- device.LastContact = contactData[0];
354
- device.Status = contactData[1];
355
- device.SignalStrength = contactData[2];
339
+ oldStatus = device.Status;
340
+ device.UnreachState = await this.getInitValue(device.UnreachDP);
341
+ contactData = await this.getOnlineState(
342
+ device.timeSelector,
343
+ device.adapterID,
344
+ device.UnreachDP,
345
+ device.SignalStrength,
346
+ device.UnreachState,
347
+ device.DeviceStateSelectorDP,
348
+ device.rssiPeerSelectorDP,
349
+ );
350
+ if (contactData !== undefined) {
351
+ device.LastContact = contactData[0];
352
+ device.Status = contactData[1];
353
+ device.SignalStrength = contactData[2];
354
+ }
355
+ if (device.instanceDeviceConnectionDP !== undefined) {
356
+ instanceDeviceConnectionDpTS = await this.getTimestampConnectionDP(device.instanceDeviceConnectionDP);
357
+ if (device.instancedeviceConnected !== false && instanceDeviceConnectionDpTS && instanceDeviceConnectionDpTS >= instanceDeviceConnectionDpTSminTime) {
358
+ if (this.config.checkSendOfflineMsg && oldStatus !== device.Status && !this.blacklistNotify.includes(device.Path)) {
359
+ await this.sendOfflineNotifications(device.Device, device.Adapter, device.Status, device.LastContact);
360
+ }
356
361
  }
357
-
362
+ } else {
358
363
  if (this.config.checkSendOfflineMsg && oldStatus !== device.Status && !this.blacklistNotify.includes(device.Path)) {
359
364
  await this.sendOfflineNotifications(device.Device, device.Adapter, device.Status, device.LastContact);
360
365
  }
@@ -521,9 +526,9 @@ class DeviceWatcher extends utils.Adapter {
521
526
  = get Instanz =
522
527
  =============================================*/
523
528
  const instance = id.slice(0, id.indexOf('.') + 2);
524
- const instanceAliveDP = `system.adapter.${instance}.alive`;
525
- const instanceAlive = await this.getInitValue(instanceAliveDP);
526
- this.subscribeForeignStates(instanceAliveDP);
529
+ const instanceDeviceConnectionDP = `${instance}.info.connection`;
530
+ const instancedeviceConnected = await this.getInitValue(instanceDeviceConnectionDP);
531
+ this.subscribeForeignStates(instanceDeviceConnectionDP);
527
532
 
528
533
  /*=============================================
529
534
  = Get device name =
@@ -689,40 +694,42 @@ class DeviceWatcher extends utils.Adapter {
689
694
  =============================================*/
690
695
 
691
696
  /* Add only devices with battery in the rawlist */
692
- if (this.listOnlyBattery && isBatteryDevice) {
693
- this.listAllDevicesRaw.push({
694
- Path: id,
695
- instanceAliveDP: instanceAliveDP,
696
- instanceAlive: instanceAlive,
697
- Device: deviceName,
698
- adapterID: adapterID,
699
- Adapter: adapter,
700
- timeSelector: timeSelector,
701
- isBatteryDevice: isBatteryDevice,
702
- Battery: batteryHealth,
703
- BatteryRaw: batteryHealthRaw,
704
- batteryDP: deviceBatteryStateDP,
705
- LowBat: lowBatIndicator,
706
- LowBatDP: isLowBatDP,
707
- faultReport: faultReportingState,
708
- faultReportDP: faultReportingDP,
709
- SignalStrengthDP: deviceQualityDP,
710
- SignalStrength: linkQuality,
711
- UnreachState: deviceUnreachState,
712
- UnreachDP: unreachDP,
713
- DeviceStateSelectorDP: deviceStateSelectorDP,
714
- rssiPeerSelectorDP: rssiPeerSelectorDP,
715
- LastContact: lastContactString,
716
- Status: deviceState,
717
- UpdateDP: deviceUpdateDP,
718
- Upgradable: isUpgradable,
719
- });
697
+ if (this.listOnlyBattery) {
698
+ if (isBatteryDevice) {
699
+ this.listAllDevicesRaw.push({
700
+ Path: id,
701
+ instanceDeviceConnectionDP: instanceDeviceConnectionDP,
702
+ instancedeviceConnected: instancedeviceConnected,
703
+ Device: deviceName,
704
+ adapterID: adapterID,
705
+ Adapter: adapter,
706
+ timeSelector: timeSelector,
707
+ isBatteryDevice: isBatteryDevice,
708
+ Battery: batteryHealth,
709
+ BatteryRaw: batteryHealthRaw,
710
+ batteryDP: deviceBatteryStateDP,
711
+ LowBat: lowBatIndicator,
712
+ LowBatDP: isLowBatDP,
713
+ faultReport: faultReportingState,
714
+ faultReportDP: faultReportingDP,
715
+ SignalStrengthDP: deviceQualityDP,
716
+ SignalStrength: linkQuality,
717
+ UnreachState: deviceUnreachState,
718
+ UnreachDP: unreachDP,
719
+ DeviceStateSelectorDP: deviceStateSelectorDP,
720
+ rssiPeerSelectorDP: rssiPeerSelectorDP,
721
+ LastContact: lastContactString,
722
+ Status: deviceState,
723
+ UpdateDP: deviceUpdateDP,
724
+ Upgradable: isUpgradable,
725
+ });
726
+ }
720
727
  } else {
721
728
  /* Add all devices */
722
729
  this.listAllDevicesRaw.push({
723
730
  Path: id,
724
- instanceAliveDP: instanceAliveDP,
725
- instanceAlive: instanceAlive,
731
+ instanceDeviceConnectionDP: instanceDeviceConnectionDP,
732
+ instancedeviceConnected: instancedeviceConnected,
726
733
  Device: deviceName,
727
734
  adapterID: adapterID,
728
735
  Adapter: adapter,
@@ -1209,24 +1216,26 @@ class DeviceWatcher extends utils.Adapter {
1209
1216
  */
1210
1217
  async checkLastContact() {
1211
1218
  for (const device of this.listAllDevicesRaw) {
1212
- const oldContactState = device.Status;
1213
- device.UnreachState = await this.getInitValue(device.UnreachDP);
1214
- const contactData = await this.getOnlineState(
1215
- device.timeSelector,
1216
- device.adapterID,
1217
- device.UnreachDP,
1218
- device.SignalStrength,
1219
- device.UnreachState,
1220
- device.DeviceStateSelectorDP,
1221
- device.rssiPeerSelectorDP,
1222
- );
1223
- if (contactData !== undefined) {
1224
- device.LastContact = contactData[0];
1225
- device.Status = contactData[1];
1226
- device.linkQuality = contactData[2];
1227
- }
1228
- if (this.config.checkSendOfflineMsg && oldContactState !== device.Status && !this.blacklistNotify.includes(device.Path)) {
1229
- await this.sendOfflineNotifications(device.Device, device.Adapter, device.Status, device.LastContact);
1219
+ if (device.instancedeviceConnected !== false) {
1220
+ const oldContactState = device.Status;
1221
+ device.UnreachState = await this.getInitValue(device.UnreachDP);
1222
+ const contactData = await this.getOnlineState(
1223
+ device.timeSelector,
1224
+ device.adapterID,
1225
+ device.UnreachDP,
1226
+ device.SignalStrength,
1227
+ device.UnreachState,
1228
+ device.DeviceStateSelectorDP,
1229
+ device.rssiPeerSelectorDP,
1230
+ );
1231
+ if (contactData !== undefined) {
1232
+ device.LastContact = contactData[0];
1233
+ device.Status = contactData[1];
1234
+ device.linkQuality = contactData[2];
1235
+ }
1236
+ if (this.config.checkSendOfflineMsg && oldContactState !== device.Status && !this.blacklistNotify.includes(device.Path)) {
1237
+ await this.sendOfflineNotifications(device.Device, device.Adapter, device.Status, device.LastContact);
1238
+ }
1230
1239
  }
1231
1240
  }
1232
1241
  }
@@ -2567,6 +2576,18 @@ class DeviceWatcher extends utils.Adapter {
2567
2576
  return (dpValue = Math.round((time.getTime() - dpValue) / 1000 / 60));
2568
2577
  }
2569
2578
 
2579
+ /**
2580
+ * @param {string} dp - get Time of this datapoint
2581
+ */
2582
+ async getTimestampConnectionDP(dp) {
2583
+ const time = new Date();
2584
+ const dpValue = await this.getForeignStateAsync(dp);
2585
+ if (dpValue !== null && dpValue !== undefined) {
2586
+ const dpLastStateChange = Math.round((time.getTime() - dpValue.lc) / 1000);
2587
+ return dpLastStateChange;
2588
+ }
2589
+ }
2590
+
2570
2591
  /**
2571
2592
  * @param {object} obj - State of datapoint
2572
2593
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.device-watcher",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "Watchdog for devices",
5
5
  "author": {
6
6
  "name": "Christian Behrends",