Fire HASS events on SimpliSafe events

This commit is contained in:
Aaron Bach
2020-02-13 16:08:52 -07:00
parent 3018e8ff47
commit 92a1ad88d3

View File

@@ -1,6 +1,6 @@
"""Support for SimpliSafe alarm systems.""" """Support for SimpliSafe alarm systems."""
import asyncio import asyncio
from dataclasses import dataclass, field from dataclasses import InitVar, asdict, dataclass, field
from datetime import datetime from datetime import datetime
import logging import logging
from typing import Optional from typing import Optional
@@ -60,6 +60,8 @@ CONF_ACCOUNTS = "accounts"
DATA_LISTENER = "listener" DATA_LISTENER = "listener"
TOPIC_UPDATE = "simplisafe_update_data_{0}" TOPIC_UPDATE = "simplisafe_update_data_{0}"
EVENT_SIMPLISAFE_EVENT = "SIMPLISAFE_EVENT"
DEFAULT_SOCKET_MIN_RETRY = 15 DEFAULT_SOCKET_MIN_RETRY = 15
DEFAULT_WATCHDOG_SECONDS = 5 * 60 DEFAULT_WATCHDOG_SECONDS = 5 * 60
@@ -309,7 +311,7 @@ async def async_unload_entry(hass, entry):
class SimpliSafeWebsocketEvent: class SimpliSafeWebsocketEvent:
"""Define a representation of a parsed websocket event.""" """Define a representation of a parsed websocket event."""
event_data: dict event_data: InitVar[dict]
changed_by: Optional[str] = field(init=False) changed_by: Optional[str] = field(init=False)
event_type: Optional[str] = field(init=False) event_type: Optional[str] = field(init=False)
@@ -320,30 +322,28 @@ class SimpliSafeWebsocketEvent:
system_id: int = field(init=False) system_id: int = field(init=False)
timestamp: datetime = field(init=False) timestamp: datetime = field(init=False)
def __post_init__(self): def __post_init__(self, event_data):
"""Initialize.""" """Initialize."""
object.__setattr__(self, "changed_by", self.event_data["pinName"]) object.__setattr__(self, "changed_by", event_data["pinName"])
object.__setattr__( object.__setattr__(self, "event_type", get_event_type_from_payload(event_data))
self, "event_type", get_event_type_from_payload(self.event_data) object.__setattr__(self, "info", event_data["info"])
) object.__setattr__(self, "sensor_name", event_data["sensorName"])
object.__setattr__(self, "info", self.event_data["info"]) object.__setattr__(self, "sensor_serial", event_data["sensorSerial"])
object.__setattr__(self, "sensor_name", self.event_data["sensorName"])
object.__setattr__(self, "sensor_serial", self.event_data["sensorSerial"])
try: try:
object.__setattr__( object.__setattr__(
self, "sensor_type", EntityTypes(self.event_data["sensorType"]).name self, "sensor_type", EntityTypes(event_data["sensorType"]).name
) )
except ValueError: except ValueError:
_LOGGER.warning( _LOGGER.warning(
'Encountered unknown entity type: %s ("%s"). Please report it at' 'Encountered unknown entity type: %s ("%s"). Please report it at'
"https://github.com/home-assistant/home-assistant/issues.", "https://github.com/home-assistant/home-assistant/issues.",
self.event_data["sensorType"], event_data["sensorType"],
self.event_data["sensorName"], event_data["sensorName"],
) )
object.__setattr__(self, "sensor_type", None) object.__setattr__(self, "sensor_type", None)
object.__setattr__(self, "system_id", self.event_data["sid"]) object.__setattr__(self, "system_id", event_data["sid"])
object.__setattr__( object.__setattr__(
self, "timestamp", utc_from_timestamp(self.event_data["eventTimestamp"]) self, "timestamp", utc_from_timestamp(event_data["eventTimestamp"])
) )
@@ -406,6 +406,7 @@ class SimpliSafeWebsocket:
_LOGGER.debug("New websocket event: %s", event) _LOGGER.debug("New websocket event: %s", event)
self.last_events[data["sid"]] = event self.last_events[data["sid"]] = event
async_dispatcher_send(self._hass, TOPIC_UPDATE.format(data["sid"])) async_dispatcher_send(self._hass, TOPIC_UPDATE.format(data["sid"]))
self._hass.bus.async_fire(EVENT_SIMPLISAFE_EVENT, event_data=asdict(event))
_LOGGER.debug("Resetting websocket watchdog") _LOGGER.debug("Resetting websocket watchdog")
self._websocket_watchdog_listener() self._websocket_watchdog_listener()