Regenerate examples/demo-home/generated/ with the current generator: 13 lights now carry RGBW/RGB/CCT colour, 6 climate zones assembled with HA-doc-verified keys, sensors fold into climate where applicable. README updated (entity counts, capability note) and records that the real ETS6-signed round-trip was validated. Report source path sanitized (relative). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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) |
⚠️ not flagged* |
| 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 🔴 |
* Honest limitation surfaced by this very demo: the missing-status check currently asks "does this control have a status?", not "does it have each expected status type?". The Kitchen dimmer has an on/off status, so it isn't flagged for its missing brightness status. Tracked for a future release.
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.