UNPKG

matterbridge-roborock-vacuum-plugin

Version:
63 lines 4.42 kB
import { debugStringify } from 'matterbridge/logger'; import { RvcOperationalState, RvcRunMode } from 'matterbridge/matter/clusters'; import { getRunningMode } from '../../initialData/getSupportedRunModes.js'; import { StatusChangeMessage } from '../../roborockCommunication/models/index.js'; import { getOperationalStateName, getRunModeName, getRunModeNameV2 } from '../../share/matterStateNames.js'; import { resolveDeviceState } from '../../share/stateResolver.js'; import { triggerDssError } from '../handleLocalMessage.js'; import { captureSessionSnapshot, captureSessionSnapshotFromResolved, maybeEmitOperationCompletion, trackOperationSessionTiming, } from './operationCompletionTracker.js'; async function applyResolvedStateUpdates(robot, resolvedState, beforeSnapshot, log) { const updates = [ robot.updateAttribute(RvcRunMode.id, 'currentMode', getRunningMode(resolvedState.runMode), log), robot.updateAttribute(RvcOperationalState.id, 'operationalState', resolvedState.operationalState, log), ]; if (resolvedState.operationalError !== undefined) { updates.push(robot.updateAttribute(RvcOperationalState.id, 'operationalError', { errorStateId: resolvedState.operationalError }, log)); } await Promise.all(updates); const afterSnapshot = captureSessionSnapshotFromResolved(resolvedState); trackOperationSessionTiming(robot, beforeSnapshot, afterSnapshot); await maybeEmitOperationCompletion(robot, beforeSnapshot, afterSnapshot, log); } export async function handleDeviceStatusUpdate(robot, message, platform) { platform.log.debug(`Handling device status update: ${debugStringify(message)}`); const includeDockStationStatus = platform.configManager.includeDockStationStatus; const dssHasError = includeDockStationStatus && (robot.dockStationStatus?.hasError() ?? false); if (dssHasError) { await triggerDssError(robot, platform); return false; } const beforeSnapshot = captureSessionSnapshot(robot, platform.log); const currentRunMode = robot.getAttribute(RvcRunMode.id, 'currentMode'); const currentOperationState = robot.getAttribute(RvcOperationalState.id, 'operationalState'); const resolvedState = resolveDeviceState(message); platform.log.notice(`[${robot.device.duid}] [${robot.device.name}] Resolved state: currentRunMode=${getRunModeNameV2(currentRunMode)}, code=${currentRunMode} currentOperationState=${getOperationalStateName(currentOperationState)}, code=${currentOperationState} newRunMode=${getRunModeName(resolvedState.runMode)}, code=${getRunningMode(resolvedState.runMode)} newOperationalState=${getOperationalStateName(resolvedState.operationalState)}, code=${resolvedState.operationalState}`); if (currentOperationState === RvcOperationalState.OperationalState.Charging && resolvedState.runMode === RvcRunMode.ModeTag.Idle && resolvedState.operationalState === RvcOperationalState.OperationalState.Docked) { platform.log.debug(`Device is still charging, skipping Docked state update`); return false; } await applyResolvedStateUpdates(robot, resolvedState, beforeSnapshot, platform.log); const isActive = resolvedState.runMode === RvcRunMode.ModeTag.Cleaning || resolvedState.runMode === RvcRunMode.ModeTag.Mapping; return isActive; } export async function handleDeviceStatusSimpleUpdate(robot, message, platform) { platform.log.debug(`Handling simple device status update: ${debugStringify(message)}`); const includeDockStationStatus = platform.configManager.includeDockStationStatus; const dssHasError = includeDockStationStatus && (robot.dockStationStatus?.hasError() ?? false); if (dssHasError) { await triggerDssError(robot, platform); return; } const beforeSnapshot = captureSessionSnapshot(robot, platform.log); const statusChangeMessage = new StatusChangeMessage(message.duid, message.status, undefined, undefined, undefined, undefined, undefined, undefined); const resolvedState = resolveDeviceState(statusChangeMessage); platform.log.debug(`Resolved state from simple update: runMode=${getRunModeName(resolvedState.runMode)}, operationalState=${getOperationalStateName(resolvedState.operationalState)}`); await applyResolvedStateUpdates(robot, resolvedState, beforeSnapshot, platform.log); } //# sourceMappingURL=deviceStateHandler.js.map