[Neues Modul] Xiaomi Smart Home ohne Gateway direkt an FHEM

Begonnen von neumann, 22 Februar 2018, 18:00:22

Vorheriges Thema - Nächstes Thema

nanocosmos

Danke, habe es heute noch nicht geschafft zu flashen.
Mache mir nur etwas Gedanken, ob das mit der neuen Firmware funktionieren wird.
Klar bei der Installation kann ich die Router ganz nahe an den Coordinator bringen. Aber danach kommen sie in ihrer Funktion als Verteiler ja doch weit weg vom Coordinator.
Bleiben die Router dann weiterhin im Coordinator oder sucht der sich dann wieder die nächsten 5 Devices. [emoji848]

Blauhorn

Hallo in die Runde,

ich brauch auch mal etwas Nachhilfe.
Bei den neueren Versionen von zigbee2mqtt können ja auch Gerätespezifische Werte mit übertragen werden, z.B. bei den Tradfri-Birnen die transition, die eine Übergangszeit zum neuen Helligkeitswert oder color_temp-Wert in Sekunden enthält.
Im payload sieht das auf dem topic "zigbee2mqtt/IKEA_L3/set" so aus:

{
  "brightness":"180",
  "transition":"5"
}


Wie kann ich dies aus FHEM heraus schicken?

Danke für Ideen
blauhorn
1xBananaPi; 1x FB7490; 1xCUL433; 1x CC2530+CC2591; OpenMiLight-Gateway; 1xHMUART; HM-LC-Sw4-DR; Sonoff* mit TASMOTA, LEDController; MySensors; zigbee2mqtt;

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Blauhorn

Hm... Da muss ich erstmal Lesen und Wissen aufbauen. Hab ja jetzt alles als XiaomiMQTTDevice definiert.
1xBananaPi; 1x FB7490; 1xCUL433; 1x CC2530+CC2591; OpenMiLight-Gateway; 1xHMUART; HM-LC-Sw4-DR; Sonoff* mit TASMOTA, LEDController; MySensors; zigbee2mqtt;

Blauhorn

Zitat von: Beta-User am 14 September 2019, 16:09:51
Ja, mit MQTT2_DEVICE, z.B....
Hallo Beta-User,

blöde Frage vielleicht aber kann ich MQTT_DEVICE, XiaomiMQTTDevice und MQTT2_DEVICE in meinem System mischen, also Geräte von beiden Typen vorhalten, die dann trotzdem über denselben mosquitto laufen?

Hintergrund ist, dass ich zwar gerne komplett auf MQTT2 umsteigen würde, aber die familiären Ressourcenfenster das nicht am Stück zulassen. Ich habe jetz über 50 Geräte da bunt gewürfelt drin, Tasmota-Zeug, Milight-Zeug, Tradfri-Zeug, Xiaomi-Zeug, EspLEDController-Zeug...

Wenn ich jetzt einen Hauruck-Umbau mache lege ich für eine gewisse Zeit alles hier auf Steinzeitniveau zurück, deswegen würde ich das lieber Stück für Stück machen, und mit den nicht-kritischen Lampen beginnen.

Die Fußbodenheizung mit den Xiaomi-Tempsensoren und Sonoff-Tasmota-Aktoren will ich nachziehen, wenn ich bissl sattelfester bin. Deswegen die Frage, ob sich das gegenseitig behindert, wenn ich z.B. erstmal nur die Tradfri-Lampen und FBs auf MQTT2 umstelle.
1xBananaPi; 1x FB7490; 1xCUL433; 1x CC2530+CC2591; OpenMiLight-Gateway; 1xHMUART; HM-LC-Sw4-DR; Sonoff* mit TASMOTA, LEDController; MySensors; zigbee2mqtt;

Beta-User

Zitat von: Blauhorn am 16 September 2019, 08:10:59
blöde Frage vielleicht aber kann ich MQTT_DEVICE, XiaomiMQTTDevice und MQTT2_DEVICE in meinem System mischen, also Geräte von beiden Typen vorhalten, die dann trotzdem über denselben mosquitto laufen?
Hmm, ist nicht blöd, hier eigentlich reichlich OT...

Also: Du kannst ohne weiteres auch einen MQTT2_CLIENT auf den mosquitto lauschen lassen, und das dann "Stück für Stück" machen.

ABER: das ist vermutlich reichlich mehr Arbeit, als autocreate aktiv sein zu lassen und dann nur noch die Feinarbeiten selbst zu machen. Ich hätte da ein paar Ideen, aber das geht hier definitiv zu weit. Daher bei Interesse bitte einen separaten Thread zum Thema "Umzug" aufzumachen (im MQTT-Bereich).

