Skip to Content

The devices that do not fit the mold, and the moment one earns its own front door

one bridge, or a front door of its own
Matter Hub Guide · Part 7

The devices that do not fit the mold, and the moment one earns its own front door

This part finishes device mapping with the seventeen domains that never reduce to a plain on/off — media players, valves, water heaters, modes, alarms, events, sirens, vacuums, mowers and every kind of momentary action. Then it turns to a completely different question: when does a device stop being one more entity hanging off a bridge, and start deserving its own standalone Matter node? Both halves are still on the Stable 2.0.55 release channel. The standalone route is also explicitly experimental, and this part treats it that way throughout — as a planning exercise, not a place to press Create on a live system.

17 domains
The HomeAssistantDomain values this chapter covers — the remainder of 27 in Stable 2.0.55, after 7 in the control-device chapter and 3 in the sensor chapter
10 entities
The hard cap on a Server Mode / standalone node: one primary entity, plus up to nine sibling endpoints, no more
3 experimental
doorbell, water_heater_management and Server Mode itself — all live in the Stable channel, all three still experimental product maturity
Why this matters

Building without an error is not the same as working correctly

This group of domains spans meanings that have almost nothing in common. media_player has volume and playback. select has options. valve has an open and a closed state. event has only events, nothing persistent at all. script triggers an action and forgets about it. Where Matter has no matching device type for any of that, Home Assistant Matter Hub reaches for the closest thing it does have: Mode Select, Generic Switch, On/Off Plug-in Unit, or Robotic Vacuum Cleaner.

So a tile turning up in the controller is not proof that support is complete. Whether that tile stays on. Whether it can only be pressed once. Whether off really calls a Home Assistant action, or does nothing at all. Whether the controller can even render a Mode Select. Whether the device would be better off as a standalone node. Every one of those is a separate question, and this chapter walks through them domain by domain.

Version and maturity, kept separate. Every domain and override here is on the Stable 2.0.55 release channel. doorbell and water_heater_management are experimental types inside that channel; the rest of the manifest entries are marked maturity stable. Controller support is a third, independent fact that mostly varies by type — and SmartThings is listed as manifest unknown for most of them, so do not skip that layer just because it is the least documented one.

Alarms, sirens, valves, water heating and robots all act on the real world. Confirm each one first with a read-only state and a low-risk command, then decide separately whether to expose it to voice control or to a household with more than one person in it. Matter Hub is not a safety interlock, and it is not a personal-monitoring system.

The 17 domains

The 17 HomeAssistantDomain values this chapter covers

Stable 2.0.55 defines 27 HomeAssistantDomain values in total. Earlier parts of this guide covered 7 of them for control devices and 3 for sensors and energy. This part covers the remaining 17, so no domain is left unaccounted for.

domainDefault pathMain meaning
media_playerspeaker; a TV automatically goes to basic_video_playerPower/mute, volume, source and play-pause, according to which features it supports
valvewater_valve; on_off_plugin_unit is also possibleA persistent open and closed state, plus a transitioning state
water_heaterDefault thermostat; can be overridden to water_heater or water_heater_managementThe default is a heating Thermostat; the second override is the Matter 1.4 Water Heater, adding Boost/CancelBoost
selectmode_selectA persistent option; can be worked around as two on/off options
input_selectmode_selectThe persistent option of an HA helper
alarm_control_panelmode_select; on_off_plugin_unit can be the fallbackDisarm, plus whichever arming modes the panel supports
eventgeneric_switch; doorbell is possibleEvents with no persistent state, single and multi-press
sirenon_off_plugin_unitA persistent on/off that really starts and stops the siren
vacuumrobot_vacuum_cleanerRun mode, operational state, clean mode, Service Area and battery
lawn_mowerrobotic_lawn_mowerPresented, for compatibility, as a Robotic Vacuum Cleaner type
automationon_off_switchA momentary trigger — not an enable/disable for the automation itself
buttongeneric_switchA momentary button.press
input_buttongeneric_switchA momentary helper press
input_booleanon_off_plugin_unit, on_off_switch, mounted_on_off_controlA genuinely persistent boolean state
remoteA plain On/Off endpointPersistent calls to remote.turn_on / remote.turn_off
sceneon_off_switchA momentary activate; only turn on is supported
scripton_off_switchA momentary script.turn_on; a script still running is not treated as persistent on

