SSH to media@10.6.7.13 (Windows OpenSSH, cmd.exe): kill a hung Bible App,
then run the StatusPanel\Start BibleApp task, which starts it on the
logged-in desktop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The hold-to-fix deck probe takes each HyperDeck's IP from its Companion
connection's "ip" variable, so the config no longer repeats them.
- APPS shows "VISTA SILENT" when the Lighting PC's Art-Net poll (every 0.5 s)
is not heard for 5 s: a crashed or closed Vista shows in seconds, not the
minute macOS takes to drop a network MIDI peer.
- tascam-quiet/ builds the Tascam DA-6400 module 1.3.1-quiet: the recorder's
"Illegal Status" warning is logged once a minute, not 5 times a second.
- README: hold-to-fix table fixed and updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every 10 minutes the watchdog maps each Dante device: name and IP from
Companion, MAC from NA Ingest's ARP table, switch port and PoE state from
the Netgear switches in dante_switches, saved to dante-map.json. A DANTE hold
on a missing PoE-powered device power-cycles the port it is on now (found
live by MAC, or its last known port if it has aged out and nothing else is
there); never a port with more than 2 devices. Re-patching, adding or
renaming devices needs no config change. First live map: 19 devices, the 4
Studio B boxes on PoE.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
STUDIO-B-SOLO-MON, MON, TB and TB-MON map to ports 0/14-0/17 on the Netgear
M4250 Dante switch 10.66.1.102. netgear.py poe_cycle first checks the port's
MAC table and refuses if a different device is plugged in there, then runs
poe reset. Tested 2026-10-08 13:10 on SOLO-MON: dropped off Dante and was
back about 17 s later. install.sh now copies netgear.py too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes come from config.json only and run over SSH with NA Ingest's
status-panel key (ProPresenter restart, Ableton / Church Translate start,
reopen DVS), locally (Resi bridge, captions, ProdDash) or as a HyperDeck
reboot. A green button does nothing, each fix waits 60 s before it can run
again, and a recording deck is never rebooted. New remote checks ask the Macs
every 10 s whether their apps are running. Group buttons and INGEST now have a
hold too; tests never run a real fix or open an SSH connection.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ping failures now read NO PING, Companion connection errors OFFLINE, and a
watched connection that is disabled in Companion shows amber DISABLED instead
of going quietly grey.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The UHD Jr was switched off and the NovaStar module still reported
Connected (even after a restart), so LED stayed green. LED now also checks
that each processor answers ping; the Resi decoder (send-only RossTalk) gets
the same.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The converted key's "startup" page resolves to the current page on surfaces
set to "use last page", so a tap did nothing. The tap page is now
nav_tap_page in config.json (1).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tap still goes to the start page, now on release so a hold does not flash
through page 1 first. Hold time is nav_hold_ms in config.json.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nav_templates.json holds Companion's own UP / page number / DOWN keys after
'convert to regular button'; make_page.py colours them from the ALL tile and
nav_keys.py copies them onto all 96 other pages (288 keys, recorded in
nav_locations.json; --revert restores the built-in keys). Also rewrites the
README's top half, which an earlier edit had duplicated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It uploads the page file over Companion's own API (tRPC over WebSocket, the
same calls the web UI makes) and imports it into page 19, refusing unless that
page is empty or already the status page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DANTE now alarms for all 19 devices by name. MIDI covers the Lighting PC and
SuperRack peers plus the Lighting PC and NA Tracks sessions; APPS covers
ProPresenter, Ableton, the tracks Mac and the Bible TV app. Five buttons
became three, and a check's tag names the device in the message.
dns-sd pads hours before 10 AM with a space, which the Bonjour parser did not
allow for, so every session read as gone each morning. Parsing is now its
own function with a test for both cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It now reads 19/19 to match Dante Controller. NA-Tracks, SuperRack and the
ProPresenter Mac still alarm on their own buttons, so a drop is not flagged
twice; DANTE just shows 18/19 while one of them is missing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All 19 Dante devices are now watched: 16 on DANTE, and NA-Tracks, SuperRack
and the ProPresenter Mac on their own buttons so a drop is not counted twice.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
status_panel.py runs on NA Ingest as a LaunchAgent. Every second it reads
Companion's connection statuses and module variables, adds what Companion
cannot see (network MIDI peers, Bonjour sessions, pings, launchd services,
disk, Resi cloud, the Bible TV app), and writes one JSON custom variable that
page 19 renders. Buttons acknowledge alarms, mute them, and restart a stuck
Companion connection on a two second hold. If the watchdog stops, the page
turns purple instead of freezing on stale green.
make_page.py builds the page export from config.json; tests/ runs offline
against a fake Companion and a CoreMIDI loopback.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>