Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Traccar Server integration."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 
7 from aiohttp import CookieJar
8 from pytraccar import ApiClient
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import (
12  CONF_HOST,
13  CONF_PASSWORD,
14  CONF_PORT,
15  CONF_SSL,
16  CONF_USERNAME,
17  CONF_VERIFY_SSL,
18  Platform,
19 )
20 from homeassistant.core import HomeAssistant
21 from homeassistant.helpers.aiohttp_client import async_create_clientsession
22 from homeassistant.helpers.event import async_track_time_interval
23 
24 from .const import (
25  CONF_CUSTOM_ATTRIBUTES,
26  CONF_EVENTS,
27  CONF_MAX_ACCURACY,
28  CONF_SKIP_ACCURACY_FILTER_FOR,
29  DOMAIN,
30 )
31 from .coordinator import TraccarServerCoordinator
32 
33 PLATFORMS: list[Platform] = [
34  Platform.BINARY_SENSOR,
35  Platform.DEVICE_TRACKER,
36  Platform.SENSOR,
37 ]
38 
39 
40 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
41  """Set up Traccar Server from a config entry."""
42  client_session = async_create_clientsession(
43  hass,
44  cookie_jar=CookieJar(
45  unsafe=not entry.data[CONF_SSL] or not entry.data[CONF_VERIFY_SSL]
46  ),
47  )
48  coordinator = TraccarServerCoordinator(
49  hass=hass,
50  client=ApiClient(
51  client_session=client_session,
52  host=entry.data[CONF_HOST],
53  port=entry.data[CONF_PORT],
54  username=entry.data[CONF_USERNAME],
55  password=entry.data[CONF_PASSWORD],
56  ssl=entry.data[CONF_SSL],
57  verify_ssl=entry.data[CONF_VERIFY_SSL],
58  ),
59  events=entry.options.get(CONF_EVENTS, []),
60  max_accuracy=entry.options.get(CONF_MAX_ACCURACY, 0.0),
61  skip_accuracy_filter_for=entry.options.get(CONF_SKIP_ACCURACY_FILTER_FOR, []),
62  custom_attributes=entry.options.get(CONF_CUSTOM_ATTRIBUTES, []),
63  )
64 
65  await coordinator.async_config_entry_first_refresh()
66 
67  hass.data.setdefault(DOMAIN, {})
68  hass.data[DOMAIN][entry.entry_id] = coordinator
69 
70  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
71  entry.async_on_unload(entry.add_update_listener(async_reload_entry))
72  if entry.options.get(CONF_EVENTS):
73  entry.async_on_unload(
75  hass,
76  coordinator.import_events,
77  timedelta(seconds=30),
78  cancel_on_shutdown=True,
79  name="traccar_server_import_events",
80  )
81  )
82 
83  entry.async_create_background_task(
84  hass=hass,
85  target=coordinator.subscribe(),
86  name="Traccar Server subscription",
87  )
88 
89  return True
90 
91 
92 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
93  """Unload a config entry."""
94  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
95  hass.data[DOMAIN].pop(entry.entry_id)
96  return unload_ok
97 
98 
99 async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
100  """Handle an options update."""
101  await hass.config_entries.async_reload(entry.entry_id)
aiohttp.ClientSession async_create_clientsession()
Definition: coordinator.py:51
None async_reload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:99
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:40
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:92
CALLBACK_TYPE async_track_time_interval(HomeAssistant hass, Callable[[datetime], Coroutine[Any, Any, None]|None] action, timedelta interval, *str|None name=None, bool|None cancel_on_shutdown=None)
Definition: event.py:1679