iobroker.zigbee2mqtt 2.12.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -32,6 +32,13 @@ This adapter allows to control the data points of the devices of a Zigbee2MQTT i
32
32
  Placeholder for the next version (at the beginning of the line):
33
33
  ### **WORK IN PROGRESS**
34
34
  -->
35
+ ### 2.13.0 (2023-09-07)
36
+
37
+ - (o0shojo0o) added state `info.coordinator_check` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))
38
+ - (o0shojo0o) added state `info.missing_routers` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))
39
+ - (o0shojo0o) added state `info.missing_routers_count` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))
40
+ - (o0shojo0o) added option `Automatic check for missing routers in the coordinator memory` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))
41
+
35
42
  ### 2.12.0 (2023-09-05)
36
43
 
37
44
  - (o0shojo0o) added option `Size of the object icons in pixels`
@@ -38,5 +38,9 @@
38
38
  "State configurations": "State konfigurationen",
39
39
  "Generate simple 'Press' and 'Release' states": "Generieren einfache „Press“ und „Release“ States",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Wenn diese Option aktiviert ist, werden die Zustände „Press“ und „Release“ kombiniert und der Datenpunkt „Press“ bleibt true, bis das Ereignis „Release“ eintrifft.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Wird die Größe später auf einen größeren Wert geändert, müssen die bereits heruntergeladenen Bilder gelöscht werden. <br> Bitte beachten Sie, dass Icons im Objekt gespeichert werden und daher nicht unnötig groß sein sollten!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Wird die Größe später auf einen größeren Wert geändert, müssen die bereits heruntergeladenen Bilder gelöscht werden. <br> Bitte beachten Sie, dass Icons im Objekt gespeichert werden und daher nicht unnötig groß sein sollten!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Automatische Prüfung auf fehlende Router im Speicher des Koordinators.",
43
+ "With which log level should a negative search be logged?": "Mit welcher Loglevel soll ein negatives Suchergebnis protokolliert werden?",
44
+ "Time of the automatic check": "Zeitpunkt der automatischen Prüfung",
45
+ "More information": "Mehr Informationen"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "State configurations",
39
39
  "Generate simple 'Press' and 'Release' states": "Generate simple 'Press' and 'Release' states",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Automatic check for missing routers in the coordinator memory.",
43
+ "With which log level should a negative search be logged?": "With which log level should a negative search be logged?",
44
+ "Time of the automatic check": "Time of the automatic check",
45
+ "More information": "More information"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Configuraciones de estado",
39
39
  "Generate simple 'Press' and 'Release' states": "Genere estados simples de \"Presionar\" y \"Liberar\"",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Cuando está habilitado, los estados \"Presionar\" y \"Liberar\" se combinan y el punto de datos \"Presionar\" permanece verdadero hasta que llega el evento \"Liberar\".",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Si posteriormente se cambia el tamaño a un valor mayor, se deben eliminar las imágenes ya descargadas. <br> ¡Tenga en cuenta que los iconos se almacenan en el objeto y, por lo tanto, no deben ser innecesariamente grandes!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Si posteriormente se cambia el tamaño a un valor mayor, se deben eliminar las imágenes ya descargadas. <br> ¡Tenga en cuenta que los iconos se almacenan en el objeto y, por lo tanto, no deben ser innecesariamente grandes!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Comprobación automática de enrutadores faltantes en la memoria del coordinador.",
43
+ "With which log level should a negative search be logged?": "¿Con qué nivel de registro se debe registrar una búsqueda negativa?",
44
+ "Time of the automatic check": "Hora del control automático",
45
+ "More information": "Más información"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Configurations d'état",
39
39
  "Generate simple 'Press' and 'Release' states": "Générer des états simples « Presser » et « Relâcher »",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Lorsqu'ils sont activés, les états « Press » et « Release » sont combinés et le point de données « Press » reste vrai jusqu'à ce que l'événement « Release » arrive.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Si la taille est ultérieurement modifiée pour une valeur plus grande, les images déjà téléchargées doivent être supprimées. <br> Veuillez noter que les icônes sont stockées dans l'objet et ne doivent donc pas être inutilement grandes !"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Si la taille est ultérieurement modifiée pour une valeur plus grande, les images déjà téléchargées doivent être supprimées. <br> Veuillez noter que les icônes sont stockées dans l'objet et ne doivent donc pas être inutilement grandes !",
