homeos/app
HomeOS Bootstrap 5df94dddf0 feat(sensors): window/door contacts (open/closed/tilted) from Shelly MQTT
Addresses "no way to read window/door contacts": ShellyNormalizer never emitted
contact entities, so the Fenster page was empty for real hardware.
- Map the Shelly `input` component (digital reed on a Shelly input) → contact
  entity {open, position}; analog/count inputs are skipped.
- Dedicated `contact`/`window` components → 3-state {open, position} with
  closed/open/**tilted** support (`gekippt`) when the sensor reports it.
- entity-state renders the 3-state pill (closed=neutral, tilted=warning,
  open=offline); DE/EN labels. `contact` is a primary auto-onboarding type, so a
  window sensor on an input onboards itself.

ShellyNormalizerTest (5 cases). Live-verified: input state true/false →
contact open/closed on an auto-onboarded device. Suite 51 green, 12/12 clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 08:25:29 +02:00
..
Console/Commands feat(addons): Ring backend bridge — ring-mqtt ingest, cloud devices, badge 2026-07-18 01:58:40 +02:00
Events Phase 5: UniFi presence — poll, person↔client mapping 2026-07-18 00:31:32 +02:00
Http/Controllers Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
Jobs feat(mqtt): Home-Assistant-style onboarding — shared account + auto-create 2026-07-18 08:20:57 +02:00
Listeners feat(automations): trigger→condition→action engine with cooldown + dry-run 2026-07-18 01:11:02 +02:00
Livewire feat(mqtt): Home-Assistant-style onboarding — shared account + auto-create 2026-07-18 08:20:57 +02:00
Models feat(addons): Ring backend bridge — ring-mqtt ingest, cloud devices, badge 2026-07-18 01:58:40 +02:00
Providers feat(automations): trigger→condition→action engine with cooldown + dry-run 2026-07-18 01:11:02 +02:00
Services fix(addons): atomic Ring device creation + invalidate ingest gate cache (R15) 2026-07-18 02:01:45 +02:00
Support feat(sensors): window/door contacts (open/closed/tilted) from Shelly MQTT 2026-07-18 08:25:29 +02:00