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.

104 lines 5.7 kB
// Matterbridge plugin for Dyson robot vacuum and air treatment devices // Copyright © 2025 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 function createAirQualityClusterServer({ behaviors }) { behaviors.require(AirQualityServer.withFeatures(AirQuality.Feature.Fair, AirQuality.Feature.Moderate, AirQuality.Feature.VeryPoor, AirQuality.Feature.ExtremelyPoor), { // Variable attributes airQuality: AirQuality.AirQualityEnum.Unknown }); } // Create the Temperature Measurement cluster export function createTemperatureMeasurementClusterServer({ behaviors }) { behaviors.require(TemperatureMeasurementServer, { // 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 function createRelativeHumidityMeasurementClusterServer({ behaviors }) { behaviors.require(RelativeHumidityMeasurementServer, { // 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 function createTotalVolatileOrganicCompoundsConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(TotalVolatileOrganicCompoundsConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), { // Constant attributes measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, // Variable attributes levelValue: ConcentrationMeasurement.LevelValue.Unknown }); } // Create the Carbon Dioxide Concentration Measurement cluster export function createCarbonDioxideConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(CarbonDioxideConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement), { // 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 function createNitrogenDioxideConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(NitrogenDioxideConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.LevelIndication, ConcentrationMeasurement.Feature.MediumLevel, ConcentrationMeasurement.Feature.CriticalLevel), { // Constant attributes measurementMedium: ConcentrationMeasurement.MeasurementMedium.Air, // Variable attributes levelValue: ConcentrationMeasurement.LevelValue.Unknown }); } // Create the Formaldehyde Concentration Measurement cluster export function createFormaldehydeConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(FormaldehydeConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement), { // 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 function createPm25ConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(Pm25ConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement), { // 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 function createPm10ConcentrationMeasurementClusterServer({ behaviors }) { behaviors.require(Pm10ConcentrationMeasurementServer.withFeatures(ConcentrationMeasurement.Feature.NumericMeasurement), { // 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