services: mosquitto: image: eclipse-mosquitto:latest container_name: mosquitto restart: unless-stopped user: "1883:1883" ports: - "1883:1883" volumes: - ./mosquitto/config:/mosquitto/config - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log zigbee2mqtt: image: ghcr.io/pine64/zigbee2mqtt:latest-dev # BLZ fork, NOT koenkk container_name: zigbee2mqtt restart: unless-stopped depends_on: - mosquitto ports: - "8080:8080" volumes: - ./zigbee2mqtt:/app/data devices: - /dev/ttyUSB0:/dev/ttyUSB0 environment: TZ: America/Los_Angeles # govee2mqtt: # image: ghcr.io/wez/govee2mqtt:latest # container_name: govee2mqtt # restart: unless-stopped # network_mode: host # environment: # GOVEE_EMAIL: your@email.com # GOVEE_PASSWORD: yourpassword # GOVEE_API_KEY: your-api-key # MQTT_HOST: 127.0.0.1 # TZ: America/Los_Angeles # nodered: image: nodered/node-red:latest container_name: nodered restart: unless-stopped depends_on: - mosquitto user: "1000:1000" ports: - "1880:1880" volumes: - ./nodered:/data environment: TZ: America/Los_Angeles DASHBOARD_BASE_HREF: /dashboard/ command: ["sh", "/data/start.sh"] # Listens to ntfy.sh for doorbell events and toggles a smart plug on each alert. # Topic: ALERT_klubhaus_topic_test (matches ESP32 firmware DEBUG_MODE suffix) # Action: TOGGLE on zigbee2mqtt/Sideboard Lamp/set # On a fresh alert, flash the plug: N toggles spaced FLASH_INTERVAL_SECONDS # so the total runtime is FLASH_DURATION_SECONDS. doorbell-listener: build: ./doorbell-listener container_name: doorbell-listener restart: unless-stopped depends_on: - mosquitto volumes: - ./doorbell-listener/state:/data/doorbell-listener environment: MQTT_HOST: mosquitto MQTT_PORT: "1883" PLUG_TOPIC: "zigbee2mqtt/Sideboard Lamp/set" POLL_INTERVAL: "30" MAX_AGE_SECONDS: "180" FLASH_INTERVAL_SECONDS: "2" FLASH_DURATION_SECONDS: "15" TZ: America/Los_Angeles