From dd53b2a89aab4b831cbf2f63555a26320daa4826 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Mon, 11 May 2026 15:54:40 -0600 Subject: [PATCH] docs: third cross-ref pass + sync uv.lock to 2026.5.11 Final cross-reference round, covering the remaining files where wire bytes have a user- or installer-facing counterpart: v1/messages.py New Cross-references block: SETUP ZONES + SETUP TEMPERATURES for the fields the parsers' raw bytes ultimately come from, and APPENDIX C for what each synthesized index means on hardware (unit 257+ = expansion-enclosure outputs, 393+ = panel flags). models.ZoneStatus Status-byte bit-layout doc now also points at the Owner's Manual CONTROL chapter's "View Zone Status" keypad screen -- same Secure / Not Ready / Trouble / Tamper labels. models.UnitStatus State-byte semantics doc references the Owner's Manual CONTROL chapter for the user-side actions (All On/All Off/Scene/Bright/Dim) that drive units into each of these states. mock_panel.py Notes that the mock's plausible-but-arbitrary RequestProperties / RequestStatus responses correspond on real hardware to what an installer typed into INSTALLER SETUP. Production fixtures should pre-seed MockPanel state to match a known SETUP configuration. uv.lock Catches up the project's own entry to omni-pca 2026.5.11 (was pinned to 2026.5.10 from the previous lock generation). No code changes; 387 tests still pass. --- src/omni_pca/mock_panel.py | 10 ++++++++++ src/omni_pca/models.py | 10 ++++++++-- src/omni_pca/v1/messages.py | 12 ++++++++++++ uv.lock | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/omni_pca/mock_panel.py b/src/omni_pca/mock_panel.py index 491bd0f..ea5968d 100644 --- a/src/omni_pca/mock_panel.py +++ b/src/omni_pca/mock_panel.py @@ -31,6 +31,16 @@ References: clsOL2MsgRequestStatus.cs / clsOL2MsgStatus.cs clsOL2MsgRequestExtendedStatus.cs / clsOL2MsgExtendedStatus.cs clsOLMsgSystemEvents.cs + +Cross-references (HAI OmniPro II Installation Manual): + *INSTALLER SETUP* (pca-re/docs/manuals/installation_manual/ + 04_INSTALLER_SETUP/) is the human-side counterpart to the data + this mock serves: the panel's response to a RequestProperties / + RequestStatus would on real hardware reflect whatever an installer + typed into SETUP CONTROL / SETUP ZONES / SETUP AREAS / SETUP + TEMPERATURES / SETUP MISC for that object. The mock just makes up + plausible bytes; production fixtures should pre-seed the + ``MockPanel`` state to match a known SETUP configuration. """ from __future__ import annotations diff --git a/src/omni_pca/models.py b/src/omni_pca/models.py index 0ba1b4d..46abee9 100644 --- a/src/omni_pca/models.py +++ b/src/omni_pca/models.py @@ -686,7 +686,9 @@ class ZoneStatus: bytes[2] status byte (current+latched+arming, see below) bytes[3] analog loop reading (0-255) - Status byte bit layout (clsZone.cs:385, clsText.cs:3110): + Status byte bit layout (clsZone.cs:385, clsText.cs:3110, and the + "View Zone Status" keypad screen in the Owner's Manual *CONTROL* + chapter, pca-re/docs/owner_manual/05_CONTROL/): bits 0-1 (mask 0x03): current condition 0=Secure, 1=NotReady, 2=Trouble, 3=Tamper bits 2-3 (mask 0x0C): latched alarm status @@ -781,7 +783,11 @@ class UnitStatus: bytes[3..4] remaining time in seconds (BE u16, 0 = indefinite) bytes[5..6] optional ZigBee instantaneous power (W, BE u16) - State byte semantics (clsUnit.cs:405-533): + State byte semantics (clsUnit.cs:405-533; user-visible meaning in + the Owner's Manual *CONTROL → Light/Appliance Control* chapter, + pca-re/docs/owner_manual/05_CONTROL/, which documents the keypad + "All On" / "All Off" / "Scene" / "Bright/Dim" actions that put a + unit into each of these states): 0 Off 1 On 2..13 Scene A..L (state - 63 → 'A'..'L' as ASCII char) diff --git a/src/omni_pca/v1/messages.py b/src/omni_pca/v1/messages.py index 49ed236..951a26a 100644 --- a/src/omni_pca/v1/messages.py +++ b/src/omni_pca/v1/messages.py @@ -21,6 +21,18 @@ Per-record byte counts (verified against firmware 2.12 over UDP): AuxiliaryStatus 4 bytes per aux (relay, current, low_sp, high_sp) +Cross-references (HAI OmniPro II Installation Manual): + *INSTALLER SETUP → SETUP ZONES* (pca-re/docs/manuals/ + installation_manual/04_INSTALLER_SETUP/) — the zone-type and + zone-options bits that determine what each ``ZoneStatus.raw_status`` + byte's high nibble means come from this chapter. + *INSTALLER SETUP → SETUP TEMPERATURES* — same chapter, thermostat + enable/disable + thermostat type that drives whether + ``parse_v1_thermostat_status`` records are populated at all. + *APPENDIX C — ZONE AND UNIT MAPPING* (12_…) — what each record's + synthesized index *means* on the hardware side (e.g. unit 257+ + = expansion-enclosure outputs, 393+ = panel flags). + References: clsOLMsgZoneStatus.cs / clsOLMsgRequestZoneStatus.cs clsOLMsgUnitStatus.cs / clsOLMsgRequestUnitStatus.cs diff --git a/uv.lock b/uv.lock index db53f8e..ce45bf2 100644 --- a/uv.lock +++ b/uv.lock @@ -1511,7 +1511,7 @@ wheels = [ [[package]] name = "omni-pca" -version = "2026.5.10" +version = "2026.5.11" source = { editable = "." } dependencies = [ { name = "cryptography" },