matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
68 lines • 4.16 kB
JavaScript
import { debugStringify } from 'matterbridge/logger';
import { RvcOperationalState } from 'matterbridge/matter/clusters';
import { DockStationStatus } from '../../model/DockStationStatus.js';
import { VacuumStatus } from '../../model/VacuumStatus.js';
import { DockErrorCode } from '../../roborockCommunication/enums/index.js';
import { getOperationalErrorName } from '../../share/matterStateNames.js';
export async function handleErrorOccurred(robot, message, platform) {
platform.log.debug(`Handling error occurred: ${debugStringify(message)}`);
if (!platform.configManager.includeVacuumErrorStatus) {
platform.log.debug(`Skipping error handling: includeVacuumErrorStatus is disabled, message: ${debugStringify(message)}`);
return;
}
// highest priority: vacuum errors
const vacuumStatus = new VacuumStatus(message.vacuumErrorCode ?? 0);
if (vacuumStatus.hasError()) {
const errorDetail = vacuumStatus.getErrorState();
platform.log.warn(`Vacuum error detected: ${getOperationalErrorName(errorDetail)}`);
await Promise.all([
robot.updateAttribute(RvcOperationalState.id, 'operationalState', RvcOperationalState.OperationalState.Error, platform.log),
robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: errorDetail }, platform.log),
]);
return;
}
// If vacuum is running with no errors, clear any previous errors and skip dock processing
const currentOperationState = robot.getAttribute(RvcOperationalState.id, 'operationalState', platform.log);
if (currentOperationState === RvcOperationalState.OperationalState.Running) {
platform.log.debug('Vacuum running without errors, clearing error state.');
await robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: RvcOperationalState.ErrorState.NoError }, platform.log);
return;
}
if (!platform.configManager.includeDockStationStatus) {
return;
}
if (message.dockStationStatus != null) {
// Process dock station errors (only when vacuum not running)
const dockStatus = DockStationStatus.parseDockStationStatus(message.dockStationStatus);
robot.dockStationStatus = dockStatus;
if (dockStatus.hasError()) {
const errorDetail = dockStatus.getMatterOperationalError();
platform.log.warn(`Docking station error detected: ${getOperationalErrorName(errorDetail)}`);
await Promise.all([
robot.updateAttribute(RvcOperationalState.id, 'operationalState', RvcOperationalState.OperationalState.Error, platform.log),
robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: errorDetail }, platform.log),
]);
}
else {
platform.log.debug('No docking station errors detected.');
await robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: RvcOperationalState.ErrorState.NoError }, platform.log);
}
return;
}
if (message.dockErrorCode !== DockErrorCode.None) {
const dockStatus = DockStationStatus.parseDockErrorCode(message.dockErrorCode);
if (dockStatus !== RvcOperationalState.ErrorState.NoError) {
platform.log.warn(`Docking station error detected: ${getOperationalErrorName(dockStatus)}`);
await robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: dockStatus }, platform.log);
}
else {
platform.log.debug('No docking station errors detected.');
await robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: RvcOperationalState.ErrorState.NoError }, platform.log);
}
return;
}
// No errors detected and no dock station processing
platform.log.debug('No errors detected, clearing operational error state.');
await robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: RvcOperationalState.ErrorState.NoError }, platform.log);
}
//# sourceMappingURL=errorStateHandler.js.map