UNPKG

matterbridge-roborock-vacuum-plugin

Version:
53 lines 2.42 kB
import { debugStringify } from 'matterbridge/logger'; import { HomeModelMapper } from '../../../roborockCommunication/models/home/mappers.js'; import { MapInfo } from './MapInfo.js'; export class RoomMap { roomMappings; constructor(roomMappings) { this.roomMappings = roomMappings; } get hasRooms() { return this.roomMappings.length > 0; } get rooms() { return this.roomMappings; } getRooms(map_info, enableMultipleMap = false) { const mapid = map_info[0]?.id ?? 0; return enableMultipleMap ? this.roomMappings : this.roomMappings.filter((room) => room.iot_map_id === undefined || room.iot_map_id === mapid); } /** * Get room map for device (with caching). */ static async fromMapInfo(vacuum, context) { if (!context.roborockService) { context.log.error('Roborock service not initialized'); return { activeMapId: 0, mapInfo: MapInfo.empty(), roomMap: RoomMap.empty() }; } const rooms = vacuum.store.homeData.rooms; // Try to get map information first const mapInfo = await context.roborockService.getMapInfo(vacuum.duid); const roomData = await context.roborockService.getRoomMap(vacuum.duid, -1); vacuum.mapInfos = mapInfo.maps; let activeMapId = mapInfo.maps?.[0]?.id ?? 0; if (mapInfo.hasRooms) { context.log.info(`fromMapInfo - mapInfo: ${debugStringify(mapInfo)}`); context.log.info(`fromMapInfo - rooms: ${debugStringify(rooms)}`); const roomMappings = mapInfo.allRooms.map((dto) => HomeModelMapper.toRoomMapping(dto, rooms)); activeMapId = mapInfo.getActiveMapId(roomData); return { activeMapId: activeMapId, mapInfo, roomMap: new RoomMap(roomMappings) }; } // // Fall back to room maps const mapRoomDtos = roomData.map((raw) => HomeModelMapper.rawArrayToMapRoomDto(raw, activeMapId)); const roomMappings = mapRoomDtos.map((dto) => HomeModelMapper.toRoomMapping(dto, rooms)); const roomMap = new RoomMap(roomMappings); context.log.debug(`fromMapInfo - Room mapping for device ${vacuum.duid}: ${debugStringify(roomMap)}`); return { activeMapId: activeMapId, mapInfo, roomMap }; } static empty() { return new RoomMap([]); } } //# sourceMappingURL=RoomMap.js.map