domainToDefaultMatterTypes is the candidate matrix that the picker consults, not the literal name of the final endpoint for every domain. The candidates for automation, scene and script all say on_off_switch, while the legacy implementation actually builds on an On/Off Plug-in Unit device base and keeps the momentary off semantics described later in this chapter. A description of the observable behavior and the underlying class are two different things, and this guide tries not to put them on the same level.

In plain terms

domainToDefaultMatterTypes is a shortlist, not a hiring decision. It says which Matter device type is a plausible fit for a domain. Which class actually gets built, and how it behaves once it exists, is a separate decision made further down in the code. Reading the shortlist as the final answer is how you end up surprised that something labeled a "switch" still remembers to reset itself after one second, like a script does.

Media, valves, water

media_player, valve and water_heater, and the overrides that reuse them

If a media_player has device_class TV, it automatically uses basic_video_player; an explicit speaker override bypasses that 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 instead. VOLUME_SET adds a 0–254 compatibility volume control, SELECT_SOURCE adds input sources, and PLAY or PAUSE adds playback control.

overrideSupport snapshotWhen to choose it
speakerGoogle and Aqara yes; Apple and Alexa noA good fit for audio players. No guarantee the controller shows every input or playback button
basic_video_playerAqara yes; Apple, Google and Alexa noTVs and video devices. The pinned source notes that only Aqara Home renders it in this environment
water_valveAqara yes; Apple, Google and Alexa noThe open, opening, closing and closed states of an HA valve map onto a persistent valve state
pumpGoogle and Aqara yes; Apple and Alexa noA switch can be overridden into a pump. Confirm off really stops it safely before you rely on it
water_heaterAqara yes; Apple and Google no; Alexa unknownOrdinary water-heater modes and temperature control
water_heater_managementApple and Google no; Alexa and Aqara unknownExperimental 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 — the override changes the Matter type, not the underlying safety logic. Boost on a water heater involves energy use and a scalding risk, so whether the controller happens to show a button is not how you judge that using it is safe.

Warning. Remote control of water valves, pumps and water-heating equipment has to keep a local shut-off, leak protection and a temperature limit in place regardless of what Matter Hub exposes. No controller workaround replaces hardware protection.
Select, alarm, event, siren

Where a Mode Select stands in for something Matter does not have

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 at all, no endpoint is built. If the controller cannot render Mode Select, 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 the domain.

alarm_control_panel has no dedicated Matter security-panel type, so a Mode Select carries the HA support bits instead: Disarmed, Armed Home, Away, Night, Vacation, Custom. The in-between states — arming, pending, triggered — do not map to a fixed mode. On platforms that cannot 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 simply fail.

Your panel supportsDisarmed, Armed Home, Away and Night, mapped through Mode Select on a controller that renders it.
On a controller with no Mode SelectThat narrows to a single on/off: on arms Away, then Home, then Night, in that fixed order, and off disarms. Vacation and Custom have nowhere to go in this fallback.

event defaults to a Generic Switch and detects double, triple and multi press from the event_types names. The doorbell override is an experimental Matter 1.4 type inside Stable; 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.

Matter typeApple HomeGoogle HomeAmazon AlexaNote
mode_selectnononoAqara unknown. Use selectExposeAsSwitch with exactly two options as a workaround
generic_switchpartialnoyesAqara unknown. Also the default type for button and input_button
doorbellnononoAqara no. SmartThings is the only platform noted to render it; experimental inside Stable

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 rather than starting it remotely.

Appliances and robots

dishwasher, vacuum, lawn_mower and the Service Area they build

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 generally 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 shown to the controller.

