matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
71 lines (70 loc) • 2.28 kB
JavaScript
import { debugStringify } from 'matterbridge/logger';
export function getSupportedAreas(rooms, roomMap, log) {
log?.debug('getSupportedAreas', debugStringify(rooms));
log?.debug('getSupportedAreas', roomMap ? debugStringify(roomMap) : 'undefined');
if (!rooms || rooms.length === 0 || !roomMap?.rooms || roomMap.rooms.length == 0) {
log?.error('No rooms found');
return [
{
areaId: 1,
mapId: null,
areaInfo: {
locationInfo: {
locationName: 'Unknown',
floorNumber: null,
areaType: null,
},
landmarkInfo: null,
},
},
];
}
const supportedAreas = roomMap.rooms.map((room) => {
return {
areaId: room.id,
mapId: null,
areaInfo: {
locationInfo: {
locationName: room.displayName ?? rooms.find((r) => r.id == room.globalId)?.name ?? 'Unknown Room',
floorNumber: null,
areaType: null,
},
landmarkInfo: null,
},
};
});
const duplicated = findDuplicatedAreaIds(supportedAreas, log);
return duplicated
? [
{
areaId: 2,
mapId: null,
areaInfo: {
locationInfo: {
locationName: 'Unknown',
floorNumber: null,
areaType: null,
},
landmarkInfo: null,
},
},
]
: supportedAreas;
}
function findDuplicatedAreaIds(areas, log) {
const seen = new Set();
const duplicates = [];
for (const area of areas) {
if (seen.has(area.areaId)) {
duplicates.push(area.areaId);
}
else {
seen.add(area.areaId);
}
}
if (duplicates.length > 0 && log) {
const duplicated = areas.filter((x) => duplicates.includes(x.areaId));
log.error(`Duplicated areaId(s) found: ${debugStringify(duplicated)}`);
}
return duplicates.length > 0;
}