UNPKG

matterbridge-dyson-robot

Version:

A Matterbridge plugin that connects Dyson robot vacuums and air treatment devices to the Matter smart home ecosystem via their local or cloud MQTT APIs.

113 lines 6.57 kB
// Matterbridge plugin for Dyson robot vacuum and air treatment devices // Copyright © 2025-2026 Alexander Thoukydides import { AirQuality, ConcentrationMeasurement } from 'matterbridge/matter/clusters'; import { AirQualityServer, CarbonDioxideConcentrationMeasurementServer, FormaldehydeConcentrationMeasurementServer, NitrogenDioxideConcentrationMeasurementServer, Pm10ConcentrationMeasurementServer, Pm25ConcentrationMeasurementServer, RelativeHumidityMeasurementServer, TemperatureMeasurementServer, TotalVolatileOrganicCompoundsConcentrationMeasurementServer } from 'matterbridge/matter/behaviors'; // Create the Air Quality cluster export const airQualityBehavior = AirQualityServer.withFeatures(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor); export function createAirQualityClusterServer({ behaviors }) { behaviors.require(airQualityBehavior, { // Variable attributes airQuality: AirQuality.AirQualityEnum.Unknown }); } // Create the Temperature Measurement cluster export const temperatureMeasurementBehavior = TemperatureMeasurementServer; export function createTemperatureMeasurementClusterServer({ behaviors }) { behaviors.require(temperatureMeasurementBehavior, { // Constant attributes minMeasuredValue: -30.15 * 100, // centi-°C maxMeasuredValue: 79.85 * 100, // centi-°C tolerance: 0.50 * 100, // centi-°C (5 deci-K steps) // Variable attributes measuredValue: null }); } // Create the Relative Humidity Measurement cluster export const relativeHumidityMeasurementBehavior = RelativeHumidityMeasurementServer; export function createRelativeHumidityMeasurementClusterServer({ behaviors }) { behaviors.require(relativeHumidityMeasurementBehavior, { // Constant attributes minMeasuredValue: 0.00 * 100, // centi-% maxMeasuredValue: 100.00 * 100, // centi-% tolerance: 1.00 * 100, // centi-% (Dyson measures %) // Variable attributes measuredValue: null }); } // Create the Total Volatile Organic Compounds Concentration Measurement cluster export const totalVolatileOrganicCompoundsConcentrationMeasurementBehavior = TotalVolatileOrganicCompoundsConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel); export function createTotalVolatileOrganicCompoundsConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(totalVolatileOrganicCompoundsConcentrationMeasurementBehavior, { // Constant attributes measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, // Variable attributes levelValue: ConcentrationMeasurement.LevelValue.Unknown }); } // Create the Carbon Dioxide Concentration Measurement cluster export const carbonDioxideConcentrationMeasurementBehavior = CarbonDioxideConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement); export function createCarbonDioxideConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(carbonDioxideConcentrationMeasurementBehavior, { // Constant attributes minMeasuredValue: 0, // ppm maxMeasuredValue: 9999, // ppm measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, measurementUnit: ConcentrationMeasurement.MeasurementUnit.Ppm, uncertainty: 1, // Variable attributes measuredValue: null }); } // Create the Nitrogen Dioxide Concentration Measurement cluster export const nitrogenDioxideConcentrationMeasurementBehavior = NitrogenDioxideConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel); export function createNitrogenDioxideConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(nitrogenDioxideConcentrationMeasurementBehavior, { // Constant attributes measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, // Variable attributes levelValue: ConcentrationMeasurement.LevelValue.Unknown }); } // Create the Formaldehyde Concentration Measurement cluster export const formaldehydeConcentrationMeasurementBehavior = FormaldehydeConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement); export function createFormaldehydeConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(formaldehydeConcentrationMeasurementBehavior, { // Constant attributes minMeasuredValue: 0, // µg/m³ maxMeasuredValue: 999, // µg/m³ (99 for v1 sensors) measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, measurementUnit: ConcentrationMeasurement.MeasurementUnit.Ugm3, uncertainty: 1, // Variable attributes measuredValue: null }); } // Create the PM2.5 Concentration Measurement cluster export const pm25ConcentrationMeasurementBehavior = Pm25ConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement); export function createPm25ConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(pm25ConcentrationMeasurementBehavior, { // Constant attributes minMeasuredValue: 0, // µg/m³ maxMeasuredValue: 999, // µg/m³ (149 for v1 sensors) measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, measurementUnit: ConcentrationMeasurement.MeasurementUnit.Ugm3, uncertainty: 1, // Variable attributes measuredValue: null }); } // Create the PM10 Concentration Measurement cluster export const pm10ConcentrationMeasurementBehavior = Pm10ConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement); export function createPm10ConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(pm10ConcentrationMeasurementBehavior, { // Constant attributes minMeasuredValue: 0, // µg/m³ maxMeasuredValue: 999, // µg/m³ (149 for v1 sensors) measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, measurementUnit: ConcentrationMeasurement.MeasurementUnit.Ugm3, uncertainty: 1, // Variable attributes measuredValue: null }); } //# sourceMappingURL=endpoint-air-quality.js.map