Fire HASS events on SimpliSafe events (#31811)

* Fire HASS events on SimpliSafe events

* Bump simplisafe-ptyhon to 7.3.0

* Update reqirements

* Updates

* Revert "Updates"

This reverts commit 55818894176fe27938c79685ab87100d1bc120ff.

* Restrict which events get fired

* Code review comments
This commit is contained in:
Aaron Bach 2020-02-14 11:24:35 -07:00 committed by GitHub
parent e019280d94
commit d6f0c26e7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 18 deletions

View File

@ -1,6 +1,6 @@
"""Support for SimpliSafe alarm systems."""
import asyncio
from dataclasses import dataclass, field
from dataclasses import InitVar, asdict, dataclass, field
from datetime import datetime
import logging
from typing import Optional
@ -9,8 +9,12 @@ from simplipy import API
from simplipy.entity import EntityTypes
from simplipy.errors import InvalidCredentialsError, SimplipyError, WebsocketError
from simplipy.websocket import (
EVENT_CAMERA_MOTION_DETECTED,
EVENT_DOORBELL_DETECTED,
EVENT_ENTRY_DETECTED,
EVENT_LOCK_LOCKED,
EVENT_LOCK_UNLOCKED,
EVENT_MOTION_DETECTED,
get_event_type_from_payload,
)
import voluptuous as vol
@ -60,10 +64,18 @@ CONF_ACCOUNTS = "accounts"
DATA_LISTENER = "listener"
TOPIC_UPDATE = "simplisafe_update_data_{0}"
EVENT_SIMPLISAFE_EVENT = "SIMPLISAFE_EVENT"
DEFAULT_SOCKET_MIN_RETRY = 15
DEFAULT_WATCHDOG_SECONDS = 5 * 60
WEBSOCKET_EVENTS_REQUIRING_SERIAL = [EVENT_LOCK_LOCKED, EVENT_LOCK_UNLOCKED]
WEBSOCKET_EVENTS_TO_TRIGGER_HASS_EVENT = [
EVENT_CAMERA_MOTION_DETECTED,
EVENT_DOORBELL_DETECTED,
EVENT_ENTRY_DETECTED,
EVENT_MOTION_DETECTED,
]
ATTR_LAST_EVENT_INFO = "last_event_info"
ATTR_LAST_EVENT_SENSOR_NAME = "last_event_sensor_name"
@ -309,7 +321,7 @@ async def async_unload_entry(hass, entry):
class SimpliSafeWebsocketEvent:
"""Define a representation of a parsed websocket event."""
event_data: dict
event_data: InitVar[dict]
changed_by: Optional[str] = field(init=False)
event_type: Optional[str] = field(init=False)
@ -320,30 +332,28 @@ class SimpliSafeWebsocketEvent:
system_id: int = field(init=False)
timestamp: datetime = field(init=False)
def __post_init__(self):
def __post_init__(self, event_data):
"""Initialize."""
object.__setattr__(self, "changed_by", self.event_data["pinName"])
object.__setattr__(
self, "event_type", get_event_type_from_payload(self.event_data)
)
object.__setattr__(self, "info", self.event_data["info"])
object.__setattr__(self, "sensor_name", self.event_data["sensorName"])
object.__setattr__(self, "sensor_serial", self.event_data["sensorSerial"])
object.__setattr__(self, "changed_by", event_data["pinName"])
object.__setattr__(self, "event_type", get_event_type_from_payload(event_data))
object.__setattr__(self, "info", event_data["info"])
object.__setattr__(self, "sensor_name", event_data["sensorName"])
object.__setattr__(self, "sensor_serial", event_data["sensorSerial"])
try:
object.__setattr__(
self, "sensor_type", EntityTypes(self.event_data["sensorType"]).name
self, "sensor_type", EntityTypes(event_data["sensorType"]).name
)
except ValueError:
_LOGGER.warning(
'Encountered unknown entity type: %s ("%s"). Please report it at'
"https://github.com/home-assistant/home-assistant/issues.",
self.event_data["sensorType"],
self.event_data["sensorName"],
event_data["sensorType"],
event_data["sensorName"],
)
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__(
self, "timestamp", utc_from_timestamp(self.event_data["eventTimestamp"])
self, "timestamp", utc_from_timestamp(event_data["eventTimestamp"])
)
@ -407,6 +417,9 @@ class SimpliSafeWebsocket:
self.last_events[data["sid"]] = event
async_dispatcher_send(self._hass, TOPIC_UPDATE.format(data["sid"]))
if event.event_type in WEBSOCKET_EVENTS_TO_TRIGGER_HASS_EVENT:
self._hass.bus.async_fire(EVENT_SIMPLISAFE_EVENT, event_data=asdict(event))
_LOGGER.debug("Resetting websocket watchdog")
self._websocket_watchdog_listener()
self._websocket_watchdog_listener = async_call_later(

View File

@ -3,7 +3,7 @@
"name": "SimpliSafe",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/simplisafe",
"requirements": ["simplisafe-python==7.1.0"],
"requirements": ["simplisafe-python==7.3.0"],
"dependencies": [],
"codeowners": ["@bachya"]
}

View File

@ -1829,7 +1829,7 @@ simplehound==0.3
simplepush==1.1.4
# homeassistant.components.simplisafe
simplisafe-python==7.1.0
simplisafe-python==7.3.0
# homeassistant.components.sisyphus
sisyphus-control==2.2.1

View File

@ -622,7 +622,7 @@ sentry-sdk==0.13.5
simplehound==0.3
# homeassistant.components.simplisafe
simplisafe-python==7.1.0
simplisafe-python==7.3.0
# homeassistant.components.sleepiq
sleepyq==0.7