1 """Geolocation support for GeoNet NZ Quakes Feeds."""
3 from __future__
import annotations
5 from collections.abc
import Callable
9 from aio_geojson_geonetnz_quakes.feed_entry
import GeonetnzQuakesFeedEntry
21 from .
import GeonetnzQuakesFeedEntityManager
22 from .const
import DOMAIN, FEED
24 _LOGGER = logging.getLogger(__name__)
27 ATTR_EXTERNAL_ID =
"external_id"
28 ATTR_LOCALITY =
"locality"
29 ATTR_MAGNITUDE =
"magnitude"
31 ATTR_PUBLICATION_DATE =
"publication_date"
32 ATTR_QUALITY =
"quality"
37 SOURCE =
"geonetnz_quakes"
41 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
43 """Set up the GeoNet NZ Quakes Feed platform."""
44 manager: GeonetnzQuakesFeedEntityManager = hass.data[DOMAIN][FEED][entry.entry_id]
47 def async_add_geolocation(
48 feed_manager: GeonetnzQuakesFeedEntityManager,
52 """Add geolocation entity from feed."""
54 _LOGGER.debug(
"Adding geolocation %s", new_entity)
57 manager.listeners.append(
59 hass, manager.async_event_new_entity(), async_add_geolocation
64 hass.async_create_task(manager.async_update())
65 _LOGGER.debug(
"Geolocation setup done")
69 """Represents an external event with GeoNet NZ Quakes feed data."""
71 _attr_icon =
"mdi:pulse"
72 _attr_should_poll =
False
77 feed_manager: GeonetnzQuakesFeedEntityManager,
81 """Initialize entity with data from feed entry."""
96 """Call when entity is added to hass."""
97 if self.
hasshass.config.units
is US_CUSTOMARY_SYSTEM:
101 f
"geonetnz_quakes_delete_{self._external_id}",
106 f
"geonetnz_quakes_update_{self._external_id}",
111 """Call when entity will be removed from hass."""
115 entity_registry = er.async_get(self.
hasshass)
116 if self.
entity_identity_id
in entity_registry.entities:
117 entity_registry.async_remove(self.
entity_identity_id)
121 """Remove this entity."""
122 self.
hasshass.async_create_task(self.
async_removeasync_remove(force_remove=
True))
126 """Call update method."""
130 """Update this entity from the data held in the feed manager."""
131 _LOGGER.debug(
"Updating %s", self.
_external_id_external_id)
137 """Update the internal state from the provided feed entry."""
140 if self.
hasshass.config.units
is US_CUSTOMARY_SYSTEM:
142 feed_entry.distance_to_home, UnitOfLength.KILOMETERS, UnitOfLength.MILES
149 self.
_depth_depth = feed_entry.depth
150 self.
_locality_locality = feed_entry.locality
151 self.
_magnitude_magnitude = feed_entry.magnitude
152 self.
_mmi_mmi = feed_entry.mmi
153 self.
_quality_quality = feed_entry.quality
154 self.
_time_time = feed_entry.time
158 """Return the device state attributes."""
163 (ATTR_DEPTH, self.
_depth_depth),
164 (ATTR_LOCALITY, self.
_locality_locality),
166 (ATTR_MMI, self.
_mmi_mmi),
167 (ATTR_QUALITY, self.
_quality_quality),
168 (ATTR_TIME, self.
_time_time),
170 if value
or isinstance(value, bool)
None async_added_to_hass(self)
None _update_callback(self)
None _delete_callback(self)
None _update_from_feed(self, GeonetnzQuakesFeedEntry feed_entry)
_attr_unit_of_measurement
None async_will_remove_from_hass(self)
dict[str, Any] extra_state_attributes(self)
None __init__(self, GeonetnzQuakesFeedEntityManager feed_manager, str integration_id, str external_id)
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)