Skip to Content

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

the name on the box is not the truth
Matter Hub Guide · Part 6

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

Stable 2.0.55 turns a Home Assistant entity into a Matter endpoint by reading its domain, its device_class, its supported_features and a handful of attributes. This part covers the two chapters where that reading matters most: the seven control domains — light, switch, lock, cover, climate, fan and humidifier — and the three domains that carry almost every sensor in a house — sensor, binary_sensor and weather. The theme running under both halves is the same. A mapping is a translation, and a translation can be accurate and still mislead the reader — or in this case, mislead the controller showing the tile.

7 of 27
Control domains this part covers — light, switch, lock, cover, climate, fan and humidifier — out of the full 27-entry HomeAssistantDomain list in Stable 2.0.55.
0x0100
The Matter device type on_off_switch actually builds: an On/Off Light. A controller renders it as a light tile, not as a wall control, whatever the override name promises.
8 pollutants
Separate air-quality overrides in the picker — AQI, CO, TVOC, NO₂, O₃, formaldehyde, radon and PM1 — each measuring something different, each with its own controller story.
One mapping, three layers

Home Assistant Matter Hub is not a Matter controller

Keep that sentence in front of you for the rest of this part. Matter Hub reads a Home Assistant entity, builds a Matter endpoint that describes what that entity can do, and then hands the whole thing to whatever is actually acting as the controller — Apple Home, Google Home, Amazon Alexa, Aqara or SmartThings. The controller is the one that decides whether to draw a tile, a slider or a voice capability for that endpoint. Matter Hub's job ends at a correctly described endpoint. What happens after that is out of its hands.

Take an ordinary wall relay. In Stable 2.0.55, on_off_plugin_unit means a switchable load — the conservative default for a plug or an appliance. on_off_switch, despite the name, is implemented as a Matter On/Off Light (0x0100), so a controller draws it as a light, not a wall controller. mounted_on_off_control is the experimental Matter 1.4 wall-control type. on_off_light also means a light. All four can carry On/Off, and none of them guarantees the same picture on a controller's screen. The safe order is: keep the automatic mapping first, confirm in Home Assistant what the entity can actually do, and reach for a Matter override only for a specific, named controller gap.

Keep three facts separate. Everything in this part exists in the Stable 2.0.55 release channel. Most of these mappings sit at maturity stable, but mounted_on_off_control is an experimental type inside Stable, and electrical_utility_meter is an opt-in Matter 1.4 override that the pinned sources do not mark experimental. And controller support differs type by type, so “it is in Stable” never implies “every home platform will show it.”
In plain terms

Renaming a job title on a business card does not change what the person can actually do. Call the office plumber a Facilities Engineer and the pipes still leak in exactly the same places; the only thing that changed is what a visitor expects when they read the card. A Matter override works the same way. It changes the label Matter Hub hands to the controller. It does not add a feature the underlying Home Assistant entity never had.

Sensors add a third failure mode on top of that. A control device is either the wrong type or the right one; a sensor value can build correctly, fail to display, and still be wrong, all for different reasons that live in different places:

  • Matter Hub skips it outright. An unrecognized device_class is logged as an entity warning and left out. Nothing is guessed.
  • The endpoint is healthy, but the controller does not support that type. This is a platform limitation, not a Home Assistant or Matter Hub fault.
  • The controller has a tile, and the number on it is wrong. The source unit, the source state, or a linked entity is the actual problem, not the mapping.

Working out which of those three you are in, before you touch anything, is most of what this part is trying to teach. Safety sensors deserve one more sentence up front: they only give you notifications and automation signals. They do not replace the smoke, gas, leak or freeze equipment that regulations require, and the energy and EVSE types bridge Home Assistant states and commands — they are not billing-grade metering and not a charging safety controller.

Lights, switches and plugs

The seven control domains, and everything that can override them

The table below lists the default type candidates for the seven control domains covered in this part, alongside what actually decides the result. A candidate is not a guaranteed outcome — the real endpoint still comes from the capability bits and the attributes on the entity.

