Zigbee2MQTT: Cloud-Free Zigbee Device Management
Control Zigbee devices without cloud dependencies. Coordinator setup and device pairing.
Zigbee2MQTT is a revolutionary bridge that eliminates the need for proprietary Zigbee hubs. It allows you to control Zigbee devices directly using an open-source solution that communicates via MQTT, giving you complete local control without cloud dependencies or vendor lock-in.
In this comprehensive guide, you’ll learn how to set up Zigbee2MQTT with a compatible coordinator, pair and manage devices, integrate with Home Assistant, and build a fully local smart home ecosystem that puts you in control.
Why Zigbee2MQTT?
Zigbee2MQTT has become the de facto standard for local Zigbee device control in the home automation community:
No Vendor Lock-in: Use devices from any manufacturer with a single coordinator. Mix Philips Hue, IKEA Tradfri, Aqara, and hundreds of other brands seamlessly.
Local Control: All communication happens on your network. No internet required, no cloud outages, no privacy concerns about data leaving your home.
Cost Effective: A 25 USD USB coordinator replaces multiple proprietary hubs that can cost 50-100 USD each. Save money while gaining more control.
Extensive Device Support: Over 3,000 supported devices and growing. The community rapidly adds support for new devices, often before official apps do.
MQTT Integration: Standard MQTT protocol means easy integration with Home Assistant, Node-RED, OpenHAB, or any system that speaks MQTT.
Powerful Features: OTA firmware updates, device mapping, mesh visualization, group control, and advanced configuration options unavailable in proprietary solutions.
Prerequisites
Before starting, ensure you have:
- A Linux server or VM with Docker and Docker Compose installed
- At least 512MB RAM and 1GB storage
- A compatible Zigbee coordinator (recommendations below)
- MQTT broker running (Mosquitto recommended)
- Basic understanding of MQTT concepts
- Optional: Home Assistant for advanced integration
Zigbee Coordinator Hardware
The coordinator is your gateway to the Zigbee network. Choose wisely as it affects range, device capacity, and reliability.
Recommended Coordinators
Sonoff Zigbee 3.0 USB Dongle Plus (ZBDongle-P)
- Chip: Texas Instruments CC2652P
- Range: Excellent with external antenna
- Max devices: 200+ direct connections
- Price: Around 25 USD
- Firmware: Pre-flashed, ready to use
- Best for: Most users, excellent value
Sonoff Zigbee 3.0 USB Dongle Plus-E (ZBDongle-E)
- Chip: Silicon Labs EFR32MG21
- Range: Very good
- Max devices: 200+
- Price: Around 25 USD
- Best for: Alternative chip if CC2652P has issues
ConBee II
- Manufacturer: dresden elektronik
- Range: Good
- Max devices: 200+
- Price: Around 40 USD
- Best for: Proven reliability, well-established
Electrolama zig-a-zig-ah (zzh!)
- Chip: CC2652R
- Range: Excellent (PoE version available)
- Max devices: 200+
- Price: Around 35 USD
- Best for: Advanced users wanting customization
SLZB-06
- Network coordinator (no USB required)
- Can be placed anywhere on network
- Best for: Optimal Zigbee coverage placement
- Price: Around 35 USD
What to Avoid
Avoid these older chips:
- CC2531 - Limited to 20 direct devices, requires external antenna, poor performance
- CC2530 - Even older, very limited capabilities
Firmware Considerations
Most modern coordinators come pre-flashed with appropriate firmware. If you need to flash:
Texas Instruments chips (CC2652P/R):
- Firmware: Z-Stack coordinator
- Flashing tool: cc2538-bsl or TI Flash Programmer
- Repository: Koenkk/Z-Stack-firmware
Silicon Labs chips (EFR32MG21):
- Firmware: EmberZNet
- Flashing tool: Simplicity Commander
- Usually pre-flashed and good to go
MQTT Broker Setup
Zigbee2MQTT requires an MQTT broker. If you don’t have one running, set up Mosquitto:
Create directory structure:
mkdir -p /opt/zigbee2mqtt/mosquitto/{config,data,log}
cd /opt/zigbee2mqtt Create Mosquitto configuration:
cat > mosquitto/config/mosquitto.conf << 'EOF'
# Mosquitto configuration for Zigbee2MQTT
listener 1883
allow_anonymous false
password_file /mosquitto/config/password.txt
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
log_type all
# Connection logging
connection_messages true
log_timestamp true
EOF Create MQTT credentials:
# Create password file
docker run -it --rm -v $(pwd)/mosquitto/config:/mosquitto/config eclipse-mosquitto mosquitto_passwd -c /mosquitto/config/password.txt zigbee2mqtt
# Add Home Assistant user
docker run -it --rm -v $(pwd)/mosquitto/config:/mosquitto/config eclipse-mosquitto mosquitto_passwd /mosquitto/config/password.txt homeassistant Docker Compose Setup
Create a complete docker-compose.yml file:
version: '3.8'
services:
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:latest
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
networks:
- zigbee
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:latest
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./zigbee2mqtt-data:/app/data
- /run/udev:/run/udev:ro
devices:
# Replace with your coordinator device path
- /dev/ttyUSB0:/dev/ttyACM0
environment:
- TZ=America/New_York
networks:
- zigbee
depends_on:
- mosquitto
networks:
zigbee:
driver: bridge Finding Your Coordinator Device Path
Before starting Zigbee2MQTT, identify your coordinator’s device path:
# List USB devices
lsusb
# List serial devices
ls -l /dev/serial/by-id/
# Check device permissions
ls -l /dev/ttyUSB* /dev/ttyACM*
# For Sonoff dongle, look for:
# usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus Common device paths:
/dev/ttyUSB0- Most USB-serial adapters/dev/ttyACM0- Some CDC devices/dev/serial/by-id/usb-ITead_Sonoff...- Persistent path (recommended)
Update docker-compose.yml with your actual device path:
devices:
- /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_XXXXX:/dev/ttyACM0 Using /dev/serial/by-id/ ensures the path doesn’t change if you add more USB devices.
Zigbee2MQTT Configuration
Create initial configuration:
mkdir -p zigbee2mqtt-data
nano zigbee2mqtt-data/configuration.yaml Basic configuration:
# Home Assistant integration
homeassistant: true
# MQTT broker connection
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mosquitto:1883
user: zigbee2mqtt
password: YOUR_MQTT_PASSWORD
# Optional: TLS configuration
# ca: /app/data/ca.crt
# cert: /app/data/cert.crt
# key: /app/data/key.key
# Serial port configuration
serial:
port: /dev/ttyACM0
adapter: auto
# Optional: Disable LED on coordinator
# disable_led: false
# Frontend configuration (web interface)
frontend:
port: 8080
# Optional: Enable authentication
# auth_token: your_secret_token
# Advanced settings
advanced:
# Network key (16 bytes) - CHANGE THIS!
network_key: GENERATE
# Pan ID (leave default or change if needed)
pan_id: 6754
# Extended Pan ID
ext_pan_id: [0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD]
# Zigbee channel (11-26, avoid WiFi overlap)
channel: 11
# Logging level
log_level: info
# Cache state
cache_state: true
# Last seen
last_seen: ISO_8601
# Availability
availability_timeout: 60
availability_blacklist: []
# Legacy API (for older integrations)
legacy_api: false
# Device-specific options
device_options:
# Retention for MQTT messages
retain: true
# OTA updates
ota:
disable_automatic_update_check: false
# Permit join (allow pairing) - disable after setup
permit_join: true
# Groups (optional, for controlling multiple devices)
groups:
# Devices will be auto-added here after pairing
devices: Generate secure network key:
# Generate random 16-byte network key
docker run --rm koenkk/zigbee2mqtt:latest node -e "console.log(Array.from({length: 16}, () => Math.floor(Math.random() * 256)))"
# Use output in configuration.yaml like:
# network_key: [123, 45, 67, 89, 101, 112, 131, 145, 167, 178, 189, 201, 212, 223, 234, 245] Important: Change the network key before pairing any devices. Once devices are paired, changing the key requires re-pairing everything.
Starting Zigbee2MQTT
Start the services:
docker-compose up -d
# View logs to verify startup
docker-compose logs -f zigbee2mqtt Successful startup shows:
Zigbee2MQTT:info Starting Zigbee2MQTT version 1.35.0
Zigbee2MQTT:info Starting zigbee-herdsman
Zigbee2MQTT:info Coordinator firmware version: '{"type":"zStack3x0","meta":{"version":20221226}}'
Zigbee2MQTT:info MQTT connected
Zigbee2MQTT:info Frontend started on port 8080 Access the web interface at http://YOUR-SERVER-IP:8080
Pairing Devices
General Pairing Process
Most Zigbee devices follow a similar pairing process:
- Enable pairing mode in Zigbee2MQTT (permit join)
- Reset the device to factory defaults
- Device automatically pairs and appears in Zigbee2MQTT
- Rename and configure the device
Enabling Pairing Mode
Via Web Interface:
- Open
http://YOUR-SERVER-IP:8080 - Click “Permit join (All)” button
- Button shows countdown timer
- Pairs for 254 seconds by default
Via MQTT:
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/permit_join -m '{"value": true}' Via configuration.yaml:
permit_join: true Device-Specific Pairing Instructions
Philips Hue Bulbs:
- Ensure bulb is powered on
- Enable permit join
- Turn bulb off and on 6 times (wait 5 seconds between)
- Bulb flashes and pairs
IKEA Tradfri Bulbs:
- Power on bulb
- Enable permit join
- Turn bulb off and on 6 times rapidly
- Bulb dims and brightens to confirm
Aqara Sensors:
- Enable permit join
- Press reset button 3 times within 5 seconds
- LED flashes blue, device pairs
Sonoff Sensors:
- Enable permit join
- Hold button for 5+ seconds until LED flashes
- Release and device pairs
Tuya/Moes Devices:
- Enable permit join
- Hold button for 10 seconds
- Device flashes rapidly and pairs
Verifying Pairing
Web Interface: Device appears in device list with IEEE address and basic info
MQTT: Message published to zigbee2mqtt/bridge/event:
{
"type": "device_joined",
"data": {
"friendly_name": "0xa4c1234567890abc",
"ieee_address": "0xa4c1234567890abc"
}
} Logs: Shows device interview process:
Zigbee2MQTT:info Device '0xa4c1234567890abc' joined
Zigbee2MQTT:info Starting interview of '0xa4c1234567890abc'
Zigbee2MQTT:info Successfully interviewed '0xa4c1234567890abc' Renaming Devices
Rename devices for easier identification:
Via Web Interface:
- Click device in list
- Change “Friendly name”
- Click Save
Via configuration.yaml:
devices:
'0xa4c1234567890abc':
friendly_name: 'living_room/temperature'
retain: true Use descriptive names with structure:
living_room/motionbedroom/temperaturekitchen/light_mainhallway/switch
Device Control
Controlling Lights
Turn on/off via MQTT:
# Turn on
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"state": "ON"}'
# Turn off
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"state": "OFF"}'
# Set brightness (0-254)
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"state": "ON", "brightness": 150}'
# Set color temperature (Kelvin)
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"color_temp": 370}'
# Set RGB color
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"color": {"r": 255, "g": 100, "b": 50}}'
# Transition (over 2 seconds)
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/light/set -m '{"state": "ON", "brightness": 200, "transition": 2}' Via Web Interface:
- Click device
- Use controls (toggle, slider, color picker)
- Changes apply immediately
Reading Sensors
Sensors automatically publish state changes:
Temperature/Humidity Sensor:
// Published to: zigbee2mqtt/bedroom/temperature
{
"battery": 100,
"humidity": 45.5,
"linkquality": 89,
"temperature": 21.3,
"voltage": 3000
} Motion Sensor:
// Published to: zigbee2mqtt/hallway/motion
{
"battery": 95,
"linkquality": 102,
"occupancy": true,
"tamper": false,
"voltage": 2985
} Door/Window Sensor:
// Published to: zigbee2mqtt/front_door/contact
{
"battery": 88,
"contact": false, // false = open, true = closed
"linkquality": 78,
"tamper": false,
"voltage": 2950
} Controlling Switches and Plugs
Smart Plug:
# Turn on
mosquitto_pub -h localhost -t zigbee2mqtt/desk_lamp/set -m '{"state": "ON"}'
# Turn off
mosquitto_pub -h localhost -t zigbee2mqtt/desk_lamp/set -m '{"state": "OFF"}' Monitoring Power Consumption:
// Published to: zigbee2mqtt/desk_lamp
{
"state": "ON",
"linkquality": 95,
"power": 45.5, // Current power (watts)
"current": 0.425, // Current (amps)
"voltage": 120.5, // Voltage
"energy": 1.23 // Total energy (kWh)
} Groups for Multi-Device Control
Groups allow controlling multiple devices simultaneously.
Creating Groups
Via configuration.yaml:
groups:
'1':
friendly_name: living_room/all_lights
devices:
- living_room/light_1
- living_room/light_2
- living_room/light_3
# Optional: optimistic mode for faster response
optimistic: true Via MQTT:
# Create group
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/group/add -m '{"friendly_name": "living_room/all_lights"}'
# Add devices to group
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/group/members/add -m '{"group": "living_room/all_lights", "device": "living_room/light_1"}' Controlling Groups
# Control all lights in group simultaneously
mosquitto_pub -h localhost -t zigbee2mqtt/living_room/all_lights/set -m '{"state": "ON", "brightness": 200}' Groups send commands directly over Zigbee (not via coordinator), making them very fast and reliable.
Home Assistant Integration
Zigbee2MQTT integrates seamlessly with Home Assistant via MQTT discovery.
Automatic Discovery
With homeassistant: true in configuration.yaml, devices automatically appear in Home Assistant.
Verify integration:
- Home Assistant > Settings > Devices & Services
- MQTT integration should show Zigbee2MQTT devices
- Each device appears with all entities (sensors, switches, etc.)
Manual Configuration (if needed)
If automatic discovery doesn’t work:
# configuration.yaml in Home Assistant
mqtt:
sensor:
- name: "Bedroom Temperature"
state_topic: "zigbee2mqtt/bedroom/temperature"
value_template: "{{ value_json.temperature }}"
unit_of_measurement: "°C"
device_class: temperature
- name: "Bedroom Humidity"
state_topic: "zigbee2mqtt/bedroom/temperature"
value_template: "{{ value_json.humidity }}"
unit_of_measurement: "%"
device_class: humidity
binary_sensor:
- name: "Hallway Motion"
state_topic: "zigbee2mqtt/hallway/motion"
value_template: "{{ value_json.occupancy }}"
device_class: motion
light:
- name: "Living Room Light"
state_topic: "zigbee2mqtt/living_room/light"
command_topic: "zigbee2mqtt/living_room/light/set"
brightness_scale: 254
schema: json Creating Automations
Motion-activated lighting:
automation:
- alias: "Hallway Light on Motion"
trigger:
- platform: mqtt
topic: zigbee2mqtt/hallway/motion
payload: 'true'
value_template: "{{ value_json.occupancy }}"
action:
- service: mqtt.publish
data:
topic: zigbee2mqtt/hallway/light/set
payload: '{"state": "ON", "brightness": 150}'
- delay: '00:05:00'
- service: mqtt.publish
data:
topic: zigbee2mqtt/hallway/light/set
payload: '{"state": "OFF"}' Temperature alerts:
automation:
- alias: "Temperature Alert"
trigger:
- platform: mqtt
topic: zigbee2mqtt/bedroom/temperature
condition:
- condition: template
value_template: "{{ trigger.payload_json.temperature > 25 }}"
action:
- service: notify.mobile_app
data:
title: "High Temperature"
message: "Bedroom is {{ trigger.payload_json.temperature }}°C" Advanced Configuration
Optimizing Zigbee Network
Choose the right channel to avoid WiFi interference:
advanced:
channel: 25 # Zigbee channels 25-26 don't overlap with WiFi Zigbee/WiFi channel overlap:
- Zigbee 11-14 overlaps WiFi 1
- Zigbee 15-20 overlaps WiFi 6
- Zigbee 21-24 overlaps WiFi 11
- Zigbee 25-26 no overlap (recommended)
Adjust transmit power:
advanced:
transmit_power: 20 # Max power (5-20 dBm depending on coordinator) Enable advanced features:
advanced:
# Report true device state even if command fails
homeassistant_legacy_entity_attributes: false
# Log device state to file
log_output: ['file']
# Include or exclude devices
availability_blacklist: []
availability_whitelist: [] Device-Specific Configuration
Configure device options:
devices:
'0xa4c1234567890abc':
friendly_name: 'bedroom/temperature'
# Retain MQTT messages
retain: true
# Availability timeout (seconds)
availability_timeout: 120
# Debounce for noisy sensors (ms)
debounce: 100
# Ignore availability for battery devices
availability: false Custom reporting intervals:
device_options:
temperature:
# Report every 5 minutes or 0.5°C change
reporting:
min_interval: 300
max_interval: 3600
reportable_change: 0.5 OTA Firmware Updates
Keep device firmware updated for better performance and security.
Check for updates:
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/device/ota_update/check -m '{"id": "bedroom/temperature"}' Update device:
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/device/ota_update/update -m '{"id": "bedroom/temperature"}' Via Web Interface:
- Click device
- Go to “OTA Updates” section
- Click “Check for update”
- If available, click “Update”
Updates can take 10-60 minutes depending on device and firmware size.
Backup and Restore
Backup important files:
# Backup configuration and database
tar -czf zigbee2mqtt-backup-$(date +%Y%m%d).tar.gz zigbee2mqtt-data/configuration.yaml zigbee2mqtt-data/database.db zigbee2mqtt-data/coordinator_backup.json Restore:
# Stop Zigbee2MQTT
docker-compose stop zigbee2mqtt
# Restore files
tar -xzf zigbee2mqtt-backup-YYYYMMDD.tar.gz -C /
# Start Zigbee2MQTT
docker-compose start zigbee2mqtt Coordinator Backup
Create coordinator backup in case of hardware failure:
# Request backup via MQTT
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/backup -m ''
# Backup saved to: zigbee2mqtt-data/coordinator_backup.json Restore coordinator backup (new coordinator):
- Stop Zigbee2MQTT
- Copy
coordinator_backup.jsontozigbee2mqtt-data/ - Update
configuration.yamlwith new coordinator path - Start Zigbee2MQTT - it will restore automatically
Network Visualization
Zigbee2MQTT includes a network map showing mesh topology.
Access via Web Interface:
- Open
http://YOUR-SERVER-IP:8080 - Click “Map” tab
- View device connections and signal strength
Interpreting the map:
- Coordinator at center
- Router devices (powered) extend network
- End devices (battery) connect to routers
- Line thickness indicates link quality
- Green = strong, Yellow = medium, Red = weak
Improving mesh network:
- Add more router devices (powered Zigbee devices)
- Position routers between coordinator and end devices
- Avoid physical obstacles (metal, thick walls)
- Keep devices away from WiFi routers and microwaves
Troubleshooting
Device Won’t Pair
Solutions:
- Reset device properly: Follow manufacturer instructions exactly
- Enable permit join: Ensure pairing mode is active
- Check distance: Bring device within 2 meters of coordinator
- Remove old pairing: Factory reset device to clear previous network
- Check channel: Some devices only support certain channels
- Update firmware: Old coordinator firmware may lack device support
- Try alternative method: Some devices support alternative pairing modes
Poor Signal Quality (Low LQI)
Symptoms: Devices appear as unavailable, slow response, messages dropped
Solutions:
- Add router devices: Powered devices extend mesh network
- Reposition coordinator: Central location with line of sight
- External antenna: Use coordinator with external antenna
- Avoid interference: Keep away from WiFi, USB 3.0, microwaves
- Change channel: Try channels 25-26 to avoid WiFi overlap
- Check physical obstacles: Metal, water, thick walls block signal
Devices Showing as Unavailable
Check logs:
docker-compose logs -f zigbee2mqtt | grep availability Solutions:
- Battery devices: Normal for them to sleep, adjust
availability_timeout - Network issues: Check mesh network map for poor connections
- Interference: Change Zigbee channel
- Device range: Add routers to extend network
- Configuration issue: Verify
availabilitysettings per device
MQTT Connection Issues
Verify MQTT broker:
# Test connection
mosquitto_sub -h localhost -p 1883 -u zigbee2mqtt -P YOUR_PASSWORD -t '#' -v
# Check Mosquitto logs
docker-compose logs mosquitto Solutions:
- Verify credentials: Check username/password in configuration.yaml
- Network connectivity: Ensure containers can communicate
- MQTT broker running:
docker-compose psshows mosquitto running - Port conflicts: Ensure port 1883 isn’t used by another service
High CPU or Memory Usage
Check logs for errors:
docker-compose logs zigbee2mqtt | grep -i error Solutions:
- Too many devices: Consider splitting network or upgrading hardware
- Logging level: Set
log_level: warninstead ofdebug - Disable features: Turn off unused features like frontend
- Update Zigbee2MQTT: Newer versions have performance improvements
- Resource limits: Add Docker resource limits if needed
Security Best Practices
Secure MQTT Broker
Enable authentication (already covered in setup):
allow_anonymous false
password_file /mosquitto/config/password.txt Use TLS/SSL:
# Generate certificates
openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 Update mosquitto.conf:
listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key Secure Zigbee Network
Change default network key before pairing devices:
advanced:
network_key: [123, 45, 67, 89, 101, 112, 131, 145, 167, 178, 189, 201, 212, 223, 234, 245] Disable permit join after setup:
permit_join: false Or via MQTT:
mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/permit_join -m '{"value": false}' Enable frontend authentication:
frontend:
port: 8080
auth_token: your_very_long_random_token_here Network Segmentation
Isolate IoT devices on separate VLAN:
- Prevent IoT devices from accessing main network
- Use firewall rules to restrict communication
- Only allow necessary MQTT traffic
Reverse proxy with authentication:
# Example nginx config
location /zigbee2mqtt/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:8080/;
} Real-World Scenarios
Complete Smart Lighting System
Devices:
- 10x IKEA Tradfri bulbs (various rooms)
- 4x Aqara wireless switches
- 2x Motion sensors
Configuration:
- Create groups per room
- Bind switches directly to groups (instant response)
- Create automations for motion sensors
- Set up scenes for different times of day
Home Security Setup
Devices:
- 8x Door/window sensors
- 4x Motion sensors
- 2x Water leak sensors
- 1x Smart siren
Implementation:
- Monitor all sensors via Home Assistant
- Create automation to sound siren on intrusion
- Send mobile notifications on any trigger
- Log all events to database
- Create “away mode” that arms system
Environmental Monitoring
Devices:
- 5x Temperature/humidity sensors
- 2x Air quality sensors
- 1x Smart thermostat
Setup:
- Collect data from all sensors
- Calculate average temperatures per zone
- Store historical data in InfluxDB
- Visualize with Grafana dashboards
- Automate HVAC based on readings
Recommended Devices
Budget-Friendly Options
Lights:
- IKEA Tradfri bulbs - 10-15 USD
- Innr smart bulbs - 12-18 USD
Sensors:
- Aqara door/window sensor - 10 USD
- Aqara motion sensor - 12 USD
- Sonoff temperature sensor - 8 USD
Switches:
- IKEA Tradfri remote - 10 USD
- Aqara wireless button - 12 USD
Premium Devices
Lights:
- Philips Hue (when on sale) - 20-50 USD
- Sengled bulbs - 15-25 USD
Sensors:
- Philips Hue motion sensor - 40 USD
- Aqara FP2 presence sensor - 80 USD
Controllers:
- Aqara Magic Cube - 25 USD
- IKEA Symfonisk sound controller - 15 USD
Conclusion
You now have a fully functional Zigbee2MQTT setup that gives you complete local control over your Zigbee devices. By eliminating proprietary hubs and cloud dependencies, you’ve built a robust, privacy-focused smart home that works entirely on your local network.
Key takeaways:
- Zigbee2MQTT supports thousands of devices from hundreds of manufacturers
- Local control means no cloud outages or privacy concerns
- MQTT integration enables powerful automations across platforms
- The Zigbee mesh network is self-healing and extensible
- One affordable coordinator replaces multiple expensive hubs
- Active community ensures rapid support for new devices
Start with a few devices to learn the system, then gradually expand. The beauty of Zigbee2MQTT is its flexibility - you’re never locked into a single ecosystem.
Additional Resources
- Official Documentation: https://www.zigbee2mqtt.io/
- Supported Devices: https://www.zigbee2mqtt.io/supported-devices/
- Community Forum: https://github.com/Koenkk/zigbee2mqtt/discussions
- GitHub Repository: https://github.com/Koenkk/zigbee2mqtt
- Database of Devices: https://zigbee.blakadder.com/
- Reddit Community: r/zigbee2mqtt
- Discord Server: Join via GitHub discussions
Happy automating!