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
JavaScript
// 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