And now the complete flow:
info 2023-11-13 09:39:45MQTT publish: topic 'zigbee2mqtt/Wassermelder', payload '{"battery":100,"battery_low":false,"linkquality":163,"tamper":false,"water_leak":true}'
info 2023-11-13 09:40:17MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":true,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":69,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3015}'
info 2023-11-13 09:40:24MQTT publish: topic 'zigbee2mqtt/Wassermelder', payload '{"battery":100,"battery_low":false,"linkquality":160,"tamper":false,"water_leak":false}'
info 2023-11-13 09:40:33MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":true,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":72,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3015}'
info 2023-11-13 09:40:34MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":false,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":76,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3015}'
The 9:40:33 is the initial pressing of the Mute button at the smoke detector. One second later I get the confirmation that the manual alarm is switched off. To me it seems like pressing the Mute button only send the current status.
One proposal, but I am unsure if this proposal is good, bad or ugly - you could misuse the selftest function to mute all sirens:
info 2023-11-13 15:59:32MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":true,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":47,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3013}'
info 2023-11-13 15:59:32MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":false,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":43,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3013}'
info 2023-11-13 15:59:38MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":false,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":58,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":true,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3013}'
info 2023-11-13 15:59:42MQTT publish: topic 'zigbee2mqtt/Rauchmelder Gast', payload '{"battery":100,"buzzer_manual_alarm":false,"buzzer_manual_mute":false,"heartbeat_indicator":false,"linkage_alarm":true,"linkage_alarm_state":null,"linkquality":69,"power_outage_count":19,"smoke":false,"smoke_density":0,"smoke_density_dbm":0,"test":false,"update":{"installed_version":17,"latest_version":17,"state":"idle"},"update_available":false,"voltage":3013}'
First message is the alarm, second is after mute, third is the selftest and fourth is after the selftest.