1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 17:49:37 +01:00

Migrate Z-Wave event entity to new discovery schema (#156320)

This commit is contained in:
TheJulianJES
2025-11-13 07:22:37 +01:00
committed by GitHub
parent f55c36d42d
commit 3cb414511b
3 changed files with 77 additions and 27 deletions
@@ -66,6 +66,7 @@ from .discovery_data_template import (
NumericSensorDataTemplate,
)
from .entity import NewZwaveDiscoveryInfo
from .event import DISCOVERY_SCHEMAS as EVENT_SCHEMAS
from .models import (
FirmwareVersionRange,
NewZWaveDiscoverySchema,
@@ -77,6 +78,7 @@ from .models import (
NEW_DISCOVERY_SCHEMAS: dict[Platform, list[NewZWaveDiscoverySchema]] = {
Platform.BINARY_SENSOR: BINARY_SENSOR_SCHEMAS,
Platform.EVENT: EVENT_SCHEMAS,
}
SUPPORTED_PLATFORMS = tuple(NEW_DISCOVERY_SCHEMAS)
@@ -1164,15 +1166,6 @@ DISCOVERY_SCHEMAS = [
allow_multi=True,
entity_registry_enabled_default=False,
),
# event
# stateful = False
ZWaveDiscoverySchema(
platform=Platform.EVENT,
hint="stateless",
primary_value=ZWaveValueDiscoverySchema(
stateful=False,
),
),
# button
# Meter CC idle
ZWaveDiscoverySchema(
+41 -7
View File
@@ -2,22 +2,37 @@
from __future__ import annotations
from dataclasses import dataclass
from zwave_js_server.model.driver import Driver
from zwave_js_server.model.value import Value, ValueNotification
from homeassistant.components.event import DOMAIN as EVENT_DOMAIN, EventEntity
from homeassistant.components.event import (
DOMAIN as EVENT_DOMAIN,
EventEntity,
EventEntityDescription,
)
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import ATTR_VALUE, DOMAIN
from .discovery import ZwaveDiscoveryInfo
from .entity import ZWaveBaseEntity
from .models import ZwaveJSConfigEntry
from .entity import NewZwaveDiscoveryInfo, ZWaveBaseEntity
from .models import (
NewZWaveDiscoverySchema,
ZwaveJSConfigEntry,
ZWaveValueDiscoverySchema,
)
PARALLEL_UPDATES = 0
@dataclass(frozen=True, kw_only=True)
class ValueNotificationZWaveJSEntityDescription(EventEntityDescription):
"""Represent a Z-Wave JS event entity description."""
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ZwaveJSConfigEntry,
@@ -27,11 +42,13 @@ async def async_setup_entry(
client = config_entry.runtime_data.client
@callback
def async_add_event(info: ZwaveDiscoveryInfo) -> None:
def async_add_event(info: NewZwaveDiscoveryInfo) -> None:
"""Add Z-Wave event entity."""
driver = client.driver
assert driver is not None # Driver is ready before platforms are loaded.
entities: list[ZWaveBaseEntity] = [ZwaveEventEntity(config_entry, driver, info)]
entities: list[ZWaveBaseEntity] = [
info.entity_class(config_entry, driver, info)
]
async_add_entities(entities)
config_entry.async_on_unload(
@@ -55,7 +72,10 @@ class ZwaveEventEntity(ZWaveBaseEntity, EventEntity):
"""Representation of a Z-Wave event entity."""
def __init__(
self, config_entry: ZwaveJSConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo
self,
config_entry: ZwaveJSConfigEntry,
driver: Driver,
info: NewZwaveDiscoveryInfo,
) -> None:
"""Initialize a ZwaveEventEntity entity."""
super().__init__(config_entry, driver, info)
@@ -96,3 +116,17 @@ class ZwaveEventEntity(ZWaveBaseEntity, EventEntity):
lambda event: self._async_handle_event(event["value_notification"]),
)
)
DISCOVERY_SCHEMAS: list[NewZWaveDiscoverySchema] = [
NewZWaveDiscoverySchema(
platform=Platform.EVENT,
primary_value=ZWaveValueDiscoverySchema(
stateful=False,
),
entity_description=ValueNotificationZWaveJSEntityDescription(
key="value_notification",
),
entity_class=ZwaveEventEntity,
),
]
+34 -11
View File
@@ -6,8 +6,6 @@ from freezegun import freeze_time
import pytest
from zwave_js_server.event import Event
from homeassistant.components.event import ATTR_EVENT_TYPE
from homeassistant.components.zwave_js.const import ATTR_VALUE
from homeassistant.const import STATE_UNKNOWN, Platform
from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util
@@ -66,9 +64,12 @@ async def test_basic(
assert state
assert state.state == dt_util.as_utc(fut).isoformat(timespec="milliseconds")
attributes = state.attributes
assert attributes[ATTR_EVENT_TYPE] == "Basic event value"
assert attributes[ATTR_VALUE] == 255
assert state.attributes == {
"friendly_name": "honeywell_in_wall_smart_fan_control Event value",
"event_type": "Basic event value",
"event_types": ["Basic event value"],
"value": 255,
}
async def test_central_scene(
@@ -128,9 +129,20 @@ async def test_central_scene(
assert state
assert state.state == dt_util.as_utc(fut).isoformat(timespec="milliseconds")
attributes = state.attributes
assert attributes[ATTR_EVENT_TYPE] == "KeyReleased"
assert attributes[ATTR_VALUE] == 1
assert state.attributes == {
"friendly_name": "Node 51 Scene 002",
"event_type": "KeyReleased",
"event_types": [
"KeyHeldDown",
"KeyPressed",
"KeyPressed2x",
"KeyPressed3x",
"KeyPressed4x",
"KeyPressed5x",
"KeyReleased",
],
"value": 1,
}
# Try invalid value
event = Event(
@@ -178,6 +190,17 @@ async def test_central_scene(
assert state
assert state.state == dt_util.as_utc(fut).isoformat(timespec="milliseconds")
attributes = state.attributes
assert attributes[ATTR_EVENT_TYPE] == "KeyReleased"
assert attributes[ATTR_VALUE] == 1
assert state.attributes == {
"friendly_name": "Node 51 Scene 002",
"event_type": "KeyReleased",
"event_types": [
"KeyHeldDown",
"KeyPressed",
"KeyPressed2x",
"KeyPressed3x",
"KeyPressed4x",
"KeyPressed5x",
"KeyReleased",
],
"value": 1,
}