1 """The GeoNet NZ Quakes integration."""
3 from datetime
import timedelta
6 from aio_geojson_geonetnz_quakes
import GeonetnzQuakesFeedManager
7 import voluptuous
as vol
26 CONF_MINIMUM_MAGNITUDE,
28 DEFAULT_FILTER_TIME_INTERVAL,
29 DEFAULT_MINIMUM_MAGNITUDE,
32 DEFAULT_SCAN_INTERVAL,
38 _LOGGER = logging.getLogger(__name__)
40 CONFIG_SCHEMA = vol.Schema(
44 vol.Inclusive(CONF_LATITUDE,
"coordinates"): cv.latitude,
45 vol.Inclusive(CONF_LONGITUDE,
"coordinates"): cv.longitude,
46 vol.Optional(CONF_MMI, default=DEFAULT_MMI): vol.All(
47 vol.Coerce(int), vol.Range(min=-1, max=8)
49 vol.Optional(CONF_RADIUS, default=DEFAULT_RADIUS): vol.Coerce(float),
51 CONF_MINIMUM_MAGNITUDE, default=DEFAULT_MINIMUM_MAGNITUDE
54 CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL
59 extra=vol.ALLOW_EXTRA,
63 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
64 """Set up the GeoNet NZ Quakes component."""
65 if DOMAIN
not in config:
69 latitude = conf.get(CONF_LATITUDE, hass.config.latitude)
70 longitude = conf.get(CONF_LONGITUDE, hass.config.longitude)
72 scan_interval = conf[CONF_SCAN_INTERVAL]
74 hass.async_create_task(
75 hass.config_entries.flow.async_init(
77 context={
"source": SOURCE_IMPORT},
79 CONF_LATITUDE: latitude,
80 CONF_LONGITUDE: longitude,
81 CONF_RADIUS: conf[CONF_RADIUS],
82 CONF_MINIMUM_MAGNITUDE: conf[CONF_MINIMUM_MAGNITUDE],
84 CONF_SCAN_INTERVAL: scan_interval,
93 """Set up the GeoNet NZ Quakes component as config entry."""
94 hass.data.setdefault(DOMAIN, {})
95 feeds = hass.data[DOMAIN].setdefault(FEED, {})
97 radius = config_entry.data[CONF_RADIUS]
98 if hass.config.units
is US_CUSTOMARY_SYSTEM:
99 radius = DistanceConverter.convert(
100 radius, UnitOfLength.MILES, UnitOfLength.KILOMETERS
104 feeds[config_entry.entry_id] = manager
105 _LOGGER.debug(
"Feed entity manager added for %s", config_entry.entry_id)
106 await manager.async_init()
111 """Unload an GeoNet NZ Quakes component config entry."""
112 manager = hass.data[DOMAIN][FEED].pop(entry.entry_id)
113 await manager.async_stop()
114 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
118 """Feed Entity Manager for GeoNet NZ Quakes feed."""
120 def __init__(self, hass, config_entry, radius_in_km):
121 """Initialize the Feed Entity Manager."""
125 config_entry.data[CONF_LATITUDE],
126 config_entry.data[CONF_LONGITUDE],
128 websession = aiohttp_client.async_get_clientsession(hass)
135 mmi=config_entry.data[CONF_MMI],
136 filter_radius=radius_in_km,
137 filter_minimum_magnitude=config_entry.data[CONF_MINIMUM_MAGNITUDE],
138 filter_time=DEFAULT_FILTER_TIME_INTERVAL,
148 """Schedule initial and regular updates based on configured time interval."""
150 await self.
_hass_hass.config_entries.async_forward_entry_setups(
154 async
def update(event_time):
163 _LOGGER.debug(
"Feed entity manager initialized")
168 _LOGGER.debug(
"Feed entity manager updated")
171 """Stop this feed entity manager from refreshing."""
172 for unsub_dispatcher
in self.
listenerslisteners:
177 _LOGGER.debug(
"Feed entity manager stopped")
181 """Return manager specific event to signal new entity."""
182 return f
"geonetnz_quakes_new_geolocation_{self._config_entry_id}"
185 """Get feed entry by external id."""
186 return self.
_feed_manager_feed_manager.feed_entries.get(external_id)
189 """Return latest status update info received."""
193 """Generate new entity."""
211 """Propagate status update."""
212 _LOGGER.debug(
"Status update received: %s", status_info)
215 self.
_hass_hass, f
"geonetnz_quakes_status_{self._config_entry_id}"
def _update_entity(self, external_id)
_track_time_remove_callback
def _remove_entity(self, external_id)
def __init__(self, hass, config_entry, radius_in_km)
def async_event_new_entity(self)
def _generate_entity(self, external_id)
def _status_update(self, status_info)
def get_entry(self, external_id)
bool async_setup_entry(HomeAssistant hass, ConfigEntry config_entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup(HomeAssistant hass, ConfigType config)
IssData update(pyiss.ISS iss)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)
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)