diff --git a/README.md b/README.md index fd8b764..fbe32c5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Row 0 holds the group buttons. Each one shows the first problem in its group, pl | APPS: VISTA SILENT | starts Vista on the Lighting PC if it is not running. A running Vista is never closed. | | ARENA | starts Resolume Arena on the Lighting PC if it is not running, then reconnects Companion | | OBS | starts OBS on the LiveStream PC if it is not running, then reconnects Companion. If the PC is off, it is woken (Wake-on-LAN) and the button shows WAKING PC; hold again once someone has logged in. | - | MIDI: LIGHT PC | restarts rtpMIDI on the Lighting PC; it reconnects to NA Ingest, NA ProP and NA Tracks by itself. Lighting MIDI drops for a few seconds. | + | MIDI: LIGHT PC | no automatic fix. Restarting rtpMIDI drops the PC from every MIDI session and it does not rejoin them, and macOS gives scripts no way to reconnect a named session. Reconnect it by hand in rtpMIDI (session "Lighting PC" → Directory → Connect). | | DANTE: PROP MAC / TRACKS / TRANSL / INGEST GONE | starts Dante Virtual Soundcard's engine on that Mac (`remote-access/mac-dvs-helper.sh`) | | DANTE: any device powered by its switch port (today the four Studio B boxes) | power-cycles the port it is on **now**, found by its MAC on the Netgear Dante switches | | DANTE: any other device GONE | restarts Companion's Dante module (hardware: if still gone, it is off or unplugged) | diff --git a/config.json b/config.json index b44ce16..b19d423 100644 --- a/config.json +++ b/config.json @@ -60,8 +60,6 @@ "run": "tasklist /NH /FI \"IMAGENAME eq Arena.exe\" | find /I \"Arena.exe\" >nul || schtasks /Run /TN \"\\StatusPanel\\Start Arena\"" }, "vista": { "host": "lighting", "short": "VISTA", "label": "start Vista on the Lighting PC if it is not running (a running Vista is never closed)", "run": "tasklist /NH /FI \"IMAGENAME eq Vista.exe\" | find /I \"Vista.exe\" >nul || schtasks /Run /TN \"\\StatusPanel\\Start Vista\"" }, - "rtpmidi": { "host": "lighting", "short": "RTPMIDI", "label": "restart rtpMIDI on the Lighting PC: it reconnects to NA Ingest, NA ProP and NA Tracks (MIDI drops for a few seconds)", - "run": "powershell -NoProfile -NonInteractive -Command \"Restart-Service rtpMIDIService -Force\"" }, "proddash": { "kind": "local", "short": "PRODDASH", "label": "start ProdDash", "run": "open /Applications/ProdDash.app" }, "hyperdeck": { "kind": "hyperdeck", "short": "HYPERDECK", "label": "reconnect Companion to the HyperDeck, or reboot the deck only if it is hung" } }, @@ -98,9 +96,9 @@ "NA-Tracks": "TRACKS", "FOH-SuperRack-LiveBox": "SUPERRACK", "NA-ProPresenter-Mac": "PROP MAC" } } ] }, { "id": "midi", "label": "MIDI", "pos": [2, 3], "checks": [ - { "type": "midi_peer", "session": "NA Ingest", "peer": "Lighting PC", "tag": "LIGHT PC", "fix": "rtpmidi" }, + { "type": "midi_peer", "session": "NA Ingest", "peer": "Lighting PC", "tag": "LIGHT PC" }, { "type": "midi_peer", "session": "NA Ingest", "peer": "SuperRack-LiveBox", "tag": "SUPERRACK" }, - { "type": "mdns", "instance": "Lighting PC", "name": "LIGHT PC MIDI", "fix": "rtpmidi" }, + { "type": "mdns", "instance": "Lighting PC", "name": "LIGHT PC MIDI" }, { "type": "mdns", "instance": "NA Tracks", "name": "TRACKS MIDI" }, { "type": "midi_rx", "source": "Network NA Ingest Listen", "name": "TRACKS IN" } ] }, diff --git a/status_panel.py b/status_panel.py index 19c49f4..3c267d5 100644 --- a/status_panel.py +++ b/status_panel.py @@ -1138,7 +1138,7 @@ def poll_midi(snap, cfg): def ssh_cmd(cfg, host): """ssh to a machine in config "hosts", with NA Ingest's status-panel key; one shared connection per host.""" return ["/usr/bin/ssh", "-i", os.path.expanduser(cfg.get("ssh_key", "~/.ssh/id_status_panel")), - "-o", "BatchMode=yes", "-o", "ConnectTimeout=5", "-o", "IdentitiesOnly=yes", + "-o", "BatchMode=yes", "-o", "ConnectTimeout=5", "-o", "IdentitiesOnly=yes", "-o", "LogLevel=ERROR", "-o", "StrictHostKeyChecking=accept-new", "-o", "ControlMaster=auto", "-o", "ControlPath=/tmp/status-panel-ssh-%C", "-o", "ControlPersist=120", cfg["hosts"][host]["ssh"]] diff --git a/tests/test_status_panel.py b/tests/test_status_panel.py index 0f1ea55..44fa04a 100644 --- a/tests/test_status_panel.py +++ b/tests/test_status_panel.py @@ -504,7 +504,8 @@ class TestFixes(unittest.TestCase): self.assertEqual(self.plan("obs"), [("fix", "obs")]) self.assertEqual(self.plan("arena"), [("fix", "arena")]) self.assertEqual(self.plan("apps"), [("fix", "vista")]) - self.assertEqual(self.plan("midi"), [("fix", "rtpmidi")]) # two checks, one restart + # Restarting rtpMIDI drops every session and it does not rejoin them (2026-10-08): no auto fix. + self.assertEqual(self.plan("midi"), []) for fix_id in ("obs", "arena", "vista"): # never closes a running app self.assertTrue(CONFIG["fixes"][fix_id]["run"].startswith("tasklist "), fix_id)