1 """Support for Traccar Client."""
3 from http
import HTTPStatus
5 from aiohttp
import web
6 import voluptuous
as vol
28 PLATFORMS = [Platform.DEVICE_TRACKER]
31 TRACKER_UPDATE = f
"{DOMAIN}_tracker_update"
34 DEFAULT_ACCURACY = 200
38 def _id(value: str) -> str:
39 """Coerce id by removing '-'."""
40 return value.replace(
"-",
"")
43 WEBHOOK_SCHEMA = vol.Schema(
45 vol.Required(ATTR_ID): vol.All(cv.string, _id),
46 vol.Required(ATTR_LATITUDE): cv.latitude,
47 vol.Required(ATTR_LONGITUDE): cv.longitude,
48 vol.Optional(ATTR_ACCURACY, default=DEFAULT_ACCURACY): vol.Coerce(float),
49 vol.Optional(ATTR_ALTITUDE): vol.Coerce(float),
50 vol.Optional(ATTR_BATTERY, default=DEFAULT_BATTERY): vol.Coerce(float),
51 vol.Optional(ATTR_BEARING): vol.Coerce(float),
52 vol.Optional(ATTR_SPEED): vol.Coerce(float),
53 vol.Optional(ATTR_TIMESTAMP): vol.Coerce(int),
55 extra=vol.REMOVE_EXTRA,
60 hass: HomeAssistant, webhook_id: str, request: web.Request
62 """Handle incoming webhook with Traccar Client request."""
65 except vol.MultipleInvalid
as error:
67 text=error.error_message, status=HTTPStatus.UNPROCESSABLE_ENTITY
71 ATTR_ALTITUDE: data.get(ATTR_ALTITUDE),
72 ATTR_BEARING: data.get(ATTR_BEARING),
73 ATTR_SPEED: data.get(ATTR_SPEED),
76 device = data[ATTR_ID]
89 return web.Response(text=f
"Setting location for {device}")
93 """Configure based on config entry."""
94 hass.data.setdefault(DOMAIN, {
"devices": set(),
"unsub_device_tracker": {}})
95 webhook.async_register(
96 hass, DOMAIN,
"Traccar", entry.data[CONF_WEBHOOK_ID], handle_webhook
99 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
104 """Unload a config entry."""
105 webhook.async_unregister(hass, entry.data[CONF_WEBHOOK_ID])
106 hass.data[DOMAIN][
"unsub_device_tracker"].pop(entry.entry_id)()
107 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
110 async_remove_entry = config_entry_flow.webhook_async_remove_entry
web.Response handle_webhook(HomeAssistant hass, str webhook_id, web.Request request)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)