UNPKG

iobroker.roborock

Version:
75 lines (63 loc) 3.01 kB
import type { FeatureDependencies } from "../../baseDeviceFeatures"; import { DeviceStateWriter } from "../../deviceStateWriter"; import { VACUUM_CONSTANTS } from "../vacuumConstants"; export class StationService { private readonly stateWriter: DeviceStateWriter; constructor( private deps: FeatureDependencies, duid: string ) { this.stateWriter = new DeviceStateWriter(deps, duid); } public async initDockingStationStatus(): Promise<void> { await this.stateWriter.ensureFolder("dockingStationStatus"); // Define status definitions with their respective translation keys for "Error/Maintenance" state (value 1) const statusDefinitions: Record<string, string> = { "cleanFluidStatus": "dock_info_clean_fluid_exception", "waterBoxFilterStatus": "dock_info_item_gone_exception", "dustBagStatus": "dock_info_dust_bag_exception", "dirtyWaterBoxStatus": "dock_info_dirty_water_box_exception1", "clearWaterBoxStatus": "dock_info_clear_water_box_exception1", "isUpdownWaterReady": "inner_error_name_152" }; // Common states for 0 (Not Supported), 2 (OK), 3 (Unknown) const txtNotSupported = this.deps.adapter.translationManager.get("localization_strings_Setting_General_index_0", "Not supported"); const txtOK = this.deps.adapter.translationManager.get("localization_strings_Main_Error_ErrorDetailPage_3", "OK"); const txtUnknown = this.deps.adapter.translationManager.get("localization_strings_Setting_General_index_0", "Unknown"); for (const [name, errorKey] of Object.entries(statusDefinitions)) { // If errorKey itself is not in translation, we use a generic native Roborock key as fallback. const commonFallbackKey = errorKey.includes("error_") ? "localization_strings_Main_Error_ErrorDetailPage_3" : "dust_collection_life12"; const txtMaintenance = this.deps.adapter.translationManager.get(errorKey, this.deps.adapter.translationManager.get(commonFallbackKey)); const states = { "0": txtNotSupported, "1": txtMaintenance, "2": txtOK, "3": txtUnknown }; // Fetch localized name for the state itself const nameKey = VACUUM_CONSTANTS.dockingStationTranslationKeys[name as keyof typeof VACUUM_CONSTANTS.dockingStationTranslationKeys]; const localizedName = nameKey ? this.deps.adapter.translationManager.get(nameKey, name) : name; await this.stateWriter.ensureState(`dockingStationStatus.${name}`, { name: localizedName, type: "number", role: "value", read: true, write: false, states: states }); } } public async updateDockingStationStatus(dss: number): Promise<void> { const status = { cleanFluidStatus: ((dss >> 10) & 0b11), waterBoxFilterStatus: ((dss >> 8) & 0b11), dustBagStatus: ((dss >> 6) & 0b11), dirtyWaterBoxStatus: ((dss >> 4) & 0b11), clearWaterBoxStatus: ((dss >> 2) & 0b11), isUpdownWaterReady: (dss & 0b11), }; for (const [name, val] of Object.entries(status)) { await this.stateWriter.setState(`dockingStationStatus.${name}`, val); } } }