vacuum builds a Robotic Vacuum Cleaner with an operational state, a run mode, a Power Source, a 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 outright; it is added only when the vacuumOnOff feature flag is explicitly turned on. robot_vacuum_cleaner itself is yes for Apple, Google, Alexa and Aqara — but Apple voice control and Alexa discovery are better served by the standalone route later in this part.

Service Area can come from cleanAreaRooms, customServiceAreas, resolved rooms, or roomEntities; with no rooms configured at all, a single default area is still created. vacuumIncludeUnnamedRooms controls whether unnamed rooms are included, and 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-sounding entity name is not a reason to assume the right one got picked.

Your vacuum hasThree cleanAreaRooms — kitchen, living room, hallway — plus a suctionLevelEntity and a mopIntensityEntity that decide the clean mode.
Matter Hub buildsOne Robotic Vacuum Cleaner with a Service Area holding all three rooms, an always-present clean mode, and no OnOff cluster unless vacuumOnOff is explicitly turned on.

lawn_mower has no native Matter mower type; Stable 2.0.55 represents it as a Robotic Vacuum Cleaner and reuses the mower's run and operational states. robotic_lawn_mower is yes for Apple and Alexa, and unknown for Google and Aqara — and the controller UI will genuinely look like a robot vacuum. A Power Source is added only where a battery attribute or a mapping actually exists.

TypeBest useDo not misread it as
dishwasherA switch that really is a dishwasherNot a full appliance program model
robot_vacuum_cleanerVacuuming, mopping and room cleaningController fit is different in bridge mode and in the standalone route
robotic_lawn_mowerA compatibility mapping for the lawn_mower domainIt still appears as an RVC type today, not a dedicated mower type
Momentary vs persistent

The line every special device sits on one side of

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 their own HA action, and after the controller changes something you should expect to 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 sit off; when an on arrives they act once, and the controller should not treat that as something that keeps running.

flowchart TD
  A["A domain in this chapter"] --> B{"Does its state reflect the device's current value, after you act on it?"}
  B -->|"yes"| C["Persistent: input_boolean, remote, siren, valve, select and alarm_control_panel"]
  B -->|"no"| D{"Does it only ever fire once and settle back to off?"}
  D -->|"yes"| E["Momentary: automation, scene, script, button and input_button"]
Two questions, two outcomesThe diagram has exactly two terminal boxes, C and E, one for each way of answering "yes." Nothing in this chapter fails both questions, and nothing passes both — every domain here lands in one box or the other.
domainon actionoff / reset behavior
automationautomation.triggerNo turn off; the display returns to off, which is not the same as disabling the automation
scenescene.turn_onNo turn off; a scene always shows as off
scriptscript.turn_onNo turn off; whether the script is still running is not tracked
buttonbutton.pressAlways reports off and is never set to true; the timer and reset path is a no-op
input_buttoninput_button.pressNo real off action
input_booleanturn_onturn_off; a genuinely persistent state, it does not auto-reset
remoteremote.turn_onremote.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 domains, but for button it only skips a timer that never changed the state anyway — the underlying HA action still fires either way. 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 at what it actually touches.

flowchart TD
  A["A momentary action fires"] --> B{"Which domain?"}
  B -->|"automation, scene, script or input_button"| C["Optimistically reports on, then off about a second later"]
  B -->|"button"| D["Always reports off. Never set to true"]
  C --> E{"Is disableMomentaryFlip set on this entity?"}
  E -->|"yes"| F["The on-then-off flip is skipped for that entity"]
  E -->|"no"| G["The flip happens as described above"]
  D --> H["disableMomentaryFlip only skips a timer that was never changing the reported state"]
Three terminal boxes, one of them a non-eventF, G and H are the three boxes nothing leads out of. H is the one worth remembering: because button never reports on in the first place, the flag has nothing to skip there beyond an internal timer, while F is the only box where the flag changes what a controller actually sees.
In plain terms

A doorbell button is momentary by nature: press it, the chime sounds once, and the button itself was never really "on." disableMomentaryFlip does not change what the button does. It only changes whether the log entry reads "pressed, then released" or just "pressed" — cosmetic, and only worth touching because one brand of chime gets confused seeing "released" when it was not expecting it.

