The event page says that events are the core of home assistant, but they seem to be a bit disjointed. A change of state should be seen in the state_changed events.
But if the state changing is on a zigbee device you do not see this unless you are looking in zha_event
Why is a state change not a state change?
Can you give examples of what you are talking about? When I use the Event tool to listen for state_changed events it’s full of state changes from entities that are part of Zigbee devices.
Here's a Zigbee switch turning off
event_type: state_changed
data:
entity_id: switch.neo_15a_switch
old_state:
entity_id: switch.neo_15a_switch
state: "on"
attributes:
friendly_name: NEO_15A_01 Switch
last_changed: "2025-10-15T11:00:00.363740+00:00"
last_reported: "2025-10-15T11:00:00.364202+00:00"
last_updated: "2025-10-15T11:00:00.363740+00:00"
context:
id: 01K7KRDR4H6YV061JTA69B7HAP
parent_id: null
user_id: null
new_state:
entity_id: switch.neo_15a_switch
state: "off"
attributes:
friendly_name: NEO_15A_01 Switch
last_changed: "2025-10-15T16:58:52.534253+00:00"
last_reported: "2025-10-15T16:58:52.534253+00:00"
last_updated: "2025-10-15T16:58:52.534253+00:00"
context:
id: 01K7MCYVN9XSRQMAVYHRSZPEMW
parent_id: null
user_id: 4572a08b5df66dd08acd2190c2f349b1
origin: LOCAL
time_fired: "2025-10-15T16:58:52.534253+00:00"
context:
id: 01K7MCYVN9XSRQMAVYHRSZPEMW
parent_id: null
user_id: 4572a08b5df66dd08acd2190c2f349b1
Here's a Voltage sensor on a different Zigbee device updating it's value
event_type: state_changed
data:
entity_id: sensor.third_reality_plug_04_voltage_2
old_state:
entity_id: sensor.third_reality_plug_04_voltage_2
state: "122.0"
attributes:
state_class: measurement
unit_of_measurement: V
device_class: voltage
friendly_name: Third Reality Plug 04 Voltage
last_changed: "2025-10-15T16:58:38.057423+00:00"
last_reported: "2025-10-15T16:58:38.057423+00:00"
last_updated: "2025-10-15T16:58:38.057423+00:00"
context:
id: 01K7MCYDK9Y1CZ0PKF9Q7S4GYA
parent_id: null
user_id: null
new_state:
entity_id: sensor.third_reality_plug_04_voltage_2
state: "122.1"
attributes:
state_class: measurement
unit_of_measurement: V
device_class: voltage
friendly_name: Third Reality Plug 04 Voltage
last_changed: "2025-10-15T16:58:51.201654+00:00"
last_reported: "2025-10-15T16:58:51.201654+00:00"
last_updated: "2025-10-15T16:58:51.201654+00:00"
context:
id: 01K7MCYTE1DJS9YZREE1KHXCBJ
parent_id: null
user_id: null
origin: LOCAL
time_fired: "2025-10-15T16:58:51.201654+00:00"
context:
id: 01K7MCYTE1DJS9YZREE1KHXCBJ
parent_id: null
user_id: null
I press the button on my hue dimmer switch and get this when listening to zha_event:
event_type: zha_event
data:
device_ieee: 00:17:88:01:0d:8c:99:cc
device_id: 81014196ba4bf00fb21821c54a35487e
unique_id: 00:17:88:01:0d:8c:99:cc:1:0xfc00
endpoint_id: 1
cluster_id: 64512
command: on_press
args:
button: "on"
press_type: press
command_id: 0
duration: 1
args:
- 1
- 3145728
- 0
- 33
- 1
params: {}
origin: LOCAL
time_fired: "2025-10-15T17:18:24.755482+00:00"
context:
id: 01K7ME2MFKC06SB03AXD31DHPQ
parent_id: null
user_id: null
But nothing when listening to state_changed. I see all the zigbee lights changing states that are triggered by the hue dimmer, but no state changed entry ever gets through to state_changed.
That is because the integration does not create an entity for what you are describing… without an entity there can be no state to have changed, so there can be no state_changed event.
As I understand it, there is work being done to create a new trigger type/method that will allow integrations to supply their own triggers. So, in the future, ZHA may just supply an on_pressed trigger.
Also note that listening to * shows no alternate access to the button press event other than via the zha_event