Adds a self-contained omni-pca/grafana/ bundle (InfluxDB v2 + Grafana
with pre-provisioned datasource and dashboard) plus dev-stack wiring
so iterating against the mock or real panel is one docker-compose-up.
The dashboard has four rows plus an insights row:
System health AC, battery, trouble, 24h event count
Security area arming state, recent events table, zone trips
Climate thermostat temperatures, HVAC mode
Activity event rate by type, top toggled units
Insights active zone bypasses, button press log, event distribution
Color-coded event_type tags persist across panels (alarms red, restores
green, batteries orange, etc.); explicit no-purple palette per CLAUDE.md.
The bundle is portable: any HA install can use it by running grafana/
docker compose up -d and pasting ha-snippet.yaml into configuration.yaml.
For the dev stack, dev/docker-compose.yml mounts the same provisioning
files so dev and prod stay in lockstep.
Verified end-to-end against the real Our House.pca panel (192.168.1.9):
the dashboard fills with live zone trips, X-10 unit toggles, and
push-event traffic within 30s of HA bootup.
Adds an OMNI_PCA_FIXTURE escape hatch so the mock can serve real
panel data instead of the synthetic five-zone state. With this in
place the dev stack is wire-indistinguishable from the source
panel for everything the HA integration touches: 330 programs,
16 zones, 44 units, 2 thermostats etc. from our test fixture.
- run_mock_panel.py: --pca / OMNI_PCA_FIXTURE accepts a path; the
decryption key is auto-derived from a sibling PCA01.CFG when one
exists (the common PC Access export layout), with --pca-key /
OMNI_PCA_FIXTURE_KEY as override. Falls back to KEY_EXPORT for
vanilla unsigned exports.
- docker-compose.yml: mount /home/kdm/home-auto/HAI as /fixtures
read-only and surface OMNI_PCA_FIXTURE so dev/.env can drive it.
- dev/README.md: new section documenting fixture loading.
- dev/screenshot_overview.py: quick playwright helper for capturing
the side-panel landing page with whatever fixture is loaded.
- dev/artifacts/screenshots/2026-05-17/real-pca-overview.png: snapshot
of the Omni Programs side panel against the real .pca fixture
(330 programs).
Lets structured-AND IF rows compare a typed field against another
typed field, not just a constant. Authoring "Thermostat 1.Temp >
Thermostat 2.Temp" now works in-place; previously Arg2 was locked
to Constant in the editor.
- types.ts: relax isEditableStructuredAnd to permit Zone/Unit/
Thermostat/Area/TimeDate as Arg2 types (the same editable set
already accepted for Arg1).
- omni-panel-programs.ts: replace the lone constant input with
Arg2 type/object/field controls that mirror the Arg1 layout;
switching Arg2 between Constant and a reference type swaps the
sub-controls and resets defaults sensibly.
- _renderStructuredArg1Picker generalised to _renderStructuredObjectPicker
driving both sides; _defaultIxForKind extracted as a shared helper.
- Bundle rebuilt.
- dev/screenshot_arg2_object.py: targeted playwright helper that
opens the chain at slot 200 and screenshots the editor for
visual verification.