How to decide. If "press once, run once" is what success means, use momentary. If people need to see the current switch or mode, use a persistent domain. Do not lean on auto-reset to imitate a real device state — it only ever imitates the appearance of one.
Standalone Devices

A device inside a bridge is not the same as a standalone node

A standard bridge hangs several bridged devices off a single aggregator endpoint. Server Mode instead puts the device endpoint straight onto a Matter ServerNode, removes the bridged-device identity, and makes it look like a standalone Matter device in its own right. That matters most for types such as the robot vacuum, where a controller will only offer voice control or discovery on a standalone node.

The Dashboard page at /standalone-devices calls each Server Mode configuration a standalone device. Underneath, it still uses one set of bridge data, a filter, a port, a persistent identity and a commissioning state — but the code path it starts is ServerModeBridge, not the standard Aggregator Bridge.

Always label it clearly. The Server Mode route and its feature flag both exist on the Stable 2.0.55 release channel, but the product maturity is experimental. Controller support is a third, separate fact, decided per device type: the manifest marks Apple, Google, Alexa, Aqara and SmartThings all unknown for Server Mode itself, so do not write it up as production support on every platform.

This part treats standalone devices as a planning and risk exercise. Nothing here asks you to press Create, Pair or Delete on a live system, and nothing shows a QR code, a manual pairing code, or any identifying data. The actual commissioning and the safe multi-fabric procedure belong to the next part of this guide.

Nodes, endpoints and identity

ItemStandard bridgeServer Mode / standalone
Matter structureOne node holds an aggregator and bridged child endpointsEntity endpoints are added straight to the ServerNode, with no aggregator
Device identityEvery child carries Bridged Device Basic InformationThe bridged identity is removed; the root node carries the main identity
How manyPlanned from the size of the bridge and the controller's capacityA hard limit of ten entities per node
Primary entityThe bridge's own identity is separate from each childThe first entity the include matcher matches is the primary; it drives the node identity and the advertised device type
Composed devicesautoComposedDevices and a user composed endpoint are availableNo composed shape is supported; it falls back to a flat standalone endpoint
PluginsA standard bridge can use the plugin surface, subject to the feature's own maturityNot available; a Server Mode bridge has no pluginInfo and no enable/disable methods

Apart from vacuums, most domains first reuse the same LegacyEndpoint mapping described earlier in this guide, then use asStandaloneEndpointType to strip out bridgedDeviceBasicInformation. Vacuums use a dedicated ServerModeVacuumDevice / endpoint, which likewise carries no bridged identity and, by default, adds no OnOff cluster that would not conform to the RVC spec.

So standalone is not a second list of supported domains. Lights, sensors, fans, selects and everything else remain bound by the same HA device class, Matter override and controller device-type support limits covered earlier. Server Mode changes only the node structure; it cannot make a controller suddenly support a type that is marked no.

flowchart TD
  A["A Matter Hub bridge configuration"] --> B{"Standard bridge, or Server Mode?"}
  B -->|"Standard bridge"| C["One ServerNode holds an Aggregator endpoint"]
  C --> D["Each bridged device hangs off the aggregator, carrying Bridged Device Basic Information"]
  B -->|"Server Mode"| E["Entity endpoints sit straight on the ServerNode. No aggregator is built"]
  E --> F["The bridged identity is removed. The first matching entity becomes the primary and drives the node's own identity"]
One decision, two structures, two terminal boxesD and F are the only boxes nothing leads out of, one per branch. Composed devices and plugins, covered later in this part, attach to the Standard bridge branch only — neither box on the Server Mode side of this diagram carries either capability.

Ten at most, and the first one is primary

The Standalone Devices create form takes exact entity IDs, each one shaped domain.object_id. Wildcards are not allowed, and a duplicate value is rejected outright. Frontend and backend both cap it at ten rows / ten endpoints; if the backend somehow receives more, it skips the surplus and reports it under failed entities.

