1 """The StarLine component."""
3 from __future__
import annotations
5 import voluptuous
as vol
13 from .account
import StarlineAccount
15 CONF_SCAN_OBD_INTERVAL,
16 DEFAULT_SCAN_INTERVAL,
17 DEFAULT_SCAN_OBD_INTERVAL,
20 SERVICE_SET_SCAN_INTERVAL,
21 SERVICE_SET_SCAN_OBD_INTERVAL,
27 """Set up the StarLine device from a config entry."""
29 await account.update()
30 await account.update_obd()
31 if not account.api.available:
32 raise ConfigEntryNotReady
34 if DOMAIN
not in hass.data:
35 hass.data[DOMAIN] = {}
36 hass.data[DOMAIN][entry.entry_id] = account
38 device_registry = dr.async_get(hass)
39 for device
in account.api.devices.values():
40 device_registry.async_get_or_create(
41 config_entry_id=entry.entry_id, **account.device_info(device)
44 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
46 async
def async_set_scan_interval(call: ServiceCall) ->
None:
47 """Set scan interval."""
48 options =
dict(entry.options)
49 options[CONF_SCAN_INTERVAL] = call.data[CONF_SCAN_INTERVAL]
50 hass.config_entries.async_update_entry(entry=entry, options=options)
52 async
def async_set_scan_obd_interval(call: ServiceCall) ->
None:
53 """Set OBD info scan interval."""
54 options =
dict(entry.options)
55 options[CONF_SCAN_OBD_INTERVAL] = call.data[CONF_SCAN_INTERVAL]
56 hass.config_entries.async_update_entry(entry=entry, options=options)
58 async
def async_update(call: ServiceCall |
None =
None) ->
None:
59 """Update all data."""
60 await account.update()
61 await account.update_obd()
63 hass.services.async_register(DOMAIN, SERVICE_UPDATE_STATE, async_update)
64 hass.services.async_register(
66 SERVICE_SET_SCAN_INTERVAL,
67 async_set_scan_interval,
70 vol.Required(CONF_SCAN_INTERVAL): vol.All(
71 vol.Coerce(int), vol.Range(min=10)
76 hass.services.async_register(
78 SERVICE_SET_SCAN_OBD_INTERVAL,
79 async_set_scan_obd_interval,
82 vol.Required(CONF_SCAN_INTERVAL): vol.All(
83 vol.Coerce(int), vol.Range(min=180)
89 entry.async_on_unload(entry.add_update_listener(async_options_updated))
96 """Unload a config entry."""
97 unload_ok = await hass.config_entries.async_unload_platforms(
98 config_entry, PLATFORMS
101 account: StarlineAccount = hass.data[DOMAIN][config_entry.entry_id]
107 """Triggered by config entry options updates."""
108 account: StarlineAccount = hass.data[DOMAIN][config_entry.entry_id]
109 scan_interval = config_entry.options.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
110 scan_obd_interval = config_entry.options.get(
111 CONF_SCAN_OBD_INTERVAL, DEFAULT_SCAN_OBD_INTERVAL
113 account.set_update_interval(scan_interval)
114 account.set_update_obd_interval(scan_obd_interval)
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
None async_options_updated(HomeAssistant hass, ConfigEntry config_entry)