456 files

This commit is contained in:
Home Assistant Version Control committed 2026-10-01 05:38:21 +00:00
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(