matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
89 lines • 4.6 kB
JavaScript
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