import { ChannelEntity, ChannelPropertyEntity, DeviceEntity } from '../../devices/entities/devices.entity'; import { IntentTimeseriesService } from '../../intents/services/intent-timeseries.service'; import { CoversMode, CoversRole } from '../spaces.constants'; import { IntentSpecLoaderService } from '../spec'; import { SpaceCoversRoleService } from './space-covers-role.service'; import { SpaceIntentBaseService } from './space-intent-base.service'; import { SpacesService } from './spaces.service'; export interface CoverDevice { device: DeviceEntity; coverChannel: ChannelEntity; positionProperty: ChannelPropertyEntity | null; commandProperty: ChannelPropertyEntity | null; tiltProperty: ChannelPropertyEntity | null; role: CoversRole | null; } export interface RoleCoversState { role: CoversRole; position: number | null; isPositionMixed: boolean; tilt: number | null; isTiltMixed: boolean; hasTilt: boolean; isOpen: boolean; isClosed: boolean; devicesCount: number; devicesOpen: number; } export interface CoversModeMatch { mode: CoversMode; confidence: 'exact' | 'approximate'; matchPercentage: number; } export interface CoversState { hasCovers: boolean; detectedMode: CoversMode | null; modeConfidence: 'exact' | 'approximate' | 'none'; modeMatchPercentage: number | null; isModeFromIntent: boolean; averagePosition: number | null; isPositionMixed: boolean; averageTilt: number | null; isTiltMixed: boolean; hasTilt: boolean; anyOpen: boolean; allClosed: boolean; devicesCount: number; roles: Partial>; coversByRole: Record; lastAppliedMode: CoversMode | null; lastAppliedAt: Date | null; } export declare class SpaceCoversStateService extends SpaceIntentBaseService { private readonly spacesService; private readonly coversRoleService; private readonly intentTimeseriesService; private readonly intentSpecLoaderService; private readonly logger; constructor(spacesService: SpacesService, coversRoleService: SpaceCoversRoleService, intentTimeseriesService: IntentTimeseriesService, intentSpecLoaderService: IntentSpecLoaderService); getCoversState(spaceId: string, options?: { synchronizeModeValidity?: boolean; }): Promise; private aggregateCoverGroup; private getUniformValue; private detectMode; private matchMode; private matchRoleRule; getCoversInSpace(spaceId: string): Promise; }