Operations Engine
PPOE
The PagePoint Operations Engine is the industrial runtime appliance. Its mission is reliable operation.
Owns
- Operator web interface and phone communications.
- Live paging, stored message playback, and launch sequence playback.
- Audio routing, zone control, traffic light control, runtime state, and health reporting.
Does Not Own
- Phone provisioning, APK installation, USB importing, backups, log management, DNS, DHCP, or NTP service.
- Live/runtime TTS.
- DYY9 relay/I2C or LPD6803 LED hardware. Those paths are deprecated and disabled by default.
Current Runtime Components
server.jsowns commands, priorities, UI state, message state, live-page state, sequence state, traffic state, duration-cache validation, and logical relay/indicator state.audio_mixer.jsowns the single active ALSA/aplay hardware output tosurround71:CARD=ICUSBAUDIO7D,DEV=0. It mixes stored files, live-page chime files, and live microphone PCM sources.audio_receiver.jsowns live microphone UDP receive, sender assignment, jitter handling, resampling/EQ/gain, and bounded live PCM queueing. It feeds live PCM intoRoutedAudioMixerand does not spawn its own productionaplay.public/index.htmlowns the phone operator UI workflow and visual state. The phone mic sender is gated on OErouteActive=trueso first-tap live pages do not transmit into a closed route.indicatorDriver.js,indicatorLights.js, andoutputMapping.jspreserve legacy relay/I2C and LED behavior for reference, but DYY9 defaults to logical software-only mode.
Accepted DYY9 Audio Rules
- LIVE PAGE IS KING. Same-zone live page immediately owns its zone. All Call immediately owns all zones.
- Zone live page interrupts stored message or sequence audio only on the same zone.
- Unrelated stored-message and sequence zones continue during a zone live page.
- All Call live page interrupts stored messages and sequences globally.
- Manual stored messages and sequence-generated messages use the same stored playback path.
- Brief occasional click/pop is accepted if the live page starts reliably and quickly.
Current Output Mapping
| Logical zone | ALSA channel | DYY9 physical label |
|---|---|---|
| LPA | 0 | Front Left |
| LPB | 1 | Front Right |
| LPC | 6 | Side Left |
| LPD | 7 | Side Right |
| LPE | 2 | Center |
| LPF | 3 | LFE |
| LPG | 4 | Rear Left |
| LPH | 5 | Rear Right |
Major Work Completed
- PagePoint Audio Standard V1 deployed with approved 16 kHz, 16-bit, mono Linear PCM WAV files.
- Stored playback order standardized as
CHIME -> ZONE ID -> MESSAGE; live page remainsCHIME -> LIVE MICROPHONE. - Four independent simultaneous zone messages verified.
- Synchronous
ffprobecalls removed from the stored-message trigger path. Startup duration cache is now authoritative. - Manual stored-message startup delay reduced to 300 ms after validation.
- Zone live-page priority scope corrected. The old global stored-message interruption branch was the fault.
- Single-output-owner audio architecture implemented to avoid dual 8-channel
aplayownership of the USB sound card. - Live-page chime moved through the normal mixer file path, fixing receiver-pumped chime glitching.
- Live mic queueing tuned to the accepted release-candidate balance: low enough latency and clean enough audio.
- First-tap live-page state transition fixed by broadcasting route-open state and gating phone mic startup on
routeActive. - PPOE Settings modal reorganized internally while preserving the original Settings entry and main screen visual hierarchy.
/healthreports duration-cache readiness, message package status, and connected phone clients for PPSM.- PPOE prunes stale phone sockets after 15 seconds without heartbeat/status updates.
Known Follow-Up Items
- Recapture the final OE image after release-candidate cleanup; the July 19 image predates later audio fixes.
LIVE_TRACElogging is gated off by default behindPAGEPOINT_LIVE_TRACE=1.- Replace the current shared chime with separate
message_chime.wavandpage_chime.wavonly after files are supplied and validated. - Progress-bar timing should be corrected later without touching audio path stability.
- FFmpeg removal remains deferred. Current code invokes FFmpeg externally; it does not link FFmpeg libraries.