The first entity the include matcher matches is the primary. Its HA device, friendly name, Entity Mapping identity override and Matter device type drive the root node's identity and its advertised device type; the other entities — up to nine of them — are flat sibling endpoints attached directly to the same node. Anything with more than one entity is still explicitly experimental inside Stable.

The order is structural data. Changing the order does more than rearrange a list on screen. If a different entity becomes the first available endpoint, the node's external identity and advertised type can change with it, and a controller you have already commissioned may keep the old information cached. Back up the configuration first, and work out whether the controller needs refreshing — a reorder is not a harmless drag.
Grouping strategyFitsDoes not fit
One entity per nodeVacuums and mowers, anything needing a clearly separate identity, and problem isolationLarge numbers of simple sensors; it raises the cost of commissioning and of managing nodes
One primary plus a few siblingsDevices with the same purpose and the same controller support profileMixing an EVSE, a rare detector, media and ordinary lights; controller discovery can fail, or the UI can end up confusing
Filling all tenA controlled, tested setup where the controller displays everything reliablyDoing it only to save on node count; ten is a hard limit, not a target to aim for

If a sibling is already absorbed by the primary's own mapping — a vacuum that automatically links a battery or a mode select, say — the backend marks the duplicate "Already exposed through …" instead of building a second endpoint. A disabled entity keeps its identity number but is listed as a failure, so that a reversible disable does not cause everything after it to renumber.

flowchart TD
  A["An entity listed in the create form"] --> B{"Already exposed through the primary's own mapping? A vacuum's linked battery, say"}
  B -->|"yes"| C["Marked Already exposed through... No second endpoint is built"]
  B -->|"no"| D{"Is the ten-entity cap already reached?"}
  D -->|"yes"| E["Skipped, and listed as a failed entity"]
  D -->|"no"| F["Built as a flat sibling endpoint on the same node"]
Three ways an entity can end up, and only one builds something newC, E and F are the three terminal boxes. C and E both leave the node exactly as it was; F is the only outcome that adds an endpoint, which is why a duplicate or an eleventh entity can quietly produce nothing rather than an error.
You listvacuum.example_cleaner as the primary, then its own battery sensor as a ninth sibling entity.
The backend doesMarks the battery entity "Already exposed through vacuum.example_cleaner" and builds no second endpoint for it — the vacuum's own Power Source already carries that information.
Create, edit, delete, fit

What each button actually does, and which controllers this actually helps

What Create, Edit, Reorder and Delete each affect

Create means the Add device form on the Standalone Devices page takes a name and one to ten exact entities. On submit, the backend assigns an available port, builds the filter include rows, and sets serverMode to true. That creates a new Matter node and persistent data; it is not a read-only preview.

Edit and Reorder mean that opening details and pairing on a list card takes you into an existing configuration, where the standard bridge detail and edit routes manage the filter and Entity Mapping. The standalone create dialog itself has no drag-and-drop editor for a node that already exists. To change the primary you have to change the order of the include matcher and assess the effect on identity and on controller caches; to change the Matter type, use Entity Mapping rather than editing the HA entity ID.

Delete means the list has a delete button and a confirmation dialog. The pinned UI text says it plainly: it deletes the Matter node and removes the commissioning from the controller, and it cannot be undone. Deleting is not a routine troubleshooting step. Before running it, back up the persistent storage and the configuration, record every controller that has joined, and confirm the maintenance window for rebuilding and re-commissioning.

ChangePossible impactSafe fallback point
Adding a nodeA new port, storage, a commissioning state and a device on the controllerCancel before you submit; after submitting, stop it rather than deleting it outright, and confirm the configuration backup
Adding or removing a siblingThe endpoint structure changes; the controller re-discovers, or keeps a stale cacheChange one thing at a time and keep the original include order
Reordering the primaryThe root identity and the advertised device type can changeRestore the original order first; do not rename or change an override at the same time
Deleting a nodeThe commissioning is removed and cannot be undone; you rebuild and re-commissionOnly a backup made beforehand and a rebuild plan; once you confirm, there is no undo

Vacuums, mowers, and which controllers actually need this

