mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 18:27:09 +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."""
|
"""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
|
||||||
@ -9,8 +9,12 @@ from simplipy import API
|
|||||||
from simplipy.entity import EntityTypes
|
from simplipy.entity import EntityTypes
|
||||||
from simplipy.errors import InvalidCredentialsError, SimplipyError, WebsocketError
|
from simplipy.errors import InvalidCredentialsError, SimplipyError, WebsocketError
|
||||||
from simplipy.websocket import (
|
from simplipy.websocket import (
|
||||||
|
EVENT_CAMERA_MOTION_DETECTED,
|
||||||
|
EVENT_DOORBELL_DETECTED,
|
||||||
|
EVENT_ENTRY_DETECTED,
|
||||||
EVENT_LOCK_LOCKED,
|
EVENT_LOCK_LOCKED,
|
||||||
EVENT_LOCK_UNLOCKED,
|
EVENT_LOCK_UNLOCKED,
|
||||||
|
EVENT_MOTION_DETECTED,
|
||||||
get_event_type_from_payload,
|
get_event_type_from_payload,
|
||||||
)
|
)
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
@ -60,10 +64,18 @@ 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
|
||||||
|
|
||||||
WEBSOCKET_EVENTS_REQUIRING_SERIAL = [EVENT_LOCK_LOCKED, EVENT_LOCK_UNLOCKED]
|
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_INFO = "last_event_info"
|
||||||
ATTR_LAST_EVENT_SENSOR_NAME = "last_event_sensor_name"
|
ATTR_LAST_EVENT_SENSOR_NAME = "last_event_sensor_name"
|
||||||
@ -309,7 +321,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 +332,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"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -407,6 +417,9 @@ class SimpliSafeWebsocket:
|
|||||||
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"]))
|
||||||
|
|
||||||
|
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")
|
_LOGGER.debug("Resetting websocket watchdog")
|
||||||
self._websocket_watchdog_listener()
|
self._websocket_watchdog_listener()
|
||||||
self._websocket_watchdog_listener = async_call_later(
|
self._websocket_watchdog_listener = async_call_later(
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"name": "SimpliSafe",
|
"name": "SimpliSafe",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/simplisafe",
|
"documentation": "https://www.home-assistant.io/integrations/simplisafe",
|
||||||
"requirements": ["simplisafe-python==7.1.0"],
|
"requirements": ["simplisafe-python==7.3.0"],
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"codeowners": ["@bachya"]
|
"codeowners": ["@bachya"]
|
||||||
}
|
}
|
||||||
|
@ -1829,7 +1829,7 @@ simplehound==0.3
|
|||||||
simplepush==1.1.4
|
simplepush==1.1.4
|
||||||
|
|
||||||
# homeassistant.components.simplisafe
|
# homeassistant.components.simplisafe
|
||||||
simplisafe-python==7.1.0
|
simplisafe-python==7.3.0
|
||||||
|
|
||||||
# homeassistant.components.sisyphus
|
# homeassistant.components.sisyphus
|
||||||
sisyphus-control==2.2.1
|
sisyphus-control==2.2.1
|
||||||
|
@ -622,7 +622,7 @@ sentry-sdk==0.13.5
|
|||||||
simplehound==0.3
|
simplehound==0.3
|
||||||
|
|
||||||
# homeassistant.components.simplisafe
|
# homeassistant.components.simplisafe
|
||||||
simplisafe-python==7.1.0
|
simplisafe-python==7.3.0
|
||||||
|
|
||||||
# homeassistant.components.sleepiq
|
# homeassistant.components.sleepiq
|
||||||
sleepyq==0.7
|
sleepyq==0.7
|
||||||
|
Loading…
x
Reference in New Issue
Block a user