"""Protocol/hub transports whose duties are entity-domain-gated. Data module of the suggested-setups signature catalog — see ``helpers/signatures/_model.py`` for the direction semantics and the method contract (every entry cites and is verified against the integration's source; drift-probed weekly).""" from __future__ import annotations from ._model import ConsumableSignature, IntegrationSignature SIGNATURES: dict[str, IntegrationSignature] = { "matter": IntegrationSignature( name="Matter lock", verified="2026-07-18 @ home-assistant/core 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." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ), ), "zwave_js": IntegrationSignature( name="Z-Wave lock", verified="2026-07-18 @ home-assistant/core dev", source=( "home-assistant/core homeassistant/components/zwave_js/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." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ), ), "zha": IntegrationSignature( name="Zigbee (ZHA) lock", verified="2026-07-18 @ home-assistant/core 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." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ), ), "mqtt": IntegrationSignature( name="MQTT lock (Zigbee2MQTT etc.)", verified="2026-07-18 @ home-assistant/core dev", source=( "home-assistant/core homeassistant/components/mqtt/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." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ConsumableSignature( (), "Filter Cleaning", "runtime_hours", delta_units=15, entity_domain="vacuum", on_states=("cleaning",), ), ConsumableSignature( (), "Clean Main Brush", "runtime_hours", delta_units=30, entity_domain="vacuum", on_states=("cleaning",), ), ConsumableSignature( (), "Replace Blades", "runtime_hours", delta_units=100, entity_domain="lawn_mower", on_states=("mowing",), ), ConsumableSignature( (), "Clean Undercarriage", "runtime_hours", delta_units=25, entity_domain="lawn_mower", on_states=("mowing",), ), ), ), # 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", 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." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ), ), "deconz": IntegrationSignature( name="deCONZ (Zigbee) lock", verified="2026-07-18 @ home-assistant/core dev", source=( "home-assistant/core homeassistant/components/deconz/lock.py " "(lock platform verified present) — engine-counted locking cycles, entity_domain-gated so the bridge's other device types are untouched." ), tasks=( ConsumableSignature( (), "Lubricate Cylinder", "cycle_count", delta_units=2000, entity_domain="lock", on_states=("locked",), ), ), ), }