Commit Graph
37 Commits
Author SHA1 Message Date
Nikolay MiroshnichenkoandClaude Opus 4.8 1f6fd56b49 docs(readme): update to v0.6.0 — 24 tools, repair/device-library/handover/diff/matter/iot capabilities
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 20:55:02 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 ab310b399a feat: matter/energy/diff/iot/completeness + climate & expose (v0.6.0)
Completes the roadmap. The tool now validates, repairs, generates
(HA/ETS/handover/IoT), diffs, grades and drafts acceptance protocols —
all design-time & read-only.

B-tier:
- B2 climate-correctness review note (controller/operation modes, setpoint
  shift cmd+state, mode-without-state flag) in generate_ha.py
- B3 semantic project diff (diffproj.py; diff_projects / diff_loaded)
- B4 per-function acceptance test protocol (advanced.py; generate_test_protocol)
- B5 Matter readiness (advanced.py; check_matter)
- B6 metering/energy DPT check + PV/battery/EVSE scaffold (advanced.py; check_energy)

C-tier:
- C1 KNX IoT Turtle/RDF export (iot.py; generate_knx_iot)
- C2 naming-hygiene suggestions (advanced.py; suggest_names)
- C3 as-built completeness grader (advanced.py; grade_completeness)

A-tier quick wins:
- A5 Areas/voice UI-only note; A6 time/date DPT-19.001 expose block (generate_ha.py)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 20:31:14 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 1e130bbe19 feat: repair-suggestion engine + relative-dim + cover-invert (v0.5.0)
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>
2026-07-01 19:37:26 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 44e1ae3aa7 feat: sub-DPT linter + KNX Secure posture (v0.4.0)
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>
2026-07-01 19:26:28 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 b16492eb68 feat(handover): itemise QA findings (addresses + names), not just totals
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 18:51:01 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 d7df3dce60 feat: device-library decompose_device + spec→structure methodology (v0.3.0)
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>
2026-07-01 18:33:08 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 2f2b8b1f91 fix(handover): read domain names from GroupRanges, not mislabeled GARecord.main_name
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>
2026-07-01 14:54:44 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 a621ced701 feat(handover): generate_handover_pack — as-built commissioning deliverable (Track B)
Assembles handover.md (equipment inventory, GA-domain map, feedback coverage,
KNX Secure scope, QA state) + standalone topology.svg + group-addresses.csv +
ha-package.yaml from a read-only .knxproj. Reuses existing analysis passes.
Regression test covers all 7 sections, inventory, summary and well-formed SVG.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:17:07 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 87f065dde7 feat(analyze): de-noise [LF] objects, central macros, separator scratch
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>
2026-07-01 13:55:37 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 bc33273cd4 docs(announcements): refresh KNX forum / HA / Reddit posts for v0.2.0 + case study
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>
2026-07-01 00:00:18 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 2d0a63c548 docs: add spec-PDF→KNX case study (EN+RU, anonymised)
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>
2026-06-30 23:27:32 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 b9440cb4d7 docs: architecture table + site pill reflect colour/climate + GA-intent (v0.2.0)
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>
2026-06-30 21:31:09 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 44d7226bf1 chore(release): v0.2.0 — colour/climate assembly + GA-intent noise reduction
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>
2026-06-30 21:28:37 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 4f8ffb76ba docs(web): refresh demo-house screenshots + captions for colour & climate
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>
2026-06-30 21:17:30 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 bba0b33614 docs(readme): document colour/climate assembly + GA-intent noise reduction
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>
2026-06-30 20:46:02 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 a6a5e68444 docs(example): regenerate demo-home outputs with colour + climate (Track A/D)
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>
2026-06-30 20:23:05 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 514caa5fd2 feat: colour lights + climate entities + status-pairing fix (Track A)
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>
2026-06-30 20:05:59 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 2ffb6d371f feat: GA-intent classification to cut real-project noise (Track D)
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>
2026-06-30 19:48:28 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 9a8d87869a docs: add Glama score badge (server now built & released on Glama)
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>
2026-06-29 07:53:43 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 a2a1d2db0b Add glama.json (Glama registry metadata: maintainers)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 07:22:23 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 55c1ba54ca Add Dockerfile for Glama listing / containerized MCP introspection
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>
2026-06-29 06:56:46 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 5322e8a175 Clarify: generated demo .knxproj does not import into stock ETS (no valid signature)
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>
2026-06-28 21:59:45 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 7b103673c9 Add 'Join the discussion' links (README EN/RU + site)
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>
2026-06-28 21:22:26 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 9f670f0dc9 Add launch announcement drafts (EN+RU) per platform
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>
2026-06-28 21:06:38 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 4798dbdc90 Add real Home Assistant screenshots: site gallery + README
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>
2026-06-28 20:08:23 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 6b646df1fe README: announce the live demo with a banner + link
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>
2026-06-28 19:58:47 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 eb50a8247f Add docs/ GitHub Pages landing site
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>
2026-06-28 19:46:40 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 fae5234814 Add Lovelace dashboard to examples/demo-home ha-brain
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>
2026-06-28 19:10:30 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 f41439f82e Add examples/demo-home: end-to-end worked example
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>
2026-06-28 12:01:15 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 68654dde05 Release v0.1.2: HA mapping quality
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>
2026-06-28 11:29:40 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 64bb4c87e6 HA mapping: full dimmable lights, wider shutters, datetime DPTs
Round-2 fixes found by running against more public ETS4/5/6 fixtures (yene
DemoCase, KnxProjParser, knxray, open-knxviewer):
- Lights assemble both on/off and brightness status via identity-based pairing
  and fold the on/off command into one light entity (no duplicate switch),
  pairing even when device identity is a single name token. Switches too.
