matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
54 lines • 2.18 kB
JavaScript
import { Protocol } from '../roborockCommunication/models/index.js';
function unwrapRpcResult(msg) {
const dps = (msg.get(Protocol.rpc_response) ?? msg.get(Protocol.general_response));
if (!dps?.result)
return undefined;
return Array.isArray(dps.result) ? dps.result[0] : dps.result;
}
/** map_status >> 2; returns undefined when missing or sentinel 63 (unknown). */
export function resolveActiveMapId(status) {
if (!status || typeof status !== 'object' || !('map_status' in status))
return undefined;
const mapStatus = status.map_status;
if (typeof mapStatus !== 'number')
return undefined;
const mapFlag = mapStatus >> 2;
return mapFlag !== 63 ? mapFlag : undefined;
}
/** Push parser: RPC result object containing map_info[]. */
export function parseMapInfoPush(msg) {
const raw = unwrapRpcResult(msg);
if (raw && typeof raw === 'object' && 'map_info' in raw)
return raw;
return undefined;
}
/** Push parser: RPC result object containing map_status. */
export function parseDeviceStatusPush(msg) {
const raw = unwrapRpcResult(msg);
if (raw && typeof raw === 'object' && 'map_status' in raw)
return raw;
return undefined;
}
/** Build LegacyNamedRoom[] from get_multi_maps_list push, scoped to active map. */
export function extractNamedRooms(mapResult, activeMapId) {
if (activeMapId === undefined)
return [];
if (!mapResult || typeof mapResult !== 'object' || !('map_info' in mapResult))
return [];
const rawMapInfo = mapResult.map_info;
if (!Array.isArray(rawMapInfo))
return [];
const activeMap = rawMapInfo.find((m) => !!m && typeof m === 'object' && 'mapFlag' in m && m.mapFlag === activeMapId);
if (!activeMap?.rooms)
return [];
return activeMap.rooms.map((room) => ({
id: room.id,
name: room.iot_name?.trim() ?? '',
}));
}
/** Lookup display name; returns '' when not found (caller prints '(unnamed)'). */
export function roomDisplayName(segmentId, namedRooms) {
const room = namedRooms.find((r) => r.id === segmentId);
return room?.name ?? '';
}
//# sourceMappingURL=mapListHelpers.js.map