matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
97 lines • 4.44 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;
}
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() {
if (this.cleanFluidStatus === DockStationStatusCode.Error) {
return RvcOperationalState.ErrorState.WaterTankMissing;
}
if (this.waterBoxFilterStatus === DockStationStatusCode.Error) {
return RvcOperationalState.ErrorState.WaterTankLidOpen;
}
if (this.dustBagStatus === DockStationStatusCode.Error) {
return RvcOperationalState.ErrorState.DustBinFull;
}
if (this.dirtyWaterBoxStatus === DockStationStatusCode.Error) {
return RvcOperationalState.ErrorState.DirtyWaterTankFull;
}
if (this.clearWaterBoxStatus === DockStationStatusCode.Error) {
return RvcOperationalState.ErrorState.WaterTankEmpty;
}
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) {
switch (dockErrorCode) {
case DockErrorCode.WaterEmpty:
return RvcOperationalState.ErrorState.WaterTankEmpty;
case DockErrorCode.DuctBlockage:
return RvcOperationalState.ErrorState.DustBinFull;
case DockErrorCode.WasteWaterTankFull:
case DockErrorCode.CleaningTankFullOrBlocked:
return RvcOperationalState.ErrorState.DirtyWaterTankFull;
case DockErrorCode.MaintenanceBrushJammed:
return RvcOperationalState.ErrorState.BrushJammed;
case DockErrorCode.DirtyTankLatchOpen:
return RvcOperationalState.ErrorState.DirtyWaterTankMissing;
case DockErrorCode.NoDustbin:
return RvcOperationalState.ErrorState.DustBinMissing;
case DockErrorCode.None:
return RvcOperationalState.ErrorState.NoError;
default:
return RvcOperationalState.ErrorState.UnableToCompleteOperation;
}
}
}
//# sourceMappingURL=DockStationStatus.js.map