1 """Support for generic GeoJSON events."""
3 from __future__
import annotations
5 from collections.abc
import Callable
9 from aio_geojson_generic_client.feed_entry
import GenericFeedEntry
18 from .
import GeoJsonFeedEntityManager
27 _LOGGER = logging.getLogger(__name__)
31 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
33 """Set up the GeoJSON Events platform."""
34 manager: GeoJsonFeedEntityManager = hass.data[DOMAIN][entry.entry_id]
37 def async_add_geolocation(
38 feed_manager: GeoJsonFeedEntityManager,
41 """Add geolocation entity from feed."""
43 _LOGGER.debug(
"Adding geolocation %s", new_entity)
46 manager.listeners.append(
51 entry.async_create_task(hass, manager.async_update())
52 _LOGGER.debug(
"Geolocation setup done")
56 """Represents an external event with GeoJSON data."""
58 _attr_should_poll =
False
60 _attr_unit_of_measurement = UnitOfLength.KILOMETERS
64 feed_manager: GeoJsonFeedEntityManager,
67 """Initialize entity with data from feed entry."""
75 """Call when entity is added to hass."""
78 SIGNAL_DELETE_ENTITY.format(self.
_external_id_external_id),
83 SIGNAL_UPDATE_ENTITY.format(self.
_external_id_external_id),
89 """Remove this entity."""
92 self.
hasshass.async_create_task(self.
async_removeasync_remove(force_remove=
True))
96 """Call update method."""
100 """Update this entity from the data held in the feed manager."""
101 _LOGGER.debug(
"Updating %s", self.
_external_id_external_id)
107 """Update the internal state from the provided feed entry."""
108 if feed_entry.properties
and "name" in feed_entry.properties:
119 """Return the device state attributes."""
122 return {ATTR_EXTERNAL_ID: self.
_external_id_external_id}
None __init__(self, GeoJsonFeedEntityManager feed_manager, str external_id)
None _update_callback(self)
None _delete_callback(self)
None async_added_to_hass(self)
None _update_from_feed(self, GenericFeedEntry feed_entry)
dict[str, Any] extra_state_attributes(self)
None async_schedule_update_ha_state(self, bool force_refresh=False)
None async_remove(self, *bool force_remove=False)
config_entries.ConfigEntry|None get_entry(HomeAssistant hass, websocket_api.ActiveConnection connection, str entry_id, int msg_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)