42
+ "Automatic check for missing routers in the coordinator memory.": "Vérification automatique des routeurs manquants dans la mémoire du coordinateur.",
43
+ "With which log level should a negative search be logged?": "Avec quel niveau de journalisation une recherche négative doit-elle être enregistrée ?",
44
+ "Time of the automatic check": "Heure du contrôle automatique",
45
+ "More information": "Plus d'information"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Configurazioni di stato",
39
39
  "Generate simple 'Press' and 'Release' states": "Genera semplici stati \"Stampa\" e \"Rilascio\".",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Se abilitati, gli stati \"Press\" e \"Rilascio\" vengono combinati e il punto dati \"Press\" rimane vero fino all'arrivo dell'evento \"Rilascio\".",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Se la dimensione viene successivamente modificata con un valore maggiore, le immagini già scaricate dovranno essere cancellate. <br> Tieni presente che le icone sono memorizzate nell'oggetto e quindi non dovrebbero essere inutilmente grandi!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Se la dimensione viene successivamente modificata con un valore maggiore, le immagini già scaricate dovranno essere cancellate. <br> Tieni presente che le icone sono memorizzate nell'oggetto e quindi non dovrebbero essere inutilmente grandi!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Controllo automatico della presenza di router mancanti nella memoria del coordinatore.",
43
+ "With which log level should a negative search be logged?": "Con quale livello di registro deve essere registrata una ricerca negativa?",
44
+ "Time of the automatic check": "Orario del controllo automatico",
45
+ "More information": "Maggiori informazioni"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Staat configuraties",
39
39
  "Generate simple 'Press' and 'Release' states": "Genereer eenvoudige 'Druk'- en 'loslaat'-statussen",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Indien ingeschakeld, worden de statussen 'Press' en 'Release' gecombineerd en blijft het datapunt 'Press' waar totdat de gebeurtenis 'Release' arriveert.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Als de grootte later wordt gewijzigd naar een grotere waarde, moeten de reeds gedownloade afbeeldingen worden verwijderd. <br> Let op: iconen worden in het object opgeslagen en mogen dus niet onnodig groot zijn!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Als de grootte later wordt gewijzigd naar een grotere waarde, moeten de reeds gedownloade afbeeldingen worden verwijderd. <br> Let op: iconen worden in het object opgeslagen en mogen dus niet onnodig groot zijn!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Automatische controle op ontbrekende routers in het coördinatorgeheugen.",
43
+ "With which log level should a negative search be logged?": "Met welk logniveau moet een negatieve zoekopdracht worden geregistreerd?",
44
+ "Time of the automatic check": "Tijdstip van de automatische controle",
45
+ "More information": "Meer informatie"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Konfiguracje stanów",
39
39
  "Generate simple 'Press' and 'Release' states": "Generuj proste stany „Naciśnij” i „Zwolnij”.",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Po włączeniu stany „Naciśnij” i „Zwolnij” są łączone, a punkt danych „Naciśnij” pozostaje prawdziwy do momentu pojawienia się zdarzenia „Zwolnij”.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Jeśli rozmiar zostanie później zmieniony na większy, już pobrane obrazy muszą zostać usunięte. <br> Należy pamiętać, że ikony są przechowywane w obiekcie i dlatego nie powinny być niepotrzebnie duże!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Jeśli rozmiar zostanie później zmieniony na większy, już pobrane obrazy muszą zostać usunięte. <br> Należy pamiętać, że ikony są przechowywane w obiekcie i dlatego nie powinny być niepotrzebnie duże!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Automatyczne sprawdzanie brakujących routerów w pamięci koordynatora.",
43
+ "With which log level should a negative search be logged?": "Na jakim poziomie rejestrowania należy rejestrować wyszukiwanie wykluczające?",
44
+ "Time of the automatic check": "Czas automatycznego sprawdzenia",
45
+ "More information": "Więcej informacji"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "configurações de estado",
39
39
  "Generate simple 'Press' and 'Release' states": "Gere estados simples de 'Pressionar' e 'Liberar'",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Quando ativado, os estados 'Press' e 'Release' são combinados e o ponto de dados 'Press' permanece verdadeiro até que o evento 'Release' chegue.",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Se o tamanho for alterado posteriormente para um valor maior, as imagens já baixadas deverão ser excluídas. <br> Observe que os ícones são armazenados no objeto e, portanto, não devem ser desnecessariamente grandes!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Se o tamanho for alterado posteriormente para um valor maior, as imagens já baixadas deverão ser excluídas. <br> Observe que os ícones são armazenados no objeto e, portanto, não devem ser desnecessariamente grandes!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Verificação automática de roteadores ausentes na memória do coordenador.",
