1 """Support for EQ3 devices."""
5 from typing
import TYPE_CHECKING
7 from eq3btsmart
import Thermostat
8 from eq3btsmart.exceptions
import Eq3Exception
9 from eq3btsmart.thermostat_config
import ThermostatConfig
18 from .const
import SIGNAL_THERMOSTAT_CONNECTED, SIGNAL_THERMOSTAT_DISCONNECTED
19 from .models
import Eq3Config, Eq3ConfigEntryData
22 Platform.BINARY_SENSOR,
29 _LOGGER = logging.getLogger(__name__)
32 type Eq3ConfigEntry = ConfigEntry[Eq3ConfigEntryData]
36 """Handle config entry setup."""
38 mac_address: str |
None = entry.unique_id
41 assert mac_address
is not None
44 mac_address=mac_address,
47 device = bluetooth.async_ble_device_from_address(
48 hass, mac_address.upper(), connectable=
True
53 f
"[{eq3_config.mac_address}] Device could not be found"
56 thermostat = Thermostat(
57 thermostat_config=ThermostatConfig(
58 mac_address=mac_address,
64 eq3_config=eq3_config, thermostat=thermostat
66 entry.async_on_unload(entry.add_update_listener(update_listener))
67 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
68 entry.async_create_background_task(
76 """Handle config entry unload."""
78 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
79 await entry.runtime_data.thermostat.async_disconnect()
85 """Handle config entry update."""
87 await hass.config_entries.async_reload(entry.entry_id)
91 """Run the thermostat."""
93 thermostat = entry.runtime_data.thermostat
94 mac_address = entry.runtime_data.eq3_config.mac_address
95 scan_interval = entry.runtime_data.eq3_config.scan_interval
101 await thermostat.async_get_status()
102 except Eq3Exception
as e:
103 if not thermostat.is_connected:
105 "[%s] eQ-3 device disconnected",
110 f
"{SIGNAL_THERMOSTAT_DISCONNECTED}_{mac_address}",
116 "[%s] Error updating eQ-3 device: %s",
121 await asyncio.sleep(scan_interval)
125 hass: HomeAssistant, entry: Eq3ConfigEntry
127 """Reconnect the thermostat."""
129 thermostat = entry.runtime_data.thermostat
130 mac_address = entry.runtime_data.eq3_config.mac_address
131 scan_interval = entry.runtime_data.eq3_config.scan_interval
135 await thermostat.async_connect()
137 await asyncio.sleep(scan_interval)
141 "[%s] eQ-3 device connected",
147 f
"{SIGNAL_THERMOSTAT_CONNECTED}_{mac_address}",
None _async_reconnect_thermostat(HomeAssistant hass, Eq3ConfigEntry entry)
None _async_run_thermostat(HomeAssistant hass, Eq3ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, Eq3ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, Eq3ConfigEntry entry)
None update_listener(HomeAssistant hass, Eq3ConfigEntry entry)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)