1 """Support for Toon van Eneco devices."""
3 import voluptuous
as vol
10 EVENT_HOMEASSISTANT_STARTED,
17 async_get_config_entry_implementation,
21 from .const
import CONF_AGREEMENT_ID, CONF_MIGRATE, DEFAULT_SCAN_INTERVAL, DOMAIN
22 from .coordinator
import ToonDataUpdateCoordinator
23 from .oauth2
import register_oauth2_implementations
26 Platform.BINARY_SENSOR,
33 CONFIG_SCHEMA = vol.Schema(
36 cv.deprecated(CONF_SCAN_INTERVAL),
39 vol.Required(CONF_CLIENT_ID): cv.string,
40 vol.Required(CONF_CLIENT_SECRET): cv.string,
42 CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL
43 ): cv.positive_time_period,
48 extra=vol.ALLOW_EXTRA,
52 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
53 """Set up the Toon components."""
54 if DOMAIN
not in config:
58 hass, config[DOMAIN][CONF_CLIENT_ID], config[DOMAIN][CONF_CLIENT_SECRET]
61 hass.async_create_task(
62 hass.config_entries.flow.async_init(DOMAIN, context={
"source": SOURCE_IMPORT})
69 """Handle migration of a previous version config entry."""
70 if entry.version == 1:
75 hass.async_create_task(
76 hass.config_entries.flow.async_init(
78 context={
"source": SOURCE_IMPORT},
79 data={CONF_MIGRATE: entry.entry_id},
88 """Set up Toon from a config entry."""
93 await coordinator.toon.activate_agreement(
94 agreement_id=entry.data[CONF_AGREEMENT_ID]
96 await coordinator.async_config_entry_first_refresh()
98 hass.data.setdefault(DOMAIN, {})
99 hass.data[DOMAIN][entry.entry_id] = coordinator
102 device_registry = dr.async_get(hass)
103 device_registry.async_get_or_create(
104 config_entry_id=entry.entry_id,
108 coordinator.data.agreement.agreement_id,
112 manufacturer=
"Eneco",
113 name=
"Meter Adapter",
114 via_device=(DOMAIN, coordinator.data.agreement.agreement_id),
118 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
122 if hass.state
is CoreState.running:
123 await coordinator.register_webhook()
125 hass.bus.async_listen_once(
126 EVENT_HOMEASSISTANT_STARTED, coordinator.register_webhook
133 """Unload Toon config entry."""
136 await hass.data[DOMAIN][entry.entry_id].unregister_webhook()
139 unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
143 del hass.data[DOMAIN][entry.entry_id]
None register_oauth2_implementations(HomeAssistant hass, str client_id, str client_secret)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_migrate_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup(HomeAssistant hass, ConfigType config)
AbstractOAuth2Implementation async_get_config_entry_implementation(HomeAssistant hass, config_entries.ConfigEntry config_entry)