Bitte dort dann auflisten, welches der 50 Geräte wie mit dem MQTT-Server spricht, und ggf. klarstellen, wenn nicht MQTT_DEVICE direkt genutzt wird. Also z.B.:
- via zigbee2mqtt: 30 Geräte ( 18 Sensoren, 8 dimmbare Tradfri, 2 Vollfarben-tint, 2 Tradfri-FB's, alle XiaomiMQTTDevice)
- via sidoh-Bridge: 10 MiLight-Bulbs (in 8 Gruppen, dazu 4 FB's, derzeit als MQTT_MILIGHT_DEVICE laufend)
- 10 einzelne ESP's, alle mit Tasmota-Firmware (5 als MQTT_DEVICE, 5 davon als TASMOTA_DEVICE)
(Oder ist da sogar MQTT_GENERIC_BRIDGE+Dummy im Einsatz?)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

petjek

Guten Morgen zusammen,

nach einigen technischen Problemen habe ich meinen zigbee2mqtt-Stick wieder am Laufen. Da bei mir alles auf einem Intel NUC unter Proxmox läuft, hat der Stick nun seine eigene VM (FHEM läuft in einem LXC, wo das Durchreichen von mehr als einem USB-Gerät nicht so recht klappen will).
Wenn ich nun eine neue bridge wie beschrieben
define xBridge XiaomiMQTTDevice bridge
anlege, stimmen die Readings nicht und die Bridge ist und bleibt offline.
config {"version":"1.5.1","commit":"ac3b924","log_level":"info","permit_join":true} 2019-09-23 08:42:54
state offline 2019-09-23 08:42:53
transmission-state outgoing publish acknowledged 2019-09-23 08:43:01

Das IODev wird bei der Anlage automatisch übernommen. Wenn ich mittels MQTT.fx mitlese, werden auch aktuelle Daten (z.B. "version":"1.6.0" usw.) angezeigt.
Aber wie man sieht wird das Device auch als offline erkannt bzw. tauchen immer wieder "alte" Daten auf. Logisch, dass im Folgenden auch keine Devices automatisch angelegt werden.
Im Original-Beitrag auf der ersten Seite steht, dass in der index.js davon ausgegangen wird, dass der Dienst auf dem gleichen System wie FHEM läuft. Gilt das immer noch? Oder stammt das noch aus der Zeit vor koenkk?
Als Alternative habe ich hier gelesen, dass man auch mit MQTT2-Devices arbeiten kann. Das geht dann so wie hier
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Define_eines_MQTT2-Devices_als_.22Bridge.22
beschrieben aber nur mit einem MQTT2-Server? Also nicht mit meinem laufenden Mosquitto?
Abgesehen davon hat vielleicht jemand eine Idee, warum es mit dem XiaomiMQTTDevice als Bridge nicht klappen will? Liegen irgendwo noch "alte" Daten rum, die ich ggf. erst löschen muss?

LG
Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

Beta-User

Doch, die MQTT2-Lösung geht auch mit mosquitto. Du mußt dann eben einen MQTT2_CLIENT als IO nutzen, was etwas schwieriger ist. Siehe dazu im Wiki (MQTT2_CLIENT) zu dem "vorgelagerten" attrTemplate zum Vereinzeln der "eigentlichen" Datenquellen. Bitte unbedingt ein update (Stand gestern) machen, die template-File hat sich geändert...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Kawaci

Hallo! Kann mir wer helfen bei den tradfri rgb led die ich über zb2mqtt eingebunden habe die farbe zu steuern? So wie ein color picker ungefähr? Bekomme nur x y werte für die farbe!

petjek

Zitat von: Beta-User am 23 September 2019, 09:17:32
Doch, die MQTT2-Lösung geht auch mit mosquitto. Du mußt dann eben einen MQTT2_CLIENT als IO nutzen, was etwas schwieriger ist. Siehe dazu im Wiki (MQTT2_CLIENT) zu dem "vorgelagerten" attrTemplate zum Vereinzeln der "eigentlichen" Datenquellen. Bitte unbedingt ein update (Stand gestern) machen, die template-File hat sich geändert...
Okay, ich glaube eigentlich alles richtig gemacht zu haben. Sicherheitshalber habe ich auch das basetopic wieder auf Standard zurückgestellt.
Ich habe ein MQTT2_Client angelegt
defmod MQTT2Client MQTT2_CLIENT 192.168.50.13:1883
attr MQTT2Client alias MQTT2-Bridge
attr MQTT2Client group MQTT
attr MQTT2Client icon mqtt
attr MQTT2Client room Geräte

setstate MQTT2Client opened
setstate MQTT2Client 2019-09-23 11:07:29 state opened

das jetzt als IODev für das MQTT2-Device fungiert.

In der configuration.yaml habe ich die client_id 'zigbee_bridge' eingefügt und anschließend den Dienst einmal neu gestartet.
Das MQTT2-Device sieht so aus:
defmod MQTT2_zigbee_bridge MQTT2_DEVICE zigbee_bridge
attr MQTT2_zigbee_bridge IODev MQTT2Client
attr MQTT2_zigbee_bridge alias MQTT2ZIGBEE-Bridge
attr MQTT2_zigbee_bridge autocreate 1
attr MQTT2_zigbee_bridge bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]*)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_bridge getList devicelist:noArg log zigbee2mqtt/bridge/config/devices\
  networkmap_raw:noArg raw zigbee2mqtt/bridge/networkmap raw\
  networkmap_graphviz:noArg graphviz zigbee2mqtt/bridge/networkmap graphviz
