capabilities property

Set<MatterCapability> get capabilities

Derives the set of user-facing MatterCapabilitys this endpoint supports, based on its advertised cluster IDs. This is the mechanism that replaces the old device-name-string sniffing (deviceName.contains("occupancy"), etc.) with a spec-driven approach that works for any Matter device, not just the one this plugin originally shipped with.

Implementation

Set<MatterCapability> get capabilities {
  final caps = <MatterCapability>{};
  for (final clusterId in clusterIds) {
    switch (clusterId) {
      case MatterClusterIds.onOff:
        caps.add(MatterCapability.onOff);
        break;
      case MatterClusterIds.levelControl:
        caps.add(MatterCapability.levelControl);
        break;
      case MatterClusterIds.colorControl:
        caps.add(MatterCapability.colorControl);
        break;
      case MatterClusterIds.doorLock:
        caps.add(MatterCapability.doorLock);
        break;
      case MatterClusterIds.windowCovering:
        caps.add(MatterCapability.windowCovering);
        break;
      case MatterClusterIds.thermostat:
        caps.add(MatterCapability.thermostat);
        break;
      case MatterClusterIds.temperatureMeasurement:
        caps.add(MatterCapability.temperatureMeasurement);
        break;
      case MatterClusterIds.relativeHumidityMeasurement:
        caps.add(MatterCapability.humidityMeasurement);
        break;
      case MatterClusterIds.illuminanceMeasurement:
        caps.add(MatterCapability.illuminanceMeasurement);
        break;
      case MatterClusterIds.pressureMeasurement:
        caps.add(MatterCapability.pressureMeasurement);
        break;
      case MatterClusterIds.flowMeasurement:
        caps.add(MatterCapability.flowMeasurement);
        break;
      case MatterClusterIds.occupancySensing:
        caps.add(MatterCapability.occupancySensing);
        break;
      case MatterClusterIds.booleanState:
        caps.add(MatterCapability.booleanState);
        break;
    }
  }
  return caps;
}