43
+ "With which log level should a negative search be logged?": "Com qual nível de log uma pesquisa negativa deve ser registrada?",
44
+ "Time of the automatic check": "Hora da verificação automática",
45
+ "More information": "Mais Informações"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Конфигурации состояния",
39
39
  "Generate simple 'Press' and 'Release' states": "Создавайте простые состояния «Нажмите» и «Отпустите».",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Если этот параметр включен, состояния «Нажатие» и «Отпуск» объединяются, и точка данных «Нажатие» остается истинной до тех пор, пока не произойдет событие «Отпуск».",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Если размер позже будет изменен на большее значение, уже загруженные изображения необходимо удалить. <br> Обратите внимание, что значки хранятся в объекте и поэтому не должны быть излишне большими!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Если размер позже будет изменен на большее значение, уже загруженные изображения необходимо удалить. <br> Обратите внимание, что значки хранятся в объекте и поэтому не должны быть излишне большими!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Автоматическая проверка отсутствия роутеров в памяти координатора.",
43
+ "With which log level should a negative search be logged?": "На каком уровне журнала следует регистрировать отрицательный поиск?",
44
+ "Time of the automatic check": "Время автоматической проверки",
45
+ "More information": "Больше информации"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "Конфігурації стану",
39
39
  "Generate simple 'Press' and 'Release' states": "Створення простих станів «Натиснути» та «Випустити».",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "Якщо ввімкнено, стани «Натиснути» та «Випустити» поєднуються, а точка даних «Натиснути» залишається істинною, доки не надійде подія «Випуск».",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Якщо пізніше розмір буде змінено на більше, уже завантажені зображення необхідно видалити. <br> Зверніть увагу, що піктограми зберігаються в об'єкті, тому вони не повинні бути надмірно великими!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "Якщо пізніше розмір буде змінено на більше, уже завантажені зображення необхідно видалити. <br> Зверніть увагу, що піктограми зберігаються в об'єкті, тому вони не повинні бути надмірно великими!",
42
+ "Automatic check for missing routers in the coordinator memory.": "Автоматична перевірка відсутності роутерів в пам'яті координатора.",
43
+ "With which log level should a negative search be logged?": "На якому рівні журналу слід реєструвати негативний пошук?",
44
+ "Time of the automatic check": "Час автоматичної перевірки",
45
+ "More information": "Більше інформації"
42
46
  }
@@ -38,5 +38,9 @@
38
38
  "State configurations": "状态配置",
39
39
  "Generate simple 'Press' and 'Release' states": "生成简单的“按下”和“释放”状态",
40
40
  "When enabled, the 'Press' and 'Release' states are combined and the 'Press' data point remains true until the 'Release' event arrives.": "启用后,“按下”和“释放”状态将组合在一起,并且“按下”数据点保持为真,直到“释放”事件到达。",
41
- "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "如果稍后将大小更改为更大的值,则必须删除已下载的图像。 <br> 请注意,图标存储在对象中,因此不应过大!"
41
+ "If the size is later changed to a larger value, the images already downloaded must be deleted. <br> Please note that icons are stored in the object and should therefore not be unnecessarily large!": "如果稍后将大小更改为更大的值,则必须删除已下载的图像。 <br> 请注意,图标存储在对象中,因此不应过大!",
42
+ "Automatic check for missing routers in the coordinator memory.": "自动检查协调器内存中丢失的路由器。",
43
+ "With which log level should a negative search be logged?": "应该使用哪个日志级别来记录负面搜索?",
44
+ "Time of the automatic check": "自动检查时间",
45
+ "More information": "更多信息"
42
46
  }
@@ -244,6 +244,61 @@
244
244
  "size": 2,
245
245
  "newLine": true
246
246
  },
