iobroker.device-watcher 2.3.0 → 2.3.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
@@ -174,11 +174,21 @@ It's possible to select:
174
174
  Placeholder for the next version (at the beginning of the line):
175
175
  ### **WORK IN PROGRESS**
176
176
  -->
177
+ ### 2.3.1 (2023-01-05)
178
+
179
+ - (ciddi89) changed HMRPC lowbat to lowbat_alarm
180
+ - (ciddi89) changed HMRPC unreach to unreach_alarm
181
+ - (ciddi89) fixed nuki mqtt selector
182
+ - (ciddi89) added shelly charge datapoint to identify battery devices better
183
+ - (ciddi89) fixed lowbat issues
184
+ - (ciddi89) added lowbat support for HMRPC: HM-CC-RT-DN
185
+ - (ciddi89) added additionally timeSelector for each adapter for better support
186
+
177
187
  ### 2.3.0 (2023-01-03)
178
188
 
179
189
  - (ciddi89) sorting for device selection in the blacklist added
180
190
  - (ciddi89) Devices can now also be blacklisted in adapter own list
181
- - (ciddi89) booleans for lowbat, offline and upgradable added
191
+ - (ciddi89) booleans for lowbat, offline and upgradable added ([#105](https://github.com/ciddi89/ioBroker.device-watcher/issues/105))
182
192
  - (ciddi89) euSec adapter added ([#73](https://github.com/ciddi89/ioBroker.device-watcher/issues/73))
183
193
 
184
194
  ### 2.2.2 (2022-12-29)
@@ -1134,7 +1134,7 @@
1134
1134
  },
1135
1135
  "eusecMaxMinutes": {
1136
1136
  "type": "number",
1137
- "min": -1,
1137
+ "min": 1,
1138
1138
  "max": 100000,
1139
1139
  "sm": 6,
1140
1140
  "md": 6,
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "device-watcher",
4
- "version": "2.3.0",
4
+ "version": "2.3.1",
5
5
  "news": {
6
+ "2.3.1": {
7
+ "en": "changed HMRPC lowbat to lowbat_alarm\nchanged HMRPC unreach to unreach_alarm\nfixed nuki mqtt selector\nadded shelly charge datapoint to identify battery devices better\nfixed lowbat issues\nadded lowbat support for HMRPC: HM-CC-RT-DN\nadded additionally timeSelector for each adapter for better support",
8
+ "de": "hMRPC lowbat zu lowbat_alarm\nhMRPC unreach to unreach_alarm\nfeste nuki mqt selektion\nhinzugefügt shelly-ladedatenpunkt, um batteriegeräte besser zu identifizieren\nfeste lowbat-probleme\nzusätzliche Lowbat-Unterstützung für HMRPC: HM-CC-RT-DN\nzusätzliche ZeitSelector für jeden Adapter für bessere Unterstützung",
9
+ "ru": "изменено HMRPC lowbat на lowbat_alarm\nизменил HMRPC unreach к unreach_alarm\nфиксированный нуки mqtt selector\nдобавлена точка заряда оболочки, чтобы определить устройства батареи лучше\nфиксированные низкобатные вопросы\nдобавлена поддержка lowbat для HMRPC: HM-CC-RT-DN\nдобавлено дополнительно timeSelector для каждого адаптера для лучшей поддержки",
10
+ "pt": "mudou HMRPC lowbat para lowbat_alarm\nmudou HMRPC unreach para unreach_alarm\nseletor nuki mqtt fixo\nadicionado shelly carregar datapoint para identificar dispositivos de bateria melhor\nproblemas fixos\nsuporte adicional de lowbat para HMRPC: HM-CC-RT-DN\nadicionado adicionalmente tempoSeletor para cada adaptador para melhor suporte",
11
+ "nl": "veranderde HMRPC laagbat om te zakken\nveranderde HMRPC onbereikbaar om te ontrafelen\nvertaling:\nvoegde toegevoegde lading datapoint toe om accu apparatuur te identificeren\ngerepareerde lage problemen\nhM-C-RTN\nvoeg extra tijdsversneller toe voor elke adapter voor betere steun",
12
+ "fr": "changement de HMRPC basbat to lowbat_alarm\nchangé HMRPC unreach to unreach_alarm\nsélecteur fixe nuki mqt\nle point de données de charge shelly ajouté pour identifier les appareils de batterie mieux\nquestions de bas niveau\nsupport de faible teneur pour HMRPC: HM-CC-RT-DN\nsupplémentaire timeSelector pour chaque adaptateur pour un meilleur support",
13
+ "it": "cambiato HMRPC lowbat a lowbat_alarm\ncambiato HMRPC unreach a unreach_alarm\nselettore fisso nuki mqtt\naggiunto shelly carica datapoint per identificare meglio i dispositivi della batteria\nproblemi fissi a bassa pressione\nsupporto per HMRPC: HM-CC-RT-DN\naggiunto anche tempoSelettore per ogni adattatore per un miglior supporto",
14
+ "es": "cambio HMRPC bajobat a lowbat_alarm\ncambió HMRPC sin llegar a unreach_alarm\nfija nuki mqtt selector\nañadir datos de carga total para identificar dispositivos de batería mejor\ncuestiones fijas de baja reducción\nagregado soporte de bajavo para HMRPC: HM-CC-RT-DN\nañadido tiempoSeleccionador para cada adaptador para un mejor soporte",
15
+ "pl": "zmienił niskobudżetowy słupek HMRPC\nzmienił HMRPC nieodwracany\nnuki mqtt selektor\ndodany punkt ładowania sygnału do identyfikowania urządzeń baterii znacznie lepszy\nniskobata\nwsparcie dla HMRPC: HM-CC-RT-DN\ndodano dodatkowy czas dla każdego adaptera dla lepszego wsparcia",
16
+ "uk": "змінив HMRPC низькобажан до низької bat_alarm\nзмінив HMRPC unreach_alarm\nфіксований nuki mqtt selector\nдодана точка заряду оболонки для виявлення пристроїв акумулятора краще\nвиправлені проблеми з низькою вагою\nhM-CC-RT-DN\nдодано додатково часСелектор для кожного адаптера для кращої підтримки",
17
+ "zh-cn": "mR 低巴\nb. MRPC Unach的改变\n固定微基米特选\n增拨的炮击数据点,以查明电池装置,改善\n固定的低巴特问题\n减少对影响方案的支持:HM-CC-DNRT-DN\n每个适应者增加更多时间,以更好地支助"
18
+ },
6
19
  "2.3.0": {
7
20
  "en": "sorting for device selection in the blacklist added\nDevices can now also be blacklisted in adapter own list\nbooleans for lowbat, offline and upgradable added\neuSec adapter added ([#73](https://github.com/ciddi89/ioBroker.device-watcher/issues/73))",
8
21
  "de": "sortierung für geräteauswahl in der blacklist hinzugefügt\nGeräte können jetzt auch in Adapter-Eigenliste schwarz aufgeführt werden\nbooleans für lowbat, offline und aufrüstbar hinzugefügt\neuSec Adapter hinzugefügt #[73](https://github.com/ciddi89/ioBroker.device-watcher/issues/73)",
@@ -80,19 +93,6 @@
80
93
  "pl": "bieżący problem z lokalną sprawą W porównaniu z innymi\ndodać\ndodać adapter\nadapter do Sure Flap\nniskojęzyczna wiadomość",
81
94
  "uk": "фіксована проблема з місцевими Порівняти\nдодано тапо\nдодано повністю Адаптери\nдоданий Sure Flap адаптер\nфіксовані низькі повідомлення bat",
82
95
  "zh-cn": "固定问题 比较\n增 录\n增 编 增 编\n增 编\n固定的低巴特信息"
83
- },
84
- "2.0.2": {
85
- "en": "added status to battery list\nbatt devices which are offline are now still included in the battery list\nsmall improvements of translations\noffline time settings: you can use 0 instead of -1 (it will be the new standard)\nimprovements of adaptername\nfixed issues [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nrepaired blacklist notifications\nadded handling for blacklist object",
86
- "de": "status zur batterieliste hinzugefügt\nbatt-geräte, die offline sind, sind jetzt noch in der batterieliste enthalten\nkleine verbesserungen der übersetzungen\noffline-zeiteinstellungen: sie können 0 anstelle -1 verwenden (es wird der neue standard sein)\nverbesserungen des adapternamens\n[#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nreparierte blacklist-benachrichtigungen\nzusätzliche handhabung für blacklist-objekt",
87
- "ru": "добавлен статус в список батарей\nbatt устройства, которые являются offline, теперь все еще включены в список батарей\nнебольшие улучшения переводов\nоффлайн настройки времени: вы можете использовать 0 вместо -1 (это будет новый стандарт)\nулучшения логины адаптера\nфиксированные вопросы [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nотремонтированный черный список уведомлений\nдобавлена обработка для объекта blacklist",
88
- "pt": "status adicionado à lista de bateria\ndispositivos de batedor que estão offline ainda estão incluídos na lista de baterias\npequenas melhorias de traduções\nconfigurações de tempo off-line: você pode usar 0 em vez de -1 (ele será o novo padrão)\nmelhorias do nome do adaptador\n(http://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotificações de lista negra reparadas\nmanipulação adicionada para objeto de lista negra",
89
- "nl": "vertaling:\nbatt apparatuur die offline zijn nog steeds in de batterijlijst\nvertaling:\noffline time settings: je kunt 0 gebruiken in plaats van -1 (het zal de nieuwe standaard zijn)\nverbeteringen van adapternaam\nquality over Quantity (QoQ) Releases Vertaling:\nvertaling:\nvertaling:",
90
- "fr": "statut ajouté à la liste de piles\nles dispositifs de chauves-souris qui sont hors ligne sont maintenant toujours inclus dans la liste de batterie\npetites améliorations des traductions\nparamètres de temps hors ligne: vous pouvez utiliser 0 au lieu de -1 (il sera la nouvelle norme)\naméliorations du nom d'adaptateur\n(https://github.com/ciddi89/ioBroker.device-watcher/issues/66) \" [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotifications de listes noires réparées\nmanipulation supplémentaire pour objet blacklist",
91
- "it": "stato aggiunto alla lista della batteria\nbatt dispositivi che sono offline sono ora ancora inclusi nella lista della batteria\npiccoli miglioramenti delle traduzioni\nimpostazioni di tempo offline: è possibile utilizzare 0 invece di -1 (è il nuovo standard)\nmiglioramenti del nome dell'adattatore\n(https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotifiche di blacklist riparate\ngestione aggiuntiva per oggetto blacklist",
92
- "es": "estado añadido a la lista de baterías\ndispositivos de batta que están fuera de línea ahora están incluidos en la lista de baterías\npequeñas mejoras de las traducciones\najustes del tiempo fuera de línea: puede utilizar 0 en lugar de -1 (será el nuevo estándar)\nmejoras en el nombre de adaptador\ncuestiones fijas [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotificaciones de lista negra reparadas\nmanejo añadido para objeto de lista negra",
93
- "pl": "dodany status baterii\nurządzenia z baterią, które są offline, są obecnie włączone do listy baterii\nmałe poprawki tłumaczenia\nwspółczynnikowy: możesz użyć 0 zamiast -1 (jak będzie nowy standard)\nulepszenia adaptername\nnumery stałe (#66(https:/github.com/ciddi89/ioBroker.device-watcher/issues/66) & #67(https:/github.com/ciddi89/ioBroker.device-watcher/67)\nulepszenia czarnej listy\nobsługa blacklist object",
94
- "uk": "додано статус до списку акумуляторів\nпристрої для баттів, які в автономному режимі, все ще включені в список акумуляторів\nневеликі поліпшення перекладів\nв автономному режимі настройки часу: ви можете використовувати 0 замість -1 (це буде новий стандарт)\nполіпшення імені адаптера\n[#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nвідремонтовані повідомлення blacklist\nдодана обробка для об'єкта blacklist",
95
- "zh-cn": "电池清单的附加地位\nb 现仍在列入电池清单的浮动装置\n翻译的小改进\n时限:你可以使用0.而不是1-1(即新标准)\nb. 改进适应人员名\n固定问题[第66](http://github.com/ciddi89/ioBroker.device-watcher/issues/66)和[#67](http://github.com/ciddi89/Broker.device-watcher/issues/67)\n修理黑名单通知\n黑名单目标的新增处理"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -188,7 +188,7 @@
188
188
  "esphomeDevices": false,
189
189
  "esphomeMaxMinutes": 0,
190
190
  "eusecDevices": false,
191
- "eusecMaxMinutes": 0,
191
+ "eusecMaxMinutes": 300,
192
192
  "fritzdectDevices": false,
193
193
  "fritzdectMaxMinutes": 0,
194
194
  "fullybrowserDevices": false,
package/lib/arrApart.js CHANGED
@@ -1,7 +1,25 @@
1
1
  // arrays of supported adapters
2
+
3
+ /*
4
+ Default Template:
5
+ adapterID: { // ID for adapter, it should be the same name as in settings etc.
6
+ Selektor: '', // main datapoint of one device. Should be available for all devices. So the adapter can found all devices
7
+ timeSelector: '', // from which datapoint should the time be taken for the last contact
8
+ adapterID: '', // same id as above
9
+ adapter: '', // Adapter Name for notifications and tables
10
+ rssiState: 'none', // rssi or percent datapoint of link quality (optional)
11
+ battery: 'none', // battery datapoint (optional)
12
+ reach: 'none', // reachable or connected datapoint (optional)
13
+ isLowBat: 'none', // lowBat datapoint (optional)
14
+ id: 'none', // datapoint with name of device (optional)
15
+ upgrade: 'none', // update datapoint that indicates available updates for the device (optional)
16
+ }
17
+ */
18
+
2
19
  const arrApart = {
3
20
  alexa2: {
4
21
  Selektor: 'alexa2.*.online',
22
+ timeSelector: '.online',
5
23
  adapterID: 'alexa2',
6
24
  adapter: 'Alexa2',
7
25
  battery: 'none',
@@ -10,6 +28,7 @@ const arrApart = {
10
28
  },
11
29
  apcups: {
12
30
  Selektor: 'apcups.*.status',
31
+ timeSelector: '.status',
13
32
  adapterID: 'apcups',
14
33
  adapter: 'Apc UPS',
15
34
  battery: '.batteryCharge',
@@ -19,6 +38,7 @@ const arrApart = {
19
38
  },
20
39
  ble: {
21
40
  Selektor: 'ble.*.rssi',
41
+ timeSelector: '.rssi',
22
42
  adapterID: 'ble',
23
43
  adapter: 'Ble',
24
44
  battery: '.battery',
@@ -28,6 +48,7 @@ const arrApart = {
28
48
  },
29
49
  deconz: {
30
50
  Selektor: 'deconz.*.reachable',
51
+ timeSelector: '.reachable',
31
52
  adapterID: 'deconz',
32
53
  adapter: 'Deconz',
33
54
  battery: '.battery',
@@ -36,6 +57,7 @@ const arrApart = {
36
57
  },
37
58
  enocean: {
38
59
  Selektor: 'enocean.*.rssi',
60
+ timeSelector: '.rssi',
39
61
  adapterID: 'enocean',
40
62
  adapter: 'Enocean',
41
63
  battery: '.BS',
@@ -45,6 +67,7 @@ const arrApart = {
45
67
  },
46
68
  esphome: {
47
69
  Selektor: 'esphome.*._online',
70
+ timeSelector: '._online',
48
71
  adapterID: 'esphome',
49
72
  adapter: 'ESPHome',
50
73
  battery: 'none',
@@ -54,6 +77,7 @@ const arrApart = {
54
77
  },
55
78
  eusec: {
56
79
  Selektor: 'eusec.*.software_version',
80
+ timeSelector: '.software_version',
57
81
  adapterID: 'eusec',
58
82
  adapter: 'euSec',
59
83
  battery: '.battery',
@@ -64,6 +88,7 @@ const arrApart = {
64
88
  },
65
89
  fritzdect: {
66
90
  Selektor: 'fritzdect.*.present',
91
+ timeSelector: '.present',
67
92
  adapterID: 'fritzdect',
68
93
  adapter: 'Fritz Dect',
69
94
  battery: '.battery',
@@ -72,6 +97,7 @@ const arrApart = {
72
97
  },
73
98
  fullybrowser: {
74
99
  Selektor: 'fullybrowser.*.isFullyAlive',
100
+ timeSelector: '.isFullyAlive',
75
101
  adapterID: 'fullybrowser',
76
102
  adapter: 'fullyBrowser',
77
103
  rssiState: '.Info.wifiSignalLevel',
@@ -83,6 +109,7 @@ const arrApart = {
83
109
  },
84
110
  harmony: {
85
111
  Selektor: 'harmony.*.hubConnected',
112
+ timeSelector: '.activities.currentStatus',
86
113
  adapterID: 'harmony',
87
114
  adapter: 'Harmony',
88
115
  battery: 'none',
@@ -91,6 +118,7 @@ const arrApart = {
91
118
  },
92
119
  ham: {
93
120
  Selektor: 'ham.*.Battery-Level',
121
+ timeSelector: '.Battery-Level',
94
122
  adapterID: 'ham',
95
123
  adapter: 'Ham',
96
124
  battery: '.Battery-Level',
@@ -100,6 +128,7 @@ const arrApart = {
100
128
  },
101
129
  hmiP: {
102
130
  Selektor: 'hmip.*.rssiDeviceValue',
131
+ timeSelector: '.rssiDeviceValue',
103
132
  adapterID: 'hmiP',
104
133
  adapter: 'Homematic IP',
105
134
  rssiState: '.rssiDeviceValue',
@@ -108,19 +137,22 @@ const arrApart = {
108
137
  isLowBat: '.lowBat',
109
138
  },
110
139
  hmrpc: {
111
- Selektor: 'hm-rpc.*.UNREACH',
140
+ Selektor: 'hm-rpc.*.RSSI_PEER',
141
+ timeSelector: '.UNREACH',
112
142
  adapterID: 'hmrpc',
113
143
  adapter: 'Homematic RPC',
114
144
  rssiState: '.RSSI_DEVICE',
115
145
  rssiPeerState: '.RSSI_PEER',
116
146
  battery: '.OPERATING_VOLTAGE',
117
- reach: '.UNREACH',
118
- isLowBat: '.LOW_BAT',
119
- isLowBat2: '.LOWBAT',
147
+ reach: '.UNREACH_ALARM',
148
+ isLowBat: '.LOW_BAT_ALARM',
149
+ isLowBat2: '.LOWBAT_ALARM',
120
150
  stateValue: '.1.STATE',
151
+ faultReporting: '.4.FAULT_REPORTING',
121
152
  },
122
153
  hs100: {
123
154
  Selektor: 'hs100.*.last_update',
155
+ timeSelector: '.last_update',
124
156
  adapterID: 'hs100',
125
157
  adapter: 'hs100',
126
158
  battery: 'none',
@@ -129,6 +161,7 @@ const arrApart = {
129
161
  },
130
162
  hue: {
131
163
  Selektor: 'hue.*.reachable',
164
+ timeSelector: '.reachable',
132
165
  adapterID: 'hue',
133
166
  adapter: 'Philips Hue',
134
167
  battery: '.battery',
@@ -137,6 +170,7 @@ const arrApart = {
137
170
  },
138
171
  hueExt: {
139
172
  Selektor: 'hue-extended.*.reachable',
173
+ timeSelector: '.reachable',
140
174
  adapterID: 'hueExt',
141
175
  adapter: 'Philips Hue Extended',
142
176
  battery: '.config.battery',
@@ -145,6 +179,7 @@ const arrApart = {
145
179
  },
146
180
  innogy: {
147
181
  Selektor: 'innogy-smarthome.*.IsReachable',
182
+ timeSelector: '.IsReachable',
148
183
  adapterID: 'innogy',
149
184
  adapter: 'Innogy Smarthome',
150
185
  battery: 'none',
@@ -154,6 +189,7 @@ const arrApart = {
154
189
  },
155
190
  jeelink: {
156
191
  Selektor: 'jeelink.*.lowBatt',
192
+ timeSelector: '.lowBatt',
157
193
  adapterID: 'jeelink',
158
194
  adapter: 'Jeelink',
159
195
  battery: 'none',
@@ -162,6 +198,7 @@ const arrApart = {
162
198
  },
163
199
  lupusec: {
164
200
  Selektor: 'lupusec.*.cond_ok',
201
+ timeSelector: '.cond_ok',
165
202
  adapterID: 'lupusec',
166
203
  adapter: 'Lupusec',
167
204
  battery: 'none',
@@ -172,6 +209,7 @@ const arrApart = {
172
209
  },
173
210
  maxcube: {
174
211
  Selektor: 'maxcube.*.link_error',
212
+ timeSelector: '.link_error',
175
213
  adapterID: 'maxcube',
176
214
  adapter: 'Max! Cube',
177
215
  battery: 'none',
@@ -180,6 +218,7 @@ const arrApart = {
180
218
  },
181
219
  meross: {
182
220
  Selektor: 'meross.*.online',
221
+ timeSelector: '.online',
183
222
  adapterID: 'meross',
184
223
  adapter: 'Meross',
185
224
  battery: '.battery',
@@ -188,6 +227,7 @@ const arrApart = {
188
227
  },
189
228
  mihome: {
190
229
  Selektor: 'mihome.*.percent',
230
+ timeSelector: '.percent',
191
231
  adapterID: 'mihome',
192
232
  adapter: 'MiHome',
193
233
  battery: '.percent',
@@ -196,6 +236,7 @@ const arrApart = {
196
236
  },
197
237
  mihomeGW: {
198
238
  Selektor: 'mihome.*.connected',
239
+ timeSelector: '.connected',
199
240
  adapterID: 'mihome',
200
241
  adapter: 'MiHome',
201
242
  battery: 'none',
@@ -204,6 +245,7 @@ const arrApart = {
204
245
  },
205
246
  mihomeVacuum: {
206
247
  Selektor: 'mihome-vacuum.*.connection',
248
+ timeSelector: '.connection',
207
249
  adapterID: 'mihomeVacuum',
208
250
  adapter: 'MiHome Vacuum',
209
251
  rssiState: '.deviceInfo.wifi_signal',
@@ -215,6 +257,7 @@ const arrApart = {
215
257
  },
216
258
  mqttClientZigbee2Mqtt: {
217
259
  Selektor: 'mqtt-client.*.zigbee2mqtt.*.availability',
260
+ timeSelector: '.availability',
218
261
  adapterID: 'mqttClientZigbee2Mqtt',
219
262
  adapter: 'MQTT-Client',
220
263
  battery: '.battery',
@@ -223,7 +266,8 @@ const arrApart = {
223
266
  isLowBat: '.battery_low',
224
267
  },
225
268
  mqttNuki: {
226
- Selektor: 'mqtt.0.nuki.*.rssi',
269
+ Selektor: 'mqtt.*.nuki.*.rssi',
270
+ timeSelector: '.rssi',
227
271
  adapterID: 'mqttNuki',
228
272
  adapter: 'MQTT',
229
273
  battery: '.battery.level',
@@ -233,6 +277,7 @@ const arrApart = {
233
277
  },
234
278
  musiccast: {
235
279
  Selektor: 'musiccast.0.*.online',
280
+ timeSelector: '.online',
236
281
  adapterID: 'musiccast',
237
282
  adapter: 'MusicCast',
238
283
  battery: 'none',
@@ -242,6 +287,7 @@ const arrApart = {
242
287
  },
243
288
  netatmo: {
244
289
  Selektor: 'netatmo.*.LastUpdate',
290
+ timeSelector: '.LastUpdate',
245
291
  adapterID: 'netatmo',
246
292
  adapter: 'Netatmo',
247
293
  rssiState: '.WifiStatus',
@@ -252,6 +298,7 @@ const arrApart = {
252
298
  },
253
299
  nukiExt: {
254
300
  Selektor: 'nuki-extended.*.lastDataUpdate',
301
+ timeSelector: '.lastDataUpdate',
255
302
  adapterID: 'nukiExt',
256
303
  adapter: 'Nuki Extended',
257
304
  rssiState: 'none',
@@ -261,6 +308,7 @@ const arrApart = {
261
308
  },
262
309
  nut: {
263
310
  Selektor: 'nut.*.charge',
311
+ timeSelector: '.charge',
264
312
  adapterID: 'nut',
265
313
  adapter: 'Nut',
266
314
  battery: '.charge',
@@ -269,6 +317,7 @@ const arrApart = {
269
317
  },
270
318
  ping: {
271
319
  Selektor: 'ping.*.alive',
320
+ timeSelector: '.alive',
272
321
  adapterID: 'ping',
273
322
  adapter: 'Ping',
274
323
  battery: 'none',
@@ -277,6 +326,7 @@ const arrApart = {
277
326
  },
278
327
  roomba: {
279
328
  Selektor: 'roomba.*.signal',
329
+ timeSelector: '.signal',
280
330
  adapterID: 'roomba',
281
331
  adapter: 'Roomba',
282
332
  battery: '.battery',
@@ -287,17 +337,20 @@ const arrApart = {
287
337
  },
288
338
  shelly: {
289
339
  Selektor: 'shelly.*.uptime',
340
+ timeSelector: '.uptime',
290
341
  adapterID: 'shelly',
291
342
  adapter: 'Shelly',
292
343
  rssiState: '.rssi',
293
344
  battery: '.sensor.battery',
294
345
  battery2: '.bat.value',
346
+ charger: '.bat.charger',
295
347
  reach: '.online',
296
348
  isLowBat: 'none',
297
349
  upgrade: '.firmware',
298
350
  },
299
351
  sonoff: {
300
352
  Selektor: 'sonoff.*.alive',
353
+ timeSelector: '.alive',
301
354
  adapterID: 'sonoff',
302
355
  adapter: 'Sonoff',
303
356
  rssiState: '.Wifi_RSSI',
@@ -308,6 +361,7 @@ const arrApart = {
308
361
  },
309
362
  sonos: {
310
363
  Selektor: 'sonos.*.alive',
364
+ timeSelector: '.alive',
311
365
  adapterID: 'sonos',
312
366
  adapter: 'Sonos',
313
367
  battery: 'none',
@@ -316,6 +370,7 @@ const arrApart = {
316
370
  },
317
371
  sureflap: {
318
372
  Selektor: 'sureflap.*.online',
373
+ timeSelector: '.online',
319
374
  adapterID: 'sureflap',
320
375
  adapter: 'Sure Flap',
321
376
  battery: '.battery_percentage',
@@ -324,6 +379,7 @@ const arrApart = {
324
379
  },
325
380
  switchbotBle: {
326
381
  Selektor: 'switchbot-ble.*.rssi',
382
+ timeSelector: '.rssi',
327
383
  adapterID: 'switchbotBle',
328
384
  adapter: 'Switchbot Ble',
329
385
  battery: '.battery',
@@ -334,6 +390,7 @@ const arrApart = {
334
390
  },
335
391
  tado: {
336
392
  Selektor: 'tado.*.batteryState',
393
+ timeSelector: '.batteryState',
337
394
  adapterID: 'tado',
338
395
  adapter: 'Tado',
339
396
  rssiState: 'none',
@@ -344,6 +401,7 @@ const arrApart = {
344
401
  },
345
402
  tapo: {
346
403
  Selektor: 'tapo.*.last_update',
404
+ timeSelector: '.last_update',
347
405
  adapterID: 'tapo',
348
406
  adapter: 'Tapo',
349
407
  rssiState: '.rssi',
@@ -354,6 +412,7 @@ const arrApart = {
354
412
  },
355
413
  tradfri: {
356
414
  Selektor: 'tradfri.*.lastSeen',
415
+ timeSelector: '.lastSeen',
357
416
  adapterID: 'tradfri',
358
417
  adapter: 'Tradfri',
359
418
  rssiState: 'none',
@@ -364,6 +423,7 @@ const arrApart = {
364
423
  },
365
424
  unifi: {
366
425
  Selektor: 'unifi.*.state',
426
+ timeSelector: '.uptime',
367
427
  adapterID: 'unifi',
368
428
  adapter: 'Unifi',
369
429
  battery: 'none',
@@ -374,6 +434,7 @@ const arrApart = {
374
434
  },
375
435
  wled: {
376
436
  Selektor: 'wled.*._online',
437
+ timeSelector: '._online',
377
438
  adapterID: 'wled',
378
439
  adapter: 'WLED',
379
440
  rssiState: '.wifi.rssi',
@@ -384,6 +445,7 @@ const arrApart = {
384
445
  },
385
446
  yeelight: {
386
447
  Selektor: 'yeelight-2.*.connect',
448
+ timeSelector: '.connect',
387
449
  adapterID: 'yeelight',
388
450
  adapter: 'Yeelight',
389
451
  battery: 'none',
@@ -392,6 +454,7 @@ const arrApart = {
392
454
  },
393
455
  zigbee: {
394
456
  Selektor: 'zigbee.*.link_quality',
457
+ timeSelector: '.link_quality',
395
458
  adapterID: 'zigbee',
396
459
  adapter: 'Zigbee',
397
460
  battery: '.battery',
@@ -401,6 +464,7 @@ const arrApart = {
401
464
  },
402
465
  zigbee2MQTT: {
403
466
  Selektor: 'zigbee2mqtt.*.link_quality',
467
+ timeSelector: '.link_quality',
404
468
  adapterID: 'zigbee2MQTT',
405
469
  adapter: 'Zigbee2MQTT',
406
470
  battery: '.battery',
@@ -410,6 +474,7 @@ const arrApart = {
410
474
  },
411
475
  zwave: {
412
476
  Selektor: 'zwave2.*.ready',
477
+ timeSelector: '.ready',
413
478
  adapterID: 'zwave',
414
479
  adapter: 'Z-wave 2',
415
480
  battery: '.Battery.level',
package/main.js CHANGED
@@ -250,6 +250,7 @@ class DeviceWatcher extends utils.Adapter {
250
250
  let oldLowBatState;
251
251
  let contactData;
252
252
  let oldStatus;
253
+ let isLowBatValue;
253
254
 
254
255
  for (const device of this.listAllDevicesRaw) {
255
256
  // On statechange update available datapoint
@@ -274,7 +275,12 @@ class DeviceWatcher extends utils.Adapter {
274
275
 
275
276
  device.Battery = batteryData[0];
276
277
  device.BatteryRaw = batteryData[2];
277
- device.LowBat = await this.setLowbatIndicator(state.val, undefined, device.LowBatDP);
278
+ if (device.LowBatDP !== 'none') {
279
+ isLowBatValue = await this.getInitValue(device.LowBatDP);
280
+ } else {
281
+ isLowBatValue = undefined;
282
+ }
283
+ device.LowBat = await this.setLowbatIndicator(state.val, isLowBatValue, device.faultReport, device.adapterID);
278
284
 
279
285
  if (device.LowBat && oldLowBatState !== device.LowBat) {
280
286
  if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
@@ -290,7 +296,7 @@ class DeviceWatcher extends utils.Adapter {
290
296
  batteryData = await this.getBatteryData(device.BatteryRaw, state.val, device.adapterID);
291
297
  device.Battery = batteryData[0];
292
298
  device.BatteryRaw = batteryData[2];
293
- device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, state.val, device.LowBatDP);
299
+ device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, state.val, device.faultReport, device.adapterID);
294
300
 
295
301
  if (device.LowBat && oldLowBatState !== device.LowBat) {
296
302
  if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
@@ -298,16 +304,30 @@ class DeviceWatcher extends utils.Adapter {
298
304
  }
299
305
  }
300
306
  }
307
+ break;
301
308
 
309
+ case device.faultReportDP:
310
+ if (device.isBatteryDevice) {
311
+ oldLowBatState = device.LowBat;
312
+ batteryData = await this.getBatteryData(device.BatteryRaw, oldLowBatState, device.adapterID);
313
+
314
+ device.Battery = batteryData[0];
315
+ device.BatteryRaw = batteryData[2];
316
+ device.LowBat = await this.setLowbatIndicator(device.BatteryRaw, undefined, state.val, device.adapterID);
317
+
318
+ if (device.LowBat && oldLowBatState !== device.LowBat) {
319
+ if (this.config.checkSendBatteryMsg && !this.blacklistNotify.includes(device.Path)) {
320
+ await this.sendLowBatNoticiation(device.Device, device.Adapter, device.Battery);
321
+ }
322
+ }
323
+ }
302
324
  break;
325
+
303
326
  case device.UnreachDP:
304
- case device.DeviceStateSelectorDP:
305
- case device.rssiPeerSelectorDP:
306
- case device.Path:
307
327
  oldStatus = device.Status;
308
328
  device.UnreachState = await this.getInitValue(device.UnreachDP);
309
329
  contactData = await this.getOnlineState(
310
- device.Path,
330
+ device.timeSelector,
311
331
  device.adapterID,
312
332
  device.UnreachDP,
313
333
  device.SignalStrength,
@@ -698,42 +718,49 @@ class DeviceWatcher extends utils.Adapter {
698
718
  let batteryHealth;
699
719
  let isBatteryDevice;
700
720
 
701
- if (deviceBatteryState === undefined) {
702
- if (deviceLowBatState !== undefined) {
703
- switch (deviceLowBatState) {
704
- case 'none':
705
- break;
706
- default:
707
- if (deviceLowBatState !== true || deviceLowBatState === 'NORMAL' || deviceLowBatState === 1) {
721
+ switch (adapterID) {
722
+ case 'hmrpc':
723
+ if (deviceBatteryState === undefined) {
724
+ if (deviceLowBatState !== undefined) {
725
+ if (deviceLowBatState !== 1) {
708
726
  batteryHealth = 'ok';
709
- isBatteryDevice = true;
710
727
  } else {
711
728
  batteryHealth = 'low';
712
- isBatteryDevice = true;
713
729
  }
714
- break;
715
- }
716
- } else {
717
- batteryHealth = ' - ';
718
- }
719
- } else {
720
- switch (adapterID) {
721
- case 'hmrpc':
722
- if (deviceBatteryState === 0 || (deviceBatteryState && deviceBatteryState >= 6)) {
730
+ isBatteryDevice = true;
731
+ } else {
732
+ batteryHealth = ' - ';
733
+ }
734
+ } else {
735
+ if (deviceBatteryState === 0 || deviceBatteryState >= 6) {
723
736
  batteryHealth = ' - ';
724
737
  } else {
725
738
  batteryHealth = deviceBatteryState + 'V';
726
739
  batteryHealthRaw = deviceBatteryState;
727
740
  isBatteryDevice = true;
728
741
  }
729
- break;
730
- default:
742
+ }
743
+ break;
744
+ default:
745
+ if (deviceBatteryState === undefined) {
746
+ if (deviceLowBatState !== undefined) {
747
+ if (deviceLowBatState !== true || deviceLowBatState === 'NORMAL' || deviceLowBatState === 1) {
748
+ batteryHealth = 'ok';
749
+ } else {
750
+ batteryHealth = 'low';
751
+ }
752
+ isBatteryDevice = true;
753
+ } else {
754
+ batteryHealth = ' - ';
755
+ }
756
+ } else {
731
757
  batteryHealth = deviceBatteryState + '%';
732
758
  batteryHealthRaw = deviceBatteryState;
733
759
  isBatteryDevice = true;
734
- break;
735
- }
760
+ }
761
+ break;
736
762
  }
763
+
737
764
  return [batteryHealth, isBatteryDevice, batteryHealthRaw];
738
765
  }
739
766
 
@@ -741,34 +768,43 @@ class DeviceWatcher extends utils.Adapter {
741
768
  * set low bat indicator
742
769
  * @param {object} deviceBatteryState
743
770
  * @param {object} deviceLowBatState
744
- * @param {object} isLowBatDP
771
+ * @param {object} faultReportState
772
+ * @param {object} adapterID
745
773
  */
746
774
 
747
- async setLowbatIndicator(deviceBatteryState, deviceLowBatState, isLowBatDP) {
775
+ async setLowbatIndicator(deviceBatteryState, deviceLowBatState, faultReportState, adapterID) {
748
776
  let lowBatIndicator = false;
749
777
  /*=============================================
750
778
  = Set Lowbat indicator =
751
779
  =============================================*/
752
- if (deviceLowBatState !== null && isLowBatDP !== 'none') {
753
- switch (typeof deviceLowBatState) {
754
- case 'number':
755
- if (deviceLowBatState === 0) {
780
+ if (deviceLowBatState !== undefined || faultReportState !== undefined) {
781
+ switch (adapterID) {
782
+ case 'hmrpc':
783
+ if (deviceLowBatState === 1 || faultReportState === 6) {
756
784
  lowBatIndicator = true;
757
785
  }
758
786
  break;
787
+ default:
788
+ switch (typeof deviceLowBatState) {
789
+ case 'number':
790
+ if (deviceLowBatState === 0) {
791
+ lowBatIndicator = true;
792
+ }
793
+ break;
759
794
 
760
- case 'string':
761
- if (deviceLowBatState !== 'NORMAL') {
762
- // Tado devices
763
- lowBatIndicator = true;
764
- }
765
- break;
795
+ case 'string':
796
+ if (deviceLowBatState !== 'NORMAL') {
797
+ // Tado devices
798
+ lowBatIndicator = true;
799
+ }
800
+ break;
766
801
 
767
- case 'boolean':
768
- if (deviceLowBatState) {
769
- lowBatIndicator = true;
802
+ case 'boolean':
803
+ if (deviceLowBatState) {
804
+ lowBatIndicator = true;
805
+ }
806
+ break;
770
807
  }
771
- break;
772
808
  }
773
809
  } else {
774
810
  if (deviceBatteryState < this.config.minWarnBatterie) {
@@ -798,7 +834,7 @@ class DeviceWatcher extends utils.Adapter {
798
834
 
799
835
  /**
800
836
  * get online state and time
801
- * @param {object} id - ID
837
+ * @param {object} timeSelector - device Timeselector
802
838
  * @param {string} adapterID - ID of Adapter
803
839
  * @param {string} unreachDP - Datapoint of Unreach
804
840
  * @param {object} linkQuality - Linkquality Value
@@ -806,33 +842,33 @@ class DeviceWatcher extends utils.Adapter {
806
842
  * @param {string} deviceStateSelectorDP - Selector of device state (like .state)
807
843
  * @param {string} rssiPeerSelectorDP - HM RSSI Peer Datapoint
808
844
  */
809
- async getOnlineState(id, adapterID, unreachDP, linkQuality, deviceUnreachState, deviceStateSelectorDP, rssiPeerSelectorDP) {
845
+ async getOnlineState(timeSelector, adapterID, unreachDP, linkQuality, deviceUnreachState, deviceStateSelectorDP, rssiPeerSelectorDP) {
810
846
  let lastContactString;
811
847
  let deviceState = 'Online';
812
848
 
813
849
  try {
814
- const deviceMainSelector = await this.getForeignStateAsync(id);
815
- if (deviceMainSelector) {
850
+ const deviceTimeSelector = await this.getForeignStateAsync(timeSelector);
851
+ if (deviceTimeSelector) {
816
852
  const deviceUnreachSelector = await this.getForeignStateAsync(unreachDP);
817
853
  const deviceStateSelector = await this.getForeignStateAsync(deviceStateSelectorDP); // for hmrpc devices
818
854
  const rssiPeerSelector = await this.getForeignStateAsync(rssiPeerSelectorDP);
819
- const lastContact = await this.getTimestamp(deviceMainSelector.ts);
820
- const lastDeviceUnreachStateChange = deviceUnreachSelector != undefined ? await this.getTimestamp(deviceUnreachSelector.lc) : await this.getTimestamp(deviceMainSelector.ts);
855
+ const lastContact = await this.getTimestamp(deviceTimeSelector.ts);
856
+ const lastDeviceUnreachStateChange = deviceUnreachSelector != undefined ? await this.getTimestamp(deviceUnreachSelector.lc) : await this.getTimestamp(timeSelector.ts);
821
857
  // If there is no contact since user sets minutes add device in offline list
822
858
  // calculate to days after 48 hours
823
859
  switch (unreachDP) {
824
860
  case 'none':
825
- lastContactString = await this.getLastContact(deviceMainSelector.ts);
861
+ lastContactString = await this.getLastContact(deviceTimeSelector.ts);
826
862
  break;
827
863
 
828
864
  default:
829
865
  //State changed
830
866
  if (adapterID === 'hmrpc') {
831
867
  if (linkQuality !== ' - ') {
832
- if (deviceUnreachState) {
833
- lastContactString = await this.getLastContact(deviceMainSelector.lc);
868
+ if (deviceUnreachState === 1) {
869
+ lastContactString = await this.getLastContact(deviceTimeSelector.lc);
834
870
  } else {
835
- lastContactString = await this.getLastContact(deviceMainSelector.ts);
871
+ lastContactString = await this.getLastContact(deviceTimeSelector.ts);
836
872
  }
837
873
  } else {
838
874
  if (deviceStateSelector) {
@@ -844,10 +880,10 @@ class DeviceWatcher extends utils.Adapter {
844
880
  }
845
881
  }
846
882
  } else {
847
- if (!deviceUnreachState) {
848
- lastContactString = await this.getLastContact(deviceMainSelector.lc);
883
+ if (deviceUnreachState === 0) {
884
+ lastContactString = await this.getLastContact(deviceTimeSelector.lc);
849
885
  } else {
850
- lastContactString = await this.getLastContact(deviceMainSelector.ts);
886
+ lastContactString = await this.getLastContact(deviceTimeSelector.ts);
851
887
  }
852
888
  break;
853
889
  }
@@ -859,6 +895,16 @@ class DeviceWatcher extends utils.Adapter {
859
895
  if (this.maxMinutes !== undefined) {
860
896
  switch (adapterID) {
861
897
  case 'hmrpc':
898
+ if (this.maxMinutes[adapterID] <= 0) {
899
+ if (deviceUnreachState === 1) {
900
+ deviceState = 'Offline'; //set online state to offline
901
+ linkQuality = '0%'; // set linkQuality to nothing
902
+ }
903
+ } else if (lastDeviceUnreachStateChange > this.maxMinutes[adapterID] && deviceUnreachState === 1) {
904
+ deviceState = 'Offline'; //set online state to offline
905
+ linkQuality = '0%'; // set linkQuality to nothing
906
+ }
907
+ break;
862
908
  case 'hmiP':
863
909
  case 'maxcube':
864
910
  if (this.maxMinutes[adapterID] <= 0) {
@@ -953,7 +999,7 @@ class DeviceWatcher extends utils.Adapter {
953
999
  const oldContactState = device.Status;
954
1000
  device.UnreachState = await this.getInitValue(device.UnreachDP);
955
1001
  const contactData = await this.getOnlineState(
956
- device.Path,
1002
+ device.timeSelector,
957
1003
  device.adapterID,
958
1004
  device.UnreachDP,
959
1005
  device.SignalStrength,
@@ -1032,49 +1078,65 @@ class DeviceWatcher extends utils.Adapter {
1032
1078
  =============================================*/
1033
1079
  let deviceBatteryStateDP;
1034
1080
  let deviceBatteryState;
1035
- // Get battery states
1036
- switch (adapterID) {
1037
- case 'hueExt':
1038
- case 'mihomeVacuum':
1039
- case 'mqttNuki':
1040
- deviceBatteryStateDP = shortCurrDeviceString + this.arrDev[i].battery;
1041
- deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1042
- if (deviceBatteryState === undefined) {
1043
- deviceBatteryStateDP = shortCurrDeviceString + this.arrDev[i].battery2;
1081
+ let batteryHealth;
1082
+ let batteryHealthRaw;
1083
+ let lowBatIndicator;
1084
+ let isBatteryDevice;
1085
+ let isLowBatDP;
1086
+ let faultReportingDP;
1087
+ let faultReportingState;
1088
+
1089
+ const deviceChargerStateDP = currDeviceString + this.arrDev[i].charger;
1090
+ const deviceChargerState = await this.getInitValue(deviceChargerStateDP);
1091
+
1092
+ if (deviceChargerState === undefined || deviceChargerState === false) {
1093
+ // Get battery states
1094
+ switch (adapterID) {
1095
+ case 'hueExt':
1096
+ case 'mihomeVacuum':
1097
+ case 'mqttNuki':
1098
+ deviceBatteryStateDP = shortCurrDeviceString + this.arrDev[i].battery;
1044
1099
  deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1045
- }
1046
- break;
1047
- default:
1048
- deviceBatteryStateDP = currDeviceString + this.arrDev[i].battery;
1049
- deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1050
- if (deviceBatteryState === undefined) {
1051
- deviceBatteryStateDP = currDeviceString + this.arrDev[i].battery2;
1100
+ if (deviceBatteryState === undefined) {
1101
+ deviceBatteryStateDP = shortCurrDeviceString + this.arrDev[i].battery2;
1102
+ deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1103
+ }
1104
+ break;
1105
+ default:
1106
+ deviceBatteryStateDP = currDeviceString + this.arrDev[i].battery;
1052
1107
  deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1053
- }
1054
- break;
1055
- }
1108
+ if (deviceBatteryState === undefined) {
1109
+ deviceBatteryStateDP = currDeviceString + this.arrDev[i].battery2;
1110
+ deviceBatteryState = await this.getInitValue(deviceBatteryStateDP);
1111
+ }
1112
+ break;
1113
+ }
1056
1114
 
1057
- // Get low bat states
1058
- let isLowBatDP = currDeviceString + this.arrDev[i].isLowBat;
1059
- let deviceLowBatState = await this.getInitValue(isLowBatDP);
1060
- if (deviceLowBatState === undefined) {
1061
- isLowBatDP = currDeviceString + this.arrDev[i].isLowBat2;
1062
- deviceLowBatState = await this.getInitValue(isLowBatDP);
1063
- }
1064
- if (deviceLowBatState === undefined) isLowBatDP = 'none';
1115
+ // Get low bat states
1116
+ isLowBatDP = currDeviceString + this.arrDev[i].isLowBat;
1117
+ let deviceLowBatState = await this.getInitValue(isLowBatDP);
1118
+ if (deviceLowBatState === undefined) {
1119
+ isLowBatDP = currDeviceString + this.arrDev[i].isLowBat2;
1120
+ deviceLowBatState = await this.getInitValue(isLowBatDP);
1121
+ }
1122
+ if (deviceLowBatState === undefined) isLowBatDP = 'none';
1065
1123
 
1066
- //subscribe to states
1067
- this.subscribeForeignStatesAsync(deviceBatteryStateDP);
1068
- this.subscribeForeignStatesAsync(isLowBatDP);
1124
+ faultReportingDP = shortCurrDeviceString + this.arrDev[i].faultReporting;
1125
+ faultReportingState = await this.getInitValue(faultReportingDP);
1069
1126
 
1070
- const batteryData = await this.getBatteryData(deviceBatteryState, deviceLowBatState, adapterID);
1071
- const batteryHealth = batteryData[0];
1072
- const batteryHealthRaw = batteryData[2];
1073
- const isBatteryDevice = batteryData[1];
1074
- let lowBatIndicator;
1127
+ //subscribe to states
1128
+ this.subscribeForeignStatesAsync(deviceBatteryStateDP);
1129
+ this.subscribeForeignStatesAsync(isLowBatDP);
1130
+ this.subscribeForeignStatesAsync(faultReportingDP);
1131
+
1132
+ const batteryData = await this.getBatteryData(deviceBatteryState, deviceLowBatState, adapterID);
1133
+ batteryHealth = batteryData[0];
1134
+ batteryHealthRaw = batteryData[2];
1135
+ isBatteryDevice = batteryData[1];
1075
1136
 
1076
- if (isBatteryDevice) {
1077
- lowBatIndicator = await this.setLowbatIndicator(deviceBatteryState, deviceLowBatState, isLowBatDP);
1137
+ if (isBatteryDevice) {
1138
+ lowBatIndicator = await this.setLowbatIndicator(deviceBatteryState, deviceLowBatState, faultReportingState, adapterID);
1139
+ }
1078
1140
  }
1079
1141
 
1080
1142
  /*=============================================
@@ -1083,6 +1145,7 @@ class DeviceWatcher extends utils.Adapter {
1083
1145
  let unreachDP = currDeviceString + this.arrDev[i].reach;
1084
1146
  const deviceStateSelectorDP = shortCurrDeviceString + this.arrDev[i].stateValue;
1085
1147
  const rssiPeerSelectorDP = currDeviceString + this.arrDev[i].rssiPeerState;
1148
+ const timeSelector = currDeviceString + this.arrDev[i].timeSelector;
1086
1149
 
1087
1150
  let deviceUnreachState = await this.getInitValue(unreachDP);
1088
1151
  if (deviceUnreachState === undefined) {
@@ -1091,12 +1154,12 @@ class DeviceWatcher extends utils.Adapter {
1091
1154
  }
1092
1155
 
1093
1156
  // subscribe to states
1094
- this.subscribeForeignStatesAsync(id);
1157
+ this.subscribeForeignStatesAsync(timeSelector);
1095
1158
  this.subscribeForeignStatesAsync(unreachDP);
1096
1159
  this.subscribeForeignStatesAsync(deviceStateSelectorDP);
1097
1160
  this.subscribeForeignStatesAsync(rssiPeerSelectorDP);
1098
1161
 
1099
- const onlineState = await this.getOnlineState(id, adapterID, unreachDP, linkQuality, deviceUnreachState, deviceStateSelectorDP, rssiPeerSelectorDP);
1162
+ const onlineState = await this.getOnlineState(timeSelector, adapterID, unreachDP, linkQuality, deviceUnreachState, deviceStateSelectorDP, rssiPeerSelectorDP);
1100
1163
  let deviceState;
1101
1164
  let lastContactString;
1102
1165
 
@@ -1135,12 +1198,15 @@ class DeviceWatcher extends utils.Adapter {
1135
1198
  Device: deviceName,
1136
1199
  adapterID: adapterID,
1137
1200
  Adapter: adapter,
1201
+ timeSelector: timeSelector,
1138
1202
  isBatteryDevice: isBatteryDevice,
1139
1203
  Battery: batteryHealth,
1140
1204
  BatteryRaw: batteryHealthRaw,
1141
1205
  batteryDP: deviceBatteryStateDP,
1142
1206
  LowBat: lowBatIndicator,
1143
1207
  LowBatDP: isLowBatDP,
1208
+ faultReport: faultReportingState,
1209
+ faultReportDP: faultReportingDP,
1144
1210
  SignalStrengthDP: deviceQualityDP,
1145
1211
  SignalStrength: linkQuality,
1146
1212
  UnreachState: deviceUnreachState,
@@ -1159,12 +1225,15 @@ class DeviceWatcher extends utils.Adapter {
1159
1225
  Device: deviceName,
1160
1226
  adapterID: adapterID,
1161
1227
  Adapter: adapter,
1228
+ timeSelector: timeSelector,
1162
1229
  isBatteryDevice: isBatteryDevice,
1163
1230
  Battery: batteryHealth,
1164
1231
  BatteryRaw: batteryHealthRaw,
1165
1232
  batteryDP: deviceBatteryStateDP,
1166
1233
  LowBat: lowBatIndicator,
1167
1234
  LowBatDP: isLowBatDP,
1235
+ faultReport: faultReportingState,
1236
+ faultReportDP: faultReportingDP,
1168
1237
  SignalStrengthDP: deviceQualityDP,
1169
1238
  SignalStrength: linkQuality,
1170
1239
  UnreachState: deviceUnreachState,
@@ -1263,7 +1332,7 @@ class DeviceWatcher extends utils.Adapter {
1263
1332
  }
1264
1333
 
1265
1334
  // Battery lists
1266
- if (device['isBatteryDevice']) {
1335
+ if (device.isBatteryDevice) {
1267
1336
  this.batteryPowered.push({
1268
1337
  Device: device.Device,
1269
1338
  Adapter: device.Adapter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.device-watcher",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Watchdog for devices",
5
5
  "author": {
6
6
  "name": "Christian Behrends",