UNPKG

homebridge

Version:
387 lines 11.4 kB
/** * Cluster State Types * * TypeScript interfaces for Matter cluster state objects. * These are used in behavior files to avoid repeated 'as any' casts. * * Types are derived from @matter/main/clusters where possible. */ import type { WindowCovering } from '@matter/main/clusters'; /** * Base interface for any cluster state */ export interface ClusterState { [key: string]: unknown; } /** * OnOff cluster state */ export interface OnOffState { onOff?: boolean; } /** * LevelControl cluster state */ export interface LevelControlState { currentLevel?: number; minLevel?: number; maxLevel?: number; remainingTime?: number; onLevel?: number | null; options?: number; } /** * ColorControl cluster state * Based on @matter/main/clusters ColorControl * * Note: We use a flexible interface to accommodate both ColorMode and EnhancedColorMode * from Matter.js, which are distinct types in the spec but functionally compatible */ export interface ColorControlState { colorTemperatureMireds?: number; colorTempPhysicalMinMireds?: number; colorTempPhysicalMaxMireds?: number; currentHue?: number; currentSaturation?: number; enhancedCurrentHue?: number; currentX?: number; currentY?: number; colorX?: number; colorY?: number; colorMode?: number; enhancedColorMode?: number; options?: number; coupleColorTempToLevelMinMireds?: number; transitionTime?: number; } /** * Partial state interfaces for specific color control operations * These are used when we only need to read/write specific properties * from the complex Matter.js ColorControl state */ /** * Color temperature specific state */ export interface ColorTemperatureState { colorTemperatureMireds?: number; } /** * Hue and saturation specific state */ export interface HueSaturationState { currentHue?: number; currentSaturation?: number; } /** * XY color specific state */ export interface XYColorState { currentX?: number; currentY?: number; } /** * Hue specific state (including enhanced hue) */ export interface HueState { currentHue?: number; enhancedCurrentHue?: number; } /** * Saturation specific state */ export interface SaturationState { currentSaturation?: number; } /** * WindowCovering cluster state * Based on @matter/main/clusters WindowCovering */ export interface WindowCoveringState { type?: WindowCovering.WindowCoveringType; configStatus?: { operational?: boolean; onlineReserved?: boolean; online?: boolean; liftMovementReversed?: boolean; liftPositionAware?: boolean; tiltPositionAware?: boolean; liftEncoderControlled?: boolean; tiltEncoderControlled?: boolean; }; targetPositionLiftPercent100ths?: number | null; currentPositionLiftPercent100ths?: number | null; targetPositionTiltPercent100ths?: number | null; currentPositionTiltPercent100ths?: number | null; operationalStatus?: { global: number; lift: number; tilt: number; }; safetyStatus?: number; endProductType?: number; mode?: number; } /** * FanControl cluster state */ export interface FanControlState { fanMode?: number; fanModeSequence?: number; percentSetting?: number | null; percentCurrent?: number; speedMax?: number; speedSetting?: number | null; speedCurrent?: number; rockSupport?: number; rockSetting?: number; windSupport?: number; windSetting?: number; } /** * Thermostat cluster state */ export interface ThermostatState { localTemperature?: number | null; externalMeasuredIndoorTemperature?: number | null; outdoorTemperature?: number | null; occupancy?: { occupied?: boolean; }; externallyMeasuredOccupancy?: boolean; absMinHeatSetpointLimit?: number; absMaxHeatSetpointLimit?: number; absMinCoolSetpointLimit?: number; absMaxCoolSetpointLimit?: number; occupiedCoolingSetpoint?: number; occupiedHeatingSetpoint?: number; unoccupiedCoolingSetpoint?: number; unoccupiedHeatingSetpoint?: number; minHeatSetpointLimit?: number; maxHeatSetpointLimit?: number; minCoolSetpointLimit?: number; maxCoolSetpointLimit?: number; minSetpointDeadBand?: number; remoteSensing?: number; controlSequenceOfOperation?: number; systemMode?: number; thermostatRunningMode?: number; startOfWeek?: number; numberOfWeeklyTransitions?: number; numberOfDailyTransitions?: number; } /** * DoorLock cluster state */ export interface DoorLockState { lockState?: number | null; lockType?: number; actuatorEnabled?: boolean; operatingMode?: number; doorState?: number | null; doorOpenEvents?: number; doorClosedEvents?: number; openPeriod?: number; } /** * RVC (Robotic Vacuum Cleaner) Operational State */ export interface RvcOperationalState { phaseList?: string[] | null; currentPhase?: number | null; countdownTime?: number | null; operationalStateList?: Array<{ operationalStateId: number; operationalStateLabel?: string; }>; operationalState?: number; operationalError?: { errorStateId: number; errorStateLabel?: string; errorStateDetails?: string; }; } /** * RVC Run Mode state */ export interface RvcRunModeState { supportedModes?: Array<{ label: string; mode: number; modeTags?: Array<{ value: number; }>; }>; currentMode?: number; startUpMode?: number | null; onMode?: number | null; } /** * RVC Clean Mode state */ export interface RvcCleanModeState { supportedModes?: Array<{ label: string; mode: number; modeTags?: Array<{ value: number; }>; }>; currentMode?: number; startUpMode?: number | null; onMode?: number | null; } /** * ValveConfigurationAndControl cluster state */ export interface ValveConfigurationAndControlState { openDuration?: number | null; defaultOpenDuration?: number | null; remainingDuration?: number | null; currentState?: number | null; targetState?: number | null; valveFault?: number; } /** * Service Area state */ export interface ServiceAreaState { supportedAreas?: Array<{ areaId: number; mapId: number | null; areaInfo: { locationInfo?: { locationName?: string; floorNumber?: number | null; areaType?: number | null; } | null; landmarkInfo?: { landmarkTag?: number; positionTag?: number | null; relativePositionTag?: number | null; } | null; }; }>; supportedMaps?: Array<{ mapId: number; name: string; }>; selectedAreas?: number[]; currentArea?: number | null; estimatedEndTime?: number | null; progress?: Array<{ areaId: number; status: number; totalOperationalTime?: number | null; }>; } /** * Power Source state * @see {@link https://matter-standard.github.io/matter/specification/latest/#ref-power-source-cluster} * * `batPercentRemaining` is encoded as double the percentage (0–200), so 100% = 200. * `batChargeLevel`: 0 = Ok, 1 = Warning, 2 = Critical */ export interface PowerSourceState { status?: number; order?: number; description?: string; batVoltage?: number | null; batPercentRemaining?: number | null; batTimeRemaining?: number | null; batChargeLevel?: number; batReplacementNeeded?: boolean; batReplaceability?: number; batPresent?: boolean; activeBatFaults?: number[]; batReplacementDescription?: string; batQuantity?: number; batChargeState?: number; batTimeToFullCharge?: number | null; batFunctionalWhileCharging?: boolean; batChargingCurrent?: number | null; activeBatChargeFaults?: number[]; } /** * One accuracy range within a MeasurementAccuracyStruct. * At least one of the percent or fixed fields must be present. * Percent fields are in hundredths of a percent (e.g. 100 = 1%), * fixed fields are in the measurement's base unit (mV/mA/mW/mWh). */ export interface MeasurementAccuracyRangeStruct { rangeMin: number; rangeMax: number; percentMax?: number; percentMin?: number; percentTypical?: number; fixedMax?: number; fixedMin?: number; fixedTypical?: number; } /** * Accuracy declaration for one measurement type (MeasurementAccuracyStruct). * measurementType uses the Matter MeasurementType enum * (1 = Voltage, 2 = ActiveCurrent, 5 = ActivePower, 14 = ElectricalEnergy). */ export interface MeasurementAccuracyStruct { measurementType: number; measured: boolean; minMeasuredValue: number; maxMeasuredValue: number; accuracyRanges: MeasurementAccuracyRangeStruct[]; } /** * An energy reading (EnergyMeasurementStruct). energy is in milliwatt-hours. * Timestamps are epoch seconds; systimes are milliseconds since boot. */ export interface EnergyMeasurementStruct { energy: number; startTimestamp?: number; endTimestamp?: number; startSystime?: number; endSystime?: number; } /** * ElectricalPowerMeasurement cluster state. * Units are the raw Matter units: voltage in millivolts, current in * milliamps, power in milliwatts. All measurement values are nullable * (null = no measurement currently available). * * powerMode, numberOfMeasurementTypes and accuracy are mandatory in Matter * but are synthesized with sensible defaults at registration when omitted * (powerMode defaults to AC; accuracy is derived from the declared * measurement attributes). * * Update cadence: the reading attributes (voltage, activeCurrent, * activePower) are quieter-quality attributes - matter.js throttles their * reports to subscribers (roughly one per 10 seconds), so frequent updates * are tolerated but wasted. A cadence of a few seconds or slower is plenty. */ export interface ElectricalPowerMeasurementState { powerMode?: number; numberOfMeasurementTypes?: number; accuracy?: MeasurementAccuracyStruct[]; voltage?: number | null; activeCurrent?: number | null; activePower?: number | null; } /** * ElectricalEnergyMeasurement cluster state. * Cluster features (Imported/Exported x Cumulative/Periodic) are detected at * registration from which of these attributes the accessory declares. * accuracy is mandatory in Matter but synthesized with a sensible default * when omitted. * * Update cadence: energy readings are delivered to controllers through the * Matter CumulativeEnergyMeasured / PeriodicEnergyMeasured events, and these * are NOT throttled - every update is pushed to every subscribed controller * immediately. Update energy totals at a measured cadence (for example every * 30-60 seconds), not on every raw sample from the device. */ export interface ElectricalEnergyMeasurementState { accuracy?: MeasurementAccuracyStruct; cumulativeEnergyImported?: EnergyMeasurementStruct | null; cumulativeEnergyExported?: EnergyMeasurementStruct | null; periodicEnergyImported?: EnergyMeasurementStruct | null; periodicEnergyExported?: EnergyMeasurementStruct | null; } //# sourceMappingURL=clusterTypes.d.ts.map