Loading...
Loading...
Expert guidance for Zigbee2MQTT development and configuration. Use when working with zigbee2mqtt codebase, configuration files (configuration.yaml, devices.yaml, groups.yaml), device converters, MQTT topic/payload design, or troubleshooting Zigbee device integration. Triggers on tasks involving Zigbee-to-MQTT bridge setup, device pairing workflows, converter development, and Home Assistant integration.
npx skill4agent add szkocot/skills zigbee2mqttZigbee Devices → [Adapter] → zigbee-herdsman → zigbee-herdsman-converters → zigbee2mqtt → MQTT Broker → Home Assistant/Appsdata/configuration.yaml# MQTT connection
mqtt:
server: mqtt://localhost:1883
base_topic: zigbee2mqtt
user: mqtt_user
password: mqtt_pass
# Zigbee adapter
serial:
port: /dev/ttyUSB0
# adapter: zstack # auto-detected usually
# Network settings
advanced:
channel: 11 # 11-26, avoid WiFi overlap
network_key: GENERATE # auto-generates secure key
pan_id: GENERATE
# Web UI
frontend:
port: 8080
# Device tracking
availability: truedevices.yaml'0x00158d0001234567':
friendly_name: living_room_sensor
retain: truegroups.yaml'1':
friendly_name: all_lights
devices:
- bulb_1
- bulb_2| Topic | Direction | Purpose |
|---|---|---|
| Subscribe | Device state |
| Publish | Control device |
| Publish | Request state |
| Subscribe | Online/offline |
// Turn on light with brightness
{"state": "ON", "brightness": 200}
// Set color temperature
{"color_temp": 350}
// RGB color
{"color": {"r": 255, "g": 100, "b": 50}}| Topic | Purpose |
|---|---|
| Bridge online status |
| Version, coordinator info |
| All paired devices |
| Join/leave events |
Publish to: zigbee2mqtt/bridge/request/{command}
Subscribe to: zigbee2mqtt/bridge/response/{command}permit_join{"value": true, "time": 120}remove{"id": "0x00158d..."}rename{"from": "old", "to": "new"}restartdata/external_converters/my_device.jsconst {deviceEndpoints, onOff} = require('zigbee-herdsman-converters/lib/modernExtend');
const definition = {
zigbeeModel: ['TS0001'],
model: 'TS0001',
vendor: 'TuYa',
description: 'Smart switch',
extend: [onOff()],
};
module.exports = definition;configuration.yamlexternal_converters:
- my_device.jszigbeeModelsrc/devices/<vendor>.ts{
zigbeeModel: ['lumi.sensor_motion.aq2'],
model: 'RTCGQ11LM',
vendor: 'Aqara',
description: 'Motion sensor',
fromZigbee: [fz.occupancy, fz.battery, fz.illuminance],
toZigbee: [],
exposes: [e.occupancy(), e.battery(), e.illuminance()],
}fromZigbeetoZigbeeexposesextend{
zigbeeModel: ['TRADFRI bulb E27 WS opal 980lm'],
model: 'LED1545G12',
vendor: 'IKEA',
description: 'TRADFRI bulb E27 WS opal 980lm',
extend: [light({colorTemp: {range: [250, 454]}})],
}advanced:
log_level: debug
log_namespaced_levels:
z2m:mqtt: warning # Reduce MQTT noise
zh:zstack: debug # Adapter-level debugz2m:*zh:*zhc:*permit_joinls -la /dev/ttyUSB*availabilitylast_seendmesg | grep -i usb # Check kernel logs
journalctl -u zigbee2mqtt -f # Service logsgit clone https://github.com/Koenkk/zigbee2mqtt
cd zigbee2mqtt
pnpm install --frozen-lockfile
pnpm run build # Compile TypeScript
# Run
node index.jslib/lib/extension/lib/mqtt/data/pnpm test
pnpm run lintota:
update_check_interval: 1440 # minutes
disable_automatic_update_check: falsezigbee2mqtt/bridge/request/device/ota_update/check
{"id": "device_name"}homeassistant: true'0x00158d0001234567':
friendly_name: motion_sensor
homeassistant:
occupancy:
device_class: motion
name: "Living Room Motion"