iobroker.zigbee 2.0.0 → 2.0.2

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/docs/de/readme.md CHANGED
@@ -6,9 +6,8 @@ Für den Koordinator (siehe oben) ist eine zusätzliche Hardware erforderlich, w
6
6
 
7
7
  - Aufsteckmodul für den RaspberryPi (wird nicht mehr verwendet da veraltet und keine Zigbee 3.0 Unterstützung)<br>
8
8
  - USB-Stick ähnliche Hardware
9
-
10
- ![](img/CC2531.png)
11
- ![](img/sku_429478_2.png)
9
+ - Netzwerk Koordinatoren
10
+
12
11
  ![](img/cc26x2r.PNG)
13
12
  ![](img/CC2591.png)
14
13
  ![](img/sonoff.png)
@@ -25,6 +24,7 @@ Zunehmend beliebt kommt der "Sonoff ZIGBEE 3.0 USB-STICK CC2652P" zum Einsatz:
25
24
 
26
25
  Die mit dem ZigBee-Netz verbundenen Geräte übermitteln dem Koordinator ihren Zustand und benachrichtigen über Ereignisse (Knopfdruck, Bewegungserkennung, Temperaturänderung, …). Diese Infos werden im Adapter unter den jeweiligen ioBroker-Objekten angezeigt und können so in ioBroker weiterverarbeitet werden. Außerdem ist es möglich Kommandos an das ZigBee-Gerät zu senden (Zustandsänderung Steckdosen und Lampen, Farb- und Helligkeitseinstellungen, …).
27
26
 
