What it exposes
| Feature | Property | Values | Control |
|---|---|---|---|
| Motion | occupancy | — | read only |
| Tamper | tamper | — | read only |
| Low battery | battery_low | — | read only |
| Battery | battery | % · 0…100 | read only |
| Camera test trigger | camera_test_trigger | test | settable |
| Camera active trigger | camera_active_trigger | active | settable |
| Ambient light | ambient_light | Lx | read only |
| Wifi ssid | wifi_ssid | — | settable |
| Wifi password | wifi_password | — | settable |
| Wifi ssid candidate | wifi_ssid_candidate | — | settable |
| Wifi password candidate | wifi_password_candidate | — | settable |
| Server url | server_url | — | settable |
| Server url candidate | server_url_candidate | — | settable |
| Picture quantity | picture_quantity | 1…20 | settable |
| Picture quality | picture_quality | 0…100 | settable |
| Mcu software version | mcu_software_version | 0…255 | read only |
| Illuminance threshold | illuminance_threshold | Lx · 0…1000 | settable |
| Sensor armed | sensor_armed | — | settable |
| Pir sensitivity level | pir_sensitivity_level | disabled, low, medium, high | settable |
| Wifi status | wifi_status | unconfigurated, unconnected, connected, connection_timeout | read only |
| Wifi candidate status | wifi_candidate_status | unconfigurated, unconnected, connected, connection_timeout | read only |
| Server status | server_status | unconfigurated, unconnected, connected, api_timeout | read only |
| Server candidate status | server_candidate_status | unconfigurated, unconnected, connected, api_timeout | read only |
| Camera ready | camera_ready | unavailable, low_power, normal, advanced | read only |
| Wifi rssi | wifi_rssi | -127…127 | settable |
MQTT: state and commands
Zigbee2MQTT publishes the device state to zigbee2mqtt/my_device (my_device is the name you give the device). An example message:
{
"occupancy": false,
"tamper": false,
"battery_low": false,
"battery": 87,
"camera_test_trigger": "test",
"camera_active_trigger": "active",
"ambient_light": 0,
"picture_quantity": 11,
"picture_quality": 50,
"mcu_software_version": 128,
"illuminance_threshold": 500,
"sensor_armed": false,
"pir_sensitivity_level": "disabled",
"wifi_status": "unconfigurated",
"linkquality": 120
}
Send commands to zigbee2mqtt/my_device/set:
mosquitto_pub -t zigbee2mqtt/my_device/set -m '{"sensor_armed":true}'
mosquitto_pub -t zigbee2mqtt/my_device/set -m '{"pir_sensitivity_level":"low"}'
Watch the topics live from the browser: MQTT client.
Home Assistant automation example
Zigbee2MQTT creates Home Assistant entities from the device name. If it is called my_device, an automation in automations.yaml can look like this:
- alias: "Light on motion"
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.my_device_occupancy
to: "on"
conditions:
- condition: sun
after: sunset
actions:
- action: light.turn_on
target:
entity_id: light.hallway
Check the YAML: YAML checker.
How to pair it
- In Zigbee2MQTT click Permit join.
- Put the device in pairing mode: usually a long press of the reset button (5–10 s) until the LED blinks; bulbs: switch the power off and on 5–6 times.
- Keep the device close to the coordinator or a router while pairing.
- Give it a clear name: MQTT topics and Home Assistant entities are built from it.
Exact procedure and model notes: the device page in the Zigbee2MQTT docs. No coordinator yet: coordinator picker.