diff --git a/README.md b/README.md index caceda0..da1a74e 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ The **page number key** on every page follows the ALL button. It's green when ev | LED | VX1000 and UHD Jr: Companion connection **and** each one answers ping (the NovaStar module keeps saying "Connected" after a processor is switched off). "UHDJR NO PING" = processor off or unreachable; "UHDJR OFFLINE" = Companion's connection failed; "UHDJR DISABLED" (amber) = connection turned off in Companion. | | DANTE | All 19 Dante devices ("19/19"), named when one drops: "WING GONE", "TRACKS GONE", "PROP MAC GONE". | | MIDI | All six network MIDI links on the FOH / Studio B checklist, each named when it drops: **LIGHT PC** (Ingest → Lighting), **SUPERRACK** (Ingest → Livebox), **FX LIGHTS** (Tracks → Lighting, the FX lighting cues), **TRK LIVEBOX** (Tracks → Livebox), **TRK STUDIO B** (Tracks → Studio B), **PROP LIGHTS** (ProPresenter → Lighting). NA Ingest's own session is read locally; NA Tracks' and NA ProP's over SSH every 5 s. Also: the Lighting PC and NA Tracks MIDI sessions still announced on the network. A clean disconnect shows within about 10 s; a crash or pulled cable takes about a minute (macOS's own timeout, measured). Hold 2 s reconnects whichever links dropped. | -| APPS | ProPresenter API; Ableton OSC; tracks Mac pings; Bible TV app answering on :8080 (every 5 s); Bible TV OSC. Messages name the app ("PROPRES OFFLINE", "BIBLE APP DOWN"). Hold 2 s restarts the ProPresenter, Ableton and Bible TV Companion connections. | +| APPS | ProPresenter API (offline or error only: its harmless yellow warning, every 15–20 min, is ignored with `"ignore_warning": true`); Ableton OSC; tracks Mac pings; Bible TV app answering on :8080 (every 5 s); Bible TV OSC. Messages name the app ("PROPRES OFFLINE", "BIBLE APP DOWN"). Hold 2 s restarts the ProPresenter, Ableton and Bible TV Companion connections. | | VISTA | Vista on the Lighting PC: its Art-Net poll (sent every 0.5 s) must be heard within 5 s, otherwise **SILENT** (Vista closed or crashed, or the Lighting PC is off the network). Hold 2 s starts Vista if it is not running; Vista then opens **Prop Takeover** from its show folder (`E:\media\Documents\Vista 3\Shows`) by itself, through its own autoload preference (`` in `E:\media\Documents\Vista 3\.preferences`, set 2026-10-08). Resolume is the ARENA button. | | RESI | decoder (RossTalk connection and ping); resi-studio-cues; Resi cloud reachable | | NET | NA Ingest's link; gateway 10.1.0.1 pings; **4+ connections from 3+ groups dropping within 10 s** (what happened Sunday 10/5 at 10:21) | diff --git a/config.json b/config.json index fec900b..179a9ce 100644 --- a/config.json +++ b/config.json @@ -113,7 +113,7 @@ { "type": "artnet", "source": "10.1.10.206", "max_silence_seconds": 5, "fix": "vista" } ] }, { "id": "apps", "label": "APPS", "pos": [2, 4], "checks": [ - { "type": "conn", "conn": "Propresenter-API", "tag": "PROPRES", "fix": "propresenter" }, + { "type": "conn", "conn": "Propresenter-API", "tag": "PROPRES", "fix": "propresenter", "ignore_warning": true }, { "type": "remote", "host": "prop", "cmd": "pgrep -xq ProPresenter", "msg": "PROPRES NOT RUNNING", "fix": "propresenter" }, { "type": "conn", "conn": "ableton", "tag": "ABLETON" }, { "type": "remote", "host": "tracks", "cmd": "pgrep -xq Live", "msg": "ABLETON NOT RUNNING", "fix": "ableton" }, diff --git a/status_panel.py b/status_panel.py index 7ed7d54..5d2254a 100644 --- a/status_panel.py +++ b/status_panel.py @@ -221,7 +221,13 @@ def to_int(text): def check_conn(chk, snap, ctx): - return [("conn", conn_result(snap, chk["conn"], ctx["now"], chk.get("service_only", False)))] + res = conn_result(snap, chk["conn"], ctx["now"], chk.get("service_only", False)) + # "ignore_warning": the module's yellow warning state is harmless for this one (ProPresenter's + # API flickers to warning every 15-20 min); offline, error and disabled still alarm. + c = snap.conns.get(chk["conn"], {}) + if chk.get("ignore_warning") and res.level == WARN and c.get("enabled") and c.get("category") == "warning": + res = Result(OK) + return [("conn", res)] def hyperdeck_recording(snap, label): diff --git a/tests/test_status_panel.py b/tests/test_status_panel.py index 8be7910..ca5ce52 100644 --- a/tests/test_status_panel.py +++ b/tests/test_status_panel.py @@ -251,6 +251,18 @@ class TestChecks(unittest.TestCase): finally: stop.set() + def test_propresenter_yellow_warning_is_ignored(self): + engine = sp.Engine(CONFIG) + self.snap.conns["Propresenter-API"].update(category="warning", message="Socket closed") + tiles, _ = run_steps(engine, self.snap, self.now, 5) + self.assertEqual(tiles["apps"]["x"], "APPS\nOK") + self.snap.conns["Propresenter-API"]["category"] = "error" # a real failure still alarms + tiles, _ = run_steps(engine, self.snap, self.now + 6, 5) + self.assertTrue(tiles["apps"]["x"].startswith("APPS\nPROPRES "), tiles["apps"]["x"]) + self.snap.conns["Propresenter-API"].update(category="warning", enabled=False) # switched off + tiles, _ = run_steps(engine, self.snap, self.now + 12, 5) + self.assertEqual(tiles["apps"]["x"], "APPS\nPROPRES DISABLED") + def test_shure_receivers_are_pinged_at_companions_address(self): chk = {"type": "ping", "conn": "Axient_1", "host": "10.1.1.101", "name": "AXIENT 1"} self.assertEqual(sp.ping_target(chk, self.snap), "10.1.1.101") # fallback