27
+ Eine weitergehende Aufstellung der verschiedenen Hardware-optionen für den Koordinator ist m [zigbee2mqtt.io Projekt](https://www.zigbee2mqtt.io/guide/adapters/) zu finden (Dokumentation ausschliesslich auf englisch)
28
28
 
29
29
  ## Die Software
30
30
 
@@ -45,14 +45,15 @@ Die Software wird unterteilt in "Konverter" und "Adapter".
45
45
  2. Über z.B. PuTTY mit RaspberryPi verbinden.<br>
46
46
  3. Eventuell vorhandene ZigBee-Backupdatei löschen. Andernfalls wird der ZigBee-Adapter in ioBroker nicht grün und im ioBroker Log steht, dass der Adapter falsch konfiguriert ist.<br>
47
47
  sudo rm /opt/iobroker/iobroker-data/zigbee_0/nvbackup.json<br>
48
- 4. Pfad des Koordinators ermitteln:
49
- `ls -la /dev/serial/by-id/`
48
+ 4. Pfad des Koordinators ermitteln. Auf Linux Systemen befindet sich dieser oft im Verzeichnis /dev/serial/by-id. Alternativ dazu werden /dev/ttyUSB*, /dev/ttyAM* (Linux), /dev/tty.usbserial-* (macOS) oder com* (windows) erwartet.<br>
49
+ Das folgende Beispiel zeigt eine Linux-Installation auf einem Raspberry PI. Der Befehl `ls -la /dev/serial/by-id/` erzeugt die im Bild erkennbare Ausgabe.
50
50
  ![](img/Bild2.png)
51
- 5. ioBroker -> ZigBee-Adapter installieren, hier als Beispiel die Version 1.8.10 <br> ![](img/Bild3.png) <br> Hiermit werden alle erforderlichen Softwareteile (Konverter und Adapter) installiert.
52
- 6. Adapter öffnen -> ![](img/Bild4.png) -> Zuvor ermittelten Pfad des Koordinators mit dem Zusatz /dev/serial/by-id/ eintragen:![](img/Bild5.jpg) <br> Es ist zu achten, dass am Ende kein leer Zeichen mitgenommen wird
53
- 7. Netzwerk-ID und Pan ID vergeben zur Unterscheidung von anderen ZigBee-Netzwerken in Funkreichweite, z.B. <br>
54
- ![](img/Bild6.png) ![](img/Bild7.png) <br> ![](img/Bild8.png) ![](img/Bild9.png)
55
- 8. Prüfen ob der Adapter in ioBroker grün wird. Sollzustand: <br> ![](img/Bild10.png) <br> Andernfalls ioBroker Log lesen und Fehlerursache suchen, im Forum stehen viele Lösungsansätze.
51
+ 6. ioBroker -> ZigBee-Adapter installieren, hier als Beispiel die Version 1.8.10 <br> ![](img/Bild3.png) <br> Hiermit werden alle erforderlichen Softwareteile (Konverter und Adapter) installiert.
52
+ 7. Konfiguration des Adapters öffnen. Das folgende Bild zeigt das Interface ab der Version 2.0.1.<br>![](img/Zigbee_config_de.png)<br>
53
+ 8. Port zum Koordinator eintragen. Im Fall von USB Koordinatoren ist das der zuvor ermittelte Device-Pfad. Im Fall von über das Netzwerk angesteuerten Koordinatoren muss an Stelle des Gerätepfades die Netzwerkaddresse samt port in der Form tcp://ip:port angegeben werden. Im Beispielbild ist als Port /dev/tty.usbserial-1410 eingetragen.<br> Es ist zu achten, dass am Ende kein Leerzeichen mit eingetragen wird.
54
+ 8. Netzwerk-ID und Pan ID vergeben zur Unterscheidung von anderen ZigBee-Netzwerken in Funkreichweite, z.B. Wichtig: Sollte hier als erweiterte PanID die StandardID DDDDDDDDDDDDDDDD (Pan ID 6757) eingetragen sein so sollte diese **unbedingt** angepasst werden<br>
55
+ 9. Geeigneten Zigbee-Kanal auswählen. Dabei ist zu beachten das Zigbee und 2.4GHz WLAN sich das gleiche Frequenzband teilen. Der optimale Kanal hängt also unter anderem auch von den in der Umgebung verwendeten WLan Kanälen ab. Dabei sind die Kanalbezeichnungen von Zigbee und WLan **nicht** identisch. Weiterhin ist es Sinnvoll sich bei der Auswahl auf die Zigbee Light Link Kanäle 11,15,20 und 25 zu beschränken. Sofern der Adapter erfolgreich gestartet wurde kann über die Konfiguration auch ein Scan der Netzwerkkanäle durchgeführt werden. Dabei ist zu beachten das dieses vor dem Anlernen der Geräte geschehen sollte - nach dem Wechsel des Kanals muss der Adapter angehalten und das Backup gelöscht werden. In der folge müssen alle Geräte neu angelernt werden.
56
+ 10. Prüfen ob der Adapter in ioBroker grün wird. Das kann bis zu 60 Sekunden dauern. Sollzustand: <br> ![](img/Bild10.png) <br> Andernfalls ist es notwendig die Meldungen im ioBroker Log zu lesen. Diese beinhalten Informationen darüber warum der Adapter nicht gestartet wurde, und können bei der Fehlersuche mit Hilfe des Forums bereits Lösungsansätze liefern.
56
57
 
57
58
  ## Pairing
58
59
  Jedes ZigBee-Gerät (Schalter, Lampe, Sensor, …) muss mit dem Koordinator gekoppelt werden (Pairing): <br>
@@ -61,8 +62,8 @@ Jedes ZigBee-Gerät (Schalter, Lampe, Sensor, …) muss mit dem Koordinator geko
61
62
  Jedes **ZigBee-Gerät** kann nur mit genau 1 ZigBee-Netzwerk verbunden sein. Hat das ZigBee-Gerät noch Pairing-Informationen zu einem fremden Koordinator (z.B. Philips Hue Bridge) gespeichert, dann muss es von diesem ZigBee-Netzwerk zuerst entkoppelt werden. Dieses Entkoppeln vom alten ZigBee-Netzwerk erfolgt vorzugsweise über die Bedienoberfläche des alten ZigBee-Netzwerkes (z.B. Philips Hue App). Alternativ kann man das ZigBee-Gerät auf Werkseinstellungen zurücksetzen. <br>
62
63
  Um ein ZigBee-Gerät nun in den Pairing-Mode zu versetzen, gibt es typischerweise folgende Möglichkeiten: <br>
63
64
  1. ZigBee-Gerät von einem ZigBee-Netzwerk entkoppeln
64
- 2. Pairing-Button am ZigBee-Gerät drücken
65
- 3. Versorgungsspannung des ZigBee-Gerätes aus- und dann wieder einschalten
65
+ 2. Pairing-Button am ZigBee-Gerät drücken (ggf. mehrfach)
66
+ 3. Versorgungsspannung des ZigBee-Gerätes aus- und dann wieder einschalten (ggf. mehrfach)
66
67
 
67
68
  Danach ist das ZigBee-Gerät für typischerweise 60 Sekunden im Pairing-Mode. <br>
68
69
  Ähnlich wie die Vorgehensweise zum Rücksetzen auf Werkseinstellungen ist auch das Aktivieren des Pairing-Mode abhängig vom jeweiligen Gerätetyp (ggf. Bedienungsanleitung des ZigBee-Gerätes lesen). <br>
@@ -71,19 +72,17 @@ Danach ist das ZigBee-Gerät für typischerweise 60 Sekunden im Pairing-Mode. <b
71
72
  Grünen Knopf drücken, um den Koordinator für 60 Sekunden (oder die in den Adaptereinstellungen gewählte Zeit) in den Pairing-Mode zu versetzen. <br>
72
73
  ![](img/Bild12.png)
73
74
 
74
- - Warten bis im Dialog "New device joined" erscheint:
75
+ - Warten bis im Dialog `Interview Successful` erscheint:<br>
75
76
  ![](img/Bild13.png)
76
-
77
77
  - Pairing überprüfen:
78
- Das zu koppelnde Gerät muss vom ioBroker ZigBee-Adapter unterstützt werden. Im Gutfall wird im ZigBee-Adapter ein neues Gerät angezeigt (z.B. Philips Light Stripe) und entsprechende ioBroker-Objekte angelegt:
78
+ Das zu koppelnde Gerät muss vom ioBroker ZigBee-Adapter unterstützt werden. Im Gutfall wird im ZigBee-Adapter ein neues Gerät angezeigt (z.B. Philips Light Stripe) mit dem Hinweis `"supported":true` und entsprechende ioBroker-Objekte angelegt:<br>
79
79
  ![](img/Bild14.png) ![](img/Bild15.png)
80
80
 
81
81
  - Im Schlechtfall wird das ZigBee-Gerät aktuell noch nicht unterstützt. Im nächsten Abschnitt ist beschrieben, was zu tun ist, um dieses ZigBee-Gerät dennoch nutzen zu können.
82
82
 
83
83
  ## Pairing von bisher unbekannten ZigBee-Geräten
84
84
 
85
- Bei bisher unbekannten ZigBee-Geräten erscheint beim Pairing der ZigBee-Name des ZigBee-Gerätes (z.B. HOMA1001) mit dem Zusatz "not described in statesMapping" <br>
86
- ![](img/Bild28.png) <br>
85
+ Bei bisher unbekannten ZigBee-Geräten erscheint beim Pairing der ZigBee-Name des ZigBee-Gerätes (z.B. HOMA1001) mit dem Zusatz `"supported": false` <br>
87
86
  ![](img/Bild16.png) <br>
88
87
 
89
88
  Durch Drehen dieser Kachel erhält man Detailinformationen zu dem ZigBee-Gerät: <br>
@@ -93,18 +92,12 @@ Nach einer Registrierung bei [github.com](https://github.com/ioBroker/ioBroker.z
93
92
 
94
93
  ![](img/Bild19.png) <br>
95
94
 
96
- Detailinformationen der Kachel (siehe oben) in dem Issue einfügen, erstelle eine kurze Dokumentation (vorzugweise auf Englisch) und absenden. Ein Entwickler wird sich daraufhin über den Issue melden.
97
-
98
- Nach Anpassung der relevanten Dateien muss der ZigBee-Adapter neu gestartet und dann das ZigBee-Gerät vom Koordinator entkoppelt werden (unpair):
99
- Danach kann das Pairing wiederholt werden. Sollzustand nach dem Pairing: <br>
100
- ![](img/Bild21.png) <br>
101
-
102
- Bei manchen ZigBee-Geräten ist es erforderlich alle Softwareschnittstellen ("exposes") des neuen ZigBee-Gerätes in den ioBroker-Objekten anzuzeigen, um alle Funktionen des ZigBee-Gerätes nutzen zu können. In solchen Fällen muss das neue ZigBee-Gerät in die "Ausschliessen"-Gruppe aufgenommen werden.
103
-
104
- ![](img/Bild22.png) <br>
95
+ Detailinformationen der Kachel (siehe oben) in dem Issue einfügen, erstelle eine kurze Dokumentation (vorzugweise auf Englisch) und absenden. Ein Entwickler wird sich daraufhin über den Issue melden.
105
96
 
106
- ![](img/Bild23.png) -> ![](img/Bild24.png) -> ![](img/Bild25.png) -> ZigBee-Gerät (z.B. HOMA1001) auswählen -> ![](img/Bild26.png) <br>
107
- Nach einem Neustart des ZigBee-Adapters sollte das neue ZigBee-Gerät nun uneingeschränkt funktionieren.
97
+ Als Ergebnis kommt eine von zwei Möglichkeiten in Frage:
98
+ - Anpassung an den Zigbee-Herdsman-Converters. Dieses erfordert eine aktualiserte Version des Zigbee-Adapters, der zunächst getestet und dann im Latest Repository zur Verfügung gestellt wird
99
+ - Erstellung eines "externen Konverters" - einer Datei mit JS Code welche in das Datenverzeichnis des Zigbee-Adapters kopiert und in der Konfiguration des Adapters angegeben werden kann.
100
+ In Beiden Fällen ist es hinreichend den Adapter neu zu starten - die entsprechend angepassten Datenpunkte des Adapters werden angelegt. Sofern dabei Datenpunkte nicht weiter unterstützt werden so werden diese in orange eingefärbt und der Adapter zeigt die Schaltfläche zum löschen der verwaisten Datenpunkte an.
108
101
 
109
102
  ## Symbole im ZigBee-Adapter
110
103
 
Binary file
Binary file
File without changes
File without changes
File without changes
package/io-package.json CHANGED
@@ -1,33 +1,46 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee",
4
- "version": "2.0.0",
4
+ "version": "2.0.2",
5
5
  "news": {
6
- "2.0.0": {
7
- "en": "new herdsman adaption",
8
- "de": "neue herdsman adaption",
9
- "ru": "адаптация нового пастуха",
10
- "pt": "nova adaptação herdsman",
11
- "nl": "nieuwe aanpassing van herders",
12
- "fr": "nouvelle adaptation des éleveurs",
13
- "it": "nuovo adattamento mandriano",
14
- "es": "nueva adaptación del pastor",
15
- "pl": "nowa adaptacja zioła",
16
- "uk": "новий гердман адаптація",
17
- "zh-cn": "新牧民适应"
6
+ "2.0.2": {
7
+ "en": "fix expose generation with expose function requiring a device. (Issue #1842)\nfix failure to configure for devices needing multiple configurations (Issue #2375)\nfix hold/release and press/release action handling (Issue #2387)\nfix lib/legacy requirement for external converters (Issue #2376)\nimproved external converter handling\nfix OTA bug\nimproved message handling for devices which report values outside their defined ranges\npreparation for ZHC 22.x (model definition loaded on demand\nfix legacy definition for devices\nadded action state for remotes.\n",
8
+ "de": "fix exponieren Erzeugung mit exponierender Funktion, die ein Gerät benötigt. (Ausgabe #1842)\nfehler beim Konfigurieren von Geräten, die mehrere Konfigurationen benötigen (Issue #2375)\nfix Hold/Release und Presse/Release-Action-Handling (Issue #2387)\nfix lib/legacy Anforderung für externe Konverter (Issue #2376)\nverbesserte externe konverterhandhabung\noTA Fehler beheben\nverbesserte nachrichtenbehandlung für geräte, die werte außerhalb ihrer definierten bereiche melden\nvorbereitung auf ZHC 22.x (Modelldefinition geladen auf Anfrage\nfix legacy definition für geräte\nden aktionszustand für remotes hinzugefügt.\n",
9
+ "ru": "исправить генерацию экспозиции с функцией экспозиции, требующей устройства. (Выпуск #1842)\nисправление неисправности настройки для устройств, нуждающихся в нескольких конфигурациях (выпуск No 2375)\nфиксация удержания/выпуска и обработки нажатия/выпуска (выпуск No 2387)\nтребование к фиксации lib/legacy для внешних преобразователей (выпуск No 2376)\nулучшенная внешняя обработка конвертера\nисправить ошибку OTA\nулучшенная обработка сообщений для устройств, которые сообщают значения за пределами своих определенных диапазонов\nподготовка к ZHC 22.x (определение модели, загруженное по требованию)\nисправить устаревшее определение для устройств\nдобавлено состояние действия для пультов.\n",
10
+ "pt": "corrigir a geração de exposição com a função de exposição que requer um dispositivo. (Issue #1842)\ncorrigir a falha de configurar para dispositivos que precisam de múltiplas configurações (Issue #2375)\ncorrigir o manuseio de ação de espera/lançamento e press/lançamento (Issue #2387)\ncorreção lib/legacy exigência para conversores externos (Issue #2376)\nmelhor desempenho do conversor externo\ncorrigir o erro OTA\nmelhor manuseio de mensagens para dispositivos que relatam valores fora de suas gamas definidas\npreparação para ZHC 22.x (definição modelo carregada sob demanda\ncorrigir a definição de legado para dispositivos\nestado de ação adicionado para controles remotos.\n",
11
+ "nl": "fix ontmaskering generatie met ontmaskering functie vereist een apparaat. (Issue # 1842)\nvast te stellen fout bij het configureren van apparaten die meerdere configuraties nodig hebben (Issue #2375)\nfix hold/release and pers/release action handling (Issue #2387)\nfix lib/legacy eis voor externe converters (Issue #2376)\nverbeterde externe converterbehandeling\nfix OTA bug\nverbeterde berichtverwerking voor apparaten die waarden rapporteren buiten hun gedefinieerde bereik\nvoorbereiding voor ZHC 22.x (modeldefinitie op aanvraag geladen\nfix legacy definitie voor apparaten\ntoegevoegde actiestatus voor remotes.\n",
12
+ "fr": "fixer la génération d'exposition avec la fonction d'exposition nécessitant un dispositif. (Numéro 1842)\ncorrection de l'échec à configurer pour les appareils nécessitant plusieurs configurations (Numéro #2375)\nfixer la tenue/la sortie et la prise en charge par la presse/la sortie (numéro d'émission 2387)\nfixer lib / légataire exigence pour les convertisseurs externes (Émission #2376)\namélioration de la manipulation du convertisseur externe\ncorrection du bug OTA\namélioration du traitement des messages pour les appareils qui déclarent des valeurs en dehors de leurs plages définies\npréparation pour ZHC 22.x (définition du modèle chargé sur demande\nfixer la définition du passé pour les appareils\nétat d'action ajouté pour les télécommandes.\n",
13
+ "it": "risolvere esporre la generazione con la funzione di esporre che richiede un dispositivo. (Issue #1842)\ncorretto il mancato configurazione per i dispositivi che necessitano di più configurazioni (Essue #2375)\nfix hold/release e press/release action handling (Issue #2387)\nfix lib/legacy requisito per i convertitori esterni (Issue #2376)\nmigliore gestione del convertitore esterno\ncorrezione di bug OTA\nmigliore gestione dei messaggi per dispositivi che segnalano valori al di fuori dei loro intervalli definiti\npreparazione per ZHC 22.x (definizione modello caricata su richiesta\nfissare la definizione legacy per i dispositivi\nstato di azione aggiunto per i remoti.\n",
14
+ "es": "fijar la generación expuesta con función expuesta que requiere un dispositivo. (Isue #1842)\nfijar el fallo de configuración para dispositivos que necesitan múltiples configuraciones (Isue #2375)\nfijación de sujeción / liberación y prensa / manejo de acción de liberación (Isue #2387)\nfijar el requisito de lib/legacy para convertidores externos (Isue #2376)\nmejor manejo del convertidor externo\ncorrección de OTA\nmejorar el manejo de mensajes para dispositivos que reportan valores fuera de sus rangos definidos\npreparación para ZHC 22.x (definición modelo cargada a la demanda\nfijar la definición heredada para los dispositivos\nestado de acción añadido para los remotos.\n",
15
+ "pl": "naprawić generowanie ekspozycji z funkcją odsłaniania wymagającą urządzenia. (Wydanie # 1842)\nnaprawić awarię konfiguracji dla urządzeń wymagających wielu konfiguracji (wydanie # 2375)\nfix hold / release and press / release action handling (wydanie # 2387)\nfix lib / last requirement for external konwerters (issue # 2376)\nulepszona obsługa zewnętrznego konwertera\nnaprawić błąd OTA\nulepszona obsługa wiadomości dla urządzeń, które przekazują wartości poza określonymi zakresami\nprzygotowanie do ZHC 22.x (definicja modelu załadowana na żądanie\nnaprawić dotychczasową definicję urządzeń\ndodano stan działania pilotów.\n",
16
+ "uk": "фіксувати генерацію висадки з функцією вистоювання, що вимагає пристрою. (Issue #1842)\nвиправлена відмова налаштовувати для пристроїв, які потребують декількох конфігурацій (Issue #2375)\nфіксувати передачу/випуск та прес/випуск дії (Issue #2387)\nфіксувати вимогу lib/legacy для зовнішніх перетворювачів (Issue #2376)\nпокращений зовнішній конвертер\nвиправлення помилок OTA\nпокращена обробка повідомлень для пристроїв, які повідомляють значення поза визначеними діапазонами\nпідготовка до ZHC 22.x (модельне визначення, завантажене на попит\nфіксувати визначення спадщини для пристроїв\nдодано стан дії для пультів.\n",
17
+ "zh-cn": "固定需要设备的曝光函数的曝光生成。 (问题1842)\n为需要多个配置的设备设置固定失败( 问题 # 2375)\n固定持有/释放和按压/释放处理(第2387号问题)\n固定外部转换器的 lib/ legacy 要求(问题 # 2376)\n改进外部转换器处理\n修复OTA 错误\n改进对报告超出规定范围值的设备的信息处理\nzHC 22.x(按要求装入的模型定义)\n固定设备的遗留定义\n为远程添加动作状态 .\n"
18
18
  },
19
- "1.10.15": {
20
- "en": "Work in progress",
21
- "de": "Work in progress",
22
- "ru": "Work in progress",
23
- "pt": "Work in progress",
24
- "nl": "Work in progress",
25
- "fr": "Work in progress",
26
- "it": "Work in progress",
27
- "es": "Work in progress",
28
- "pl": "Work in progress",
29
- "uk": "Work in progress",
30
- "zh-cn": "Work in progress"
19
+ "2.0.1": {
20
+ "en": "BREAKING CHANGES\n\nswitch to converters 21 changes the exposes for a large numbern of devices (mostly remotes)\nnew method for controlling color based on subchannels for rgb, hs and xy\nExposes as default for ALL devices. Use of old definition as option only\nRequires Node 20.x or newer\n\nFix Pairing\nchange ping\ndelay map generation until refresh is activated, map messages after generation\nremove bindings tab from zigbee tab\nreorder tabs in configuration\nremove binding tab from configuration\nremove map from configuration\nadd debug to zigbee tab\nHerdsman 3.2.5, Converters 21.30.0\nExposes as default, use of old device definitions as legacy optional\nUser specific images (model based, device based)\nImproved group editing - remove members from group card",
21
+ "de": "VERÄNDERUNGEN\n\nschalter auf konverter 21 ändert die belichtung für eine große anzahl von geräten (meist fernbedienungen)\nneue methode zur farbsteuerung auf basis von subkanälen für rgb, hs und xy\nExposes als Standard für ALL Geräte. Verwendung der alten Definition nur als Option\nErfordert Node 20.x oder neuer\n\nFeste Paarung\nänderung ping\nverzögerung der kartenerzeugung, bis das update aktiviert ist, kartennachrichten nach generation\nbinden tab aus zickbee tab entfernen\nreorder tabs in konfiguration\nbindelasche aus der konfiguration entfernen\nkarte aus der konfiguration entfernen\ndebug to zigbee tab hinzufügen\nHerdsman 3.2.5, Konverter 21.30.0\nExposes als Standard, Verwendung von alten Gerätedefinitionen als Vermächtnis optional\nBenutzerspezifische Bilder (modellbasierte, gerätebasierte)\nVerbesserte Gruppenbearbeitung - Mitglieder aus Gruppenkarte entfernen",
22
+ "ru": "ПЕРЕМЕНЫ ДЫХАНИЯ\n\nпереход на преобразователи 21 изменяет экспозиции для большого количества устройств (в основном пультов)\nновый метод управления цветом на основе подканалов для rgb, hs и xy\nВыставляется по умолчанию для всех устройств. Использование старого определения только в качестве варианта\nТребуется Node 20.x или новый\n\nФиксация пар\nизменить пинг\nзадержка генерации карт до активации обновления, сообщения карт после генерации\nудалить вкладку связывания из вкладки zigbee\nзакладки переупорядочения в конфигурации\nудалить вкладку связывания из конфигурации\nудалить карту из конфигурации\nдобавить отладку в zigbee tab\nСтадовод 3.2.5, Преобразователи 21.30.0\nОбъявления по умолчанию, использование старых определений устройств в качестве устаревших опций\nПользовательские изображения (на основе модели, устройства)\nУлучшенное редактирование группы - удаление членов с карты группы",
23
+ "pt": "ALTERAÇÕES DE TRABALHO\n\nmudar para conversores 21 altera as exposiçãμes para um grande nãomero de dispositivos (principalmente remotos)\nnovo método para controlar a cor com base em subcanais para rgb, hs e xy\nExpõe como padrão para todos os dispositivos. Uso da definição antiga como opção apenas\nRequer nó 20.x ou mais recente\n\nEmparelhamento fixo\nmudança de ping\ngeração de mapas de atraso até que a atualização seja ativada, mapeie mensagens após a geração\nremover encadernações guia da aba zigbee\nreordenar as abas na configuração\nremover guia de ligação da configuração\nremover mapa da configuração\nadd debug to ziigbee tab\nHerdsman 3.2.5, Conversores 21.30.0\nExpõe como padrão, uso de definições de dispositivos antigos como legado opcional\nImagens específicas do usuário (modelo baseado, dispositivo baseado)\nEdição de grupo melhorada - remover membros do cartão de grupo",
24
+ "nl": "BEREIDINGSVERANDERINGEN\n\nswitch to converters 21 verandert de expos voor een groot aantal apparaten (meestal afstandsbedieningen)\nnieuwe methode voor het controleren van kleur op basis van subkanalen voor rgb, hs en xy\nExposeert als standaard voor ALLE apparaten. Gebruik van oude definitie als optie\nVereist Node 20.x of nieuwer\n\nRepareren\nverandering ping\nde mapgeneratie uitstellen tot het vernieuwen is geactiveerd, berichten na generatie in kaart brengen\ntabblad bindingen verwijderen uit zigbee-tabblad\ntabbladen opnieuw ordenen in configuratie\ntabblad binding verwijderen uit configuratie\nkaart uit configuratie verwijderen\ndebug toevoegen aan zigbee-tabblad\nHerdsman 3.2.5, Converters 21.30.0\nExposeert als standaard, gebruik van oude apparaatdefinities als optioneel legacy\nGebruikersspecifieke afbeeldingen (op basis van model, apparaat)\nVerbeterde groepsbewerking - leden verwijderen van groepskaart",
25
+ "fr": "CHANGEMENTS\n\nbasculer vers les convertisseurs 21 modifie les expositions pour un grand nombre de dispositifs (principalement des télécommandes)\nnouvelle méthode pour contrôler la couleur basée sur les sous-canaux pour rgb, hs et xy\nExposes par défaut pour TOUS les appareils. Utilisation de l'ancienne définition comme option seulement\nNécessite le Node 20.x ou plus récents\n\nCorrection de l'appariement\nchangement ping\nretarder la génération de la carte jusqu'à ce que le rafraîchissement soit activé, map messages after generation\nsupprimer l'onglet reliures de l'onglet zigbee\nréorganiser les onglets dans la configuration\nsupprimer l'onglet de liaison de la configuration\nsupprimer la carte de la configuration\najouter debug à l'onglet zigbee\nHerdsman 3.2.5, Convertisseurs 21.30.0\nExposes comme par défaut, utilisation des anciennes définitions d'appareils comme legs optionnel\nImages spécifiques à l'utilisateur (sur modèle, sur périphérique)\nAmélioration de l'édition de groupe - supprimer les membres de la carte de groupe",
26
+ "it": "VARIAZIONI\n\ncommutazione a convertitori 21 cambia l'esposizione per un gran numero di dispositivi (per lo più remoti)\nnuovo metodo per il controllo del colore basato su sottocanali per rgb, hs e xy\nMostra come predefinito per tutti i dispositivi. Uso della vecchia definizione come opzione solo\nRichiede Node 20.x o nuovo\n\nFissare l'accoppiamento\ncambiamento ping\nritardare la generazione della mappa fino all'attivazione del aggiornamento, mappare i messaggi dopo generazione\nrimuovere la scheda binding dalla scheda zigbee\nriordinare le schede nella configurazione\nrimuovere la scheda di binding dalla configurazione\nrimuovere la mappa dalla configurazione\naggiungere debug a zigbee scheda\nHerdsman 3.2.5, Convertitori 21.30.0\nEsposizioni come predefinito, uso di vecchie definizioni del dispositivo come legacy opzionale\nImmagini specifiche dell'utente (modello basato, dispositivo basato)\nModifica del gruppo migliorato - rimuovere i membri dalla scheda di gruppo",
27
+ "es": "BREAKING CHANGS\n\ninterruptor a convertidores 21 cambios de los expuestos para un gran número de dispositivos (en su mayoría remotos)\nnuevo método para controlar el color basado en subcanales para rgb, hs y xy\nExposes como predeterminado para TODOS los dispositivos. Uso de la vieja definición como opción solamente\nRequiere Nodo 20.x o más nuevos\n\nPareja fija\ncambio de ping\nretraso de la generación del mapa hasta que se activa el refresco, mapa mensajes después de la generación\neliminar la ficha de unión de la pestaña zigbee\npestañas reordenadas en configuración\neliminar la pestaña de unión de configuración\neliminar mapa de la configuración\nañadir debug a la pestaña zigbee\nHerdsman 3.2.5, convertidores 21.30.0\nExposes as default, use of old device definitions as legacy Optional\nImágenes específicas del usuario (con base de modelo, basadas en dispositivos)\nMejor edición de grupo - eliminar miembros de la tarjeta de grupo",
28
+ "pl": "ZMIANY ZBIORCZE\n\nprzełączanie na konwertery 21 zmienia eksponaty dużej liczby urządzeń (głównie pilotów)\nnowa metoda kontrolowania koloru na podstawie podkanałów dla rgb, hs i xy\nWyświetla jako domyślne dla urządzeń ALL. Używanie starej definicji jako opcji\nWymaga węzła 20.x lub nowsze\n\nNapraw parowanie\nzmienić ping\nopóźnianie generowania mapy aż do uruchomienia odświeżania, wiadomości mapy po generacji\nusunąć zakładkę wiązania z zakładki zigbee\nponownie zamówić karty w konfiguracji\nusunąć zakładkę wiązania z konfiguracji\nusuń mapę z konfiguracji\ndodaj debug do karty zigbee\nHerdsman 3.2.5, Konwertery 21.30.0\nWyświetla jako domyślne, użycie starych definicji urządzenia jako dotychczasowe opcjonalne\nObrazy specyficzne dla użytkownika (oparte na modelu, na urządzeniu)\nUlepszona edycja grupowa - usunąć członków z karty grupowej",
29
+ "uk": "БРЕАКІНГОВІ ЗМІНИ\n\nперемикач на перетворювачі 21 змінює висадки для великої кількості пристроїв (найбільш віддалені)\nновий метод контролю кольору на основі підканалів для rgb, hs і xy\nЗа замовчуванням для всіх пристроїв. Використання старого визначення як варіант\nВимагає Node 20.x або нові\n\nФіксація Пірсинг\nзмінити пінг\nгенерація карти затримки до освіження активується, повідомлення після генерації\nвидалити вкладку в'язання з вкладки zigbee\nвкладка зворотного замовлення в конфігурації\nвидалити вкладку з конфігурації\nвидалити карту з конфігурації\nadd debug до zigbee tab\nEnglish, Українська, Français..\nЕкспози як за замовчуванням, використання застарілих параметрів пристрою, як необов'язковий\nКористувальницькі специфічні зображення (моделі на основі пристрою)\nУдосконалено редагування груп - видалення членів з групової картки",
30
+ "zh-cn": "裂变\n\n21 更改大量设备(大多为远程设备)的曝光量\n基于 rgb、 hs 和 xy 子通道的新的颜色控制方法\n曝光为默认所有设备 。 仅将旧定义用作选项\n需要节点 20.x 或更新\n\n修复对齐\n更改键\n将映射生成延迟到刷新启动, 映射消息生成后\n从 zigbee 标签中删除绑定标签\n在配置中重新排序标签\n从配置中删除绑定标签\n从配置中删除地图\n添加调试到 zigbee 标签\n牧民 3.2.5,转换器 21.30.0\n将曝光作为默认, 将旧设备定义作为遗留选项\n用户特定图像( 基于模型、 设备)\n改进组编辑 - 从组卡中删除成员"
31
+ },
32
+ "1.11.2": {
33
+ "en": "debug for states",
34
+ "de": "debug for states",
35
+ "ru": "debug for states",
36
+ "pt": "debug for states",
37
+ "nl": "debug for states",
38
+ "fr": "debug for states",
39
+ "it": "debug for states",
40
+ "es": "debug for states",
41
+ "pl": "debug for states",
42
+ "uk": "debug for states",
43
+ "zh-cn": "debug for states"
31
44
  },
32
45
  "1.10.14": {
33
46
  "en": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D) \ndeleteDeviceStates change to deleteObj",
@@ -187,8 +200,8 @@
187
200
  "condition": {
188
201
  "operand": "and",
189
202
  "rules": [
190
- "oldVersion<=1.10.3",
191
- "newVersion>=1.10.10"
203
+ "oldVersion<=1.10.14",
204
+ "newVersion>=2.0.0"
192
205
  ]
193
206
  },
194
207
  "title": {
@@ -204,17 +217,17 @@
204
217
  "zh-cn": "重要通知!"
205
218
  },
206
219
  "text": {
207
- "en": "\"BREAKING CHANGE. after update to this Version you can't go back to Version <= 1.10.3. Only option is your Backup",
208
- "de": "\"BREAKING CHANGE. nach dem Update könnt ihr nicht zurück zu einer Version <= 1.10.3. Es geht nur per ioBroker Backup was hoffentlich gemacht habt",
209
- "ru": "\"Изменяюсь. После обновления этой версии вы не можете вернуться к версии <= 1.10.3. Единственный вариант - это ваша резервная копия",
210
- "pt": "\"BREAKING CHANGE. após a atualização para esta versão você não pode voltar para Versão <= 1.10.3. A única opção é o seu Backup",
211
- "nl": "\"Verandering. Na update naar deze versie kun je niet meer terug naar versie <= 1.10.3. De enige optie is uw back-up",
212
- "fr": "\"C'est le changement. après la mise à jour de cette version, vous ne pouvez pas retourner à la version <= 1.10.3. Seule option est votre sauvegarde",
213
- "it": "\"Cambiare il cambiamento. dopo l'aggiornamento a questa versione non si può tornare alla versione <= 1.10.3. Solo l'opzione è il backup",
214
- "es": "\"Cambiando. después de la actualización a esta versión no puede volver a la versión 0 = 1.10.3. La única opción es tu Backup",
215
- "pl": "\"ZMIENIONA ZMIANA. po aktualizacji do tej wersji nie można wrócić do wersji < = 1.10.3. Jedyną opcją jest kopia zapasowa",
216
- "uk": "\"Бреагування ЗМІНИ. після оновлення цієї версії ви не можете повернутися до версії <= 1.10.3. Тільки варіант - Ваш Резервне копіювання",
217
- "zh-cn": "\"呼吸变化。 更新到此版本后, 您不能返回到 QQ 1. 10. 3. 版本 唯一的选项是您的备份"
220
+ "en": "\"BREAKING CHANGE. <br> switch to converters 21 changes the exposes for a large numbern of devices (mostly remotes) <br> new method for controlling color based on subchannels for rgb, hs and xy <br> Exposes as default for ALL devices. Use of old definition as option only",
221
+ "de": "\"BREAKING CHANGE. <br> Umstellung auf Konverter 21 ändert die Einstellungen für eine große Anzahl von Geräten (vor allem Fernbedienungen) <br> neue Methode zur Steuerung der Farbe basierend auf rgb, hs und xy <br> Exposes als Standard für ALLE Geräte. die alte Definition ist jetzt nur optional",
222
+ "ru": "\"BREAKING CHANGE. <br> Переход на конвертеры 21 изменяет экспозиции для большого количества устройств основном пультов) <br> Новый метод управления цветом, основанный на подканалах для rgb, hs и xy <br> Экспонирует по умолчанию для ВСЕХ устройств. Использование старого определения только в качестве опции",
223
+ "pt": "\"BREAKING CHANGE. <br> mudança para conversores 21 altera a exposição de um grande número de dispositivos (principalmente controles remotos) <br> novo método para controlar cores baseado em subcanais para rgb, hs e xy <br> expõe como padrão para TODOS os dispositivos. Utilização da definição antiga apenas como opção",
224
+ "nl": "\"BREAKING CHANGE. <br> overschakelen naar converters 21 verandert de instellingen voor een groot aantal apparaten (vooral afstandsbedieningen) <br> nieuwe methode voor het regelen van kleur op basis van subkanalen voor rgb, hs en xy <br> Standaardinstellingen voor ALLE apparaten. Gebruik van oude definitie alleen als optie",
225
+ "fr": "\"BREAKING CHANGE. <br> le passage aux convertisseurs 21 modifie l'exposition pour un grand nombre d'appareils (principalement les télécommandes) <br>nouvelle méthode pour contrôler la couleur basée sur les sous-canaux pour rgb, hs et xy <br>Expose par défaut pour TOUS les appareils. Utilisation de l'ancienne définition comme option seulement",
226
+ "it": "\"BREAKING CHANGE. <br> il passaggio ai convertitori 21 modifica le esposizioni per un gran numero di dispositivi (soprattutto telecomandi) <br> nuovo metodo per il controllo del colore basato su sottocanali per rgb, hs e xy <br> Espone come predefinito per TUTTI i dispositivi. Uso della vecchia definizione solo come opzione",
227
+ "es": "\"BREAKING CHANGE. <br> cambiar a convertidores 21 cambia las exposiciones para un gran númeron de dispositivos (principalmente mandos a distancia) <br> nuevo método para controlar el color basado en subcanales para rgb, hs y xy <br> Expone por defecto para TODOS los dispositivos. Uso de la antigua definición sólo como opción",
228
+ "pl": "\"BREAKING CHANGE. <br> przejście na konwertery 21 zmienia ekspozycje dla dużej liczby urządzeń (głównie pilotów) <br> nowa metoda sterowania kolorem w oparciu o podkanały dla rgb, hs i xy <br> Ekspozycje domyślnie dla WSZYSTKICH urządzeń. Użycie starej definicji tylko jako opcji",
229
+ "uk": "\"BREAKING CHANGE. <br> перехід на конвертери 21 змінює експозиції для великої кількості пристроїв (переважно пультів) <br> новий метод керування кольором на основі підканалів для rgb, hs та xy <br> Експозиції за замовчуванням для ВСІХ пристроїв. Використання старого визначення лише як опція",
230
+ "zh-cn": "\"BREAKING CHANGE. <br> 切换到转换器 21 会改变大量设备(主要是遥控器)的显示<br>基于 rgb、hs xy 子通道控制颜色的新方法<br>对所有设备显示为默认设置。仅使用旧定义作为选项"
218
231
  },
219
232
  "link": "https://github.com/ioBroker/ioBroker.zigbee/blob/master/README.md",
220
233
  "level": "warn",
@@ -235,12 +248,13 @@
235
248
  "cancel"
236
249
  ]
237
250
  }
238
- ]
251
+ ],
252
+ "installedFrom": "asgothian/ioBroker.zigbee#1.11"
239
253
  },
