mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 17:27:10 +00:00
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:
parent
e019280d94
commit
d6f0c26e7f
@ -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(
|
||||
|
@ -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"]
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user