456 files
This commit is contained in:
1 parent
4192ecbaae
commit
5d6d845ebf
456 files changed
+64951
-3828
No files matched your search
@@ -7,7 +7,7 @@ integration's source; drift-probed weekly)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from ._model import IntegrationSignature
|
||||
from ._model import ConsumableSignature, IntegrationSignature
|
||||
from ._shared import (
|
||||
LOCK_CYLINDER_CYCLES,
|
||||
MOWER_BLADES_RUNTIME,
|
||||
@@ -18,16 +18,51 @@ from ._shared import (
|
||||
|
||||
SIGNATURES: dict[str, IntegrationSignature] = {
|
||||
"matter": IntegrationSignature(
|
||||
name="Matter lock",
|
||||
verified="2026-07-18 @ home-assistant/core dev",
|
||||
name="Matter",
|
||||
verified="2026-07-18 (lock) / 2026-09-27 (filters, vacuum) @ home-assistant/core 2026.9 + dev",
|
||||
source=(
|
||||
"home-assistant/core homeassistant/components/matter/lock.py "
|
||||
"(MatterLock, lock domain entity per device). Matter bridges many "
|
||||
"device types — the lock entity_domain restricts this signature "
|
||||
"to locks; every transition to 'locked' is one mechanical cycle."
|
||||
"to locks; every transition to 'locked' is one mechanical cycle. "
|
||||
"sensor.py: tk 'hepa_filter_condition' (HepaFilterMonitoring."
|
||||
"Condition) and 'activated_carbon_filter_condition' "
|
||||
"(ActivatedCarbonFilterMonitoring.Condition), PERCENTAGE, "
|
||||
"MEASUREMENT, enabled — air purifiers and extractor hoods. Read "
|
||||
"as % REMAINING: the Matter SDK's ResetCondition sets "
|
||||
"100 for DegradationDirection 'down' (the SDK air-purifier example "
|
||||
"and core's mock_air_purifier / mock_extractor_hood fixtures: "
|
||||
"Condition 100, direction down); HA does not invert 'up' devices. "
|
||||
"The two filters wear independently → two duties. button.py has "
|
||||
"one reset per filter, but BOTH carry tk 'reset_filter_condition' "
|
||||
"(only the unique_id tells HepaFilterMonitoringResetButton from "
|
||||
"ActivatedCarbonFilterMonitoringResetButton). Wired as each duty's "
|
||||
"reset: the lookup presses a button only when exactly ONE matches "
|
||||
"the key on the device, so a single-filter purifier or hood gets "
|
||||
"its reset and a dual-filter device gets none (a guess could "
|
||||
"reset the wrong filter). vacuum.py: not docked/returning/paused/"
|
||||
"error and an RVC run mode tagged Cleaning (or Mapping) → "
|
||||
"VacuumActivity.CLEANING; core's RVC fixtures "
|
||||
"(mock_vacuum_cleaner, eufy_vacuum_omni_e28) carry no "
|
||||
"filter-monitoring cluster, so the ENGINE accumulates cleaning "
|
||||
"time."
|
||||
),
|
||||
tasks=(
|
||||
LOCK_CYLINDER_CYCLES,
|
||||
ConsumableSignature(
|
||||
("hepa_filter_condition",),
|
||||
"Replace Filter",
|
||||
"percent_left",
|
||||
resets=(("hepa_filter_condition", "reset_filter_condition"),),
|
||||
),
|
||||
ConsumableSignature(
|
||||
("activated_carbon_filter_condition",),
|
||||
"Replace Activated Carbon",
|
||||
"percent_left",
|
||||
resets=(("activated_carbon_filter_condition", "reset_filter_condition"),),
|
||||
),
|
||||
VACUUM_FILTER_CLEANING_RUNTIME,
|
||||
VACUUM_MAIN_BRUSH_RUNTIME,
|
||||
),
|
||||
),
|
||||
"zwave_js": IntegrationSignature(
|
||||
@@ -43,15 +78,25 @@ SIGNATURES: dict[str, IntegrationSignature] = {
|
||||
),
|
||||
),
|
||||
"zha": IntegrationSignature(
|
||||
name="Zigbee (ZHA) lock",
|
||||
verified="2026-07-18 @ home-assistant/core dev",
|
||||
name="Zigbee (ZHA)",
|
||||
verified="2026-07-18 (lock) / 2026-09-27 (STARKVIND filter) @ home-assistant/core 2026.9 + dev, zigpy/zha 2.2.0 + dev",
|
||||
source=(
|
||||
"home-assistant/core homeassistant/components/zha/lock.py "
|
||||
"(lock platform verified present). Locks carry no wear sensor — "
|
||||
"the ENGINE counts locking cycles; entity_domain-gated to locks, so the bridge's other device types are untouched."
|
||||
"the ENGINE counts locking cycles; entity_domain-gated to locks, so the bridge's other device types are untouched. "
|
||||
"IKEA STARKVIND purifiers: zha library application/platforms/"
|
||||
"sensor IkeaFilterRunTime — tk 'filter_run_time' (HA "
|
||||
"zha/strings.json 'Filter run time'), DURATION, MINUTES, "
|
||||
"DIAGNOSTIC, 'run time of the current filter' (IKEA cluster "
|
||||
"0xFC7D attribute 0x0000; counts UP and restarts at 0 when the "
|
||||
"filter is reset on the purifier) → usage_above at 4,320 h = the "
|
||||
"cluster's default filter_life_time of 259,200 min (the "
|
||||
"DIRIGERA/STARKVIND duty). The 'replace_filter' binary is "
|
||||
"device_class problem (adoption path); no reset button."
|
||||
),
|
||||
tasks=(
|
||||
LOCK_CYLINDER_CYCLES,
|
||||
ConsumableSignature(("filter_run_time",), "Replace Filter", "usage_above", above_hours=4320),
|
||||
),
|
||||
),
|
||||
"mqtt": IntegrationSignature(
|
||||
@@ -73,15 +118,23 @@ SIGNATURES: dict[str, IntegrationSignature] = {
|
||||
# MQTT vacuums (Valetudo!) and mowers (OpenMower) expose only
|
||||
# state entities — engine-accumulated usage covers their duties.
|
||||
"homekit_controller": IntegrationSignature(
|
||||
name="HomeKit lock",
|
||||
verified="2026-07-18 @ home-assistant/core dev",
|
||||
name="HomeKit Device",
|
||||
verified="2026-07-18 (lock) / 2026-09-27 (filter) @ home-assistant/core 2026.9 + dev",
|
||||
source=(
|
||||
"home-assistant/core homeassistant/components/homekit_controller/lock.py "
|
||||
"(lock platform verified present). Locks carry no wear sensor — "
|
||||
"the ENGINE counts locking cycles; entity_domain-gated to locks, so the bridge's other device types are untouched."
|
||||
"the ENGINE counts locking cycles; entity_domain-gated to locks, so the bridge's other device types are untouched. "
|
||||
"sensor.py SIMPLE_SENSOR CharacteristicsTypes.FILTER_LIFE_LEVEL: "
|
||||
"name 'Filter lifetime', PERCENTAGE, MEASUREMENT, no "
|
||||
"translation_key — SimpleSensor names it '<accessory> Filter "
|
||||
"lifetime' → suffix _filter_lifetime. HAP Filter Life Level is "
|
||||
"the REMAINING life (core's own homekit bridge, type_air_purifiers"
|
||||
".py, raises Filter Change Indication below 10 %). No reset "
|
||||
"entity (Reset Filter Indication is not exposed)."
|
||||
),
|
||||
tasks=(
|
||||
LOCK_CYLINDER_CYCLES,
|
||||
ConsumableSignature(("filter_lifetime",), "Replace Filter", "percent_left"),
|
||||
),
|
||||
),
|
||||
"deconz": IntegrationSignature(
|
||||
|
||||
Reference in new issue
Block a user