import { ChannelCategory, DataTypeType, DeviceCategory, PermissionType, PropertyCategory } from '../../../modules/devices/devices.constants'; import { HomeAssistantDomain } from '../devices-home-assistant.constants'; export type TransformDirection = 'bidirectional' | 'read_only' | 'write_only'; export interface ScaleTransformerDefinition { type: 'scale'; input_range: [number, number]; output_range: [number, number]; direction?: TransformDirection; } export interface MapTransformerDefinition { type: 'map'; read?: Record; write?: Record; bidirectional?: Record; direction?: TransformDirection; } export interface FormulaTransformerDefinition { type: 'formula'; read?: string; write?: string; direction?: TransformDirection; } export interface BooleanTransformerDefinition { type: 'boolean'; true_value: unknown; false_value: unknown; invert?: boolean; direction?: TransformDirection; } export interface ClampTransformerDefinition { type: 'clamp'; min: number; max: number; direction?: TransformDirection; } export interface RoundTransformerDefinition { type: 'round'; precision?: number; direction?: TransformDirection; } export type AnyTransformerDefinition = ScaleTransformerDefinition | MapTransformerDefinition | FormulaTransformerDefinition | BooleanTransformerDefinition | ClampTransformerDefinition | RoundTransformerDefinition; export interface ThresholdDerivation { type: 'threshold'; source_property?: string; thresholds: ThresholdEntry[]; default_value?: string; } export interface ThresholdEntry { max?: number; min?: number; value: string; } export interface DeviceClassMapDerivation { type: 'device_class_map'; mapping: Record; default_value: string; } export interface StaticDerivation { type: 'static'; value: string | number | boolean; } export type AnyDerivation = ThresholdDerivation | DeviceClassMapDerivation | StaticDerivation; export interface DerivationDefinition { description?: string; rule: AnyDerivation; } export declare enum EntityRole { PRIMARY = "primary", SECONDARY = "secondary", STANDALONE = "standalone" } export interface DomainRolesConfig { primary?: string[]; standalone?: string[]; secondary?: string[]; } export interface PropertyBindingConfig { ha_attribute: string; property_category: string; array_index?: number; transformer?: string; } export interface ResolvedPropertyBinding { haAttribute: string; propertyCategory: PropertyCategory; arrayIndex?: number; transformerName?: string; } export interface ChannelConfig { category: string; identifier?: string; name?: string; } export interface ResolvedChannelConfig { category: ChannelCategory; identifier?: string; name?: string; } export interface HaMappingDefinition { name: string; description?: string; domain: string; device_class: string | string[] | null; entity_id_contains?: string; priority?: number; channel: ChannelConfig; device_category: string; property_bindings: PropertyBindingConfig[]; } export interface ResolvedHaMapping { name: string; description?: string; domain: HomeAssistantDomain; deviceClass: string | string[] | null; entityIdContains?: string; priority: number; channel: ResolvedChannelConfig; deviceCategory: DeviceCategory; propertyBindings: ResolvedPropertyBinding[]; } export type VirtualPropertyType = 'static' | 'derived' | 'command'; export interface CommandMappingConfig { domain: string; services: Record; service_data?: Record; } export interface ResolvedCommandMapping { domain: HomeAssistantDomain; services: Record; serviceData?: Record; } export interface VirtualPropertyConfig { property_category: string; virtual_type: VirtualPropertyType; data_type: string; permissions: string[]; format?: (string | number)[]; unit?: string; static_value?: string | number | boolean; derivation?: string; command_mapping?: CommandMappingConfig; } export interface ResolvedVirtualProperty { propertyCategory: PropertyCategory; virtualType: VirtualPropertyType; dataType: DataTypeType; permissions: PermissionType[]; format?: (string | number)[]; unit?: string; staticValue?: string | number | boolean; derivationName?: string; derivationRule?: AnyDerivation; commandMapping?: ResolvedCommandMapping; } export interface HaMappingConfig { version: string; transformers?: Record; domain_roles?: DomainRolesConfig; mappings: HaMappingDefinition[]; } export interface VirtualPropertiesConfig { version: string; derivations?: Record; virtual_properties?: Record; } export interface MappingLoadResult { success: boolean; config?: HaMappingConfig; resolvedMappings?: ResolvedHaMapping[]; errors?: string[]; warnings?: string[]; source: string; } export interface VirtualPropertiesLoadResult { success: boolean; config?: VirtualPropertiesConfig; resolvedProperties?: Map; resolvedDerivations?: Map; errors?: string[]; warnings?: string[]; source: string; } export type MappingSource = 'builtin' | 'user'; export interface MappingFileInfo { path: string; source: MappingSource; priority: number; }