import voluptuous as vol
from .const import CONF_INVERT as CONF_INVERT, CONF_KNX_EXPOSE as CONF_KNX_EXPOSE, CONF_PAYLOAD_LENGTH as CONF_PAYLOAD_LENGTH, CONF_RESET_AFTER as CONF_RESET_AFTER, CONF_RESPOND_TO_READ as CONF_RESPOND_TO_READ, CONF_STATE_ADDRESS as CONF_STATE_ADDRESS, CONF_SYNC_STATE as CONF_SYNC_STATE, CONTROLLER_MODES as CONTROLLER_MODES, ColorTempModes as ColorTempModes, KNX_ADDRESS as KNX_ADDRESS, PRESET_MODES as PRESET_MODES
from _typeshed import Incomplete
from abc import ABC
from collections import OrderedDict
from collections.abc import Callable as Callable
from homeassistant.components.climate import HVACMode as HVACMode
from homeassistant.components.number import NumberMode as NumberMode
from homeassistant.components.sensor import CONF_STATE_CLASS as CONF_STATE_CLASS, STATE_CLASSES_SCHEMA as STATE_CLASSES_SCHEMA
from homeassistant.components.text import TextMode as TextMode
from homeassistant.const import CONF_DEVICE_CLASS as CONF_DEVICE_CLASS, CONF_ENTITY_CATEGORY as CONF_ENTITY_CATEGORY, CONF_ENTITY_ID as CONF_ENTITY_ID, CONF_EVENT as CONF_EVENT, CONF_MODE as CONF_MODE, CONF_NAME as CONF_NAME, CONF_PAYLOAD as CONF_PAYLOAD, CONF_TYPE as CONF_TYPE, Platform as Platform
from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA as ENTITY_CATEGORIES_SCHEMA
from typing import Any, ClassVar, Final
from xknx.dpt import DPTBase

def dpt_subclass_validator(dpt_base_class: type[DPTBase]) -> Callable[[Any], str | int]: ...

numeric_type_validator: Incomplete
sensor_type_validator: Incomplete
string_type_validator: Incomplete

def ga_validator(value: Any) -> str | int: ...

ga_list_validator: Incomplete
ia_validator: Incomplete

def ip_v4_validator(value: Any, multicast: bool | None = None) -> str: ...
def number_limit_sub_validator(entity_config: OrderedDict) -> OrderedDict: ...
def _max_payload_value(payload_length: int) -> int: ...
def button_payload_sub_validator(entity_config: OrderedDict) -> OrderedDict: ...
def select_options_sub_validator(entity_config: OrderedDict) -> OrderedDict: ...

sync_state_validator: Incomplete

class EventSchema:
    KNX_EVENT_FILTER_SCHEMA: Incomplete
    SCHEMA: Incomplete

class KNXPlatformSchema(ABC):
    PLATFORM: ClassVar[Platform | str]
    ENTITY_SCHEMA: ClassVar[vol.Schema]
    @classmethod
    def platform_node(cls) -> dict[vol.Optional, vol.All]: ...

class BinarySensorSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_STATE_ADDRESS = CONF_STATE_ADDRESS
    CONF_SYNC_STATE = CONF_SYNC_STATE
    CONF_INVERT = CONF_INVERT
    CONF_IGNORE_INTERNAL_STATE: str
    CONF_CONTEXT_TIMEOUT: str
    CONF_RESET_AFTER = CONF_RESET_AFTER
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class ButtonSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_VALUE: str
    DEFAULT_NAME: str
    payload_or_value_msg: Incomplete
    length_or_type_msg: Incomplete
    ENTITY_SCHEMA: Incomplete

class ClimateSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_ACTIVE_STATE_ADDRESS: str
    CONF_SETPOINT_SHIFT_ADDRESS: str
    CONF_SETPOINT_SHIFT_STATE_ADDRESS: str
    CONF_SETPOINT_SHIFT_MODE: str
    CONF_SETPOINT_SHIFT_MAX: str
    CONF_SETPOINT_SHIFT_MIN: str
    CONF_TEMPERATURE_ADDRESS: str
    CONF_TEMPERATURE_STEP: str
    CONF_TARGET_TEMPERATURE_ADDRESS: str
    CONF_TARGET_TEMPERATURE_STATE_ADDRESS: str
    CONF_OPERATION_MODE_ADDRESS: str
    CONF_OPERATION_MODE_STATE_ADDRESS: str
    CONF_CONTROLLER_STATUS_ADDRESS: str
    CONF_CONTROLLER_STATUS_STATE_ADDRESS: str
    CONF_CONTROLLER_MODE_ADDRESS: str
    CONF_CONTROLLER_MODE_STATE_ADDRESS: str
    CONF_COMMAND_VALUE_STATE_ADDRESS: str
    CONF_HEAT_COOL_ADDRESS: str
    CONF_HEAT_COOL_STATE_ADDRESS: str
    CONF_OPERATION_MODE_FROST_PROTECTION_ADDRESS: str
    CONF_OPERATION_MODE_NIGHT_ADDRESS: str
    CONF_OPERATION_MODE_COMFORT_ADDRESS: str
    CONF_OPERATION_MODE_STANDBY_ADDRESS: str
    CONF_OPERATION_MODES: str
    CONF_CONTROLLER_MODES: str
    CONF_DEFAULT_CONTROLLER_MODE: str
    CONF_ON_OFF_ADDRESS: str
    CONF_ON_OFF_STATE_ADDRESS: str
    CONF_ON_OFF_INVERT: str
    CONF_MIN_TEMP: str
    CONF_MAX_TEMP: str
    DEFAULT_NAME: str
    DEFAULT_SETPOINT_SHIFT_MODE: str
    DEFAULT_SETPOINT_SHIFT_MAX: int
    DEFAULT_SETPOINT_SHIFT_MIN: int
    DEFAULT_TEMPERATURE_STEP: float
    DEFAULT_ON_OFF_INVERT: bool
    ENTITY_SCHEMA: Incomplete

class CoverSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_MOVE_LONG_ADDRESS: str
    CONF_MOVE_SHORT_ADDRESS: str
    CONF_STOP_ADDRESS: str
    CONF_POSITION_ADDRESS: str
    CONF_POSITION_STATE_ADDRESS: str
    CONF_ANGLE_ADDRESS: str
    CONF_ANGLE_STATE_ADDRESS: str
    CONF_TRAVELLING_TIME_DOWN: str
    CONF_TRAVELLING_TIME_UP: str
    CONF_INVERT_UPDOWN: str
    CONF_INVERT_POSITION: str
    CONF_INVERT_ANGLE: str
    DEFAULT_TRAVEL_TIME: int
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class DateSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class DateTimeSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class ExposeSchema(KNXPlatformSchema):
    PLATFORM = CONF_KNX_EXPOSE
    CONF_KNX_EXPOSE_TYPE = CONF_TYPE
    CONF_KNX_EXPOSE_ATTRIBUTE: str
    CONF_KNX_EXPOSE_BINARY: str
    CONF_KNX_EXPOSE_COOLDOWN: str
    CONF_KNX_EXPOSE_DEFAULT: str
    EXPOSE_TIME_TYPES: Final[Incomplete]
    EXPOSE_TIME_SCHEMA: Incomplete
    EXPOSE_SENSOR_SCHEMA: Incomplete
    ENTITY_SCHEMA: Incomplete

class FanSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_STATE_ADDRESS = CONF_STATE_ADDRESS
    CONF_OSCILLATION_ADDRESS: str
    CONF_OSCILLATION_STATE_ADDRESS: str
    CONF_MAX_STEP: str
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class LightSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_STATE_ADDRESS = CONF_STATE_ADDRESS
    CONF_BRIGHTNESS_ADDRESS: str
    CONF_BRIGHTNESS_STATE_ADDRESS: str
    CONF_COLOR_ADDRESS: str
    CONF_COLOR_STATE_ADDRESS: str
    CONF_COLOR_TEMP_ADDRESS: str
    CONF_COLOR_TEMP_STATE_ADDRESS: str
    CONF_COLOR_TEMP_MODE: str
    CONF_HUE_ADDRESS: str
    CONF_HUE_STATE_ADDRESS: str
    CONF_RGBW_ADDRESS: str
    CONF_RGBW_STATE_ADDRESS: str
    CONF_SATURATION_ADDRESS: str
    CONF_SATURATION_STATE_ADDRESS: str
    CONF_XYY_ADDRESS: str
    CONF_XYY_STATE_ADDRESS: str
    CONF_MIN_KELVIN: str
    CONF_MAX_KELVIN: str
    DEFAULT_NAME: str
    DEFAULT_COLOR_TEMP_MODE: str
    DEFAULT_MIN_KELVIN: int
    DEFAULT_MAX_KELVIN: int
    CONF_INDIVIDUAL_COLORS: str
    CONF_RED: str
    CONF_GREEN: str
    CONF_BLUE: str
    CONF_WHITE: str
    _hs_color_inclusion_msg: str
    HS_COLOR_SCHEMA: Incomplete
    INDIVIDUAL_COLOR_SCHEMA: Incomplete
    ENTITY_SCHEMA: Incomplete

class NotifySchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class NumberSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_MAX: str
    CONF_MIN: str
    CONF_STEP: str
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class SceneSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_SCENE_NUMBER: str
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class SelectSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_OPTION: str
    CONF_OPTIONS: str
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class SensorSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_ALWAYS_CALLBACK: str
    CONF_STATE_ADDRESS = CONF_STATE_ADDRESS
    CONF_SYNC_STATE = CONF_SYNC_STATE
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class SwitchSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_INVERT = CONF_INVERT
    CONF_STATE_ADDRESS = CONF_STATE_ADDRESS
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class TextSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class TimeSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete

class WeatherSchema(KNXPlatformSchema):
    PLATFORM: Incomplete
    CONF_SYNC_STATE = CONF_SYNC_STATE
    CONF_KNX_TEMPERATURE_ADDRESS: str
    CONF_KNX_BRIGHTNESS_SOUTH_ADDRESS: str
    CONF_KNX_BRIGHTNESS_EAST_ADDRESS: str
    CONF_KNX_BRIGHTNESS_WEST_ADDRESS: str
    CONF_KNX_BRIGHTNESS_NORTH_ADDRESS: str
    CONF_KNX_WIND_SPEED_ADDRESS: str
    CONF_KNX_WIND_BEARING_ADDRESS: str
    CONF_KNX_RAIN_ALARM_ADDRESS: str
    CONF_KNX_FROST_ALARM_ADDRESS: str
    CONF_KNX_WIND_ALARM_ADDRESS: str
    CONF_KNX_DAY_NIGHT_ADDRESS: str
    CONF_KNX_AIR_PRESSURE_ADDRESS: str
    CONF_KNX_HUMIDITY_ADDRESS: str
    DEFAULT_NAME: str
    ENTITY_SCHEMA: Incomplete
