Skip to content

Apple Home stops showing ElectricalPowerMeasurement (per-tile watts) on 3.10.3 — 3.10.2 is fine #594

Description

@RizJav

Summary

After upgrading from 3.10.2 to 3.10.3, Apple Home no longer displays the live
wattage on bridged devices that expose ElectricalPowerMeasurement. The tiles
render as plain On / Off, with no reading on the tile or in the accessory
detail view, and the room's aggregated Power summary disappears.

Pinning the image back to luligu/matterbridge:3.10.2 restores it immediately —
same plugin, same config, same Matter storage, no re-commissioning. Moving
forward to 3.10.3 breaks it again. I've flipped the tag both ways to confirm.

The devices themselves are unaffected: On/Off still works from Home, and
Matterbridge logs ElectricalPowerMeasurement.activePower updating on every poll.
It is only the controller-side rendering of the measurement that stops.

Environment

Matterbridge 3.10.3 (broken) vs 3.10.2 (works)
Image luligu/matterbridge:<tag>, --docker -childbridge
matter.js 0.17.6 (3.10.2) / 0.17.7 (3.10.3)
Node v24.18.0 (in container)
Host Raspberry Pi, Linux 6.1.21-v8+ aarch64, network_mode: host
Controller Apple Home, iOS 27, single fabric, Apple TV / HomePod hub
Device onOffPlugInUnit + electricalSensor on one endpoint, with PowerTopology, ElectricalPowerMeasurement, ElectricalEnergyMeasurement

The affected devices come from an unpublished local plugin (a power meter — it polls
a vendor cloud API and republishes the readings), but they're built with nothing but
the standard helpers, so this should reproduce with any bridged device exposing an
electrical sensor:

new MatterbridgeEndpoint([onOffPlugInUnit, electricalSensor], { id })
  .createDefaultIdentifyClusterServer()
  .createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Acme', 0x8000, model)
  .createDefaultOnOffClusterServer(true)
  .createDefaultPowerTopologyClusterServer()
  .createDefaultElectricalPowerMeasurementClusterServer(null, null, 0)
  .createDefaultElectricalEnergyMeasurementClusterServer(0, 0)
  .addRequiredClusterServers();

Updated on each poll with
updateAttribute('ElectricalPowerMeasurement', 'activePower', milliwatts, log).

Steps to reproduce

  1. Run Matterbridge 3.10.2 in childbridge mode with a plugin exposing the endpoint
    above; commission the childbridge into Apple Home. Tiles show On • <n> W.
  2. Change the image tag to 3.10.3 and recreate the container. No other change.
  3. Apple Home tiles now show only On — no wattage on the tile or in the detail
    view, and the room Power summary is gone.
  4. Change the tag back to 3.10.2 and recreate. The wattage returns within a couple
    of minutes, without re-pairing.

What I ruled out

I went looking in my own plugin first, and it isn't there:

  • The attribute is written and the cluster is live on 3.10.3. The log shows
    Update endpoint <MyMeter>:2 attribute ElectricalPowerMeasurement.activePower from 629000 to 1054000. updateAttribute() logs an error and returns false when
    the cluster or attribute is absent, so a successful update proves the endpoint
    really does carry the cluster.
  • Apple is still subscribed. On restart:
    Reestablish subscription » … isFabricFiltered: false maxInterval: 3m 6s.
  • The endpoint advertises exactly the same thing on both versions. I built the
    endpoint above under 3.9.3, 3.10.2 and 3.10.3 inside a real ServerNode and
    diffed Descriptor.deviceTypeList, Descriptor.serverList, tagList, feature
    maps, attributeList, numberOfMeasurementTypes, powerMode, ranges and
    cluster revisions. Byte-identical across all three (EPM rev 3, EEM rev 2,
    PowerTopology rev 1).
  • Not the endpoint count. Going from 9 bridged endpoints back to 8 changed
    nothing. (This was my first theory — a controller subscription-path budget — and
    it was wrong. Noting it so nobody re-runs the dead end.)
  • Not BridgedDeviceBasicInformation rev 5 → 6. That landed in 3.10.0, but
    3.10.2 works.
  • No endpoint renumberingcheckEndpointNumbers logs no warnings — and the
    plugin code is identical across the whole comparison.

Suspicion

The only 3.10.3 change I can see that touches Matter-visible structure is:

[matterbridge]: Add a wired AC PowerSource to server nodes.

That alters each childbridge's root node rather than its endpoints, which fits
the symptom shape: Apple still drives On/Off from the same endpoints but stops
reading the optional measurement clusters. My guess at a mechanism is that adding
PowerSource to the root node of an aggregator changes how Apple models the bridge
and invalidates part of its cached view — Apple resumes its existing subscription
rather than re-reading, so a stale model would persist.

Questions, in case they help:

  • Is the server-node PowerSource added unconditionally, including in childbridge
    mode where the server node is an aggregator?
  • Does the root node also need PowerTopology, or a deviceTypeList entry, for a
    controller to accept a PowerSource there?
  • Given Apple's reaction, would it be worth putting it behind a flag?

Happy to test a patch or gather more logs — I can flip tags on this system freely
and have a reproducible before/after.

Metadata

Metadata

Assignees

Labels

questionFurther information is requested

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions