Rank findings by significance: config_value (setpoint/hysteresis/time/threshold —
an odd device is usually a real mistake) vs config_flag (mode/type) vs label
(per-room text, often intentional). New focus list surfaces the config-value clear
outliers first. On a real 275-device project this turns 422 raw outliers into a
9-item focus that includes the thermostats whose init-setpoint differs from their
siblings. Multilingual name hints (EN/DE/RU). Test updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Validate a project against ITS OWN rules, not a universal standard. With a YAML
profile the declared main-group taxonomy / naming / pairing is authoritative;
with no profile the taxonomy is INFERRED from the project itself and GAs that
deviate from their main group's own majority domain are flagged — never against
an alien standard (a well-organised real 356-GA project drops from 329 false
mismatches vs the default to 31 genuine self-deviations). Answers the recurring
integrator critique that 'your best practices aren't universal'. Example profile
+ test_policy.py included.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New module param_check.py + MCP tool check_device_parameters: reads per-device
ParameterInstanceRef values from the .knxproj project part (xknxproject does not
expose them), groups identical devices by application program, and flags the odd
one out — clear_outliers (a strong majority with a small minority, e.g. one
thermostat with a different setpoint/hysteresis) and split_configs (balanced
variants → review). Parameter names resolved from the app-program; encrypted
projects skipped honestly. Read-only, no ETS/bus. Validated on real 42-275-device
projects; synthetic test_param_check.py. Answers a community feature request.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a community-driven roadmap: cross-device parameter consistency check
(feasibility validated by a PoC on real 42-275-device projects — find the odd
thermostat/sensor out; not yet shipped), a Project Policy Profile, and an
honest note that in-ETS GA linking is left to existing add-ins / ETS7 Smart
Linking while we focus on read-only audit + an evidential model.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The nightly HA sync runs via shell_command in the Core container, not the SSH
add-on where install ran. Core has an empty known_hosts, so git push failed
"Host key verification failed" — the commit was made locally but never reached
GitHub. install.sh now seeds a repo-local known_hosts (ssh-keyscan) and pins
git config core.sshCommand so every context (add-on, Core, cron) uses the same
working ssh. Also drops a stray `.git-sync` arg from the pre-commit chmod line.
Records LESSON-06 + a symptom-table row in SKILL.md and SKILL.ru.md; CHANGELOG
Fixed entry. Field-validated on a live Home Assistant.
Circuit 1: real git in /config (deploy key, pre-commit secret scanner,
meaningful commits). Circuit 2: age-encrypted native HA backups in GitHub
Releases with rotation and a mandatory monthly restore drill. Ships
install/sync/scan/offsite/restore scripts, HA automations/snippets,
setup + architecture + incident + runbook references, EN + RU skill docs.
README/README.ru gain an ops-companion bullet in Scenario 3;
CHANGELOG [Unreleased] Added entry (no version bump).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reframe README.md, README.ru.md and docs/index.html around what you can
do with the server: (1) design a project from a spec into a full
implementation kit, (2) audit/repair/finish an existing .knxproj,
(3) generate the Home Assistant layer — plus the device-library
foundation. Adds anonymised field numbers from real project validation
(~92% structural match on 3,600+ GA; 145 repair proposals on 3,646 GA).
No functional changes, tool count unchanged (25), not a release.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
From validator to repairer: propose concrete fixes, not just flag problems.
- B1 repair-suggestion engine (repair.py) + suggest_repairs MCP tool: infer a
DPT for a missing-DPT GA, correct a suspect sub-DPT, synthesise a status GA in
a free slot, or add an absolute-brightness GA. Suggestions only; accepted new
GAs feed generate_ets_group_addresses; never writes to ETS or the bus.
- A2 relative-only-dimming detector (analyze.py): 3.007 relative dimmer with no
5.001 absolute-brightness GA in its zone -> HA cannot set a level.
- A3 cover invert/travel-time surfacing (generate_ha.py): verify_cover_invert
review note lists actuator-dependent flags absent from the .knxproj and warns
when position lacks a state address.
- A2/A3/B1 regression tests; CHANGELOG + version bump to 0.5.0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A1 — sub-DPT sanity linter: when a GA name implies a specific DPT
sub-type (temperature->9.001, power->14.056, brightness/position->5.001),
flag a wrong sub or wrong main. Multilingual, conservative; surfaced as
the subdpt_suspect finding via check_dpt / analyze_all.
A4 — KNX Data Secure posture: secure_posture() + new check_secure MCP
tool. Report-only summary (secured vs plaintext counts, mixed
secure/plaintext middle groups, keyring handover checklist). Reads only
the per-GA Security flag; no key material touched. Handover pack section
5 rewritten to this posture section.
Version bump to 0.4.0; CHANGELOG updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Turn the tool from a .knxproj validator into a design aid.
- device_library.py + decompose_device / list_device_recipes MCP tools:
expand a device (order number / type / alias) into its group-address
recipe — command/status/dimming/position/mode objects with DPTs —
across Zennio + ABB families. Generic vendor facts, typical-wired set.
- docs/spec-to-structure.md: the spec→structure methodology, with a
measured account of what a spec reproduces (~90%) vs the per-device
object count it cannot (2–9× per-project parameterisation).
- Ship alongside the Track B generate_handover_pack and the de-noise
refinements accumulated since 0.2.0.
- CHANGELOG 0.3.0; version bump 0.2.0 → 0.3.0; new device-library tests.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Main/middle range names now resolve correctly (e.g. [1] Освещение 1 этаж, [5] Климат)
instead of a middle-group name leaking into the main.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Three false-alarm downgrades derived from validating on a larger multi-vendor
villa, each turning a false positive into an INFO note without hiding any real
defect:
- intent: divider/separator names (punctuation-only or a marker wrapped in it,
e.g. "-----addition------", "---") classify as `scratch`, so a missing DPT on
them is INFO, not a red error.
- analyze: typed GAs wired into Zennio "[LF] ... Data Entry" type-agnostic
logic-function containers surface as INFO `dpt_on_logic_object` instead of a
false `dpt_mismatch_co` warning.
- analyze: all-groups broadcast/central-macro commands surface as INFO
`central_macro_no_status` instead of `missing_status_address`, since a fan-out
broadcast has no single state to read back.
Adds a regression block covering all three; real DPT mismatches and real
missing-status gaps still warn. Unreleased; no version bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Lead with colour/climate assembly, noise reduction, and the spec-PDF→96%
case study. Added a dedicated r/knx variant. EN+RU. Posts remain the owner's
to publish from their own accounts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A 96% structural match of an auto-designed GA structure vs a professional
reference, from a 42-page spec alone — 662 GA, 0 validation errors, HA package.
No client data/files; reference used only as an anonymous benchmark.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Layer-2 (design-time) row in both READMEs now lists colour/climate assembly and
GA-intent de-noise; site version pill bumped to v0.2.0 to match the release.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump version 0.1.2 -> 0.2.0 (pyproject + __init__). Promote the
Unreleased changelog section to [0.2.0] — 2026-06-30. Scrub a client
city label from two test comments (provenance note only, no PII/topology).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-captured all 5 live HA dashboard views (consistent 1240px, no PII): overview
now shows the floor-heating climate snapshot, climate shows the 6 floor-heating
thermostats + valve gauges, lighting shows RGBW/RGB/CCT colour lights (the prior
'Ошибка' was a non-existent light-color tile feature, now removed). Site fact
cards + gallery captions + both READMEs updated to describe colour/climate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Root README + RU now list the Track A/D capabilities: GA-intent classification
(reserve/logic/scratch kept out of error & missing-status checks), colour light
assembly (RGBW/RGB/CCT) and climate entity generation, with the real 685-GA
Zennio validation figure (false errors 29 -> 6).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
Colour control assembled into light entities (RGB 232.600, RGBW 251.600,
xyY 242.600, colour-temp 7.600) with statuses, matched by zone identity.
Climate entities generated from HVAC mode zones (temp 9.001 + target status
+ operation/controller mode 20.102/20.105 + valve command_value 5.001),
emitted only when HA-required keys are present, else routed to review.
B1 fix: a command no longer borrows a sibling's status (identity must nest,
status maps to exactly one entity) — removed all shared-status addresses.
New DPTs 232.600/251.600/242.600/7.600/20.105/1.100. HA keys verified vs docs.
Real files: signed demo 6 climate + 4 colour lights; Zennio 685-GA 7 climate;
zero shared-status; all 10 regression groups pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Classify every group address as functional/reserve/logic/scratch (intent.py)
and reclassify intentional non-functional GAs instead of crying wolf:
- reserve spare with no DPT -> INFO reserve_without_dpt (not a missing_dpt error)
- reserve name reused across DPTs -> no duplicate_name / inconsistent_dpt
- logic/virtual + scratch GAs -> excluded from missing-status warnings
dpt_mismatch_co and all real functional findings are untouched.
Driven by a real 685-GA Zennio project: false errors 29 -> 6,
missing-status noise 79 -> 45, all 12 real dpt_mismatch_co catches preserved.
Intent breakdown now exposed via list_group_addresses, report inventory and
the analyze_all summary. New regression test covers the reserve/logic/scratch
patterns and proves real DPT + status problems still surface.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Glama Docker introspection passes (build success, MCP release created).
Satisfies awesome-mcp-servers listing requirement: server is on Glama
and the score badge is now shown in both READMEs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Builds the stdio MCP server into a slim image (verified: container starts and
responds to initialize + tools/list with all 12 tools). Enables the Glama
(glama.ai) checks required by the awesome-mcp-servers listing bot.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A professional KNX engineer confirmed ETS rejects the programmatically-authored
demo project on import ('Project file has no valid signature') — ETS signs its own
projects and that can't be forged. Document the real-file path: import the GA
export XML into ETS and export from there.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Discussions badge + call-to-action linking to Discussion #1, plus a nav 'Discuss'
link and a CTA button on the landing site.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ready-to-post messages for GitHub Discussions, KNX User Forum, Home Assistant
forum, Reddit, Discord, Telegram (RU) and an awesome-mcp-servers catalog entry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Five real screenshots of the live Demo House dashboard (overview/climate/lighting/
energy/presence). The site now leads with a real screenshot gallery (interactive
mock kept below), and both READMEs gain a live-dashboard gallery section.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a linked SVG hero banner (docs/assets/banner.svg), a 'live demo' badge, a
heading link and a callout pointing to the GitHub Pages site and the demo house,
in both README.md and README.ru.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Self-contained HTML showcase: hero, two-layer architecture, demo-house stats +
the 5 planted mistakes, an interactive 5-tab dashboard preview (Overview/Climate/
Lighting/Energy/Presence), the HA brain, and a testers CTA. .nojekyll included.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A 5-view sections dashboard (Overview · Climate · Lighting · Energy & Stats ·
Presence) using only built-in cards (tile/gauge/heading/history-graph/markdown/
button + badges), wired to the demo-home brain entities.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A synthetic 239-GA / 47-Function demo .knxproj (ETS6 schema, parseable by
xknxproject) with 5 deliberate mistakes, the tool's generated artifacts
(project report, Home Assistant entities, ETS XML/CSV), and a ha-brain/ smart
layer: circadian lighting, an 8-factor climate setpoint, presence/season/time
state machine and statistics. Whitelist the demo .knxproj past the *.knxproj
gitignore (synthetic, no real topology/secrets).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump to 0.1.2 and finalize CHANGELOG. Second hardening pass (round-2 public
ETS4/5/6 fixtures): complete dimmable lights, wider shutter detection
(1.001/1.017 + zone-identity guard), and date/time/text DPT routing.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>