attr MQTT2_zigbee_bridge group MQTT
attr MQTT2_zigbee_bridge icon mqtt
attr MQTT2_zigbee_bridge model zigbee2mqtt_bridge
attr MQTT2_zigbee_bridge readingList zigbee2mqtt/bridge/state:.* state\
  zigbee2mqtt/bridge/config/devices:.* {}\
  zigbee2mqtt/bridge/config/log_level:.* log_level\
  zigbee2mqtt/bridge/config/permit_join:.* permit_join\
  zigbee2mqtt/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  zigbee2mqtt/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  zigbee2mqtt/bridge/log:.* log\
  zigbee2mqtt/bridge/networkmap:.* {}\
  zigbee2mqtt/bridge/networkmap/graphviz:.* graphviz\
  zigbee2mqtt/bridge/networkmap/raw:.* raw\
  zigbee2mqtt/bridge/config:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_bridge room Geräte
attr MQTT2_zigbee_bridge setList log_level:debug,info,warn,error zigbee2mqtt/bridge/config/log_level $EVTPART1\
  permit_join:true,false zigbee2mqtt/bridge/config/permit_join $EVTPART1\
  remove:textField zigbee2mqtt/bridge/config/remove $EVTPART1\
  y_device_setting:textField zigbee2mqtt/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField zigbee2mqtt/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField zigbee2mqtt/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField zigbee2mqtt/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField zigbee2mqtt/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField zigbee2mqtt/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField zigbee2mqtt/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField zigbee2mqtt/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField zigbee2mqtt/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField zigbee2mqtt/bridge/config/elapsed $EVTPART1\
  z_last_seen:textField zigbee2mqtt/bridge/config/last_seen $EVTPART1\
  z_ban:textField zigbee2mqtt/bridge/config/ban $EVTPART1\
  z_rename:textField zigbee2mqtt/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg zigbee2mqtt/bridge/config/reset
attr MQTT2_zigbee_bridge setStateList on off

