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 +11 -1
- package/admin/jsonConfig.json +1 -1
- package/io-package.json +15 -15
- package/lib/arrApart.js +70 -5
- package/main.js +167 -98
- package/package.json +1 -1
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)
|
package/admin/jsonConfig.json
CHANGED
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "device-watcher",
|
|
4
|
-
"version": "2.3.
|
|
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":
|
|
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.*.
|
|
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: '.
|
|
118
|
-
isLowBat: '.
|
|
119
|
-
isLowBat2: '.
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
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
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
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
|
-
|
|
730
|
-
|
|
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
|
-
|
|
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}
|
|
771
|
+
* @param {object} faultReportState
|
|
772
|
+
* @param {object} adapterID
|
|
745
773
|
*/
|
|
746
774
|
|
|
747
|
-
async setLowbatIndicator(deviceBatteryState, deviceLowBatState,
|
|
775
|
+
async setLowbatIndicator(deviceBatteryState, deviceLowBatState, faultReportState, adapterID) {
|
|
748
776
|
let lowBatIndicator = false;
|
|
749
777
|
/*=============================================
|
|
750
778
|
= Set Lowbat indicator =
|
|
751
779
|
=============================================*/
|
|
752
|
-
if (deviceLowBatState !==
|
|
753
|
-
switch (
|
|
754
|
-
case '
|
|
755
|
-
if (deviceLowBatState ===
|
|
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
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
795
|
+
case 'string':
|
|
796
|
+
if (deviceLowBatState !== 'NORMAL') {
|
|
797
|
+
// Tado devices
|
|
798
|
+
lowBatIndicator = true;
|
|
799
|
+
}
|
|
800
|
+
break;
|
|
766
801
|
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
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}
|
|
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(
|
|
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
|
|
815
|
-
if (
|
|
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(
|
|
820
|
-
const lastDeviceUnreachStateChange = deviceUnreachSelector != undefined ? await this.getTimestamp(deviceUnreachSelector.lc) : await this.getTimestamp(
|
|
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(
|
|
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(
|
|
868
|
+
if (deviceUnreachState === 1) {
|
|
869
|
+
lastContactString = await this.getLastContact(deviceTimeSelector.lc);
|
|
834
870
|
} else {
|
|
835
|
-
lastContactString = await this.getLastContact(
|
|
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 (
|
|
848
|
-
lastContactString = await this.getLastContact(
|
|
883
|
+
if (deviceUnreachState === 0) {
|
|
884
|
+
lastContactString = await this.getLastContact(deviceTimeSelector.lc);
|
|
849
885
|
} else {
|
|
850
|
-
lastContactString = await this.getLastContact(
|
|
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.
|
|
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
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
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
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
deviceBatteryStateDP = currDeviceString + this.arrDev[i].
|
|
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
|
-
|
|
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
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
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
|
-
|
|
1067
|
-
|
|
1068
|
-
this.subscribeForeignStatesAsync(isLowBatDP);
|
|
1124
|
+
faultReportingDP = shortCurrDeviceString + this.arrDev[i].faultReporting;
|
|
1125
|
+
faultReportingState = await this.getInitValue(faultReportingDP);
|
|
1069
1126
|
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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
|
-
|
|
1077
|
-
|
|
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(
|
|
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(
|
|
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
|
|
1335
|
+
if (device.isBatteryDevice) {
|
|
1267
1336
|
this.batteryPowered.push({
|
|
1268
1337
|
Device: device.Device,
|
|
1269
1338
|
Adapter: device.Adapter,
|