240
254
  "native": {
241
255
  "port": "",
242
- "panID": 6754,
243
- "extPanID": "DDDDDDDDDDDDDDDD",
256
+ "panID": 0,
257
+ "extPanID": "",
244
258
  "channel": 11,
245
259
  "disableLed": false,
246
260
  "precfgkey": "01030507090B0D0F00020406080A0C0D",
package/lib/binding.js CHANGED
@@ -238,7 +238,7 @@ class Binding {
238
238
  await this.doBindUnbind(type, bind_source, bind_source_ep, 'coordinator', '1');
239
239
  this.debug('Successfully ' + (type === 'bind' ? 'bound' : 'unbound') + ' Coordinator from ' + bind_source);
240
240
  } catch (e) {
241
- this.error(`Could not ${type} Coordinator from ${bind_source}: ${(e && e.message ? e.message : 'no error message')} ${(e && e.stack ? e.stack : 'no call stack')}`);
241
+ this.error(`Could not ${type} Coordinator from ${bind_source}: ${JSON.stringify(e)}`);
242
242
  }
243
243
  }
244
244
  } catch (error) {
package/lib/colors.js CHANGED
@@ -441,6 +441,7 @@ function parseColor(rgbstring) {
441
441
  if (rgbstring.startsWith('#')) {
442
442
  rgbstring = rgbstring.slice(1);
443
443
  }
444
+ if (rgbstring.length != 6) return {r: 0, g: 128, b: 255}
444
445
  const val = parseInt(`0x${rgbstring}`);
445
446
  const oneColor = {};
446
447
  oneColor.r = Math.floor(val / (256 * 256));
@@ -460,6 +461,12 @@ function namedColorToRGB(name) {
460
461
  return {r: 0, g: 128, b: 255};
461
462
  }
462
463
 
464
+ function getColorNames()
465
+ {
466
+ return Object.keys(namedColors);
467
+ }
468
+
463
469
  exports.NamedColorToRGB = namedColorToRGB;
464
470
  exports.NamedCOlorToRGBString = namedColorToRGBstring;
465
471
  exports.ParseColor = parseColor;
472
+ exports.getColorNames = getColorNames;
package/lib/commands.js CHANGED
@@ -4,6 +4,10 @@ const getZbId = require('./utils').getZbId;
4
4
  const fs = require('fs');
5
5
  const pathLib = require('path');
6
6
  const statesMapping = require('./devices');
7
+ const utils = require('@iobroker/adapter-core'); // Get common adapter utils
8
+ const colors = require('./colors.js');
9
+ const { exec } = require('child_process');
10
+
7
11
  const disallowedDashStates = [
8
12
  'link_quality', 'available', 'battery', 'groups', 'device_query',
9
13
  'hue_move', 'color_temp_move', 'satuation_move', 'brightness_move', 'brightness_step', 'hue_calibration',
@@ -114,6 +118,42 @@ class Commands {
114
118
  this.setDeviceActivated(obj.from, obj.command, obj.message, obj.callback);
115
119
  }
116
120
  break;
121
+ case 'setDeviceDebug':
122
+ if (obj.message && typeof obj.message === 'object') {
123
+ this.toggleDeviceDebug(obj.from, obj.command, obj.message, obj.callback);
124
+ }
125
+ break;
126
+ case 'getDebugDevices':
127
+ if (obj.message && typeof obj.message === 'object') {
128
+ this.getDebugDevices(obj.from, obj.command, obj.message, obj.callback);
129
+ }
130
+ break;
131
+ case 'getNamedColors':
132
+ if (obj.message && typeof obj.message === 'object') {
133
+ const val = colors.getColorNames();
134
+ this.adapter.sendTo(obj.from, obj.command, {colors: val}, obj.callback);
135
+ }
136
+ break;
137
+
138
+ case 'getLocalImages':
139
+ if (obj.message && typeof obj.message === 'object') {
140
+ this.getLocalImages(obj.from, obj.command, obj.message, obj.callback);
141
+ }
142
+ break;
143
+ case 'updateDeviceImage':
144
+ if (obj.message && typeof obj.message === 'object') {
145
+ this.updateDeviceImage(obj.from, obj.command, obj.message, obj.callback);
146
+ }
147
+ break;
148
+ case 'updateDeviceData':
149
+ if (obj.message && typeof obj.message === 'object') {
150
+ this.updateDeviceData(obj.from, obj.command, obj.message, obj.callback);
151
+ }
152
+ break;
153
+ case 'getDeviceCleanupRequired':
154
+ if (obj) {
155
+ this.adapter.sendTo(obj.from, obj.command, {clean:this.stController.CleanupRequired(), errors:this.stController.getStashedErrors()}, obj.callback);
156
+ }
117
157
  }
118
158
  }
119
159
  }
