1 """The Flipr integration."""
3 from collections
import Counter
4 from dataclasses
import dataclass
7 from flipr_api
import FliprAPIRestClient
15 from .const
import DOMAIN
16 from .coordinator
import FliprDataUpdateCoordinator, FliprHubDataUpdateCoordinator
18 PLATFORMS = [Platform.BINARY_SENSOR, Platform.SELECT, Platform.SENSOR, Platform.SWITCH]
20 _LOGGER = logging.getLogger(__name__)
25 """The Flipr data class."""
27 flipr_coordinators: list[FliprDataUpdateCoordinator]
28 hub_coordinators: list[FliprHubDataUpdateCoordinator]
31 type FliprConfigEntry = ConfigEntry[FliprData]
35 """Set up flipr from a config entry."""
42 username = config[CONF_EMAIL]
43 password = config[CONF_PASSWORD]
45 _LOGGER.debug(
"Initializing Flipr client %s", username)
46 client = FliprAPIRestClient(username, password)
47 ids = await hass.async_add_executor_job(client.search_all_ids)
49 _LOGGER.debug(
"List of devices ids : %s", ids)
51 flipr_coordinators = []
52 for flipr_id
in ids[
"flipr"]:
54 await flipr_coordinator.async_config_entry_first_refresh()
55 flipr_coordinators.append(flipr_coordinator)
58 for hub_id
in ids[
"hub"]:
60 await hub_coordinator.async_config_entry_first_refresh()
61 hub_coordinators.append(hub_coordinator)
63 entry.runtime_data =
FliprData(flipr_coordinators, hub_coordinators)
65 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
71 """Unload a config entry."""
73 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
77 """Detect invalid old configuration and raise error if found."""
79 def find_duplicate_entries(entries):
80 values = [e.data[
"email"]
for e
in entries]
81 _LOGGER.debug(
"Detecting duplicates in values : %s", values)
82 return any(count > 1
for count
in Counter(values).values())
84 entries = hass.config_entries.async_entries(DOMAIN)
86 if find_duplicate_entries(entries):
87 ir.async_create_issue(
91 breaks_in_ha_version=
"2025.4.0",
93 severity=ir.IssueSeverity.ERROR,
94 translation_key=
"duplicate_config",
98 "Duplicate entries found for flipr with the same user email. Please remove one of it manually. Multiple fliprs will be automatically detected after restart."
103 """Migrate config entry."""
104 _LOGGER.debug(
"Migration of flipr config from version %s", entry.version)
106 if entry.version == 1:
111 login = entry.data[CONF_EMAIL]
113 hass.config_entries.async_update_entry(entry, version=2, unique_id=login)
115 _LOGGER.debug(
"Migration of flipr config to version 2 successful")
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, FliprConfigEntry entry)
bool async_migrate_entry(HomeAssistant hass, ConfigEntry entry)
def detect_invalid_old_configuration(HomeAssistant hass, ConfigEntry entry)