- Cover up/down recognised on 1.008 or any 1.x named up/down; stop on
  1.007/1.010/1.017 or a stop-name. Siblings attach only to the same shutter
  (zone-identity guard) so multiple blinds don't cross-wire.
- Date/time/text DPTs (10/11/16/19) route to review (manual_datetime/manual_text).
- Add regression tests for all three.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:26:09 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 28ae21f09c Release v0.1.1: real-fixture hardening
Bump version to 0.1.1 and finalize CHANGELOG. This release bundles the fixes
found by running the tool against real ETS5/ETS6 project files: the critical
load_project recursion, the now-implemented ETS Function role pairing, no-silent
-drops in HA generation, smarter shutter/German classification, venetian slat
tilt handling, and diagnostics alarms as binary_sensors. 5 regression tests added.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:53:19 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 1fc64a7a89 Polish shutter slats and diagnostics alarms (HA mapping)
- Venetian slat GAs (Lamelle/slat/tilt) attach to their parent blind cover as
  move_short_address instead of becoming standalone covers; unmatched slats are
  flagged shutter_slat_unattached for manual attachment.
- 1-bit diagnostics GAs (wind/frost/smoke/leak alarm, fault) become a read-only
  binary_sensor instead of a phantom command switch.
- Add regression tests for both.

Backlog item #6 from VALIDATION-FINDINGS, surfaced by real ETS fixtures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:49:24 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 53e5630d45 HA: no silent drops + smarter shutter classification
- generate_ha now lists every unmapped GA in `review` instead of dropping it
  silently ("no silent caps"); YAML header reports the review count.
- Shutter category recognises German/directional names (Behang, Lamelle,
  auf/ab, Raffstore, Markise, RU equivalents). Shutter-looking commands with an
  incomplete DPT get an actionable `shutter_incomplete_dpt` review hint instead
  of vanishing.
- Add regression tests for both.

Backlog items #4 and #5 from VALIDATION-FINDINGS, surfaced by real ETS fixtures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:42:22 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 29d39dc147 Wire up ETS Function role pairing for command/status
Implement pairing.function_status_pairs(): pair command<->status GAs from ETS
Function roles (SwitchOnOff<->InfoOnOff etc.), used by check_missing_status and
the HA generator. Fixes false "missing status" on function-paired commands and
gives HA entities the correct state_address even when the feedback GA is named
only "Status". Add a regression test.

Found via real-ETS6 fixture testing: Functions were previously ignored despite
the README claiming they were the primary pairing signal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:35:34 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 1b0fe566f7 Fix infinite recursion in load_project MCP tool
The server tool function `load_project` shadowed the imported project loader,
so it called itself instead of the parser -> RecursionError on every real
.knxproj. Alias the import as `load_project_file` and call that.

Add a regression test (server.load_project on a bad path must not raise
RecursionError) and a CHANGELOG entry. Found via end-to-end testing against
real ETS5/ETS6 fixtures from XKNX/xknxproject.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:24:17 +02:00
Nikolay MiroshnichenkoandClaude Opus 4.8 bba8befcde nickol-knx-mcp v0.1.0 — design-time KNX/ETS6 MCP server (public beta)
Design-time MCP server that reads .knxproj (read-only), validates naming/DPT/status,
and generates Home Assistant KNX YAML + ETS-importable group addresses (XML/CSV).
No live bus access — confined-workspace writes only.

Includes: 12 MCP tools, end-to-end smoke test, MIT license, English-first README
(+ Russian), CONTRIBUTING with a real-project test call, SECURITY policy, CHANGELOG,
GitHub Actions CI (Python 3.10–3.12), and issue/PR templates.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 09:25:57 +02:00