The source code states the purpose of a Server Mode vacuum outright: avoid Bridged Device Basic Information so it appears as a standalone device, which is what Apple Home Siri commands and Alexa discovery need. The frontend's Filter Preview also suggests considering Server Mode when a standard bridge includes a vacuum. That is a device-specific compatibility strategy, not a blanket yes for Server Mode across every controller.

TypePinned device-type supportServer Mode planning
robot_vacuum_cleanerApple, Google, Alexa and Aqara yesFor Apple voice and Alexa discovery, prefer one vacuum per node; keep the standard RVC and do not turn OnOff on blindly
robotic_lawn_mowerApple and Alexa yes; Google and Aqara unknownIt still shows as an RVC type. A standalone node helps with isolation, but does not produce a mower-specific UI
evseAqara yes; Apple, Google and Alexa noDo not put it into Alexa just because it is standalone; the sources note that a bridged EVSE can break Alexa recognition
air_purifier / fanApple no; Google, Alexa and Aqara yesA standalone node still cannot change Apple's no
mode_selectApple, Google and Alexa no; Aqara unknownStandalone does not fix the UI gap; you still need a two-state switch fallback, or you keep it in HA

Service Area, Clean Mode, Operational State and Power Source on a vacuum follow the same logic described earlier in this part. Room, button, suction, mopping and charging links can still absorb other entities; if you then list those linked entities as siblings as well, the backend refuses the duplicate exposure — the same rule the diagram above already showed you. A mower only gets a Power Source when battery information exists, and a controller may still call it a robot vacuum.

Recommendation. A dedicated standalone node for a vacuum or a mower makes discovery, voice and area problems easier to locate than mixing ten different device types together. That is architectural advice, not a claim that Server Mode has left experimental behind.

Commissioning, in outline

Every standalone device is its own Matter node, so it has its own commissioning entry point, its own fabric relationships, its own sessions, and its own device record on the controller. Opening details and pairing on a list card is only a way in — you still have to confirm the network, IPv6, mDNS, the permissions on the controller account, and the maintenance window first.

The safe procedure has four parts: create and start the node, look at its commissioning state, join it on the controller side, and finally come back to Matter Hub to verify the fabric and the subscription health. QR codes and manual pairing data are secrets. Show them only briefly on a screen you control — do not screenshot them, do not paste them into a ticket, do not write them into this guide, and do not use a real example anywhere.

Multi-fabric means joining the same node to a second controller ecosystem, not building a second standalone device. Whether you can open a new commissioning window, how the controllers share it, and what removing a fabric does are all covered by the fixed procedure in the next part of this guide. Do not use Delete Standalone Device to remove a single controller, because Delete removes the whole node.

Splitting by controller. Some workarounds — an Alexa-only vacuum, or excluding an incompatible type — belong on a separate node or bridge, while multi-fabric is for one device controlled from several platforms. The two designs are not interchangeable.

Server Mode has no plugins

A Server Mode bridge in Stable 2.0.55 does not provide pluginInfo, and it has no plugin enable / disable methods. The plugin API skips Server Mode in its listing, and answers a plugin operation on a single Server Mode bridge with not supported, rather than installing the plugin.

So even though the Camera and Security plugins have routes inside the Stable channel, their product maturity is still experimental, and they are not available on standalone devices or in Server Mode. Do not treat the experimental doorbell covered earlier in this part as a Camera Plugin — the doorbell only gives you an event or switch type, with no video. And do not use a multi-entity standalone device to try to "compose" a camera, a doorbell and a lock as a way around the limit.

Server Mode does not support composed mappings either: set composedEntities or climateExposeFan and the code logs a warning and falls the primary back to a flat endpoint. Automatic links such as a battery or a vacuum mode can still attach to that endpoint, but that is not the same as an arbitrary composed device parent.

FeatureStandard bridgeServer Mode
Legacy entity mappingAvailableAvailable, converted to the standalone endpoint type
Dedicated vacuum endpointBridged RVCStandalone RVC, which suits Apple Siri and Alexa discovery
User composed deviceNeeds autoComposedDevices and similar conditionsNot available; it falls back to flat
Camera and Security pluginsThe feature itself is experimental inside StableNot available
In plain terms

