'Does the function have *a* status' missed a dimmer with on/off status but no brightness status (demo planted error #3), silently inflating coverage/Matter. detect_role_completeness flags a brightness/position command (5.001) whose device has no matching value status (missing_value_status), with a device-identity match so it doesn't borrow a sibling's status. Demo recall 4/5 -> 5/5. Raised by the external expert review. Test + demo ground-truth updated. Full suite green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.2 KiB
Demo House — end-to-end example
A complete, synthetic worked example of the whole stack this project targets:
demo-home.knxproj → nickol-knx-mcp → generated/ (report · HA entities · ETS export)
(KNX design) (design-time) ↓
ha-brain/ (Home Assistant smart logic)
It exists so you can see real input → real output without needing your own project, and as a showcase of how the KNX (I/O) and Home Assistant (logic) layers fit together.
What's here
| Path | What it is |
|---|---|
demo-home.knxproj |
The synthetic project: 239 group addresses, 47 ETS Functions, 13 zones (living w/ fireplace, kitchen, master + 2 kids bedrooms each with ensuite, guest WC, laundry, 2 corridors, staircase). Lighting (switch/dim/CCT/RGBW), underfloor heating + AC, sensors, scenes. |
generated/project_report.md |
project_report output — inventory + 🔴🟡🔵 findings + HA mapping preview. |
generated/home-assistant-knx.yaml |
generate_ha_package output — KNX entities (switch / light incl. RGBW/RGB/CCT colour / cover / climate / binary_sensor / sensor) + a review list. Nothing is dropped silently. |
generated/group-addresses.xml / .csv |
generate_ets_group_addresses output — ETS-importable. |
ha-brain/ |
The Home Assistant smart layer on top of these entities — circadian lighting, multi-factor climate, presence/season/time logic, statistics. See its own README. |
What the tool found (and the deliberate flaws)
The project intentionally contains 5 mistakes so the checks have something to catch — see them
flagged in generated/project_report.md:
| # | Planted mistake | Caught? |
|---|---|---|
| 1 | A group address with no DPT (Living room CO2, 4/2/1) |
✅ check_dpt 🔴 |
| 2 | Two GAs with the same name, different DPT (Kitchen temperature) |
✅ check_dpt |
| 3 | A dimmer with an on/off status but no brightness status (Kitchen worktop LED) |
✅ check_missing_status (missing_value_status)* |
| 4 | A switch with no status at all (Guest WC ceiling) |
✅ check_missing_status |
| 5 | A GA with an empty name (2/5/2) |
✅ check_naming 🔴 |
* Now fixed (role-aware feedback completeness). This demo originally surfaced an honest
limitation — the missing-status check asked "does this control have a status?", so the Kitchen
dimmer's on/off status masked its missing brightness status. detect_role_completeness now flags a
brightness/position command (5.001) that has no matching value status (missing_value_status),
without borrowing a sibling device's status. Recall on this demo is now 5/5.
Inventory: 239 GAs · 47 Functions · 0 errors that block parsing. The HA generator produced
19 switches, 13 lights (incl. RGBW / RGB / CCT colour), 6 covers, 6 climate zones, 13 binary
sensors, 41 sensors — on/off, brightness, colour and climate command/status pairs assembled into
multi-address entities, with 18/19 switches getting a state_address paired via ETS Function roles.
Generated by the current tool. Lights carry
rgbw_address/color_address/color_temperature_address(+color_temperature_mode) where the project has colour;climateentities carrytemperature_address,target_temperature_state_address,operation_mode_addressandcommand_value_state_address— keys verified against the Home Assistant KNX docs. Aclimateis emitted only when its required keys are present, otherwise the zone is sent toreview, so an invalid entity is never written. Reserve / logic / scratch group addresses are classified and kept out of the error and missing-status checks (none in this clean synthetic project, but it stops the tool crying wolf on real ones).
⚠️ Caveats (please read)
- Synthetic & generated — does NOT import into stock ETS. This
.knxprojwas authored programmatically (ETS6 schemaproject/22) — not exported from ETS. It parses cleanly withxknxproject(the library this tool uses) and is intended for tool validation and demonstration. A professional KNX engineer confirmed that ETS rejects it on import ("Project file has no valid signature") — ETS cryptographically signs its own projects and that signature can't be forged (by design). So: use this file with xknxproject-based tooling. To get a real, ETS-signed project, import the group-address export (generated/group-addresses.xml) into a fresh ETS project via Import Group Addresses and export from ETS — that file opens everywhere and is the gold standard. This round-trip was done and validated: a KNX engineer imported the export into ETS6 and sent back a real signed.knxproj, and the tool ran the full pipeline on it cleanly (note that an Import Group Addresses round-trip does not carry ETS Functions, so command/status pairing then relies on naming alone). - The flaws are on purpose. Do not "fix" them — they are the point.
ha-brain/is a design demo. Valid Home Assistant YAML built on best practices, but not deployed against a live bus here; entity IDs assume the namesgenerate_ha_packageproduces.