Home Assistant domainDefault or optional Matter typeWhat decides it
lighton_off_light, dimmable_light, color_temperature_light, extended_color_lightBrightness, color temperature and color capability all come from supported_color_modes.
switchon_off_plugin_unit; can be overridden to on_off_switch, dimmable_plugin_unit or mounted_on_off_controlAn ordinary switch defaults to something that behaves like a switchable plug; you still have to cross-check what the load really is.
lockdoor_lockThe OPEN feature decides whether unlatch is included; a battery can add a Power Source.
coverwindow_coveringLift, position awareness and tilt capability come from the supported features.
climatethermostatAt least one of heat, cool, heat_cool, auto, fan_only or dry has to be available.
fanfan; can be overridden to air_purifierSpeed, presets, direction, oscillation and the natural-wind mode are decided by capabilities and names.
humidifierhumidifier_dehumidifierWhether available_modes contains Auto, and whether current_humidity exists.

Every Matter override this part discusses, with its maturity and the controller snapshot in the pinned source, is below.

Matter overrideWhat it is forMaturity / key compatibility
on_off_lightA light that only switches on and offstable; yes for Apple Home, Google Home, Amazon Alexa and Aqara.
dimmable_lightA dimmable light with no colorstable; yes on all four main controllers.
color_temperature_lightThe override name for a color-temperature lightstable; the implementation presents it on an Extended Color Light capability set that initializes safely.
extended_color_lightA light with brightness, color temperature and colorstable; yes on all four main controllers.
on_off_plugin_unitA switchable plug or an ordinary loadstable; yes on all four main controllers.
dimmable_plugin_unitA plug-in load with adjustable outputstable; no for Google Home, yes for the other main platforms listed.
on_off_switchNamed switch, but the implementation emits a Matter On/Off Light 0x0100stable; a controller shows it as a light, not as a wall-control device you can expose.
mounted_on_off_controlThe Matter 1.4 wall-control typeExperimental inside Stable; no for Apple Home, Google Home and Amazon Alexa, yes for Aqara; not a general-purpose substitute.
door_lockA door lockstable; partial for Google Home, yes for Apple Home, Amazon Alexa and Aqara.
window_coveringCurtains, roller blinds, venetian blinds, doors or garage doorsstable; yes on all four main controllers, but the position direction still needs verifying.
thermostatAir conditioning, heating, thermostats and ventilationstable; yes on all four main controllers, though the detailed modes still depend on the platform.
fanA standalone fanstable; Apple Home no, Google Home, Amazon Alexa and Aqara yes.
air_purifierAn air purifier; can link an air filter and temperature and humiditystable; Apple Home no, Google Home, Amazon Alexa and Aqara yes.
humidifier_dehumidifierHumidifier and dehumidifier controlstable; Google Home no, Amazon Alexa yes, Apple Home and Aqara unknown.

SmartThings does not appear in the four-column picker matrix in the pinned source at all, and the feature manifest marks most of the rows above as unknown for it. Unknown means the pinned version has no sufficient evidence — it is neither yes nor no. Do not rewrite one working case into a blanket support claim, and do not read an unknown as a quiet no either.

How lights, switches and plugs get their capabilities

The automatic path for light checks supported_color_modes. With only onoff it builds an On/Off Light. Any mode that is neither unknown nor onoff can carry brightness. HS, RGB, XY, RGBW and RGBWW mean color capability; color_temp means color-temperature capability. In this version, a color or color-temperature light assembles the features it needs on an Extended Color Light, which avoids a Color Temperature Light initialization problem in the underlying implementation. That is a choice about the endpoint base, not a sign that color temperature went missing.

switch defaults to an On/Off Plug-in Unit with Groups and Scenes Management attached. A battery / battery_level attribute, or a batteryEntity named in Entity Mapping, can add a Power Source. Lights and switches can also link powerEntity, energyEntity, voltageEntity and currentEntity; a voltage or current link enables Electrical Power Measurement even with no separate power entity.

