iobroker.zigbee2mqtt 0.2.0 → 1.0.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 +16 -0
- package/admin/i18n/de/translations.json +8 -4
- package/admin/i18n/en/translations.json +8 -4
- package/admin/i18n/es/translations.json +8 -4
- package/admin/i18n/fr/translations.json +8 -4
- package/admin/i18n/it/translations.json +8 -4
- package/admin/i18n/nl/translations.json +8 -4
- package/admin/i18n/pl/translations.json +8 -4
- package/admin/i18n/pt/translations.json +8 -4
- package/admin/i18n/ru/translations.json +8 -4
- package/admin/i18n/zh-cn/translations.json +8 -4
- package/admin/jsonConfig.json +58 -9
- package/io-package.json +27 -4
- package/lib/check.js +37 -0
- package/lib/deviceController.js +182 -0
- package/lib/exposes.js +34 -3
- package/lib/messages.js +18 -0
- package/lib/states.js +2 -0
- package/lib/statesController.js +127 -0
- package/lib/utils.js +20 -11
- package/lib/z2mController.js +80 -0
- package/main.js +80 -378
- package/package.json +9 -5
- package/lib/groups.js +0 -68
package/README.md
CHANGED
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
Zigbee2MQTT adapter for ioBroker
|
|
17
17
|
|
|
18
|
+
## Adapter Documentation
|
|
19
|
+
|
|
20
|
+
[Adapter Documentation](./docs/wiki.md)
|
|
21
|
+
|
|
18
22
|
## Changelog
|
|
19
23
|
|
|
20
24
|
<!--
|
|
@@ -26,6 +30,18 @@ Zigbee2MQTT adapter for ioBroker
|
|
|
26
30
|
Placeholder for the next version (at the beginning of the line):
|
|
27
31
|
### **WORK IN PROGRESS**
|
|
28
32
|
-->
|
|
33
|
+
### 1.0.0 (2022-10-09)
|
|
34
|
+
|
|
35
|
+
**!!!BREAKING CHANGE!!!**
|
|
36
|
+
|
|
37
|
+
- (o0shojo0o) added options for external MQTT-Server
|
|
38
|
+
- (o0shojo0o) connection to zigbe2mqtt completely reworked and changed to MQTT
|
|
39
|
+
- (o0shojo0o) lots of bugfixes
|
|
40
|
+
- (o0shojo0o) automatically set button actions back to false
|
|
41
|
+
- (o0shojo0o) added support for Zigbee2MQTT feature simulated_brightness
|
|
42
|
+
- (o0shojo0o) added config check
|
|
43
|
+
- (arteck) added log output about coordinator details
|
|
44
|
+
|
|
29
45
|
### 0.2.0 (2022-10-04)
|
|
30
46
|
|
|
31
47
|
- (o0shojo0o) group states corrected
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Adaptereinstellungen für zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "Port",
|
|
3
|
+
"External MQTT-Server IP-Adress": "IP-Adresse des externen MQTT-Servers",
|
|
4
|
+
"External MQTT-Server Port": "Port des externen MQTT-Servers",
|
|
5
|
+
"Use external MQTT-Server": "Externen MQTT-Server verwenden",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "MQTT-Server IP-Adresse binden",
|
|
7
|
+
"MQTT-Server Port": "MQTT-Server Port",
|
|
8
|
+
"WebUi Address": "WebUi Adresse",
|
|
9
|
+
"WebUi Port": "WebUi Port",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Verwenden Sie Kelvin anstelle von Mired für die Farbtemperaturen",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT-Protokolle zu ioBroker-Protokollen"
|
|
7
|
-
"Debug Log Enabled": "Debug-Protokoll aktiviert"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT-Protokolle zu ioBroker-Protokollen"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Adapter settings for zigbee2mqtt",
|
|
3
|
-
"Server": "Server",
|
|
4
|
-
"Port": "Port",
|
|
3
|
+
"External MQTT-Server IP-Adress": "External MQTT-Server IP-Adress",
|
|
4
|
+
"External MQTT-Server Port": "External MQTT-Server Port",
|
|
5
|
+
"Use external MQTT-Server": "Use external MQTT-Server",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "MQTT-Server IP-Adress bind",
|
|
7
|
+
"MQTT-Server Port": "MQTT-Server Port",
|
|
8
|
+
"WebUi Address": "WebUi Address",
|
|
9
|
+
"WebUi Port": "WebUi Port",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Use Kelvin instead of mired for the color temps",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logs to ioBroker logs"
|
|
7
|
-
"Debug Log Enabled": "Debug Log Enabled"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logs to ioBroker logs"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Configuración del adaptador para zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "Puerto",
|
|
3
|
+
"External MQTT-Server IP-Adress": "Dirección IP del servidor MQTT externo",
|
|
4
|
+
"External MQTT-Server Port": "Puerto de servidor MQTT externo",
|
|
5
|
+
"Use external MQTT-Server": "Usar servidor MQTT externo",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Enlace de dirección IP del servidor MQTT",
|
|
7
|
+
"MQTT-Server Port": "Puerto del servidor MQTT",
|
|
8
|
+
"WebUi Address": "Dirección de interfaz de usuario web",
|
|
9
|
+
"WebUi Port": "Puerto WebUi",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Use Kelvin en lugar de mired para las temperaturas de color",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy de registros Zigbee2MQTT a registros de ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Registro de depuración habilitado"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy de registros Zigbee2MQTT a registros de ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Paramètres de l'adaptateur pour zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "Port",
|
|
3
|
+
"External MQTT-Server IP-Adress": "Adresse IP du serveur MQTT externe",
|
|
4
|
+
"External MQTT-Server Port": "Port serveur MQTT externe",
|
|
5
|
+
"Use external MQTT-Server": "Utiliser un serveur MQTT externe",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Liaison d'adresse IP MQTT-Server",
|
|
7
|
+
"MQTT-Server Port": "Port du serveur MQTT",
|
|
8
|
+
"WebUi Address": "Adresse de l'interface Web",
|
|
9
|
+
"WebUi Port": "Port WebUI",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Utilisez Kelvin au lieu de embourbé pour les températures de couleur",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT se connecte aux journaux ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Journal de débogage activé"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT se connecte aux journaux ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Impostazioni dell'adattatore per zigbee2mqtt",
|
|
3
|
-
"Server": "server",
|
|
4
|
-
"Port": "Porta",
|
|
3
|
+
"External MQTT-Server IP-Adress": "Indirizzo IP del server MQTT esterno",
|
|
4
|
+
"External MQTT-Server Port": "Porta del server MQTT esterno",
|
|
5
|
+
"Use external MQTT-Server": "Utilizzare un server MQTT esterno",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Bind dell'indirizzo IP del server MQTT",
|
|
7
|
+
"MQTT-Server Port": "Porta server MQTT",
|
|
8
|
+
"WebUi Address": "Indirizzo WebUi",
|
|
9
|
+
"WebUi Port": "Porta WebUi",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Usa Kelvin invece di mired per le temperature di colore",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT registra nei registri di ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Registro di debug abilitato"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT registra nei registri di ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Adapterinstellingen voor zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "
|
|
3
|
+
"External MQTT-Server IP-Adress": "Extern MQTT-server IP-adres",
|
|
4
|
+
"External MQTT-Server Port": "Externe MQTT-serverpoort",
|
|
5
|
+
"Use external MQTT-Server": "Externe MQTT-server gebruiken",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "MQTT-server IP-adres binden",
|
|
7
|
+
"MQTT-Server Port": "MQTT-serverpoort",
|
|
8
|
+
"WebUi Address": "WebUi-adres",
|
|
9
|
+
"WebUi Port": "WebUi-poort",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Gebruik Kelvin in plaats van mired voor de kleurtemperaturen",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logt in op ioBroker logs"
|
|
7
|
-
"Debug Log Enabled": "Foutopsporingslogboek ingeschakeld"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logt in op ioBroker logs"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Ustawienia adaptera dla zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "
|
|
3
|
+
"External MQTT-Server IP-Adress": "Zewnętrzny adres IP serwera MQTT",
|
|
4
|
+
"External MQTT-Server Port": "Zewnętrzny port serwera MQTT",
|
|
5
|
+
"Use external MQTT-Server": "Użyj zewnętrznego serwera MQTT",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Powiązanie adresu IP serwera MQTT",
|
|
7
|
+
"MQTT-Server Port": "Port serwera MQTT",
|
|
8
|
+
"WebUi Address": "Adres WebUI",
|
|
9
|
+
"WebUi Port": "Port WebUI",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Użyj Kelvina zamiast mired dla temperatury kolorów",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT loguje do logów ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Dziennik debugowania włączony"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT loguje do logów ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Configurações do adaptador para zigbee2mqtt",
|
|
3
|
-
"Server": "Servidor",
|
|
4
|
-
"Port": "Porta",
|
|
3
|
+
"External MQTT-Server IP-Adress": "Endereço IP do Servidor MQTT Externo",
|
|
4
|
+
"External MQTT-Server Port": "Porta externa do servidor MQTT",
|
|
5
|
+
"Use external MQTT-Server": "Usar servidor MQTT externo",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Ligação de endereço IP do servidor MQTT",
|
|
7
|
+
"MQTT-Server Port": "Porta do servidor MQTT",
|
|
8
|
+
"WebUi Address": "Endereço WebUi",
|
|
9
|
+
"WebUi Port": "Porta WebUI",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Use Kelvin em vez de atolado para as temperaturas de cor",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logs para logs ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Log de depuração ativado"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Proxy Zigbee2MQTT logs para logs ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "Настройки адаптера для zigbee2mqtt",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "Порт",
|
|
3
|
+
"External MQTT-Server IP-Adress": "IP-адрес внешнего MQTT-сервера",
|
|
4
|
+
"External MQTT-Server Port": "Порт внешнего MQTT-сервера",
|
|
5
|
+
"Use external MQTT-Server": "Использовать внешний MQTT-сервер",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "Привязка IP-адреса MQTT-сервера",
|
|
7
|
+
"MQTT-Server Port": "Порт MQTT-сервера",
|
|
8
|
+
"WebUi Address": "Адрес веб-интерфейса",
|
|
9
|
+
"WebUi Port": "Порт веб-интерфейса",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "Используйте шкалу Кельвина вместо майреда для цветовой температуры.",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "Проксировать журналы Zigbee2MQTT в журналы ioBroker"
|
|
7
|
-
"Debug Log Enabled": "Журнал отладки включен"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "Проксировать журналы Zigbee2MQTT в журналы ioBroker"
|
|
8
12
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zigbee2mqtt adapter settings": "zigbee2mqtt 的适配器设置",
|
|
3
|
-
"Server": "
|
|
4
|
-
"Port": "
|
|
3
|
+
"External MQTT-Server IP-Adress": "外部 MQTT-服务器 IP 地址",
|
|
4
|
+
"External MQTT-Server Port": "外部 MQTT 服务器端口",
|
|
5
|
+
"Use external MQTT-Server": "使用外部 MQTT-Server",
|
|
6
|
+
"MQTT-Server IP-Adress bind": "MQTT-服务器 IP 地址绑定",
|
|
7
|
+
"MQTT-Server Port": "MQTT-服务器端口",
|
|
8
|
+
"WebUi Address": "网页界面地址",
|
|
9
|
+
"WebUi Port": "WebUI 端口",
|
|
5
10
|
"Use Kelvin instead of mired for the color temps": "使用 Kelvin 而不是 mired 作为色温",
|
|
6
|
-
"Proxy Zigbee2MQTT logs to ioBroker logs": "代理 Zigbee2MQTT 日志到 ioBroker 日志"
|
|
7
|
-
"Debug Log Enabled": "启用调试日志"
|
|
11
|
+
"Proxy Zigbee2MQTT logs to ioBroker logs": "代理 Zigbee2MQTT 日志到 ioBroker 日志"
|
|
8
12
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -2,14 +2,68 @@
|
|
|
2
2
|
"i18n": true,
|
|
3
3
|
"type": "panel",
|
|
4
4
|
"items": {
|
|
5
|
-
"
|
|
5
|
+
"externalMqttServerIP": {
|
|
6
6
|
"type": "text",
|
|
7
|
-
"label": "Server",
|
|
7
|
+
"label": "External MQTT-Server IP-Adress",
|
|
8
|
+
"newLine": true,
|
|
9
|
+
"disabled": "!data.useExternalMqtt"
|
|
10
|
+
},
|
|
11
|
+
"externalMqttServerPort": {
|
|
12
|
+
"type": "number",
|
|
13
|
+
"label": "External MQTT-Server Port",
|
|
14
|
+
"newLine": false,
|
|
15
|
+
"disabled": "!data.useExternalMqtt"
|
|
16
|
+
},
|
|
17
|
+
"useExternalMqtt": {
|
|
18
|
+
"type": "checkbox",
|
|
19
|
+
"label": "Use external MQTT-Server",
|
|
20
|
+
"newLine": true
|
|
21
|
+
},
|
|
22
|
+
"staticText0": {
|
|
23
|
+
"type": "staticText",
|
|
24
|
+
"text": "",
|
|
8
25
|
"newLine": true
|
|
9
26
|
},
|
|
10
|
-
"
|
|
27
|
+
"mqttServerIPBind": {
|
|
28
|
+
"type": "ip",
|
|
29
|
+
"label": "MQTT-Server IP-Adress bind",
|
|
30
|
+
"listenOnAllPorts": true,
|
|
31
|
+
"newLine": true,
|
|
32
|
+
"disabled": "data.useExternalMqtt"
|
|
33
|
+
},
|
|
34
|
+
"mqttServerPort": {
|
|
11
35
|
"type": "number",
|
|
12
|
-
"label": "Port",
|
|
36
|
+
"label": "MQTT-Server Port",
|
|
37
|
+
"newLine": false,
|
|
38
|
+
"disabled": "data.useExternalMqtt"
|
|
39
|
+
},
|
|
40
|
+
"staticText1": {
|
|
41
|
+
"type": "staticText",
|
|
42
|
+
"text": "",
|
|
43
|
+
"newLine": true
|
|
44
|
+
},
|
|
45
|
+
"webUIScheme": {
|
|
46
|
+
"type": "select",
|
|
47
|
+
"options": [
|
|
48
|
+
{
|
|
49
|
+
"label": "HTTP",
|
|
50
|
+
"value": "http"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"label": "HTTPS",
|
|
54
|
+
"value": "https"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"newLine": true
|
|
58
|
+
},
|
|
59
|
+
"webUIServer": {
|
|
60
|
+
"type": "text",
|
|
61
|
+
"label": "WebUi Address",
|
|
62
|
+
"newLine": false
|
|
63
|
+
},
|
|
64
|
+
"webUIPort": {
|
|
65
|
+
"type": "number",
|
|
66
|
+
"label": "WebUi Port",
|
|
13
67
|
"newLine": false
|
|
14
68
|
},
|
|
15
69
|
"useKelvin": {
|
|
@@ -21,11 +75,6 @@
|
|
|
21
75
|
"type": "checkbox",
|
|
22
76
|
"label": "Proxy Zigbee2MQTT logs to ioBroker logs",
|
|
23
77
|
"newLine": true
|
|
24
|
-
},
|
|
25
|
-
"debugLogEnabled": {
|
|
26
|
-
"type": "checkbox",
|
|
27
|
-
"label": "Debug Log Enabled",
|
|
28
|
-
"newLine": true
|
|
29
78
|
}
|
|
30
79
|
}
|
|
31
80
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zigbee2mqtt",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.0.0": {
|
|
7
|
+
"en": "*!!!BREAKING CHANGE!!!**\n\nadded options for external MQTT-Server\nconnection to zigbe2mqtt completely reworked and changed to MQTT\nlots of bugfixes\nautomatically set button actions back to false\nadded support for Zigbee2MQTT feature simulated_brightness\nadded config check\nadded log output about coordinator details",
|
|
8
|
+
"de": "*! BREAKING CHANGE*\n\nweitere Optionen für externen MQTT-Server\nanschluss an Zickbe2mqt komplett überarbeitet und in MQTT geändert\nviele bugfixes\nautomatisch schaltfläche aktionen wieder auf false setzen\nunterstützung für Zigbee2MQTT Funktion simuliert_brightness\nzusatzprüfung\nlog ausgabe von koordinatordaten hinzugefügt",
|
|
9
|
+
"ru": "*! ИЗМЕНЕНИЕ ЗАВТРА*\n\nдобавлены опции для внешнего MQTT-Server\nподключение к zigbe2mqtt полностью переработано и изменено в MQTT\nмного багфиксов\nавтоматически установите кнопки действия назад к ложному\nдобавлена поддержка функции Zigbee2MQTT simulated_brightness\nдобавлено config check\nдобавил выход журнала о деталях координатора",
|
|
10
|
+
"pt": "*! QUE GRANDE MUDANÇA\n\nopções adicionadas para MQTT-Server externo\nconexão com zigbe2mqtt completamente retrabalhado e alterado para MQTT\nlotes de correções de bugs\nautomaticamente definir as ações do botão de volta ao falso\nsuporte adicionado para recurso Zigbee2MQTT simulado_brightness\nverificação de configuração adicionada\nadicionado saída de log sobre detalhes do coordenador",
|
|
11
|
+
"nl": "♪ \n\nvoegde opties toe voor externe MQT-Server\nverbinding met Zigbe2mqt volledig herwerkt en veranderd in MQT\nveel insectenfixen\nautomatisch de knoppen opzetten naar valse\nsteun toegevoegd voor Zigbee2MQT\nvoegde config check toe\nvertaling:",
|
|
12
|
+
"fr": "*! CHANGE DE BREAKING*\n\noptions supplémentaires pour MQTT-Server externe\nconnexion à zigbe2mqtt complètement retravaillé et changé à MQTT\nbeaucoup de bugfixes\ndéfinir automatiquement les actions de bouton retour à false\nsupport ajouté pour la fonction Zigbee2MQTT simulée_brightness\nconfig check ajouté\nproduit log ajouté sur les coordonnées des coordonnateurs",
|
|
13
|
+
"it": "# CAMBIAMENTO\n\nopzioni aggiuntive per MQTT-Server esterno\nconnessione a zigbe2mqt completamente rielaborato e cambiato in MQTT\nmolti bugfix\nautomaticamente impostare le azioni del pulsante indietro a false\nsupporto aggiunto per Zigbee2MQTT funzione simulated_brightness\ncontrollo configurazione aggiunto\nuscita di log aggiunto sui dettagli del coordinatore",
|
|
14
|
+
"es": "*! ¡CAMBIANDO\n\nopciones adicionales para MQTT-Server externo\nconexión a zigbe2mqtt completamente rediseñado y cambiado a MQTT\nmuchos bugfixes\nautomáticamente poner las acciones del botón de nuevo a falso\nsoporte añadido para función Zigbee2MQTT simulado_brightness\ncontrol de configuración añadido\nproducción de registro agregada sobre detalles de coordinadores",
|
|
15
|
+
"pl": "! BREAKING CHANGE! (ANG.)\n\nobsługa MQTT-Server\nzigbe2mqtt całkowicie przerobił i zmienił MQTT\nwiele błędów\nautomatycznie ustawione akcje przycisku\ndodano obsługę Zigbee2MQTT\nsprawdzać\ndokładna produkcja logów na temat szczegółów koordynacji",
|
|
16
|
+
"zh-cn": "页:1 BREAKREANGE*\n\n外贸总协定\n与zigbe2mqt完全重新工作,并改装到外贸总协定\n批发\n自动建立但顿行动回到虚假的行动\n对Zigbee2MQTT特征的增援\n增幅检查\n协调员的产出"
|
|
17
|
+
},
|
|
6
18
|
"0.2.0": {
|
|
7
19
|
"en": "group states corrected\nadded option 'Use Kelvin instead of mired for the color temps'\nremove available logic, now will use the information from z2m\nrename noLogDevices to logfilter\nlots of bugfixes\nadded noLogDevices functionality\nadded debugmessage for specific device functionality\nadded some states are default false\nadded support for scenes defined on a device\nfix available state role\nfix subscribeWritableStates",
|
|
8
20
|
"de": "gruppenzustände korrigiert\nzusatzoption 'Use Kelvin anstelle von mired für die Farbe Tempos '\ndie verfügbare logik entfernen, jetzt die informationen von z2m verwenden\numbenennen noLogDevices zum Logfilter\nviele bugfixes\nnoLogDevices Funktionalität hinzugefügt\ndebugmessage für spezifische gerätefunktionalität\neinige zustände standardmäßig falsch hinzugefügt\nunterstützung für szenen, die auf einem gerät definiert sind\nfix verfügbare zustandsrolle\nabonnierenWritableState",
|
|
@@ -105,9 +117,14 @@
|
|
|
105
117
|
"pl": "Zigbee2MQTT",
|
|
106
118
|
"zh-cn": "Zigbee2MQTT"
|
|
107
119
|
},
|
|
108
|
-
"link": "
|
|
120
|
+
"link": "%webUIScheme%://%webUIServer%:%webUIPort%",
|
|
109
121
|
"fa-icon": "</i><img style='width:24px;margin-bottom:-6px;' src='/adapter/zigbee2mqtt/zigbee2mqtt.png'><i>"
|
|
110
122
|
},
|
|
123
|
+
"localLinks": {
|
|
124
|
+
"_default": {
|
|
125
|
+
"link": "%webUIScheme%://%webUIServer%:%webUIPort%"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
111
128
|
"dependencies": [
|
|
112
129
|
{
|
|
113
130
|
"js-controller": ">=3.3.22"
|
|
@@ -120,8 +137,14 @@
|
|
|
120
137
|
]
|
|
121
138
|
},
|
|
122
139
|
"native": {
|
|
123
|
-
"
|
|
124
|
-
"
|
|
140
|
+
"useExternalMqtt": false,
|
|
141
|
+
"externalMqttServerIP": "",
|
|
142
|
+
"externalMqttServerPort": 1883,
|
|
143
|
+
"mqttServerIPBind": "0.0.0.0",
|
|
144
|
+
"mqttServerPort": 1885,
|
|
145
|
+
"webUIScheme": "http",
|
|
146
|
+
"webUIServer": "",
|
|
147
|
+
"webUIPort": 8080,
|
|
125
148
|
"debugLogEnabled": false,
|
|
126
149
|
"proxyZ2MLogs": true,
|
|
127
150
|
"useKelvin": false
|
package/lib/check.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
async function checkConfig(config, log) {
|
|
3
|
+
const checkAPIOptions = {
|
|
4
|
+
legacy_api_enabled: config.advanced.legacy_api != false,
|
|
5
|
+
legacy_availability_payload_enabled: config.advanced.legacy_availability_payload != false,
|
|
6
|
+
device_legacy_enabled: config.device_options.legacy != false
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
if (Object.values(checkAPIOptions).filter(x => x == true).length > 0) {
|
|
10
|
+
log.error('===================================================');
|
|
11
|
+
log.error('===================================================');
|
|
12
|
+
if (checkAPIOptions.legacy_api_enabled == true) {
|
|
13
|
+
log.error('Legacy api is activated, so the adapter can not work correctly!!!');
|
|
14
|
+
log.error('Please add the following lines to your Zigbee2MQTT configuration.yaml:');
|
|
15
|
+
log.error('legacy_api: false');
|
|
16
|
+
log.error('');
|
|
17
|
+
}
|
|
18
|
+
if (checkAPIOptions.legacy_availability_payload_enabled == true) {
|
|
19
|
+
log.error('Legacy Availability Payload is activated, thus the adapter cannot represent the availability of the devices!!!');
|
|
20
|
+
log.error('Please add the following lines to your Zigbee2MQTT configuration.yaml:');
|
|
21
|
+
log.error('legacy_availability_payload: false');
|
|
22
|
+
log.error('');
|
|
23
|
+
}
|
|
24
|
+
if (checkAPIOptions.device_legacy_enabled == true) {
|
|
25
|
+
log.error('Device Legacy Payload is activated, therefore the adapter may process the states of the devices correctly!!!');
|
|
26
|
+
log.error('Please add the following lines to your Zigbee2MQTT configuration.yaml:');
|
|
27
|
+
log.error('device_options:');
|
|
28
|
+
log.error(' legacy: false');
|
|
29
|
+
}
|
|
30
|
+
log.error('===================================================');
|
|
31
|
+
log.error('===================================================');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
checkConfig: checkConfig,
|
|
37
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
const states = require('./states').states;
|
|
2
|
+
const defineDeviceFromExposes = require('./exposes').defineDeviceFromExposes;
|
|
3
|
+
const utils = require('./utils');
|
|
4
|
+
const createCache = {};
|
|
5
|
+
|
|
6
|
+
class DeviceController {
|
|
7
|
+
constructor(adapter, deviceCache, groupCache, useKelvin) {
|
|
8
|
+
this.adapter = adapter;
|
|
9
|
+
this.groupCache = groupCache;
|
|
10
|
+
this.deviceCache = deviceCache;
|
|
11
|
+
this.useKelvin = useKelvin;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async createDeviceDefinitions(exposes) {
|
|
15
|
+
utils.clearArray(this.deviceCache);
|
|
16
|
+
for (const expose of exposes) {
|
|
17
|
+
if (expose.definition != null) {
|
|
18
|
+
// search for scenes in the endpoints and build them into an array
|
|
19
|
+
let scenes = [];
|
|
20
|
+
for (const key in expose.endpoints) {
|
|
21
|
+
if (expose.endpoints[key].scenes) {
|
|
22
|
+
scenes = scenes.concat(expose.endpoints[key].scenes);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
await defineDeviceFromExposes(this.deviceCache, expose.friendly_name, expose.ieee_address, expose.definition, expose.power_source, scenes, this.useKelvin);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async defineGroupDevice(devices, groupID, ieee_address, scenes, useKelvin) {
|
|
32
|
+
const newDevice = {
|
|
33
|
+
id: groupID,
|
|
34
|
+
ieee_address: ieee_address,
|
|
35
|
+
icon: undefined,
|
|
36
|
+
states: [
|
|
37
|
+
states.state,
|
|
38
|
+
states.brightness,
|
|
39
|
+
states.color,
|
|
40
|
+
states.brightness_move,
|
|
41
|
+
states.colortemp_move,
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const colortemp = {
|
|
46
|
+
id: 'colortemp',
|
|
47
|
+
prop: 'color_temp',
|
|
48
|
+
name: 'Color temperature',
|
|
49
|
+
icon: undefined,
|
|
50
|
+
role: 'level.color.temperature',
|
|
51
|
+
write: true,
|
|
52
|
+
read: true,
|
|
53
|
+
type: 'number',
|
|
54
|
+
unit: useKelvin == true ? 'K' : 'mired',
|
|
55
|
+
setter: (value) => {
|
|
56
|
+
return utils.toMired(value);
|
|
57
|
+
},
|
|
58
|
+
getter: (payload) => {
|
|
59
|
+
if (useKelvin == true) {
|
|
60
|
+
return utils.miredKelvinConversion(payload.color_temp);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return payload.color_temp;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
newDevice.states.push(colortemp);
|
|
70
|
+
|
|
71
|
+
// Create buttons for scenes
|
|
72
|
+
for (const scene of scenes) {
|
|
73
|
+
const sceneSate = {
|
|
74
|
+
id: `scene_${scene.id}`,
|
|
75
|
+
prop: `scene_recall`,
|
|
76
|
+
name: scene.name,
|
|
77
|
+
icon: undefined,
|
|
78
|
+
role: 'button',
|
|
79
|
+
write: true,
|
|
80
|
+
read: true,
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
setter: (value) => (value) ? scene.id : undefined
|
|
83
|
+
};
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
newDevice.states.push(sceneSate);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// if the device is already present in the cache, remove it
|
|
89
|
+
utils.removeDeviceByIeee(devices, ieee_address);
|
|
90
|
+
devices.push(newDevice);
|
|
91
|
+
}
|
|
92
|
+
async createGroupDefinitions(exposes) {
|
|
93
|
+
utils.clearArray(this.groupCache);
|
|
94
|
+
for (const expose of exposes) {
|
|
95
|
+
await this.defineGroupDevice(this.groupCache, expose.friendly_name, `group_${expose.id}`, expose.scenes, this.useKelvin);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async createOrUpdateDevices() {
|
|
100
|
+
for (const device of this.groupCache.concat(this.deviceCache)) {
|
|
101
|
+
const deviceName = device.id == device.ieee_address ? '' : device.id;
|
|
102
|
+
if (!createCache[device.ieee_address] || createCache[device.ieee_address].common.name != deviceName) {
|
|
103
|
+
const deviceObj = {
|
|
104
|
+
type: 'device',
|
|
105
|
+
common: {
|
|
106
|
+
name: deviceName,
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
native: {}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
if (!device.ieee_address.includes('group_')) {
|
|
113
|
+
deviceObj.common.statusStates = {
|
|
114
|
+
onlineId: `${this.adapter.name}.${this.adapter.instance}.${device.ieee_address}.available`
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
//@ts-ignore
|
|
119
|
+
await this.adapter.extendObjectAsync(device.ieee_address, deviceObj);
|
|
120
|
+
createCache[device.ieee_address] = deviceObj;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Here it is checked whether the scenes match the current data from z2m.
|
|
124
|
+
// If necessary, scenes are automatically deleted from ioBroker.
|
|
125
|
+
const sceneStates = await this.adapter.getStatesAsync(`${device.ieee_address}.scene_*`);
|
|
126
|
+
const sceneIDs = Object.keys(sceneStates);
|
|
127
|
+
for (const sceneID of sceneIDs) {
|
|
128
|
+
const stateID = sceneID.split('.')[3];
|
|
129
|
+
if (device.states.find(x => x.id == stateID) == null) {
|
|
130
|
+
this.adapter.delObject(sceneID);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
for (const state of device.states) {
|
|
135
|
+
if (!createCache[device.ieee_address][state.id] || createCache[device.ieee_address][state.id].name != state.name) {
|
|
136
|
+
const iobState = await this.copyAndCleanStateObj(state);
|
|
137
|
+
await this.adapter.extendObjectAsync(`${device.ieee_address}.${state.id}`, {
|
|
138
|
+
type: 'state',
|
|
139
|
+
common: iobState,
|
|
140
|
+
native: {},
|
|
141
|
+
});
|
|
142
|
+
createCache[device.ieee_address][state.id] = state.name;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
async renameDeviceInCache(messageObj) {
|
|
149
|
+
const renamedDevice = this.groupCache.concat(this.deviceCache).find(x => x.id == messageObj.payload.data.from);
|
|
150
|
+
renamedDevice.id = messageObj.payload.data.to;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async processRemoveEvent(messageObj) {
|
|
154
|
+
if (messageObj.payload && messageObj.payload.type == 'device_leave') {
|
|
155
|
+
this.adapter.setStateAsync(`${messageObj.payload.data.ieee_address}.available`, false, true);
|
|
156
|
+
this.adapter.extendObject(`${messageObj.payload.data.ieee_address}`, { common: { name: 'Device removed!', } });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async copyAndCleanStateObj(state) {
|
|
161
|
+
const iobState = { ...state };
|
|
162
|
+
const blacklistedKeys = [
|
|
163
|
+
'setter',
|
|
164
|
+
'setterOpt',
|
|
165
|
+
'getter',
|
|
166
|
+
'setattr',
|
|
167
|
+
'readable',
|
|
168
|
+
'writable',
|
|
169
|
+
'isOption',
|
|
170
|
+
'inOptions',
|
|
171
|
+
'isEvent',
|
|
172
|
+
];
|
|
173
|
+
for (const blacklistedKey of blacklistedKeys) {
|
|
174
|
+
delete iobState[blacklistedKey];
|
|
175
|
+
}
|
|
176
|
+
return iobState;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
module.exports = {
|
|
181
|
+
DeviceController
|
|
182
|
+
};
|
package/lib/exposes.js
CHANGED
|
@@ -7,6 +7,8 @@ const rgb = require('./rgb');
|
|
|
7
7
|
const utils = require('./utils');
|
|
8
8
|
const colors = require('./colors');
|
|
9
9
|
|
|
10
|
+
const blacklistSimulatedBrightness = ['MFKZQ01LM'];
|
|
11
|
+
|
|
10
12
|
function genState(expose, role, name, desc) {
|
|
11
13
|
let state;
|
|
12
14
|
const readable = true; //expose.access > 0;
|
|
@@ -622,7 +624,6 @@ function createFromExposes(deviceID, ieee_address, definitions, power_source, sc
|
|
|
622
624
|
if (hasHold && hasRelease && actionName.includes('release')) continue;
|
|
623
625
|
// is hold state ?
|
|
624
626
|
if (hasHold && hasRelease && actionName.includes('hold')) {
|
|
625
|
-
const releaseActionName = actionName.replace('hold', 'release');
|
|
626
627
|
state = {
|
|
627
628
|
id: actionName.replace(/\*/g, ''),
|
|
628
629
|
prop: 'action',
|
|
@@ -631,8 +632,20 @@ function createFromExposes(deviceID, ieee_address, definitions, power_source, sc
|
|
|
631
632
|
role: 'button',
|
|
632
633
|
write: false,
|
|
633
634
|
read: true,
|
|
635
|
+
def: false,
|
|
634
636
|
type: 'boolean',
|
|
635
|
-
getter:
|
|
637
|
+
getter: (payload) => {
|
|
638
|
+
if (payload.action === actionName) {
|
|
639
|
+
return true;
|
|
640
|
+
}
|
|
641
|
+
if (payload.action === actionName.replace('hold', 'release')) {
|
|
642
|
+
return false;
|
|
643
|
+
}
|
|
644
|
+
if (payload.action === `${actionName}_release`) {
|
|
645
|
+
return false;
|
|
646
|
+
}
|
|
647
|
+
return undefined;
|
|
648
|
+
},
|
|
636
649
|
};
|
|
637
650
|
} else {
|
|
638
651
|
state = {
|
|
@@ -644,12 +657,30 @@ function createFromExposes(deviceID, ieee_address, definitions, power_source, sc
|
|
|
644
657
|
write: false,
|
|
645
658
|
read: true,
|
|
646
659
|
type: 'boolean',
|
|
647
|
-
|
|
660
|
+
def: false,
|
|
648
661
|
isEvent: true,
|
|
662
|
+
getter: payload => (payload.action === actionName) ? true : undefined,
|
|
649
663
|
};
|
|
650
664
|
}
|
|
651
665
|
pushToStates(state, expose.access);
|
|
652
666
|
}
|
|
667
|
+
if (!blacklistSimulatedBrightness.includes(definitions.model)) {
|
|
668
|
+
pushToStates({
|
|
669
|
+
id: 'simulated_brightness',
|
|
670
|
+
prop: 'brightness',
|
|
671
|
+
name: 'Simulated brightness',
|
|
672
|
+
icon: undefined,
|
|
673
|
+
role: 'level.dimmer',
|
|
674
|
+
write: true,
|
|
675
|
+
read: true,
|
|
676
|
+
type: 'number',
|
|
677
|
+
unit: '%',
|
|
678
|
+
def: 0,
|
|
679
|
+
getter: payload => {
|
|
680
|
+
return utils.bulbLevelToAdapterLevel(payload.brightness);
|
|
681
|
+
},
|
|
682
|
+
}, 1);
|
|
683
|
+
}
|
|
653
684
|
state = null;
|
|
654
685
|
break;
|
|
655
686
|
}
|
package/lib/messages.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
async function adapterInfo(config, log) {
|
|
2
|
+
log.info(`Zigbee2MQTT Frontend Server: ${config.server}`);
|
|
3
|
+
log.info(`Zigbee2MQTT Frontend Port: ${config.port}`);
|
|
4
|
+
log.info(`Zigbee2MQTT Debug Log: ${config.debugLogEnabled ? 'activated' : 'deactivated'}`);
|
|
5
|
+
log.info(`Proxy Zigbee2MQTT Logs to ioBroker Logs: ${config.proxyZ2MLogs ? 'activated' : 'deactivated'}`);
|
|
6
|
+
log.info(`Use Kelvin: ${config.useKelvin ? 'yes' : 'no'}`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function zigbee2mqttInfo(payload, log) {
|
|
10
|
+
log.info(`Zigbee2MQTT Version: ${payload.version} `);
|
|
11
|
+
log.info(`Coordinator type: ${payload.coordinator.type} Version: ${payload.coordinator.meta.revision} Serial: ${payload.config.serial.port}`);
|
|
12
|
+
log.info(`Network panid ${payload.network.pan_id} channel: ${payload.network.channel} ext_pan_id: ${payload.network.extended_pan_id}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = {
|
|
16
|
+
adapterInfo: adapterInfo,
|
|
17
|
+
zigbee2mqttInfo: zigbee2mqttInfo,
|
|
18
|
+
};
|