/** Conversions between the room UI's shutter model and Home Assistant's `cover.*` * convention. Home Assistant's `current_position`/`position` are percent *open* (100 = * fully open, 0 = fully closed); the UI (following the design mockup) thinks in percent * *closed*. Kept pure and separate because that inversion is easy to get backwards. */ export interface ShutterPreset { label: string; /** Percent closed: 0 = fully open, 100 = fully closed. */ closedPercent: number; } export const SHUTTER_PRESETS: ShutterPreset[] = [ { label: "Offen", closedPercent: 0 }, { label: "Halb zu", closedPercent: 50 }, { label: "Fast zu", closedPercent: 85 }, { label: "Ganz zu", closedPercent: 100 }, ]; /** HA's `current_position` -> the UI's "how closed" percent. */ export function closedPercentFromPosition(position: number): number { return 100 - position; } /** The UI's "how closed" percent -> the `position` `cover.set_cover_position` expects. */ export function positionFromClosedPercent(closedPercent: number): number { return 100 - closedPercent; } export function closedLabelFor(closedPercent: number): string { if (closedPercent <= 1) return "Offen"; if (closedPercent >= 99) return "Ganz zu"; if (closedPercent >= 80) return "Fast zu"; if (closedPercent >= 40) return "Halb zu"; return `${Math.round(closedPercent)}% zu`; }