UNPKG

matterbridge-roborock-vacuum-plugin

Version:
89 lines 4.6 kB
import { RvcOperationalState } from 'matterbridge/matter/clusters'; import { DockErrorCode } from '../roborockCommunication/enums/vacuumAndDockErrorCode.js'; export var DockStationStatusCode; (function (DockStationStatusCode) { DockStationStatusCode[DockStationStatusCode["Unknown"] = 0] = "Unknown"; DockStationStatusCode[DockStationStatusCode["Error"] = 1] = "Error"; DockStationStatusCode[DockStationStatusCode["OK"] = 2] = "OK"; })(DockStationStatusCode || (DockStationStatusCode = {})); /** * Bit layout of docking station status value: * - Bits 0-1: isUpdownWaterReady * - Bits 2-3: clearWaterBoxStatus * - Bits 4-5: dirtyWaterBoxStatus * - Bits 6-7: dustBagStatus * - Bits 8-9: waterBoxFilterStatus * - Bits 10-11: cleanFluidStatus */ const BIT_MASK_2BITS = 0b11; const BitPosition = { IsUpdownWaterReady: 0, ClearWaterBox: 2, DirtyWaterBox: 4, DustBag: 6, WaterBoxFilter: 8, CleanFluid: 10, }; function extractBits(value, position) { return (value >> position) & BIT_MASK_2BITS; } const DOCK_ERROR_TO_MATTER = new Map([ [DockErrorCode.None, RvcOperationalState.ErrorState.NoError], [DockErrorCode.NoDustbinOrFilter, RvcOperationalState.ErrorState.DustBinMissing], [DockErrorCode.AutoEmptyDockFanError, RvcOperationalState.ErrorState.DustBinFull], [DockErrorCode.AutoEmptyDockVoltageError, RvcOperationalState.ErrorState.UnableToCompleteOperation], [DockErrorCode.DuctBlockage, RvcOperationalState.ErrorState.DustBinFull], [DockErrorCode.WaterEmpty, RvcOperationalState.ErrorState.WaterTankEmpty], [DockErrorCode.WasteWaterTankFull, RvcOperationalState.ErrorState.DirtyWaterTankFull], [DockErrorCode.CleaningTankFullOrBlocked, RvcOperationalState.ErrorState.DirtyWaterTankFull], [DockErrorCode.MaintenanceBrushJammed, RvcOperationalState.ErrorState.BrushJammed], [DockErrorCode.DirtyTankLatchOpen, RvcOperationalState.ErrorState.DirtyWaterTankMissing], [DockErrorCode.NoDustbin, RvcOperationalState.ErrorState.DustBinMissing], ]); const DSS_FIELD_PRIORITY = [ { field: 'clearWaterBoxStatus', errorState: RvcOperationalState.ErrorState.WaterTankEmpty }, { field: 'dirtyWaterBoxStatus', errorState: RvcOperationalState.ErrorState.DirtyWaterTankFull }, { field: 'dustBagStatus', errorState: RvcOperationalState.ErrorState.DustBinMissing }, { field: 'cleanFluidStatus', errorState: RvcOperationalState.ErrorState.WaterTankMissing }, { field: 'waterBoxFilterStatus', errorState: RvcOperationalState.ErrorState.WaterTankMissing }, { field: 'isUpdownWaterReady', errorState: RvcOperationalState.ErrorState.UnableToCompleteOperation }, ]; export class DockStationStatus { cleanFluidStatus; waterBoxFilterStatus; dustBagStatus; dirtyWaterBoxStatus; clearWaterBoxStatus; isUpdownWaterReady; constructor(cleanFluidStatus, waterBoxFilterStatus, dustBagStatus, dirtyWaterBoxStatus, clearWaterBoxStatus, isUpdownWaterReady) { this.cleanFluidStatus = cleanFluidStatus; this.waterBoxFilterStatus = waterBoxFilterStatus; this.dustBagStatus = dustBagStatus; this.dirtyWaterBoxStatus = dirtyWaterBoxStatus; this.clearWaterBoxStatus = clearWaterBoxStatus; this.isUpdownWaterReady = isUpdownWaterReady; } hasError() { return (this.cleanFluidStatus === DockStationStatusCode.Error || this.waterBoxFilterStatus === DockStationStatusCode.Error || this.dustBagStatus === DockStationStatusCode.Error || this.dirtyWaterBoxStatus === DockStationStatusCode.Error || this.clearWaterBoxStatus === DockStationStatusCode.Error || this.isUpdownWaterReady === DockStationStatusCode.Error); } getMatterOperationalError() { for (const { field, errorState } of DSS_FIELD_PRIORITY) { if (this[field] === DockStationStatusCode.Error) { return errorState; } } return RvcOperationalState.ErrorState.NoError; } static parseDockStationStatus(dss) { return new DockStationStatus(extractBits(dss, BitPosition.CleanFluid), extractBits(dss, BitPosition.WaterBoxFilter), extractBits(dss, BitPosition.DustBag), extractBits(dss, BitPosition.DirtyWaterBox), extractBits(dss, BitPosition.ClearWaterBox), extractBits(dss, BitPosition.IsUpdownWaterReady)); } static parseDockErrorCode(dockErrorCode) { return DOCK_ERROR_TO_MATTER.get(dockErrorCode) ?? RvcOperationalState.ErrorState.UnableToCompleteOperation; } } //# sourceMappingURL=DockStationStatus.js.map