Skip to content

UI Manual Fire Page

OneSeventyFour edited this page May 14, 2026 · 1 revision

UI: Manual fire page

For firing individual cues without loading a show. Useful for:

  • Setup testing — confirm each cue fires before committing to a real show.
  • Demonstrations — fire a single shell on demand.
  • Recovery — finish a show after the schedule has stopped.

📷 Screenshot placeholder: the Manual Fire page with a grid of cue buttons per receiver, prominent safety reminders.

How it gates

Manual fire requires three things to be true simultaneously:

  1. Manual fire switch on the dongle is engaged.
  2. Arming switch is in ARMED.
  3. Start switch is in START.

If any of those is wrong, the fire button shows the failing condition (e.g. "Arming switch is off") and refuses to act.

The daemon's handle_manual_fire enforces all three on the back end too — even if the UI is somehow tricked, the daemon refuses.

Layout

For each receiver in the global Receivers table, a card with:

  • The receiver ident and label.
  • A grid of cue buttons (1..cuesAvailable).
  • For Bilusocn receivers: cue buttons grouped by zone.

Click a cue button to fire it. The action posts { "type": "manual_fire", "data": { "zone": "<ident>", "target": <cueNum> } } to /api/system/cmd_daemon.

Safety affordances

  • The whole page has a red border / heavy "MANUAL FIRE ACTIVE" banner when the manual fire switch is engaged.
  • Cue buttons show their continuity color (red / green / blue) so you can see what you're about to fire.
  • A small confirmation tap-and-hold pattern is used on the buttons by default (configurable in Settings → Show config).

What it doesn't do

  • No timing. Manual fire is "right now". For sequenced firing, build a show.
  • No preload. The daemon sends each fire <ident> <target-1> immediately when you click. Latency is the typical RF round-trip (~3–22 ms).
  • No bulk fire. One cue per click. (Multiple cues can be in flight simultaneously if you click fast — the daemon doesn't serialize them.)

Implementation

  • host/byh_app/backyardhero/src/components/manual/ManualFiring.jsx — the page.
  • host/byh_app/backyardhero/src/components/manual/ManualFirePanel.jsx — the per-receiver fire grid.
  • host/pythings/pc_daemon/pc_daemon.py:handle_manual_fire — the gating + dispatch.
  • host/pythings/pc_daemon/protocol_handler/BYHProtocolHandler.py:handle_manual_fire — the actual fire / 433fire command.

Clone this wiki locally