A standard bridge is an apartment building: one street address for the whole building, and a directory in the lobby that lists every unit inside. A Server Mode device is a single-family house — its own address, nobody else's name on the mailbox, and it never had a directory to remove in the first place. Deleting the house is not the same job as removing one unit from the building. It takes the whole address with it.

A safe way to plan it

The smallest workflow for a special device, and for a standalone node

Mapping a special device

  1. Step 1

    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 no live environment data ends up in your notes.

  2. Step 2

    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 check device_class and the supported features; for a vacuum, check the room and mode attributes.

  3. Step 3

    Compare it against the target controller

    Support for Mode Select, speaker, TV, valve, water heater and appliance types varies widely. Check the matrix first, then decide whether you need a fallback or a standalone node.

  4. Step 4

    Change one mapping at a time

    Set speaker, pump, water valve or select-as-switch where you need them; for momentary entities, turn on disableMomentaryFlip only once you have confirmed a controller is actually getting stuck. Write down the original value before you save.

  5. Step 5

    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.

  6. Step 6

    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.

Planning a standalone device, without touching a live one

  1. Step 1

    List the target entities and controllers

    In an offline change ticket, use documentation placeholders such as vacuum.example_cleaner and mark each device type yes / partial / no / unknown. Do not paste in a live entity list or network data.

  2. Step 2

    Decide between one entity per node and a small group

    Give a vacuum or a mower its own node first. If you plan a group instead, keep it to ten or fewer, and put in only entities with a similar support profile.

  3. Step 3

    Set the primary and the order

    Put the entity that should drive the name, the identity and the advertised type in the first row. Record both the original order and the intended order, and assess the effect on controller caches.

  4. Step 4

    Locate it in the UI, read-only

    Confirm that Standalone Devices is in the navigation, and look at the name, entity summary, status and entity problems on the existing cards. You may open details to read the status, but in this dry run do not press Create, Pair or Delete, and do not save an edit.

  5. Step 5

    Finish the backup and recovery plan

    Write down the Matter Hub storage and configuration you need to back up, the controllers already commissioned, the window for stopping and restarting, and how you would restore the original include order if a change of primary goes wrong.

  6. Step 6

    Leave the actual work to the commissioning procedure

    Once you have approval, follow the fixed procedure in the next part of this guide, run it inside a controlled window, and keep secrets on the local screen only. Without approval or a backup, the safe finish line for this exercise is "planned, not submitted."

Common pitfalls

The symptom you see, and the setting that explains it

SymptomLikely causeWhat to do
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 forcing it into a switch
script, scene, automation or input_button is stuck on in the controller The optimistic on→off flip, which some Echo devices get stuck on Confirm the action fired only once and the state returns to off shortly after. If a particular Echo is getting stuck, turn on disableMomentaryFlip for that entity. A plain button always reports off, so the flip is not what you troubleshoot there
off on an automation does not disable the automation Expected behavior: this mapping is a momentary trigger, not an enable switch 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 A feature bit is not supported, or the controller does not render that cluster Cross-check the TURN_ON/OFF, VOLUME_MUTE, VOLUME_SET, SELECT_SOURCE, PLAY and PAUSE feature bits. An override never adds a capability the source device does not provide
Alexa rejects the vacuum vacuumOnOff is on where it does not need to be; OnOff is not part of the RVC spec Confirm vacuumOnOff is off unless you need it. Consider a dedicated standalone node instead of mixing it into a bridge with other unsupported types
The lawn mower shows up as a robot vacuum That is the compatibility design in Stable 2.0.55; Matter has no mower type yet If the name or the risk of a remote start is not acceptable, do not expose it to that controller and keep the control in HA
The Standalone Devices route does not exist The version is not really Stable 2.0.55, or the route name was guessed Cross-check the version first. A route existing does not mean the feature maturity is already stable
It shows no entity, or an entity problem The include is not an exact entity ID, the entity was renamed, removed or disabled, or the HA registry is unavailable Check the exact entity ID. An empty registry delays reconciliation while HA restarts, so do not delete the endpoint straight away
The eleventh entity was not built Ten per node is a hard limit; anything above it is listed as a failed entity Move the extra entities to another node. The frontend forbids wildcards, so that is not a shortcut either
The wrong entity drives the controller name or type The first include matcher is not the one you meant Check the first matcher and the first endpoint that actually built. Plan to restore the original order; do not delete the node, rename it and re-commission all at once
The vacuum builds but voice or discovery does not work It is not really in Server Mode, or the controller's own device-type support is the real limit Confirm Server Mode and standard RVC clusters with no unnecessary OnOff, then check the controller's device-type support. Server Mode itself guarantees nothing about every platform version
You cannot find the plugin actions This is a design limit, not a permissions error Server Mode hosts no plugins. Use a standard bridge to assess an experimental plugin instead
You are about to delete something to fix a caching problem Delete removes the node and every controller's commissioning, and cannot be undone Stop. Back up first, collect redacted diagnostics, and restore the most recent mapping and order. Only an approved rebuild plan gets as far as deleting
FAQ