flowchart TD
  A["switch domain entity"] --> B["Automatic type:
on_off_plugin_unit
(a switchable plug)"] A -->|"override to on_off_switch"| C["Matter On/Off Light 0x0100.
Controller draws a light tile"] A -->|"override to mounted_on_off_control"| D["Experimental Matter 1.4
wall-control type"] A -->|"override to dimmable_plugin_unit"| E["Plug-in load with
adjustable output"]
Four outcomes for one domainFour boxes hang off the switch domain box: the automatic result and three named overrides. The box labeled Matter On/Off Light is what on_off_switch actually produces — a controller reads it as a light, not as the wall control its name implies. mounted_on_off_control is the only one of the four marked experimental in this chapter's matrix.
In plain terms

It is a delivery van with the word Taxi painted on its side. You can flag it down and it will still take you somewhere, but the meter, the receipt and what the passenger expects on arrival are all wrong. on_off_switch says switch on the label. A controller sees a light, and shows the tile a light gets.

How to choose a type. A relay that stays on or off for long stretches fits a plug unit. Use on_off_switch only if you actually want a light tile, and evaluate the experimental mounted_on_off_control only for a genuine wall control. Buttons, scenes and scripts are momentary actions with their own mapping story later in this series — do not dress them up as permanently powered devices just because a controller prefers a plug tile.

Two workarounds are worth naming here because they are the ones people reach for first. If Alexa overwrites the previous brightness when you “turn on the light,” the bridge feature flag alexaPreserveBrightnessOnTurnOn is an Alexa-only fix: Stable, maturity stable, yes for Amazon Alexa and no for Apple Home. It does not add brightness the light never had, and it should not be switched on preemptively for other controllers. Turning a Google Home room off while keeping light state in sync got a source-code fix in this version, but your success criterion is still whether Home Assistant's own state reporting is correct.

Locks, covers, climate and fans

Where safety limits and platform support both live

lock maps to a Door Lock. In Home Assistant, locked / locking becomes Locked, unlocked / unlocking becomes Unlocked, open / opening becomes Unlatched, and every other state is conservatively reported as Not Fully Locked. If the supported features include OPEN, the endpoint adds Unbolting, and a platform that supports it, such as Apple Home, can show unlatch. That is an unlatch capability. It is not the same claim as every lock being able to physically open the door on command.

In plain terms

It is a car that can pop its own trunk from the key fob. Convenient, and it does not mean the car can also start the engine and drive off by itself. Unbolting only means the latch can retract at a tap in the app — nothing about whether that is a wise thing for your particular door, at your particular address.

Entity Mapping also carries disableLockPin, the lock-code service, slots, and minimum and maximum lengths, but this guide gives no real lock codes anywhere. A controller may cache fixed attributes, so it will not necessarily pick up a changed length limit right away. A service that writes user codes into a physical lock is a high-risk integration — leave it unset unless you have backed up the lock and the integration settings and confirmed exactly how to restore them.

Any cover that can be built carries Lift and PositionAwareLift; even when Home Assistant does not declare the open feature, the code fills in a valid descriptor and logs a warning rather than failing. open_tilt or set_tilt_position can add Tilt, and only set_tilt_position adds PositionAwareTilt. Binary doors and garage doors report fully open or fully closed from their state and never invent an intermediate position.

SettingWhen to consider itRisk and verification
coverDoNotInvertPercentageThe controller's percentage semantics are the reverse of what you expectStable/stable; change one thing at a time and compare fully open, half open and fully closed in Home Assistant and on the controller.
coverUseHomeAssistantPercentageYou want to take the Home Assistant percentage directlyStable/stable; do not blind-test it together with the other direction fixes.
coverSwapOpenCloseThe open and close commands are swappedStable/stable; test it first somewhere you can watch, with no risk of trapping anything.
coverSliderDebounceMsThe controller sends a stream of slider updatesStable/stable; 0 means no global value is set, and an entity override wins.
coverExposeAsDimmableLightThe specific workaround for Alexa no longer sending Window Covering position commandsPresents the cover as a dimmable light, which distorts the semantics; use it only on a bridge dedicated to that controller.
Warning. Moving doors, garage doors, covers and locks can all have physical safety consequences. Clear the travel path and keep a local way to stop the device before you test remotely. Matter reporting success is not the same claim as the mechanism being safe.

Climate, fans, air purifiers and humidifiers

climate has to declare at least one of heat, cool, heat_cool, auto, fan_only or dry, or the endpoint fails as an unsupported device. The code adds Heating and Cooling separately from hvac_modes; only a heat_cool combination that genuinely supports two independent setpoints enables Matter AutoMode safely. A single-setpoint Home Assistant auto is mapped dynamically instead, and does not declare AutoMode — which keeps some controllers from writing auto as heat or cool on your behalf.

A present current_humidity, or the TARGET_HUMIDITY feature, can add humidity measurement. OnOff is added only when both TURN_ON and TURN_OFF are supported. disableClimateOnOff stops a room-wide “turn everything off” command from switching the thermostat off along with the lights. FAN_MODE makes the endpoint use Room Air Conditioner and Fan Control; if a platform such as Aqara does not recognize that device type, disableClimateFanControl falls back to a plain Thermostat. climateExposeFan is the companion fan composition for bridge mode; Server Mode does not support the composed shape and falls back to a flat endpoint.

flowchart TD
  A["climate entity"] --> B{"Does hvac_modes include
heat_cool with two real,
independent setpoints?"} B -->|"yes"| C["Matter AutoMode is
declared safely"] B -->|"no, only a single-
setpoint auto"| D["Mapped dynamically as
heat or cool.
AutoMode is not declared"] A --> E{"Are FAN_MODE features
present on the entity?"} E -->|"yes"| F["Room Air Conditioner +
Fan Control endpoint"] E -->|"no"| G["Plain Thermostat endpoint"] F -->|"a platform such as Aqara
does not recognize the type"| H["disableClimateFanControl
falls back to Thermostat"]
Two separate questions, one entityTwo questions branch off the climate entity box on their own: whether AutoMode can be declared, and whether fan control gets added at all. Four boxes end the diagram with no arrow leaving them — AutoMode declared, AutoMode not declared, plain Thermostat, and the disableClimateFanControl fallback. The Room Air Conditioner box is not one of those four; it only continues into the fallback when a platform rejects the type.

A fan with no speed and no usable speed preset maps to an On/Off Plug-in Unit, which keeps a controller from showing a fake speed slider. MultiSpeed and Step are added only when there is SET_SPEED or a non-Auto preset; Auto is added only when a preset is literally named “auto”; DIRECTION and OSCILLATE add direction and oscillation. natural, nature, sleep, or the localized names listed in fanWindPresets, can add Wind. fanSliderDebounceMs handles a stream of slider updates; it does not add speed steps the hardware does not have.

Once fan is overridden to air_purifier, filterLifeEntity, temperatureEntity and humidityEntity link the air filter and the environment measurements onto the same endpoint. That mapping sits at maturity stable; Google Home, Amazon Alexa and Aqara yes, Apple Home no. A humidifier builds one of four capability sets depending on whether available_modes contains Auto and whether current_humidity exists; controller support for humidifier_dehumidifier is noticeably thinner, and Google Home in particular is a no.

Controller caveat. Apple Home not showing a standalone Matter fan or air purifier does not mean the endpoint failed to build. Google Home not showing humidifier_dehumidifier is not a Home Assistant service error. Separate endpoint health from platform display support before you troubleshoot either one.
Sensors, binary sensors, weather

Where sensor, binary_sensor and weather come in

A Home Assistant sensor can be a temperature, a pressure, an illuminance, a flow rate, a pollutant, instantaneous power, accumulated energy or a battery percentage. A binary_sensor can be a door or window, motion, occupancy, smoke, a leak, or a plain boolean state. Matter Hub picks the endpoint from device_class first, and the controller then decides whether it shows that device type and cluster at all.

domainAutomatic resultIf it does not match
sensorMaps to a measurement or energy endpoint by device_class; some capabilities then depend on that mapping.An unknown device_class is logged as an entity warning and skipped. With no class at all, it does not guess either.
binary_sensorPicks Contact, Motion, Occupancy, Smoke/CO or a plain OnOff Sensor from device_class.An unknown class falls back to OnOff Sensor. It never becomes a safety alarm on its own.
weatherWeatherDevice combines the current temperature, humidity, pressure and whichever other attributes are available.A controller may show only some of them; weather is not a general Matter surface for forecast data.

On a sensor, temperature builds a Temperature Sensor; humidity and moisture both map to Relative Humidity, and the second suits the 0–100% soil-moisture meaning; illuminance maps to Light Sensor; pressure and atmospheric_pressure map to Pressure; volume_flow_rate maps to Flow. PM2.5, PM10 and CO2 are not override names in the Entity Mapping picker, but the v2.0.55 automatic path still has endpoint implementations for them — the tables in this part list the complete override set the manifest defines, so do not confuse automatic support with the override options.

On a binary_sensor, door, garage_door, opening and window become Contact; motion / moving become Motion; occupancy / presence become Occupancy; smoke becomes Smoke Alarm; carbon_monoxide / gas become CO Alarm. cold and moisture use the detector contact variants. battery_charging, light, plug, power and running use OnOff Sensor; everything else — including battery, connectivity, heat, lock, problem, safety, sound, tamper, update and vibration — uses Contact.

Battery. If a binary sensor has a battery / battery_level attribute, or a linked batteryEntity, a Power Source is added wherever a matching variant exists. When a mains-powered device wrongly reports a battery, use disableBatteryMapping so the controller does not carry a fake low-battery indicator indefinitely.
flowchart TD
  A["A sensor or binary_sensor
entity"] --> B{"Does Matter Hub recognize
the device_class?"} B -->|"no, or none set"| C["Skipped outright, or falls
back to a plain OnOff Sensor"] B -->|"yes"| D["Endpoint builds"] D --> E{"Does the target controller
support that Matter type?"} E -->|"no"| F["Endpoint is healthy.
The controller shows no tile"] E -->|"yes"| G{"Does the shown value or
state look correct?"} G -->|"no"| H["Check the source unit,
state, or linked entity"] G -->|"yes"| I["Working as intended"]
Three separate places a sensor mapping can fall shortFour boxes end this diagram with no arrow leaving them: skipped or OnOff fallback, no controller tile, check the source, and working as intended. Only one of the four — the source check — is something you fix by editing Home Assistant. The other three are answered just by reading which box you landed in.

Temperature, humidity, pressure, illuminance and flow

A Temperature Sensor can use humidityEntity, pressureEntity and batteryEntity to build a flat multi-measurement endpoint. Stable 2.0.55 puts the Temperature, Humidity and Pressure device types all into the descriptor, which gives controllers such as SmartThings a better chance of recognizing each one. The available combinations are temperature with humidity, temperature with pressure, temperature with humidity and pressure, and each of those with a battery added.

The bridge flags autoHumidityMapping, autoPressureMapping and autoBatteryMapping can find linked entities on the same Home Assistant device automatically; autoComposedDevices may build a composed device structure instead. These flags sit at maturity stable, but whether the automatic link is correct still depends on the Home Assistant device registry. Similar names do not mean the same piece of hardware, so cross-check which device an entity belongs to, and its unit, before you save anything.

overrideWhat the measurement meansController notes from the pinned matrix
temperature_sensorTemperatureApple Home, Google Home, Amazon Alexa and Aqara yes.
humidity_sensorRelative humidity, or a percentage moisture valueYes on all four main controllers.
pressure_sensorPressure / atmospheric pressureGoogle Home and Aqara yes; Apple Home and Amazon Alexa no.
light_sensorIlluminanceApple Home, Google Home and Amazon Alexa yes; Aqara unknown.
flow_sensorVolume flow rateGoogle Home yes; Apple Home and Amazon Alexa no; Aqara unknown.

Before data reaches Matter it still has to match the unit meaning of the Home Assistant device class. If a temperature looks an order of magnitude off, a humidity falls outside 0–100, or a pressure reading is implausible, fix the source integration or the template sensor first. Do not just relabel it with a different override.

Air quality, power, EVSE

Eight pollutants, seven detectors, and a thin layer of support underneath

Air quality is not one cluster. AQI, CO, CO2, TVOC, NO₂, O₃, formaldehyde, radon, PM1, PM2.5 and PM10 each measure something different, and the Matter override picker in Stable 2.0.55 treats them as eight separate types. Even when a controller does not display one of them, the underlying endpoint can still be perfectly healthy.

overrideRecommended sourceController support snapshot
air_quality_sensorThe AQI device classApple Home no; Google Home, Amazon Alexa and Aqara yes.
carbon_monoxide_sensorA numeric CO measurement, not a binary alarmApple Home partial (shown as an alarm rather than a reading), Google Home no, Amazon Alexa partial, Aqara yes.
tvoc_sensorvolatile_organic_compounds or partsApple Home and Google Home no; Amazon Alexa partial; Aqara yes.
nitrogen_dioxide_sensorNO₂Apple Home and Google Home no; Amazon Alexa partial; Aqara yes.
ozone_sensorO₃Apple Home and Google Home no; Amazon Alexa partial; Aqara yes.
formaldehyde_sensorFormaldehyde (HCHO); usually needs an explicit overrideApple Home and Google Home no; Amazon Alexa partial; Aqara yes.
radon_sensorRadonApple Home and Google Home no; Amazon Alexa partial; Aqara yes.
pm1_sensorPM1Apple Home and Google Home no; Amazon Alexa partial; Aqara yes.

carbon_monoxide_sensor, which carries a CO concentration value, is not the same thing as smoke_co_alarm, which detects a dangerous condition. The first reports a number; the second reports an alarm event.

flowchart TD
  A["A CO-related source
in Home Assistant"] --> B{"Numeric concentration
reading, or binary
alarm state?"} B -->|"numeric reading"| C["carbon_monoxide_sensor:
reports a concentration"] B -->|"binary alarm"| D["smoke_co_alarm:
reports an alarm event"] C -->|"forced into an
alarm type"| E["Wrong alarm semantics"] D -->|"forced into a
reading type"| F["Loses the alerting display"]
Two sources, and two ways to mismatch themThe question box has exactly two branches, one per source shape. Each of those two boxes leads to exactly one more box describing what goes wrong if you force it the other way — wrong alarm semantics for a reading pushed into an alarm type, and a lost alert display for an alarm pushed into a reading type. Nothing in this diagram is a recommendation to combine them.
In plain terms

A CO reading and a CO alarm are a thermometer and a fire alarm mounted on the same wall. One tells you a number worth watching. The other tells you to leave the building right now. Swap their jobs and you either get panicked over a number that only needed watching, or you get silence where you needed a siren.

Health-data boundary. A bridged value faithfully reflects Home Assistant and nothing more. Calibration, sensor lifetime, mounting position and the regulatory certification of an alarm device are all outside Matter Hub's scope.

Contact, motion, occupancy, smoke, leak and weather detection

overrideSuitable stateKey controller support
contact_sensorOpen / closed, in contact / separatedApple Home, Google Home, Amazon Alexa and Aqara yes.
motion_sensorMomentary motion / PIRYes on all four main controllers.
occupancy_sensorRoom occupancy / presenceApple Home partial; Google Home, Amazon Alexa and Aqara yes.
smoke_co_alarmA binary smoke or CO alarmApple Home, Amazon Alexa and Aqara yes; Google Home no.
water_leak_detectorA water leakApple Home, Amazon Alexa and Aqara yes; Google Home no.
water_freeze_detectorFreezing riskAqara yes; Apple Home, Google Home and Amazon Alexa no.
rain_sensorRainfallAqara yes; Apple Home, Google Home and Amazon Alexa no, and Amazon Alexa may reject this newer type outright.

A Smoke/CO Alarm can use the mapping's faultEntity so a problem or safety binary sensor on the same device drives the hardware fault alert. That fault entity is not necessarily absorbed into the alarm — it can keep its own endpoint. This is a device fault signal, not an active alarm; choose the wrong one and the controller treats a maintenance problem as a fire, or the reverse.

Door, window and motion sensors need no control commands, so verify them with read-only state changes. Do not create a real hazard to test a leak or smoke endpoint. Documented test entities belong in a Home Assistant development or test environment; this chapter gives no data from a live one.

Power, energy, battery, utility meters and EVSE

Power, energy, voltage and current device classes map to electrical_meter by default, because the pinned sources say both Google Home and SmartThings can display an Electrical Meter. electrical_sensor is the legacy SolarPower alias; solar_power is for generation. Choosing consumption or generation has to match the sign convention and the actual meaning of the source.

overrideWhat it is forMaturity / controller caveat
electrical_meterA consumption device for power, energy, voltage and currentstable; Google Home yes, Apple Home and Amazon Alexa no, Aqara unknown; the source note says SmartThings can display it.
electrical_sensorThe legacy SolarPower typestable; Apple Home and Google Home no, Amazon Alexa and Aqara unknown.
solar_powerGenerationstable; Apple Home and Google Home no, Amazon Alexa and Aqara unknown; the source note says SmartThings can display it on its own.
electrical_utility_meterMatter 1.4 Meter Identification plus the measurement clustersOpt-in inside Stable, and not marked experimental by the sources; Apple Home, Google Home and Amazon Alexa no, Aqara unknown, SmartThings yes.
battery_storageStorage with charge and discharge power or energy; a plain percentage is a lighter battery source insteadstable; Aqara yes, no on the other three main platforms.
evseElectric vehicle supply equipmentstable; Aqara yes, Apple Home, Google Home and Amazon Alexa no; a bridged EVSE can break Amazon Alexa recognition, so keep it off an Alexa bridge.

An Electrical Meter can fold powerEntity, energyEntity, voltageEntity and currentEntity into the same endpoint. A Utility Meter can also carry meter serial and point-of-delivery fields — this guide uses text placeholders only, and puts no real identifying data anywhere. Battery Storage becomes a fuller energy storage system once you add batteryPowerEntity and batteryEnergyEntity; cross-check the charge and discharge directions against the source definition before you trust the numbers.

EVSE can carry both state and control, but controller support is a clear limit. Do not treat a Matter tile as electrical protection, load management or a basis for billing. Any remote start or stop still has to follow the safety rules of the charging equipment and of the installation site.

Verify with the smallest change

One routine, for control devices and for sensors alike

Control mappings and sensor mappings are verified the same way, and the routine is deliberately slow. Every step below applies whether you are chasing a light that will not dim or a pressure reading that never appears.

  1. Step 1

    Cross-check the capabilities in Home Assistant first

    Go to Settings → Devices & services → Entities and look at the target entity's domain, device class, current state and available controls. Record it with a documentation placeholder such as light.example_lamp or sensor.example_temperature, and copy nothing out of a live environment.

  2. Step 2

    Open Devices in Matter Hub

    Search for the entity and look at its current mapping and any failure reason. Keep the automatic type for now; confirm the capabilities shown match the tables in this part before you decide whether to open the Entity Mapping editor at all.

  3. Step 3

    Cross-check any linked entities

    If you are adding a humidity, pressure, battery or power measurement, confirm each one belongs to the same physical device and that the units are compatible. Add one link at a time, so you can always tell which value caused a problem if one shows up.

  4. Step 4

    Change one override or workaround only

    Pick the exact Matter device type when you need one; change workarounds such as cover direction, climate fan control, or the Alexa brightness flag, one at a time. Do not rename the entity, change the type and reorder the bridge in the same sitting, or you will not be able to locate the difference afterward.

  5. Step 5

    Check the bridge status after you save

    Go back to that bridge's Details or Devices page and confirm the endpoint has no failed entity, and that the value Matter Hub shows matches Home Assistant. If the type turns out unsupported, restore the last known-good setting rather than resetting or deleting the fabric outright.

  6. Step 6

    Do a low-risk check on the controller, and record what you learned

    Compare the state first, then test on/off once; move a slider only to a position that is easy to recognize. Locks and moving devices need someone present and a local way to stop them; safety detection should be observed read-only, never triggered for real. Then note three things separately: whether Stable 2.0.55 built it, the maturity of that feature, and whether the target controller shows it. Leave unknown as unknown — do not promote one observation into a claim of general support.

flowchart TD
  A["A mapped entity does not
look right on the controller"] --> B{"Does Matter Hub show it
with no failed status?"} B -->|"failed, or missing
entirely"| C["Fix the Home Assistant
source first: device_class,
features, unit"] B -->|"healthy"| D{"Is that Matter type listed
as yes for this controller
in this part's tables?"} D -->|"no, or unknown"| E["Endpoint is fine. The
platform will not show it —
keep Home Assistant as
the primary view"] D -->|"yes"| F{"Does the value or control
on the controller match
Home Assistant?"} F -->|"no"| G["Check one linked entity
or one workaround flag
at a time"] F -->|"yes"| H["Confirmed working"]
Three questions, in a fixed orderFour boxes end this diagram: fix the Home Assistant source, keep Home Assistant as the primary view, check one linked entity or flag, and confirmed working. Running the three diamonds out of order is how people end up rewriting an override to fix a controller that was always going to say no.
Pitfalls and FAQ

The symptom you see, matched to what to do about it

SymptomLikely causeWhat to do
The light only switches, with no brightness or color The source declares only onoff in supported_color_modes, or an override wrongly picked on_off_light Check supported_color_modes in Home Assistant first. Matter Hub will not manufacture brightness that is not there; if the capability is complete, remove the override and go back to the automatic result
The cover percentage or direction is reversed An inverted percentage value, or swapped open/close commands Test fully open, half open and fully closed in that order to tell the two apart. Change one cover flag at a time, and turn off any workaround you no longer need once you are done
The climate endpoint fails to build hvac_modes does not contain any of heat, cool, heat_cool, auto, fan_only or dry, or the min/max temperature units do not make sense Fix the source entity's usable modes. Do not use a thermostat override to paper over an entity that has no usable mode at all
Apple Home does not show the fan or the air purifier The pinned matrix marks Apple Home no for both fan and air_purifier Keep the Home Assistant control, or build a bridge dedicated to another controller. Do not delete and re-commission over and over
Aqara misses a climate device that has a fan mode A Room Air Conditioner type-compatibility problem Confirm first whether a plain Thermostat shows up. If it is the type causing it, consider disableClimateFanControl — the cost is that the controller loses Fan Control
Amazon Alexa rejects a cover position, or light brightness misbehaves A controller-specific gap in how Alexa handles Window Covering position or brightness Split the bridge before using a controller-specific workaround, so other fabrics are unaffected. Name a disguised cover clearly and record how to roll it back
A sensor is skipped entirely Stable 2.0.55 does not recognize the device_class Check the entity warning and the device class. Building a Home Assistant template sensor with the correct device class and unit is safer than forcing the wrong Matter type
A binary sensor turns into a plain On/Off tile An unknown or unset binary_sensor class falls back to OnOff Sensor If it really is a door, motion, occupancy or smoke sensor, fix the device class in Home Assistant first, then check the endpoint again
Only one of temperature, humidity and pressure shows The linked humidityEntity / pressureEntity has no value, or the controller does not support that measurement Confirm the linked entities have values and are available; then check the controller table — Apple Home and Amazon Alexa are both no for pressure
The controller shows a fake low battery A mains-powered device is wrongly reporting a battery attribute Confirm a real battery sensor has not actually failed, then apply disableBatteryMapping to that entity
Power and energy values look mixed together powerEntity and energyEntity may be swapped, or the wrong device class is linked Check the device class for W versus the accumulated energy unit. Go by the Home Assistant attributes and statistics semantics, never by the entity's name alone
Amazon Alexa breaks after commissioning an EVSE or a newer detector Thinly supported types such as EVSE, rain and freeze detection reaching an Alexa-only bridge Exclude those types from the Alexa-only bridge and watch whether it recovers. Do not delete other healthy fabrics; locate the problem with the smallest filter change first

FAQ

Does an override change the Home Assistant entity?
No. It changes neither the domain nor the hardware capability; it changes the device type Matter Hub builds outward. Control still calls the matching Home Assistant action, so the wrong type gets you an unsuitable controller interface rather than a genuinely new feature.
For a switch, should I pick plug unit or on/off switch?
Start from what the load actually is and how the controller presents it. For an ordinary switchable appliance, the plug unit default is the most conservative choice. Consider on_off_switch only for a genuine wall controller you want shown as a light tile. The experimental mounted_on_off_control does not suit a cross-platform bridge.
Why does a color-temperature light appear to use Extended Color Light?
To avoid a Color Temperature Light initialization problem, the v2.0.55 source builds it on an Extended Color Light base and enables only the features actually supported. It does not declare color capability out of nowhere — it is an implementation choice about the endpoint, not a change to what the light can do.
Can a lock stop requiring controller verification?
disableLockPin can turn off Matter Hub's PIN requirement for a specific mapping, but whether that is wise, how the platform presents it, and the security policy of the physical lock are three separate questions. This guide gives no real code values, and weakening lock protection for convenience is not recommended.
What do partial and unknown mean in the controller tables?
Partial means only some capabilities, or a particular interface, are presented. Unknown means the pinned source has no sufficient evidence either way. Neither one should be written up as full support, and unknown should never be read as a quiet no.
Does weather send a full forecast to a Matter controller?
Do not assume that. The v2.0.55 WeatherDevice uses whatever combination of current measurements is available. Whether a controller shows every cluster, and whether it even has a forecast interface, is a separate question from what Matter Hub builds.
Why does a moisture sensor map to humidity?
For the 0–100% Home Assistant moisture device class, the code reuses the same percentage semantics as Relative Humidity so the entity is not skipped. It does not represent the relative humidity of the air — name it clearly as soil or material moisture wherever you use it.
Can a CO sensor and a Smoke/CO Alarm be swapped?
They should not be. The first is a concentration reading; the second is a binary safety alarm. The source device class and the real capability of the physical device have to match, or you end up with either the wrong alarm behavior or a lost alert.
Why can't electrical_utility_meter be treated as broadly supported?
It is an opt-in Matter 1.4 override inside Stable, and the pinned sources do not mark it experimental — but Apple Home, Google Home and Amazon Alexa are all no, Aqara is unknown, and only SmartThings is yes. Keep the release channel, the specification version, and controller support as three separate facts.
Can I change a sensor the controller does not support into a contact sensor?
Only when the source already means a binary contact. Forcing a pressure, AQI or energy value into a contact sensor loses both the number and the correct semantics. Keep it visible in Home Assistant instead, or choose a controller platform that actually supports the original type.
Next

Where to go from here

two chapters down, two to go

You can now read a control mapping and a sensor mapping the same disciplined way

This part covered the seven control domains and the sensor, binary_sensor and weather trio — the two biggest device families Matter Hub maps. The next part in this series moves on to the special-device mappings and the standalone devices that do not fit either family, plus the momentary actions — buttons, scenes and scripts — that this part deliberately set aside.

Open the full guide

Part 6 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 override that fixes one endpoint, and the merge that turns five entities into one