from .client import MQTT as MQTT, async_on_subscribe_done as async_on_subscribe_done, async_publish as async_publish, async_subscribe as async_subscribe, publish as publish, subscribe as subscribe
from .config import MQTT_BASE_SCHEMA as MQTT_BASE_SCHEMA, MQTT_RO_SCHEMA as MQTT_RO_SCHEMA, MQTT_RW_SCHEMA as MQTT_RW_SCHEMA
from .const import ATTR_PAYLOAD as ATTR_PAYLOAD, ATTR_QOS as ATTR_QOS, ATTR_RETAIN as ATTR_RETAIN, ATTR_TOPIC as ATTR_TOPIC, CONFIG_ENTRY_MINOR_VERSION as CONFIG_ENTRY_MINOR_VERSION, CONFIG_ENTRY_VERSION as CONFIG_ENTRY_VERSION, CONF_BIRTH_MESSAGE as CONF_BIRTH_MESSAGE, CONF_BROKER as CONF_BROKER, CONF_CERTIFICATE as CONF_CERTIFICATE, CONF_CLIENT_CERT as CONF_CLIENT_CERT, CONF_CLIENT_KEY as CONF_CLIENT_KEY, CONF_COMMAND_TOPIC as CONF_COMMAND_TOPIC, CONF_DISCOVERY_PREFIX as CONF_DISCOVERY_PREFIX, CONF_KEEPALIVE as CONF_KEEPALIVE, CONF_QOS as CONF_QOS, CONF_STATE_TOPIC as CONF_STATE_TOPIC, CONF_TLS_INSECURE as CONF_TLS_INSECURE, CONF_TOPIC as CONF_TOPIC, CONF_TRANSPORT as CONF_TRANSPORT, CONF_WILL_MESSAGE as CONF_WILL_MESSAGE, CONF_WS_HEADERS as CONF_WS_HEADERS, CONF_WS_PATH as CONF_WS_PATH, DEFAULT_DISCOVERY as DEFAULT_DISCOVERY, DEFAULT_ENCODING as DEFAULT_ENCODING, DEFAULT_PREFIX as DEFAULT_PREFIX, DEFAULT_QOS as DEFAULT_QOS, DEFAULT_RETAIN as DEFAULT_RETAIN, DOMAIN as DOMAIN, ENTITY_PLATFORMS as ENTITY_PLATFORMS, ENTRY_OPTION_FIELDS as ENTRY_OPTION_FIELDS, MQTT_CONNECTION_STATE as MQTT_CONNECTION_STATE, TEMPLATE_ERRORS as TEMPLATE_ERRORS
from .models import DATA_MQTT as DATA_MQTT, DATA_MQTT_AVAILABLE as DATA_MQTT_AVAILABLE, MqttCommandTemplate as MqttCommandTemplate, MqttData as MqttData, MqttValueTemplate as MqttValueTemplate, PayloadSentinel as PayloadSentinel, PublishPayloadType as PublishPayloadType, ReceiveMessage as ReceiveMessage, convert_outgoing_mqtt_payload as convert_outgoing_mqtt_payload
from .subscription import EntitySubscription as EntitySubscription, async_prepare_subscribe_topics as async_prepare_subscribe_topics, async_subscribe_topics as async_subscribe_topics, async_unsubscribe_topics as async_unsubscribe_topics
from .util import async_create_certificate_temp_files as async_create_certificate_temp_files, async_forward_entry_setup_and_setup_discovery as async_forward_entry_setup_and_setup_discovery, async_wait_for_mqtt_client as async_wait_for_mqtt_client, mqtt_config_entry_enabled as mqtt_config_entry_enabled, platforms_from_config as platforms_from_config, valid_publish_topic as valid_publish_topic, valid_qos_schema as valid_qos_schema, valid_subscribe_topic as valid_subscribe_topic
from collections.abc import Callable
from homeassistant.components import websocket_api
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import SERVICE_RELOAD as SERVICE_RELOAD
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.helpers.typing import ConfigType
from homeassistant.setup import SetupPhases as SetupPhases
from homeassistant.util.async_ import create_eager_task as create_eager_task
from typing import Any

__all__ = ['ATTR_PAYLOAD', 'ATTR_QOS', 'ATTR_RETAIN', 'ATTR_TOPIC', 'CONFIG_ENTRY_MINOR_VERSION', 'CONFIG_ENTRY_VERSION', 'CONF_BIRTH_MESSAGE', 'CONF_BROKER', 'CONF_CERTIFICATE', 'CONF_CLIENT_CERT', 'CONF_CLIENT_KEY', 'CONF_COMMAND_TOPIC', 'CONF_DISCOVERY_PREFIX', 'CONF_KEEPALIVE', 'CONF_QOS', 'CONF_STATE_TOPIC', 'CONF_TLS_INSECURE', 'CONF_TOPIC', 'CONF_TRANSPORT', 'CONF_WILL_MESSAGE', 'CONF_WS_HEADERS', 'CONF_WS_PATH', 'DATA_MQTT', 'DATA_MQTT_AVAILABLE', 'DEFAULT_DISCOVERY', 'DEFAULT_ENCODING', 'DEFAULT_PREFIX', 'DEFAULT_QOS', 'DEFAULT_RETAIN', 'DOMAIN', 'ENTITY_PLATFORMS', 'ENTRY_OPTION_FIELDS', 'MQTT', 'MQTT_BASE_SCHEMA', 'MQTT_CONNECTION_STATE', 'MQTT_RO_SCHEMA', 'MQTT_RW_SCHEMA', 'SERVICE_RELOAD', 'TEMPLATE_ERRORS', 'EntitySubscription', 'MqttCommandTemplate', 'MqttData', 'MqttValueTemplate', 'PayloadSentinel', 'PublishPayloadType', 'ReceiveMessage', 'SetupPhases', 'async_check_config_schema', 'async_create_certificate_temp_files', 'async_forward_entry_setup_and_setup_discovery', 'async_migrate_entry', 'async_on_subscribe_done', 'async_prepare_subscribe_topics', 'async_publish', 'async_remove_config_entry_device', 'async_subscribe', 'async_subscribe_connection_status', 'async_subscribe_topics', 'async_unsubscribe_topics', 'async_wait_for_mqtt_client', 'convert_outgoing_mqtt_payload', 'create_eager_task', 'is_connected', 'mqtt_config_entry_enabled', 'platforms_from_config', 'publish', 'subscribe', 'valid_publish_topic', 'valid_qos_schema', 'valid_subscribe_topic', 'websocket_mqtt_info', 'websocket_subscribe']

async def async_check_config_schema(hass: HomeAssistant, config_yaml: ConfigType) -> None: ...
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
@callback
def websocket_mqtt_info(hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]) -> None: ...
@websocket_api.async_response
async def websocket_subscribe(hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]) -> None: ...
type ConnectionStatusCallback = Callable[[bool], None]
@callback
def async_subscribe_connection_status(hass: HomeAssistant, connection_status_callback: ConnectionStatusCallback) -> Callable[[], None]: ...
def is_connected(hass: HomeAssistant) -> bool: ...
async def async_remove_config_entry_device(hass: HomeAssistant, config_entry: ConfigEntry, device_entry: DeviceEntry) -> bool: ...