setstate MQTT2_zigbee_bridge online
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 commit e26ad2a
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 coordinator 20190608
setstate MQTT2_zigbee_bridge 2019-09-23 17:35:36 devices {"type":"devices","message":[{"ieeeAddr":"0x00124b0012022ed8","type":"Coordinator"},{"ieeeAddr":"0x00158d000213436e","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonSchlafzimmer","nwkAddr":57014,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2"},{"ieeeAddr":"0x00158d00021360b2","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonKueche","nwkAddr":58859,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2","hwVersion":2,"swBuildId":"3000-0001","dateCode":"20161128"},{"ieeeAddr":"0x00158d0002134d4b","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonBuero","nwkAddr":1839,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2","hwVersion":2,"swBuildId":"3000-0001","dateCode":"20161128"}]}
setstate MQTT2_zigbee_bridge 2019-09-23 17:35:36 log {"type":"devices","message":[{"ieeeAddr":"0x00124b0012022ed8","type":"Coordinator"},{"ieeeAddr":"0x00158d000213436e","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonSchlafzimmer","nwkAddr":57014,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2"},{"ieeeAddr":"0x00158d00021360b2","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonKueche","nwkAddr":58859,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2","hwVersion":2,"swBuildId":"3000-0001","dateCode":"20161128"},{"ieeeAddr":"0x00158d0002134d4b","type":"EndDevice","model":"WXKG11LM","friendly_name":"XiaomiAqaraButtonBuero","nwkAddr":1839,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_switch.aq2","hwVersion":2,"swBuildId":"3000-0001","dateCode":"20161128"}]}
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 log_level info
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 permit_join true
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 state online
setstate MQTT2_zigbee_bridge 2019-09-23 17:33:42 version 1.6.0


attrTemplate ist zigbee2mqtt_bridge und autocreate auf on bzw. 1.
Mit getdevicelist bekomme ich auch die ersten drei angelernten Aqara-Buttons angezeigt. Aber automatisch legt er keine Devices an, da kann ich die Buttons drücken wie ich will. Fehlt noch was? Oder hab ich was überlesen?
Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

Beta-User

Hmm, auch das ist hier eigentich OT.

Bitte dazu ggf. einen neuen Thread im MQTT-Bereich aufmachen und v.a. dann auch zeigen, was an messages über den mosquitto kommt (z.B. via mosquitto_sub). So kann ich leider nichts erkennen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

petjek

#881
Hast du wohl recht mit dem OT.
Meine eigentliche Frage ging ja auch in Richtung des XiaomiMQTTDevice, das nicht so funktioniert, wie ich es erwartet hatte.
Das wäre dann nicht OT, richtig?

EDIT: Äh, okay! Ich habe das XiaomiMQTTDevice jetzt gerade nach der o.g. Anpassung des Base topics noch mal angelegt und es funktioniert wie erwartet! Kommt das mit einen angepassten Base topic wohl nicht klar. Vermute ich.
Die Möglichkeiten der deutschen Grammatik können einen, wenn man sich darauf, was man ruhig, wenn man möchte, sollte, einlässt, überraschen.

tyrolean

Hallo,

leider scheitere ich aktuell bei der Installation von zigbeetomqtt auf meinem Raspberry.

node.js bzw. npm sind auf meinem System bereits installiert, die Versionsabfrage ergibt folgende Werte:

pi@raspberrypi:/opt/zigbee2mqtt $ node --version
v10.16.3
pi@raspberrypi:/opt/zigbee2mqtt $ npm --version
6.9.0
pi@raspberrypi:/opt/zigbee2mqtt $


npm install bricht mit folgendem Fehler ab:
pm WARN tar ENOENT: no such file or directory, lstat '/opt/zigbee2mqtt/node_modules/.staging/rxjs-bd0b8a77/webSocket'
npm WARN tar ENOENT: no such file or directory, lstat '/opt/zigbee2mqtt/node_modules/.staging/rxjs-bd0b8a77/webSocket'
npm WARN tar ENOENT: no such file or directory, lstat '/opt/zigbee2mqtt/node_modules/.staging/rxjs-bd0b8a77/webSocket'
npm WARN tar ENOENT: no such file or directory, lstat '/opt/zigbee2mqtt/node_modules/.staging/rxjs-bd0b8a77/webSocket'
npm ERR! cb() never called!

npm ERR! This is an error with npm itself. Please report this error at:
npm ERR!     <https://npm.community>


Ich habe es auch mit sudo npm Install probiert, dies bricht ebenfalls ab:

pi@raspberrypi:/opt/zigbee2mqtt $ sudo npm install

> @serialport/bindings@2.0.8 install /opt/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/bindings
> prebuild-install --tag-prefix @serialport/bindings@ || node-gyp rebuild

prebuild-install WARN install EACCES: permission denied, access '/root/.npm'
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/10.16.3"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/opt/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/bindings/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/opt/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/bindings/.node-gyp'
gyp ERR! System Linux 4.19.57-v7+
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/bindings
gyp ERR! node -v v10.16.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/zigbee-shepherd-converters/node_modules/zigbee-herdsman/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/zigbee-herdsman/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @serialport/bindings@2.0.8 install: `prebuild-install --tag-prefix @serialport/bindings@ || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @serialport/bindings@2.0.8 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-09-25T15_13_57_629Z-debug.log


Hat jemand  einen Tip was ich da wohl übersehen habe?

Gruß und Dank aus Tirol

Spaltenputzer

Hast du die Sachen vom git geladen?
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt

Gesendet von meinem ONEPLUS A5010 mit Tapatalk


tyrolean

...eigentlich schon:


pi@raspberrypi:~ $ sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
Klone nach '/opt/zigbee2mqtt' ...
remote: Enumerating objects: 6954, done.
remote: Total 6954 (delta 0), reused 0 (delta 0), pack-reused 6954
Empfange Objekte: 100% (6954/6954), 8.19 MiB | 2.69 MiB/s, Fertig.
Löse Unterschiede auf: 100% (4845/4845), Fertig.
pi@raspberrypi:~ $ sudo chown -R pi:pi /opt/zigbee2mqtt