72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
"""Support for Volvo On Call."""
|
|
|
|
from volvooncall import Connection
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import (
|
|
CONF_PASSWORD,
|
|
CONF_REGION,
|
|
CONF_UNIT_SYSTEM,
|
|
CONF_USERNAME,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
|
|
from .const import (
|
|
CONF_SCANDINAVIAN_MILES,
|
|
DOMAIN,
|
|
PLATFORMS,
|
|
UNIT_SYSTEM_METRIC,
|
|
UNIT_SYSTEM_SCANDINAVIAN_MILES,
|
|
)
|
|
from .coordinator import VolvoUpdateCoordinator
|
|
from .models import VolvoData
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Set up the Volvo On Call component from a ConfigEntry."""
|
|
|
|
# added CONF_UNIT_SYSTEM / deprecated CONF_SCANDINAVIAN_MILES in 2022.10 to support imperial units
|
|
if CONF_UNIT_SYSTEM not in entry.data:
|
|
new_conf = {**entry.data}
|
|
|
|
scandinavian_miles: bool = entry.data[CONF_SCANDINAVIAN_MILES]
|
|
|
|
new_conf[CONF_UNIT_SYSTEM] = (
|
|
UNIT_SYSTEM_SCANDINAVIAN_MILES if scandinavian_miles else UNIT_SYSTEM_METRIC
|
|
)
|
|
|
|
hass.config_entries.async_update_entry(entry, data=new_conf)
|
|
|
|
session = async_get_clientsession(hass)
|
|
|
|
connection = Connection(
|
|
session=session,
|
|
username=entry.data[CONF_USERNAME],
|
|
password=entry.data[CONF_PASSWORD],
|
|
service_url=None,
|
|
region=entry.data[CONF_REGION],
|
|
)
|
|
|
|
hass.data.setdefault(DOMAIN, {})
|
|
|
|
volvo_data = VolvoData(hass, connection, entry)
|
|
|
|
coordinator = VolvoUpdateCoordinator(hass, volvo_data)
|
|
|
|
await coordinator.async_config_entry_first_refresh()
|
|
|
|
hass.data[DOMAIN][entry.entry_id] = coordinator
|
|
|
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Unload a config entry."""
|
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
|
hass.data[DOMAIN].pop(entry.entry_id)
|
|
|
|
return unload_ok
|