Source code for nwp500.mqtt.client

"""
MQTT Client for Navien Smart Control.

This module provides an MQTT client for real-time communication with Navien
devices using AWS IoT Core. It handles connection, subscriptions, and message
publishing for device control and monitoring.

The client uses WebSocket connections with AWS credentials obtained from
the authentication flow.
"""

from __future__ import annotations

import asyncio
import json
import logging
import uuid
import warnings
from collections.abc import Callable, Sequence
from typing import TYPE_CHECKING, Any, cast

from awscrt import mqtt
from awscrt.exceptions import AwsCrtError

from ..auth import NavienAuthClient
from ..events import EventEmitter
from ..exceptions import (
    AuthenticationError,
    MqttConnectionError,
    MqttCredentialsError,
    MqttNotConnectedError,
    MqttPublishError,
    TokenRefreshError,
)
from ..mqtt_events import (
    ConnectionInterruptedEvent,
    ConnectionResumedEvent,
)
from ..unit_system import UnitSystemType
from .command_queue import MqttCommandQueue
from .connection import MqttConnection
from .control import MqttDeviceController
from .diagnostics import MqttDiagnosticsCollector
from .periodic import MqttPeriodicRequestManager
from .reconnection import MqttReconnectionHandler
from .subscriptions import MqttSubscriptionManager
from .utils import (
    MqttConnectionConfig,
    PeriodicRequestType,
)

if TYPE_CHECKING:
    from ..models import (
        Device,
        DeviceFeature,
        DeviceStatus,
        EnergyUsageResponse,
        OtaCommitPayload,
        RecirculationSchedule,
        ReservationSchedule,
        TOUReservationSchedule,
        WeeklyReservationSchedule,
    )

__author__ = "Emmanuel Levijarvi"
__copyright__ = "Emmanuel Levijarvi"
__license__ = "MIT"

_logger = logging.getLogger(__name__)