matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
53 lines • 2.42 kB
JavaScript
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