247
+ "coordinatorCheck": {
248
+ "type": "checkbox",
249
+ "label": "Automatic check for missing routers in the coordinator memory.",
250
+ "help": "More information",
251
+ "helpLink": "https://www.zigbee2mqtt.io/guide/usage/mqtt_topics_and_messages.html#zigbee2mqtt-bridge-request-coordinator-check",
252
+ "newLine": true
253
+ },
254
+ "coordinatorCheckLogLvl": {
255
+ "type": "select",
256
+ "sm": 3,
257
+ "label": "With which log level should a negative search be logged?",
258
+ "options": [
259
+ {
260
+ "label": {
261
+ "en": "Debug"
262
+ },
263
+ "value": "debug"
264
+ },
265
+ {
266
+ "label": {
267
+ "en": "Info"
268
+ },
269
+ "value": "info"
270
+ },
271
+ {
272
+ "label": {
273
+ "en": "Warning"
274
+ },
275
+ "value": "warn"
276
+ },
277
+ {
278
+ "label": {
279
+ "en": "Error"
280
+ },
281
+ "value": "error"
282
+ }
283
+ ],
284
+ "newLine": true,
285
+ "hidden": "data.coordinatorCheck != true"
286
+ },
287
+ "coordinatorCheckCron": {
288
+ "type": "cron",
289
+ "label": "Time of the automatic check",
290
+ "help": "Default: 0 3 * * * (At 03:00 every day)",
291
+ "simple": true,
292
+ "newLine": true,
293
+ "sm": 3,
294
+ "hidden": "data.coordinatorCheck != true"
295
+ },
296
+ "spacer04": {
297
+ "type": "staticText",
298
+ "text": "",
299
+ "newLine": true,
300
+ "hidden": "data.coordinatorCheck != true"
301
+ },
247
302
  "proxyZ2MLogs": {
248
303
  "type": "checkbox",
249
304
  "label": "Proxy Zigbee2MQTT logs to ioBroker logs",
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee2mqtt",
4
- "version": "2.12.0",
4
+ "version": "2.13.0",
5
5
  "news": {
6
+ "2.13.0": {
7
+ "en": "added state `info.coordinator_check` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))\nadded state `info.missing_routers` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))\nadded state `info.missing_routers_count` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))\nadded option `Automatic check for missing routers in the coordinator memory` ([#247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247))",
8
+ "de": "zusätzlich state info.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\nzusätzlich state info.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\nzusätzlich state info.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\nzusätzliche Option `Automatische Überprüfung fehlender Router im Koordinatorspeicher` #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)",
9
+ "ru": "добавлено состояние info.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nдобавлено состояние info.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nдобавлено состояние info.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nдобавлена опция `Автоматическая проверка для пропавших маршрутизаторов в памяти координатора` #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)",
10
+ "pt": "adicionado state info.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nadicionado state info.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nadicionado state info.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nopção adicionada `Verificação automática de roteadores ausentes na memória do coordenador #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)",
11
+ "nl": "quality over Quantity (QoQ) Releases Vertaling:\nquality over Quantity (QoQ) Releases Vertaling:\nvoegde staatsinformatie toe, mislukt jroutmount 47, httub,com/0shojoo/ioBroker\nvoegde optie 'Automatische cheque toe voor vermiste routers in de coördinator geheugen 47) (htttub,com/0hojoo/ioBroker",
12
+ "fr": "infos supplémentaires.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\ninfos supplémentaires.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\ninfo état ajoutée.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\noption ajoutée `Automatic check for missing routers in the Coordinator memory` #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)",
13
+ "it": "#[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\n#[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\naggiunto stato info.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\nopzione aggiuntiva `Controllo automatico dei router mancanti nella memoria coordinatore` #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)",
14
+ "es": "añadido información del estado.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\nañadido información del estado.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nañadido información del estado.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nañadido la opción `Automatic check for missing routers in the coordinator memory` #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)",
15
+ "pl": "info.coordinator_check #247(https:/github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247) (ang.)\ninfo.missing_routers #247(https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247) (ang.)\ninfo.missing_routers_count #247 (https:/github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247) (ang.)\nautomatic check for missing routers in the coordinator memory` #247(https:/github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247) (ang.)",
16
+ "uk": "додано державну інформацію.coordinator_check #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nдодано державну інформацію.missing_routers #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/products/247)\nдодано державну інформацію.missing_routers_count #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)\nдодано варіант `Автоматичний чек для відсутніх маршрутизаторів в зоні пам'яті координатора #[247](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/247)",
17
+ "zh-cn": "补充国家:控制编号[247](http://github.com/oshojo0o/ioBroker.zigbee2mqt/issues/247)\n添加以下国家:F.missing_routers #[247](http://github.com/oshojo0o/ioBroker.zigbee2mqt/issues/247)\n增列国家:F.missing_routers_count.[247](http://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)\n添加了“协调员记忆中的缺失路线者进行现场检查”的备选办法[247](http://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/247)。"
18
+ },
6
19
  "2.12.0": {
7
20
  "en": "added option `Size of the object icons in pixels`",
8
21
  "de": "zusätzliche Option ` Größe der Objektsymbole in Pixeln`",
@@ -80,19 +93,6 @@
80
93
  "pl": "dodano obsługę stron internetowych (#191(https:/github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/191)\ndrobne rozwiązanie",
81
94
  "uk": "javaScript licenses API Веб-сайт Go1.13.8\nмаленькі кріплення",
82
95
  "zh-cn": "增加了WSS支助网络联系([第191](http://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/191)\n小型配件"
83
- },
84
- "2.7.5": {
85
- "en": "added state `last_seen` contains date/time of last Zigbee message ([#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/131))",
86
- "de": "add state last_seen enthält Datum/Zeit der letzten Zigbee-Nachricht [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/131)",
87
- "ru": "добавленное состояние last_seen содержит дату/время последнего сообщения Zigbee [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/131)",
88
- "pt": "adicionado estado last_seen contém data/hora da última mensagem Zigbee [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/131)",
89
- "nl": "vertaling:",
90
- "fr": "add state last_seen contains date/time of last Zigbee message [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/131)",
91
- "it": "aggiunto state last_seen contiene data/ora dell'ultimo messaggio Zigbee [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/131)",
92
- "es": "añadido state last_seen contiene fecha/hora del último mensaje de Zigbee [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/131)",
93
- "pl": "dodano stan ostatni_seen:/time of last Zigbee message #131(https:/github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/131)",
94
- "uk": "додано стан last_seen містить дату/час останнього повідомлення Zigbee [#131](https://github.com/o0shojo0o/ioBroker.zigbee2mqtt/issues/131)",
95
- "zh-cn": "添加国家:见最后Zigbee信息的日期/时间[第131号](http://github.com/o0shojo0o/ioBroker.zigbee2mqt/issues/131)"
96
96
  }
97
97
  },
98
98
  "messages": [
@@ -252,7 +252,10 @@
252
252
  "deviceIconsSize": 28,
253
253
  "simpleHoldReleaseState": true,
254
254
  "simpleMoveStopState": false,
255
- "simplePressReleaseState": false
255
+ "simplePressReleaseState": false,
256
+ "coordinatorCheck": false,
257
+ "coordinatorCheckLogLvl": "info",
258
+ "coordinatorCheckCron": "0 3 * * *"
256
259
  },
257
260
  "protectedNative": [
258
261
  "externalMqttServerPassword",
@@ -291,6 +294,7 @@
291
294
  "common": {
292
295
  "name": "Log changes as warnings for",
293
296
  "type": "string",
297
+ "role": "state",
294
298
  "read": true,
295
299
  "write": true,
296
300
  "def": ""
@@ -303,12 +307,52 @@
303
307
  "common": {
304
308
  "name": "Logs matching filters are ignored by the LogProxy",
305
309
  "type": "string",
310
+ "role": "state",
306
311
  "read": true,
307
312
  "write": true,
308
313
  "def": ""
309
314
  },
310
315
  "native": {}
311
316
  },
317
+ {
318
+ "_id": "info.coordinator_check",
319
+ "type": "state",
320
+ "common": {
321
+ "name": "It checks whether routers are missing from the coordinator's memory.",
322
+ "role": "button",
323
+ "write": true,
324
+ "read": true,
325
+ "type": "boolean",
326
+ "def": true
327
+ },
328
+ "native": {}
329
+ },
330
+ {
331
+ "_id": "info.missing_routers",
332
+ "type": "state",
333
+ "common": {
334
+ "name": "Routers missing in the coordinator's memory.",
335
+ "type": "json",
336
+ "role": "json",
337
+ "read": true,
338
+ "write": false,
339
+ "def": []
340
+ },
341
+ "native": {}
342
+ },
343
+ {
344
+ "_id": "info.missing_routers_count",
345
+ "type": "state",
346
+ "common": {
347
+ "name": "Count of missing routers missing in the coordinator's memory.",
348
+ "type": "number",
349
+ "role": "state",
350
+ "read": true,
351
+ "write": false,
352
+ "def": 0
353
+ },
354
+ "native": {}
355
+ },
312
356
  {
313
357
  "_id": "",
314
358
  "type": "meta",
@@ -282,7 +282,7 @@ class DeviceController {
282
282
  }
283
283
 
284
284
  for (const state of device.states) {
285
- if (!this.createCache[device.ieee_address][state.id] || this.createCache[device.ieee_address][state.id].name != state.name) {
285
+ if (state && (!this.createCache[device.ieee_address][state.id] || this.createCache[device.ieee_address][state.id].name != state.name)) {
286
286
  const iobState = {
287
287
  type: 'state',
288
288
  common: await this.copyAndCleanStateObj(state),
@@ -376,6 +376,21 @@ class DeviceController {
376
376
  getDeviceDescription(device) {
377
377
  return device.description ? device.description : '';
378
378
  }
379
+
380
+ processCoordinatorCheck(payload) {
381
+ if (payload && payload.data && payload.data.missing_routers) {
382
+ const missingRoutersCount = payload.data.missing_routers.length;
383
+ this.adapter.setState('info.missing_routers', JSON.stringify(payload.data.missing_routers), true);
384
+ this.adapter.setState('info.missing_routers_count', missingRoutersCount, true);
385
+
386
+ if (missingRoutersCount > 0) {
387
+ this.adapter.log[this.config.coordinatorCheckLogLvl](`Coordinator check: ${missingRoutersCount} missing routers were found, please check the data point 'zigbee2mqtt.x.info.missing_routers'!`);
388
+ }
389
+ else {
390
+ this.adapter.log.info('Coordinator check: No missing router was found.');
391
+ }
392
+ }
393
+ }
379
394
  }
380
395
 
381
396
  module.exports = {
package/lib/messages.js CHANGED
@@ -33,6 +33,9 @@ async function adapterInfo(config, log) {
33
33
  log.info(`|| Use Simple Hold/Release State: ${config.simpleHoldReleaseState ? 'yes' : 'no'}`);
34
34
  log.info(`|| Use Simple Move/Stop State: ${config.simpleMoveStopState ? 'yes' : 'no'}`);
35
35
  log.info(`|| Use Simple Press/Release State: ${config.simplePressReleaseState ? 'yes' : 'no'}`);
36
+ log.info(`|| Use Automatic Coordinator Check: ${config.coordinatorCheck ? 'yes' : 'no'}`);
37
+ log.info(`|| Coordinator Check Loglevel: ${config.coordinatorCheckLogLvl}`);
38
+ log.info(`|| Coordinator Check Cron : ${config.coordinatorCheckCron}`);
36
39
  log.info('==================================================================================');
37
40
  }
38
41
 
@@ -130,6 +130,7 @@ class StatesController {
130
130
  }
131
131
  this.adapter.subscribeStates('info.debugmessages');
132
132
  this.adapter.subscribeStates('info.logfilter');
133
+ this.adapter.subscribeStates('info.coordinator_check');
133
134
  }
134
135
 
135
136
  async setAllAvailableToFalse() {
@@ -13,6 +13,10 @@ class Z2mController {
13
13
  return;
14
14
  }
15
15
 
16
+ if (id.endsWith('info.coordinator_check')) {
17
+ return { topic: 'bridge/request/coordinator_check', payload: '' };
18
+ }
19
+
16
20
  const ieee_address = splitedID[2];
17
21
  const stateName = splitedID[3];
18
22
 
package/main.js CHANGED
@@ -8,6 +8,7 @@
8
8
  const core = require('@iobroker/adapter-core');
9
9
  const mqtt = require('mqtt');
10
10
  const utils = require('./lib/utils');
11
+ const schedule = require('node-schedule');
11
12
  const checkConfig = require('./lib/check').checkConfig;
12
13
  const adapterInfo = require('./lib/messages').adapterInfo;
13
14
  const zigbee2mqttInfo = require('./lib/messages').zigbee2mqttInfo;
@@ -64,6 +65,14 @@ class Zigbee2mqtt extends core.Adapter {
64
65
  // @ts-ignore
65
66
  logCustomizations.logfilter = String(logfilterState.val).split(';').filter(x => x); // filter removes empty strings here
66
67
  }
68
+
69
+ if (this.config.coordinatorCheck == true) {
70
+ try {
71
+ schedule.scheduleJob('coordinatorCheck', this.config.coordinatorCheckCron, () => this.onStateChange('manual_trigger._.info.coordinator_check', { ack: false }));
72
+ } catch (e) {
73
+ this.log.error(e);
74
+ }
75
+ }
67
76
  // MQTT
68
77
  if (['exmqtt', 'intmqtt'].includes(this.config.connectionType)) {
69
78
  // External MQTT-Server
@@ -127,18 +136,20 @@ class Zigbee2mqtt extends core.Adapter {
127
136
  websocketController = new WebsocketController(this);
128
137
  const wsClient = websocketController.initWsClient();
129
138
 
130
- wsClient.on('open', () => {
131
- this.log.info('Connect to Zigbee2MQTT over websocket connection.');
132
- });
139
+ if (wsClient) {
140
+ wsClient.on('open', () => {
141
+ this.log.info('Connect to Zigbee2MQTT over websocket connection.');
142
+ });
133
143
 
134
- wsClient.on('message', (message) => {
135
- this.messageParse(message);
136
- });
144
+ wsClient.on('message', (message) => {
145
+ this.messageParse(message);
146
+ });
137
147
 
138
- wsClient.on('close', async () => {
139
- this.setStateChanged('info.connection', false, true);
140
- await statesController.setAllAvailableToFalse();
141
- });
148
+ wsClient.on('close', async () => {
149
+ this.setStateChanged('info.connection', false, true);
150
+ await statesController.setAllAvailableToFalse();
151
+ });
152
+ }
142
153
  }
143
154
 
144
155
  async messageParse(message) {
@@ -180,6 +191,9 @@ class Zigbee2mqtt extends core.Adapter {
180
191
  break;
181
192
  case 'bridge/event':
182
193
  break;
194
+ case 'bridge/response/coordinator_check':
195
+ deviceController.processCoordinatorCheck(messageObj.payload);
196
+ break;
183
197
  case 'bridge/response/device/remove':
184
198
  break;
185
199
  case 'bridge/response/device/options':
@@ -307,12 +321,12 @@ class Zigbee2mqtt extends core.Adapter {
307
321
 
308
322
  async onStateChange(id, state) {
309
323
  if (state && state.ack == false) {
310
- if (id.includes('info.debugmessages')) {
324
+ if (id.endsWith('info.debugmessages')) {
311
325
  logCustomizations.debugDevices = state.val;
312
326
  this.setState(id, state.val, true);
313
327
  return;
314
328
  }
315
- if (id.includes('info.logfilter')) {
329
+ if (id.endsWith('info.logfilter')) {
316
330
  logCustomizations.logfilter = state.val.split(';').filter(x => x); // filter removes empty strings here
317
331
  this.setState(id, state.val, true);
318
332
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zigbee2mqtt",
3
- "version": "2.12.0",
3
+ "version": "2.13.0",
4
4
  "description": "Zigbee2MQTT adapter for ioBroker",
5
5
  "author": {
6
6
  "name": "Dennis Rathjen",
@@ -24,6 +24,7 @@
24
24
  "aedes-persistence-nedb": "^2.0.3",
25
25
  "mqtt": "^5.0.4",
26
26
  "net": "^1.0.2",
27
+ "node-schedule": "^2.1.1",
27
28
  "sharp": "^0.32.5",
28
29
  "ws": "^8.13.0"
29
30
  },
@@ -39,6 +40,7 @@
39
40
  "@types/chai-as-promised": "^7.1.5",
40
41
  "@types/mocha": "^10.0.1",
41
42
  "@types/node": "^20.5.7",
43
+ "@types/node-schedule": "^2.1.0",
42
44
  "@types/proxyquire": "^1.3.28",
43
45
  "@types/sinon": "^10.0.16",
44
46
  "@types/sinon-chai": "^3.2.9",