From 72c95e07c44b4162c77200bbd067a85e44dc4eac Mon Sep 17 00:00:00 2001 From: Tommy Hartmann Date: Fri, 23 Feb 2024 18:03:42 +0100 Subject: [PATCH] added zigbee2mqtt app --- apps/zigbee2mqtt/config.json | 32 +++++++++++++++++ apps/zigbee2mqtt/data/.gitkeep | 0 apps/zigbee2mqtt/docker-compose.yml | 43 +++++++++++++++++++++++ apps/zigbee2mqtt/metadata/description.md | 29 +++++++++++++++ apps/zigbee2mqtt/metadata/logo.jpg | Bin 0 -> 29833 bytes 5 files changed, 104 insertions(+) create mode 100755 apps/zigbee2mqtt/config.json create mode 100644 apps/zigbee2mqtt/data/.gitkeep create mode 100644 apps/zigbee2mqtt/docker-compose.yml create mode 100644 apps/zigbee2mqtt/metadata/description.md create mode 100644 apps/zigbee2mqtt/metadata/logo.jpg diff --git a/apps/zigbee2mqtt/config.json b/apps/zigbee2mqtt/config.json new file mode 100755 index 00000000..658e580f --- /dev/null +++ b/apps/zigbee2mqtt/config.json @@ -0,0 +1,32 @@ +{ + "$schema": "../schema.json", + "name": "Zigbee2MQTT", + "port": 8290, + "available": true, + "exposable": true, + "id": "zigbee2mqtt", + "tipi_version": 1, + "version": "1.35", + "categories": [ + "utilities", + "automation" + ], + "description": "Zigbee to MQTT bridge, get rid of your proprietary Zigbee bridges", + "short_desc": "Zigbee to MQTT bridge", + "author": "@Koenkk", + "source": "https://github.com/Koenkk/zigbee2mqtt", + "website": "https://www.zigbee2mqtt.io/", + "form_fields": [ + { + "type": "string", + "label": "zigbee device path", + "required": true, + "hint": "/dev/ttyUSB0", + "env_variable": "Z2M_DEVICE" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ] +} \ No newline at end of file diff --git a/apps/zigbee2mqtt/data/.gitkeep b/apps/zigbee2mqtt/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/zigbee2mqtt/docker-compose.yml b/apps/zigbee2mqtt/docker-compose.yml new file mode 100644 index 00000000..83d14c26 --- /dev/null +++ b/apps/zigbee2mqtt/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3.7" + +services: + + zigbee2mqtt: + container_name: zigbee2mqtt + image: koenkk/zigbee2mqtt:1.35 + environment: + - TZ=${TZ} + volumes: + - ${APP_DATA_DIR}/data/:/app/data + devices: + - ${Z2M_DEVICE}:/dev/ttyACM0 + ports: + - ${APP_PORT}:8080 + expose: + - 8080 + restart: unless-stopped + labels: + # Main + traefik.enable: true + traefik.http.middlewares.zigbee2mqtt-web-redirect.redirectscheme.scheme: https + traefik.http.services.zigbee2mqtt.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.zigbee2mqtt-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-insecure.entrypoints: web + traefik.http.routers.zigbee2mqtt-insecure.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-insecure.middlewares: zigbee2mqtt-web-redirect + # Websecure + traefik.http.routers.zigbee2mqtt.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.zigbee2mqtt.entrypoints: websecure + traefik.http.routers.zigbee2mqtt.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt.tls.certresolver: myresolver + # Local domain + traefik.http.routers.zigbee2mqtt-local-insecure.rule: Host(`zigbee2mqtt.${LOCAL_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-local-insecure.entrypoints: web + traefik.http.routers.zigbee2mqtt-local-insecure.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-local-insecure.middlewares: zigbee2mqtt-web-redirect + # Local domain secure + traefik.http.routers.zigbee2mqtt-local.rule: Host(`zigbee2mqtt.${LOCAL_DOMAIN}`) + traefik.http.routers.zigbee2mqtt-local.entrypoints: websecure + traefik.http.routers.zigbee2mqtt-local.service: zigbee2mqtt-web + traefik.http.routers.zigbee2mqtt-local.tls: true diff --git a/apps/zigbee2mqtt/metadata/description.md b/apps/zigbee2mqtt/metadata/description.md new file mode 100644 index 00000000..2297dfca --- /dev/null +++ b/apps/zigbee2mqtt/metadata/description.md @@ -0,0 +1,29 @@ +# Zigbee2MQTT ๐Ÿ๐ŸŒ‰๐Ÿ”จ + +Allows you to use your Zigbee devices without the vendor's bridge or gateway. + +It bridges events and allows you to control your Zigbee devices via MQTT. In this way you can integrate your Zigbee devices with whatever smart home infrastructure you are using. + +|**Compatible** | **Integrations** | **Open Source** | +|---|---|---| +| Zigbee2MQTT supports [various Zigbee adapters](https://www.zigbee2mqtt.io/guide/adapters/) and a big bunch of [devices](https://www.zigbee2mqtt.io/supported-devices/). | Zigbee2MQTT integrates well with most home automation solutions because it uses [MQTT](https://mqtt.org/). | Zigbee2MQTT is licenced under the free [GNU General Public License 3](https://www.gnu.org/licenses/gpl-3.0.de.html). | + +## Setup + +You need to have a mqtt broker like [eclipse mosquitto](/apps/eclipse-mosquitto) running to use this app. + +### Configuration of the Zigbee adapter + +For USB apdaters you can use dmesg command on Linux hosts to find the mounted device. Where possible you should use the `/dev/serial/by-id/` path of the stick, instead of `/dev/tty*`. This is because the `/dev/tty*` path can change - for example ยด/dev/ttyACM0` may become `/dev/ttyACM1` and then later back to `/dev/ttyACM0`. The `/dev/serial/by-id/` path won't change. + +The **usb device path** must be set in the settings of the app before installing. + +## Integrations + +Zigbee2MQTT integrates well with (almost) every home automation solution because it uses MQTT. However the following integrations are worth mentioning: + +- [Home Assistant](/apps/homeassistant) +- [Homey](https://homey.app/) +- [Domoticz](https://www.domoticz.com/) +- [Gladys Assistant](https://gladysassistant.com/) +- [IoBroker](https://www.iobroker.net/) \ No newline at end of file diff --git a/apps/zigbee2mqtt/metadata/logo.jpg b/apps/zigbee2mqtt/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f9621f613ee4a53b28eac9830af43ccf944153f GIT binary patch literal 29833 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ξ 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 sDu2|Dj-H;_j_xjpil(4%Cd&aq46nR