@@ -150,8 +190,8 @@ class Commands {
150
190
  return;
151
191
  }
152
192
  }
153
- catch (error) {
154
- this.error(`Pairing with code failed with: ${(error && error.message ? error.message : 'no error message')} ${(error && error.stack ? error.stack : 'no call stack')}`);
193
+ catch (e) {
194
+ this.error(JSON.stringify(e));
155
195
  this.adapter.sendTo(
156
196
  from, command,
157
197
  {error: 'Exception when trying to add QR code'},
@@ -163,7 +203,7 @@ class Commands {
163
203
  }
164
204
  }
165
205
  // allow devices to join the network within 60 secs
166
- this.adapter.logToPairing('Pairing started ' + devId, true);
206
+ // this.adapter.logToPairing('Pairing started ' + devId, true);
167
207
 
168
208
  let cTimer = Number(this.adapter.config.countDown);
169
209
  if (!this.adapter.config.countDown || !cTimer) {
@@ -209,6 +249,7 @@ class Commands {
209
249
 
210
250
  async getDevices(from, command, id, callback) {
211
251
  if (this.zbController) {
252
+ this.debug(`getDevices called from ${from} with command ${JSON.stringify(command)} and id ${JSON.stringify(id)}`);
212
253
  const pairedDevices = await this.zbController.getClients(true);
213
254
  const groups = {};
214
255
  let rooms;
@@ -226,11 +267,6 @@ class Commands {
226
267
  // get device states and groups
227
268
  result.forEach(async devInfo => {
228
269
  if (devInfo._id) {
229
- // groups
230
- // const grState = alls[`${devInfo._id}.groups`];
231
- // if (grState && grState.val) {
232
- // groups[devInfo._id] = JSON.parse(grState.val);
233
- // }
234
270
  // battery and link_quality
235
271
  const lqState = alls[`${devInfo._id}.link_quality`];
236
272
  devInfo.link_quality = lqState ? lqState.val : undefined;
@@ -243,9 +279,10 @@ class Commands {
243
279
 
244
280
  // put only allowed states
245
281
  devInfo.statesDef = (states || []).filter(stateDef => {
246
- const sid = stateDef._id;
247
- const name = sid.split('.').pop();
248
- return !disallowedDashStates.includes(name);
282
+ const sid = stateDef._id.replace(this.adapter.namespace + '.', '');
283
+ const names = sid.split('.');
284
+ if (stateDef.common.color || names.length > 2) return false;
285
+ return !disallowedDashStates.includes(names.pop());
249
286
 
250
287
  }).map(stateDef => {
251
288
  const name = stateDef.common.name;
@@ -309,6 +346,8 @@ class Commands {
309
346
  const modelDesc = statesMapping.findModel(devInfo.common.type);
310
347
  devInfo.icon = (modelDesc && modelDesc.icon) ? modelDesc.icon : 'img/unknown.png';
311
348
  devInfo.vendor = modelDesc ? modelDesc.vendor : '';
349
+ const legacyDesc = statesMapping.findModel(devInfo.common.type, true);
350
+ devInfo.legacyIcon = (legacyDesc && legacyDesc.icon) ? legacyDesc.icon : undefined;
312
351
  }
313
352
 
314
353
  const id = getZbId(devInfo._id);
@@ -328,7 +367,6 @@ class Commands {
328
367
  }
329
368
  }
330
369
  devInfo.paired = !!devInfo.info;
331
- // devInfo.groups = groups[devInfo._id];
332
370
  devices.push(devInfo);
333
371
  }
334
372
  return devices;
@@ -336,11 +374,9 @@ class Commands {
336
374
  .then(async (devices) => {
337
375
  // fill group info
338
376
  for (const groupdev in groups) {
339
- //this.debug(`GetDevices scanning group ${groupdev} ${JSON.stringify(groups[groupdev])}`);
340
377
  const device = devices.find(dev => (groupdev === getZbId(dev._id)));
341
378
  if (device) {
342
379
  device.groups = groups[groupdev];
343
- //this.debug(`adding group info to device ${groupdev}`);
344
380
  }
345
381
  }
346
382
  // append devices that paired but not created
@@ -495,18 +531,20 @@ class Commands {
495
531
  async cleanDeviceStates(from, command, msg, callback) {
496
532
  this.info(`State cleanup with ${JSON.stringify(msg)}`);
497
533
  const devicesFromDB = await this.zbController.getClients(false);
534
+ const messages = [];
535
+ this.stController.CleanupRequired(false);
498
536
 
499
537
  for (const device of devicesFromDB) {
500
538
  const entity = await this.zbController.resolveEntity(device);
501
539
 
502
540
  if (entity) {
503
541
  const model = (entity.mapped) ? entity.mapped.model : entity.device.modelID;
504
- await this.stController.deleteOrphanedDeviceStates(device.ieeeAddr, model, msg.force);
542
+ this.stController.deleteOrphanedDeviceStates(device.ieeeAddr, model, msg.force, (msg)=> { messages.push(msg)});
505
543
  }
506
544
  }
507
545
  // rebuild retainDeviceNamesDB
508
- this.stController.rebuildRetainDeviceNames();
509
- this.adapter.sendTo(from, command, {}, callback);
546
+ //this.stController.rebuildRetainDeviceNames();
547
+ this.adapter.sendTo(from, command, {stateList: messages}, callback);
510
548
  }
511
549
 
512
550
  async getChannels(from, command, message, callback) {
@@ -532,6 +570,78 @@ class Commands {
532
570
  }
533
571
  }
534
572
 
573
+ async toggleDeviceDebug(from, command, msg, callback) {
574
+ if (this.stController) {
575
+ const id = msg.id;
576
+ const result = await this.stController.toggleDeviceDebug(id);
577
+ this.adapter.sendTo(from, command, {debugDevices:result}, callback)
578
+ }
579
+ }
580
+
581
+ async getDebugDevices(from, command, msg, callback) {
582
+ if (this.stController) {
583
+ this.stController.getDebugDevices((debugDevices) => this.adapter.sendTo(from, command, {debugDevices:debugDevices}, callback));
584
+ }
585
+ }
586
+
587
+
588
+ async getLocalImages(from, command, msg, callback) {
589
+ if (this.stController) {
590
+ const id = msg.id;
591
+ const result = await this.stController.localConfig.enumerateImages(utils.getAbsoluteInstanceDataDir(this.adapter).replace('.','_'));
592
+ this.adapter.sendTo(from, command, {imageData:result}, callback)
593
+ }
594
+ }
595
+
596
+ async updateDeviceImage(from, command, msg, callback) {
597
+ if (this.stController) {
598
+ this.debug(`UpdateDeviceImage : ${JSON.stringify(msg)}`)
599
+ const target = msg.global ? msg.target : msg.target.replace(`${this.adapter.namespace}.`, '')
600
+ const result = await this.stController.localConfig.updateLocalOverride(target, 'icon', msg.image, msg.global);
601
+ if (msg.name) {
602
+ this.stController.localConfig.updateLocalOverride(target, 'name', msg.name, msg.global);
603
+ }
604
+ if (!msg.global) {
605
+ const entity = await this.zbController.resolveEntity(`0x${target}`);
606
+ if (entity) {
607
+ this.stController.updateDev(target, entity.mapped.model, entity.mapped.model, () => {this.adapter.sendTo(from, command, {imageData:result}, callback)});
608
+ }
609
+ else {
610
+ this.stController.updateDev(target, undefined, 'group',() => {this.adapter.sendTo(from, command, {imageData:result}, callback)});
611
+ }
612
+ }
613
+ else {
614
+ //this.error(JSON.stringify(result));
615
+ this.adapter.sendTo(from, command, {imageData:result}, callback);
616
+ }
617
+ }
618
+ }
619
+
620
+ async updateDeviceData(from, command, msg, callback) {
621
+ if (this.stController) {
622
+ this.debug(`UpdateDeviceData : ${JSON.stringify(msg)}`)
623
+ const target = msg.target.replace(`${this.adapter.namespace}.`, '');
624
+ const entity = await this.zbController.resolveEntity(target);
625
+ //this.warn('entity for ' + target + ' is '+ JSON.stringify(entity))
626
+ if (msg.data)
627
+ {
628
+ for (const prop in msg.data) {
629
+ this.debug('enumerating data: ' + prop);
630
+ await this.stController.localConfig.updateLocalOverride(target, (entity ? entity.mapped.model : 'group'), prop, msg.data[prop], msg.global);
631
+ }
632
+ }
633
+ if (entity) {
634
+ //this.warn('with Entity');
635
+ this.stController.updateDev(target, entity.mapped.model, entity.mapped.model, () => {this.adapter.sendTo(from, command, {}, callback)});
636
+ }
637
+ else {
638
+ //this.warn('without Entity');
639
+ this.stController.updateDev(target, undefined, 'group',() => {this.adapter.sendTo(from, command, {}, callback)});
640
+ }
641
+ }
642
+ }
643
+
644
+
535
645
  async reconfigure(from, command, msg, callback) {
536
646
  if (this.zbController) {
537
647
  const devid = getZbId(msg.id);
@@ -539,13 +649,19 @@ class Commands {
539
649
  const entity = await this.zbController.resolveEntity(devid);
540
650
  if (entity) {
541
651
  try {
542
- await this.zbController.callExtensionMethod(
652
+ const result = await this.zbController.callExtensionMethod(
543
653
  'doConfigure',
544
654
  [entity.device, entity.mapped],
545
655
  );
546
- this.adapter.sendTo(from, command, {}, callback);
656
+ this.warn('do configure result is ' + JSON.stringify(result));
657
+ const msg = result.join(',');
658
+ if (msg.length > 5)
659
+ this.adapter.sendTo(from, command, {error: msg}, callback);
660
+ else
661
+ this.adapter.sendTo(from, command, {}, callback);
662
+
547
663
  } catch (error) {
548
- const errmsg = `Reconfigure failed ${entity.device.ieeeAddr} ${entity.device.modelID}, (${error.stack})`;
664
+ const errmsg = `Reconfigure failed ${entity.device.ieeeAddr} ${entity.device.modelID}, (${error.message})`;
549
665
  this.error(errmsg);
550
666
  this.adapter.sendTo(from, command, {error: errmsg}, callback);
551
667
  }
package/lib/developer.js CHANGED
File without changes