omni-pca-docs/astro.config.mjs
Ryan Malloy 9ea05c3b94 docs: add Hardware specs reference + Zone & unit numbering explanation
Two new pages distilled from HAI's official OmniPro II Installation
Manual 3-2 + Product Specifications datasheet (Quadomated mirror).

reference/hardware-specs.md
  Capacity ceilings (176 zones, 511 units, 8 areas, 64 thermostats,
  128 buttons, 1500 programs, 99 codes, 128 messages, etc.), digital
  communicator + network features, electrical specs with the per-output
  current caps and the 24-hour battery-standby derating numbers,
  physical dimensions, environmental ranges, listings, languages, and
  part-number lookup. The numbers here are the source of every cap in
  clsCapOMNI_PRO_II.cs and the upper bounds for the protocol's range
  fields, so anyone debugging "why does my panel NAK at index N" should
  start here.

explanation/zone-unit-numbering.md
  Appendix C of the install manual, transcribed and explained: how the
  panel maps physical hardware to its 1-176 zone and 1-511 unit
  address spaces. Documents the four overlapping families that share
  the unit number line -- X-10 (1-256, by house code), ALC bus
  (parallel address space within those slots), physical outputs
  (257-392), and panel flags (393-511) -- which is why the working
  panel reports units at index 257+ (sprinkler outputs on the first
  17A00 expansion enclosure) and 393+ (named flags) even though only
  a dozen lights are wired up.

  Closes a real debugging mystery from Phase 2/3 of the v1+UDP work:
  OmniClientV1's long-form RequestUnitStatus path (BE u16 start/end)
  exists specifically to address units > 255, which only happens
  because of this firmware-fixed address layout.

astro.config.mjs
  Slot both new pages into the existing Reference and Explanation
  sidebar groups.
2026-05-11 13:23:58 -06:00

103 lines
2.8 KiB
JavaScript

// @ts-check
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import icon from 'astro-icon';
// https://astro.build/config
export default defineConfig({
site: 'https://hai-omni-pro-ii.l.warehack.ing',
telemetry: false,
devToolbar: { enabled: false },
integrations: [
icon({
include: {
lucide: ['*'],
},
}),
starlight({
title: 'HAI Omni Pro II — omni-pca docs',
description:
'Reverse-engineered Python library and Home Assistant integration for HAI/Leviton Omni Pro II home automation panels.',
logo: {
src: './src/assets/logo.svg',
replacesTitle: false,
},
favicon: '/favicon.svg',
customCss: ['./src/styles/theme.css'],
social: [
{
icon: 'github',
label: 'GitHub',
href: 'https://git.supported.systems/warehack.ing/omni-pca',
},
],
editLink: {
// Placeholder — update once the docs repo lives somewhere on GitHub.
baseUrl: 'https://git.supported.systems/warehack.ing/omni-pca-docs/edit/main/',
},
lastUpdated: true,
pagination: true,
sidebar: [
{
label: 'Start here',
collapsed: false,
items: [
{ label: 'Overview', slug: '' },
{ label: 'Quick start', slug: 'start/quickstart' },
],
},
{
label: 'Tutorials',
collapsed: true,
items: [{ autogenerate: { directory: 'tutorials' } }],
},
{
label: 'How-to guides',
collapsed: true,
items: [{ autogenerate: { directory: 'how-to' } }],
},
{
label: 'Reference',
collapsed: false,
items: [
{ label: 'Protocol', slug: 'reference/protocol' },
{ label: 'File format', slug: 'reference/file-format' },
{ label: 'Hardware specs', slug: 'reference/hardware-specs' },
{ label: 'Library API', slug: 'reference/library-api' },
{ label: 'HA entities', slug: 'reference/ha-entities' },
{ label: 'HA services', slug: 'reference/ha-services' },
],
},
{
label: 'Explanation',
collapsed: false,
items: [
{ label: 'Two non-public quirks', slug: 'explanation/quirks' },
{ label: 'Zone & unit numbering', slug: 'explanation/zone-unit-numbering' },
{ label: 'Architecture', slug: 'explanation/architecture' },
{ label: 'The PC Access bug', slug: 'explanation/pc-access-bug' },
],
},
{ label: 'Journey', slug: 'journey' },
{ label: 'Changelog', slug: 'changelog' },
],
}),
],
vite: {
server: {
host: '0.0.0.0',
// HMR behind Caddy reverse proxy: explicit hostname + wss + 443
// (per CLAUDE.md "HMR Behind Reverse Proxy" section). Falls
// back to defaults when no VITE_HMR_HOST env var is set so
// `npm run dev` outside Docker still works.
hmr: process.env.VITE_HMR_HOST
? {
host: process.env.VITE_HMR_HOST,
protocol: 'wss',
clientPort: 443,
}
: undefined,
},
},
});