Device mapping 3: special devices
A single reference for the media, mode, alarm, event, water, appliance, vacuum, lawn mower and action entities in Stable 2.0.55, with a clear line between the Matter representations that end the moment you press them and the ones that hold a state.
Special devices are the ones that build fine and still do not work
This group of domains spans completely different meanings: media_player has volume and playback, select has options, valve has an open and closed state, event has only events, and script triggers an action. Where Matter has no one-to-one device type, Home Assistant Matter Hub picks the closest thing it has: Mode Select, Generic Switch, On/Off Plug-in Unit or Robotic Vacuum Cleaner.
So you cannot decide that support is complete just because a tile turns up in the controller. Whether that tile stays on, whether it can only be pressed once, whether off really calls an HA action, whether the controller can render a Mode Select, and whether the device needs Server Mode are all separate questions.
doorbell and water_heater_management are experimental types inside Stable; the other manifest entries are marked maturity stable. Controller support mostly varies by type, and SmartThings is manifest unknown for most of them, so you cannot skip that layer.Alarms, sirens, valves, water heating and robots act on the real world. Confirm them first with read-only state and low-risk commands, then decide whether to expose them to voice control or to a household with several people. Matter Hub is not a safety interlock or a personal-monitoring system.
The 17 HomeAssistantDomain values in this chapter
Stable 2.0.55 has 27 HomeAssistantDomain values in all: Chapter 9 covers 7 of them, Chapter 10 covers 3, and this chapter covers the remaining 17, so no rare domain is left out.
| domain | Default path | Main meaning |
|---|---|---|
media_player | speaker; a TV automatically goes to basic_video_player | Power/mute, volume, source and play-pause, according to the supported features. |
valve | water_valve; on_off_plugin_unit is also possible | A persistent open and closed state, plus transitioning. |
water_heater | Default thermostat; can be overridden by hand to water_heater or water_heater_management | The default is a heating Thermostat; the latter is the Matter 1.4 Water Heater, which adds Boost/CancelBoost. |
select | mode_select | A persistent option; it can be worked around as two on/off options. |
input_select | mode_select | The persistent option of an HA helper. |
alarm_control_panel | mode_select; on_off_plugin_unit can be the fallback | Disarm, plus whichever arming modes are supported. |
event | generic_switch; doorbell is possible | Events with no persistent state, single and multi-press. |
siren | on_off_plugin_unit | Persistent on/off that really starts and stops the siren. |
vacuum | robot_vacuum_cleaner | Run mode, operational state, clean mode, service areas and battery. |
lawn_mower | robotic_lawn_mower | Presented for compatibility as a Robotic Vacuum Cleaner type. |
automation | on_off_switch | A momentary trigger, not an enable and disable for the automation. |
button | generic_switch | A momentary button.press. |
input_button | generic_switch | A momentary helper press. |
input_boolean | on_off_plugin_unit, on_off_switch, mounted_on_off_control | A genuinely persistent boolean state. |
remote | A plain On/Off endpoint | Persistent calls to remote.turn_on / turn_off. |
scene | on_off_switch | A momentary activate; only turn on is supported. |
script | on_off_switch | A momentary script.turn_on; a script that is still running is not treated as persistent on. |
domainToDefaultMatterTypes is the candidate matrix for the picker, not the literal name of the final endpoint for every domain. The candidates for automation, scene and script say on_off_switch, while the legacy implementation builds on an On/Off Plug-in Unit device base and keeps the momentary off semantics. Documentation should describe observable behavior, and should not put type candidates and the underlying class on the same level.
Media players, speakers, valves, pumps and water heating
If a media_player has device_class TV, it automatically uses basic_video_player; an explicit speaker override bypasses the TV detection. A speaker drives OnOff as a power control only when it supports both TURN_ON and TURN_OFF; otherwise, where it has a mute capability, mute takes that place. VOLUME_SET adds a 0–254 compatibility volume control, SELECT_SOURCE adds input sources, and PLAY or PAUSE adds playback control.
| override | Support snapshot | When to choose it |
|---|---|---|
speaker | Google and Aqara yes; Apple and Alexa no. | A good fit for audio players; no guarantee that the controller shows every input or playback button. |
basic_video_player | Aqara yes; Apple, Google and Alexa no. | TVs and video devices; the pinned source note says only Aqara Home renders it in this environment. |
water_valve | Aqara yes; Apple, Google and Alexa no. | The open, opening, closing and closed states of an HA valve map to a persistent valve state. |
pump | Google and Aqara yes; Apple and Alexa no. | A switch can be overridden into a pump; confirm that off really stops it safely. |
water_heater | Aqara yes; Apple and Google no; Alexa unknown. | Ordinary water-heater modes and temperature control. |
water_heater_management | Apple and Google no; Alexa and Aqara unknown. | Experimental inside Stable — a Matter 1.4 type carrying Boost/CancelBoost, which mainstream controllers do not render yet. |
A valve can add a Power Source from a battery attribute or from batteryEntity; open and close call the matching HA valve actions, and opening and closing show as Transitioning. When a pump comes from a switch override, the turn_on and turn_off behavior of the source integration is still what counts. Boost on a water heater involves energy use and a scalding risk, so whether the controller shows a button is not how you judge that it is safe.
select, alarm, event, doorbell and siren
select and input_select build a Mode Select out of a non-empty options list and find the current option case-insensitively; with no options, no endpoint is built. In the pinned matrix, mode_select is no for Apple, Google and Alexa, and unknown for Aqara. If the controller cannot render it, set selectExposeAsSwitch and name selectSwitchOnOption and selectSwitchOffOption explicitly, which folds two options into a persistent On/Off. Beyond two modes this workaround no longer fits.
alarm_control_panel has no dedicated Matter security panel type, so a Mode Select is used to carry the HA support bits: Disarmed, Armed Home, Away, Night, Vacation, Custom. The in-between states arming, pending and triggered do not map to a fixed mode. On platforms that do not support Mode Select there is an On/Off fallback: on arms in the order Away, Home, Night, and off disarms. That loses the extra modes, and if the real integration needs extra authentication, the controller command can fail.
event defaults to a Generic Switch and detects double, triple and multi press from the event_types names; in the pinned matrix, generic_switch is partial for Apple, no for Google, yes for Alexa and unknown for Aqara. The doorbell override is an experimental Matter 1.4 type inside Stable, and Apple, Google, Alexa and Aqara are all no; the source note says only SmartThings renders it today, and other platforms fall back to a plain Switch at best. It is not the Camera Plugin, and it carries no video.
siren is a persistent state: on and off call siren.turn_on and siren.turn_off, so do not confuse it with a momentary event. Testing a siren can disturb the neighbors or cause panic; check in HA first whether a silent test is possible, and if it is not, only cross-check the endpoint and do not start it remotely.
dishwasher, vacuum, lawn_mower and Service Area
dishwasher is an optional Matter override for switch with maturity stable, but Apple and Google are no and Alexa and Aqara are unknown; the pinned source note says platform support for appliances is thin. Labeling an arbitrary switch as a dishwasher adds no cycles, no door lock and no finish time — it only changes the device type.
vacuum builds a Robotic Vacuum Cleaner with an operational state, a run mode, a Power Source, Service Area and a clean mode that is always present. OnOff is not part of the standard RVC device type and is not added by default, because a non-conformant endpoint makes Alexa reject the device; it is added only when the vacuumOnOff feature flag is explicitly on. robot_vacuum_cleaner is yes for Apple, Google, Alexa and Aqara, but Apple voice control and Alexa discovery are better served by Server Mode in Chapter 12.
Service Area can come from cleanAreaRooms, customServiceAreas, resolved rooms or roomEntities; with no rooms at all, a single default area is still created. vacuumIncludeUnnamedRooms controls whether unnamed rooms are included; vacuumRoomSwitches can create one momentary switch per area for platforms that do not render array commands. Linked options such as cleaningModeEntity, suctionLevelEntity and mopIntensityEntity decide the clean mode, and a similar name is not a reason to assume the right one was picked.
lawn_mower has no native Matter mower type; v2.0.55 represents it as a Robotic Vacuum Cleaner and uses the mower run and operational states. In the pinned matrix robotic_lawn_mower is yes for Apple and Alexa and unknown for Google and Aqara, and the UI will look like a robot vacuum. A Power Source is added only where a battery attribute or a mapping exists.
| Type | Best use | Do not misread it as |
|---|---|---|
dishwasher | A switch that really is a dishwasher | Not a full appliance program model. |
robot_vacuum_cleaner | Vacuuming, mopping and room cleaning | Controller fit is different in bridge mode and in Server Mode. |
robotic_lawn_mower | A compatibility mapping for the lawn_mower domain | It still appears as an RVC type today, not a dedicated mower type. |
momentary, auto-reset and disableMomentaryFlip
A persistent state always reflects the device's current value — input_boolean, remote, siren, valve and select, for example. on and off usually each have an HA action, and after the controller changes something you should wait for the source state to be reported back.
A momentary action only fires: automation calls trigger, scene and script accept turn on only, and button and input_button only press. They normally stay off; when an on arrives they act once, and the controller should not treat that as something that keeps running.
| domain | on action | off / reset behavior |
|---|---|---|
automation | automation.trigger | No turn off; the display returns to off, which is not the same as disabling the automation. |
scene | scene.turn_on | No turn off; a scene always shows as off. |
script | script.turn_on | No turn off; whether the script is still running is not tracked. |
button | button.press | Always reports off and is never set to true; the timer and reset path is a no-op. |
input_button | input_button.press | No real off action. |
input_boolean | turn_on | turn_off; this is a persistent state and does not auto-reset. |
remote | remote.turn_on | remote.turn_off; a persistent state. |
The momentary behavior of script, scene, automation and input_button optimistically reports on and then returns to off after about a second, so the controller does not look stuck; button is different, and always reports off, never set to true. Some Echo devices get stuck on the unrequested on→off report pair. The entity mapping option disableMomentaryFlip genuinely skips the flip for the first four, but for button it only skips a timer that never changed the state anyway. The underlying HA action still fires. This is a workaround for one particular controller, not a way of turning a momentary action into a persistent one, and it should not be switched on globally without looking.
The smallest workflow for mapping a special device
Classify it as a state, a mode or an action
In HA, first work out whether the entity is a persistent state, a Mode Select or a momentary action. Record it with a placeholder such as
script.example_action, so live environment data does not end up in your notes.Look at the default mapping in Devices
Search for the entity on the Matter Hub Devices page and cross-check the domain against the automatic type. For a media player, also look at device_class and the supported features; for a vacuum, look at the room and mode attributes.
Compare it against the target controller
Support for Mode Select, speaker, TV, valve, water heater and appliance types varies a lot. Check the matrix first, then decide whether you need a fallback or Server Mode.
Change one mapping at a time
Set speaker, pump, water valve or select-as-switch where you need them; for momentary entities, turn on
disableMomentaryFliponly once you have confirmed that an Echo is getting stuck. Write down the original value before you save.Start with a read-only or low-risk check
Compare modes, volume, areas and states; for buttons, use a test action that does no harm. Sirens, water heating, pumps, valves, vacuums and lawn mowers need someone present and a way to stop them.
Confirm the controller command and what HA reports back
For persistent types, test on and off; for momentary ones, test a single on and confirm the action fired exactly once. If it fails, roll the mapping back rather than resetting the fabric first.
Special-device pitfalls and fallback points
Mode Select does not appear at all
Apple, Google and Alexa are all no in the pinned matrix. Use select-as-switch when there are exactly two clear options; with more options, keep the control in HA rather than sacrificing the meaning to force it into a switch.
script, scene, automation or input_button is stuck on in the controller
First confirm that the action fired only once, and that the state returns to off shortly afterwards. If a particular Echo is getting stuck on the on→off report, then turn on
disableMomentaryFlipfor that entity. A plainbuttonalways reports off, so the flip is not what you troubleshoot there.off on an automation does not disable the automation
That is the expected behavior: this mapping is a momentary trigger, not an enable switch for the automation. If you need a persistent enable and disable, build an explicit, safe input_boolean flow in HA.
A TV or speaker shows only some of the controls
Cross-check the TURN_ON/OFF, VOLUME_MUTE, VOLUME_SET, SELECT_SOURCE, PLAY and PAUSE feature bits, then check whether the controller shows that cluster. An override never adds a capability the source device does not provide.
Alexa rejects the vacuum
Confirm that
vacuumOnOffis not on where it is not needed, since OnOff is not part of the RVC spec. Then consider building a dedicated node with Server Mode in Chapter 12, so it is not mixed into the same bridge as other unsupported types.The lawn mower shows up as a robot vacuum
That is the compatibility design in v2.0.55, because Matter has no mower type yet. If the name and the risk of a remote start are not acceptable, do not expose it to that controller and keep the control in HA.
FAQ
Can the automation endpoint enable and disable the automation?
automation.trigger, and off has no action. It is a momentary trigger.Does disableMomentaryFlip stop a momentary action from running?
Does doorbell include video and two-way audio?
Does a vacuum have to use Server Mode?
Why is siren not momentary?
Stable 2.0.55 pinned sources
- The complete HomeAssistantDomain enum
- Special overrides, momentary settings and the controller matrix
- Every legacy domain endpoint implementation
- RVC, Service Area, Clean Mode and the OnOff limits
- Mode Select and the switch fallback
- Pinned add-on mirror
All of the above are pinned to the stated commit. The experimental doorbell and water heater management types are stated separately from controller support, so the Stable channel is not written up as full production support.