Questions people ask

Can the automation endpoint enable and disable the automation?
No. On calls automation.trigger, and off has no action at all. It is a momentary trigger, not a switch for the automation itself.
Does disableMomentaryFlip stop a momentary action from running?
No. script, scene, automation and input_button still run; what the flag skips is the optimistic on→off report. A plain button always reports off anyway, so for it the flag only skips a no-op timer.
Does doorbell include video and two-way audio?
No. The doorbell covered in this part is an experimental Matter 1.4 switch/event type inside Stable, which is a different feature from the Camera Plugin; and Server Mode offers no plugins at all.
Does a vacuum have to use Server Mode?
Not every controller requires it, but the pinned source says Apple Siri and Alexa discovery suit a standalone node. An ordinary bridge can still build an RVC; controller fit is a separate judgment either way.
Why is siren not momentary?
A siren has persistent started and stopped states, and both on and off have an HA action. Treating it as momentary would cost you a reliable way to stop it.
Is Server Mode a production feature in Stable 2.0.55?
It is on the Stable release channel, but its product maturity is experimental. Keep both labels together; controller support is a third, independent fact.
Can a standalone device hold only one entity?
No. It can hold one to ten flat sibling endpoints, but the first one is the primary, and anything beyond a single entity is explicitly marked experimental. Ten is a hard limit, not a recommendation to fill it.
Is reordering only a change to the list?
No. The first endpoint that builds successfully drives the root identity and the advertised device type, so a reorder can affect controller caching and display.
Can standalone make Apple show an air purifier or a fan?
You cannot infer that. In the pinned device-type matrix Apple is no for both air_purifier and a standalone fan; the node structure does not change a controller's own type support.
Can I install a Camera or Security Plugin on a standalone device?
No. Server Mode has no plugin surface, and Camera and Security are themselves experimental inside Stable, so the two must not be written up as usable together on a standalone device.
Can I press Undo after deleting?
No. The pinned UI says outright that it deletes the node, removes the commissioning from every controller, and cannot be undone. Your only route back is a backup made beforehand, a rebuild, and a fresh commissioning.
Next

Where to go from here

mapped, now make it official

Every entity has a Matter type now. None of them are commissioned to anything yet.

This part closes out device mapping: the seventeen domains that never reduce to a plain switch, and the question of when one of them deserves to leave the bridge and become its own standalone node. The next part of this guide is where a Matter device actually joins a controller's fabric — the commissioning and multi-fabric procedure in full, and then pairing with Apple Home by name, its supported device types, and its own quirks.

Open the full guide

Part 7 of the Home Assistant Matter Hub Complete Guide series on the Apporo blog.

Adapted from the Home Assistant Matter Hub Complete Guide, produced by WoowTech and released under CC BY 4.0. This adaptation is published by Apporo under the same licence.

Light · Air · Water · Control · apporo

The switch that becomes a light, and the sensor that becomes nothing at all