Files
status-indicators/config.json
T
christianandClaude Fable 5.1 01c18ba5ef Step 1: the settings page, read-only, live on NA Ingest at port 8020
Overview (problems in the room with the hold action, the live deck, one line per computer),
Keys (both pages, what each key will say and what holding does), Computers (map with the keys
that turn red, cards with a light per thing that runs there from the watchdog's snapshot and a
read-only probe, Gear, Setup), Logs, History (the installer's copies for now), Help (four cards,
the generated key guide, cheat sheet and Where things are, glossary, Companion facts), Site setup
and Fixes read-only. The editing code is checked (with a lockout) but nothing can change yet.

Also: faults are attributed to the computers their check is about; the installer refuses while a
HyperDeck is recording (--now overrides); the Lighting PC's MIDI session is listed; the probes read
sudo's answer correctly and expand $HOME outside the quotes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 12:18:36 -04:00

593 lines
32 KiB
JSON

{
"site": {
"id": "na", "name": "North Attleboro", "ingest_name": "NA Ingest", "ingest_hostname": "na-ingest.local",
"ingest_ips": ["10.1.1.1", "10.6.3.222"],
"live_services": [],
"editing_code": "stingo serried warp"
},
"companion": { "host": "127.0.0.1", "port": 8000 },
"page": 19,
"page_name": "19\\nStatus",
"nav_keys": ["pagenum"],
"nav_hold_ms": 1000,
"nav_tap_page": 1,
"variables": { "state": "sp_state", "heartbeat": "sp_hb", "command": "sp_cmd" },
"service_windows": [
{ "days": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"], "start": "00:00", "end": "23:59" }
],
"debounce_seconds": 3,
"flap": { "count": 3, "window_seconds": 600 },
"network": {
"interface": "en0",
"gateway": "10.1.0.1",
"burst_connections": 4,
"burst_groups": 3,
"burst_window_seconds": 10,
"remember_seconds": 300
},
"alert_webhook": "",
"timing": { "fix_cooldown_seconds": 60, "alert_after_seconds": 30 },
"page_hold_ms": 2000,
"spotify": { "playlist": "spotify:playlist:2uTpJVYQLFnKF1WnSOuco8", "name": "Christian EDM 2026", "open_wait": 8, "play_wait": 3 },
"ssh_key": "~/.ssh/id_status_panel",
"dante_switches": ["10.66.1.100", "10.66.1.102"],
"hosts": {
"ingest": {
"self": true,
"name": "NA Ingest",
"os": "mac",
"role": "the watchdog, Companion, the settings page, lobby captions, transcription",
"runs": [
{
"kind": "launchagent",
"label": "org.waterschurch.status-panel",
"name": "the watchdog"
},
{
"kind": "launchagent",
"label": "org.waterschurch.status-settings",
"name": "the settings page"
},
{
"kind": "app",
"process": "Companion",
"name": "Companion 5.0.7",
"http": "http://127.0.0.1:8000/api/connections"
},
{
"kind": "app",
"process": "Companion Satellite",
"name": "Companion Satellite",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.resi-propresenter",
"name": "the Resi bridge"
},
{
"kind": "launchagent",
"label": "org.waterschurch.lobby-captions",
"name": "lobby captions"
},
{
"kind": "launchagent",
"label": "org.waterschurch.lobby-captions-display",
"name": "the caption screen"
},
{
"kind": "app",
"process": "ProdCom",
"name": "ProdCom (transcription)",
"http": "http://127.0.0.1:24480/api/v1/ping"
},
{
"kind": "app",
"process": "ProdDash",
"name": "ProdDash",
"http": "http://127.0.0.1:24500/"
},
{
"kind": "app",
"process": "Spotify",
"name": "Spotify"
},
{
"kind": "app",
"process": "ATEM Software Control",
"name": "ATEM Software Control"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "STUDIO-A-Ingest"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "folder",
"path": "~/Library/CloudStorage/GoogleDrive-media@waterschurch.org/Shared drives/Waters Creative/Production Team/Backup/NA/ATEM",
"name": "Google Drive (the saved switcher files)"
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-build-runner",
"name": "Gitea runner (not the panel)",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-drive-backup",
"name": "checklist backup (not the panel)",
"watched": false
},
{
"kind": "launchagent",
"label": "org.waterschurch.checklist-weekly-health",
"name": "checklist health (not the panel)",
"watched": false
},
{
"kind": "disabled",
"label": "org.waterschurch.translate",
"name": "Church Translate (must NOT run here)"
}
],
"networks": [
{
"iface": "en0",
"use": "LAN"
},
{
"iface": "en1",
"use": "LAN"
},
{
"iface": "en17",
"use": "Dante"
},
{
"iface": "en20",
"use": "Netgear management"
}
]
},
"prop": {
"ssh": "napropresenter@10.1.14.225",
"name": "ProPresenter Mac",
"os": "mac",
"role": "ProPresenter, its stage and Prop TV pages, Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "ProPresenter",
"name": "ProPresenter (newest installed)",
"http": "http://10.1.14.225:1025/"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-ProPresenter-Mac"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "midi_session",
"name": "NA ProP"
}
]
},
"tracks": {
"ssh": "waterschurchmedia@10.1.3.227",
"name": "Tracks Mac",
"os": "mac",
"role": "Ableton (tracks and FX lighting cues), Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Live",
"name": "Ableton Live 11 Suite"
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-Tracks"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
},
{
"kind": "midi_session",
"name": "NA Tracks"
}
]
},
"translation": {
"ssh": "studio@10.1.7.39",
"name": "NA Translation",
"os": "mac",
"role": "Church Translate, Dante sound card",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Church Translate",
"name": "Church Translate"
},
{
"kind": "launchagent",
"label": "org.waterschurch.translate.engine",
"name": "the translation engine",
"watched": false
},
{
"kind": "daemon",
"process": "DanteVirtualSoundcard",
"name": "Dante Virtual Soundcard",
"dante_name": "NA-Translation"
},
{
"kind": "helper_dvs",
"name": "the DVS helper"
}
]
},
"studiob": {
"ssh": "studiob@10.1.13.175",
"name": "Studio B Mac Studio",
"os": "mac",
"role": "Pro Tools",
"runs": [
{
"kind": "sshd"
},
{
"kind": "app",
"process": "Pro Tools",
"name": "Pro Tools"
},
{
"kind": "helper_solo",
"label": "org.waterschurch.status-panel.solo-mode",
"name": "the Pro Tools solo-mode helper"
},
{
"kind": "midi_session",
"name": "Studio B Mac Studio",
"peer_of": "NA Tracks"
}
]
},
"lighting": {
"ssh": "media@10.1.10.206",
"name": "Lighting PC",
"os": "windows",
"role": "Vista, Resolume Arena, rtpMIDI",
"pingable": false,
"notes": "Keep the network profile on Public: rtpMIDI's Bonjour rules only allow Public.",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start Vista",
"exe": "Vista.exe"
},
{
"kind": "task",
"name": "Start Arena",
"exe": "Arena.exe"
},
{
"kind": "task",
"name": "Start rtpMIDI",
"exe": "rtpMIDI.exe"
},
{
"kind": "service",
"name": "rtpMIDIService"
},
{
"kind": "midi_session",
"name": "Lighting PC",
"peer_of": "NA Ingest"
},
{
"kind": "artnet",
"name": "Vista Art-Net",
"source": "10.1.10.206"
}
],
"manual_done": {
"public_profile": {
"by": "Chris",
"on": "2026-10-08"
},
"vista_autoload": {
"by": "Chris",
"on": "2026-10-08"
}
}
},
"livestream": {
"ssh": "media@10.1.9.126",
"os": "windows",
"mac": "6c:24:08:d7:fb:57",
"wake_broadcast": "10.1.255.255",
"name": "LiveStream PC",
"role": "OBS (YouTube)",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start OBS",
"exe": "obs64.exe",
"elevated": true
}
],
"manual_done": {
"bios_wol": {
"by": "Chris",
"on": "2026-10-08"
}
}
},
"bibletv": {
"ssh": "media@10.6.7.13",
"os": "windows",
"name": "Bible TV PC",
"role": "the Bible app on the sanctuary TV",
"pingable": false,
"notes": "Wi-Fi only; Ethernet recommended. Wi-Fi power saving is off.",
"runs": [
{
"kind": "sshd"
},
{
"kind": "task",
"name": "Start BibleApp",
"exe": "Bible App.exe",
"at_logon": true
},
{
"kind": "web",
"url": "http://10.6.7.13:8080/",
"name": "the Bible app's web page"
}
],
"manual_done": {
"wifi_power": {
"by": "Chris",
"on": "2026-10-11"
}
}
}
},
"gear": {},
"fixes": {
"propresenter": { "host": "prop", "short": "PROPRES", "label": "restart ProPresenter (newest installed)",
"run": "APP=$(ls -d /Applications/ProPresenter*.app | sort -V | tail -1); if pgrep -xq ProPresenter; then pkill -TERM -x ProPresenter; for i in 1 2 3 4 5 6 7 8 9 10; do pgrep -xq ProPresenter || break; sleep 1; done; pkill -KILL -x ProPresenter; sleep 1; fi; open \"$APP\"" },
"ableton": { "host": "tracks", "short": "ABLETON", "label": "start Ableton if it is not running, with the set it last had open",
"run": "pgrep -xq Live || { L=$(ls -td ~/Library/Preferences/Ableton/Live*/ | head -1); S=$(grep -a 'info: Loading document \"' \"${L}Log.txt\" | grep -v '/Templates/' | tail -1 | sed -E 's/^.*Loading document \"(.*)\"[^\"]*$/\\1/'); if [ -n \"$S\" ] && [ -f \"$S\" ]; then open -a 'Ableton Live 11 Suite' \"$S\"; else open -a 'Ableton Live 11 Suite'; fi; }" },
"translate": { "host": "translation", "short": "TRANSLATE", "label": "start Church Translate if it is not running",
"run": "pgrep -xq 'Church Translate' || open -a 'Church Translate'" },
"dvs_prop": { "host": "prop", "short": "DVS", "label": "restart Dante Virtual Soundcard on the ProPresenter Mac (its engine restarts; audio to and from that Mac drops for 5-10 s)", "run": "sudo -n /usr/local/sbin/status-panel-dvs-start && open -g -a 'Dante Virtual Soundcard'" },
"dvs_tracks": { "host": "tracks", "short": "DVS", "label": "restart Dante Virtual Soundcard on the Tracks Mac (its engine restarts; audio to and from that Mac drops for 5-10 s)", "run": "sudo -n /usr/local/sbin/status-panel-dvs-start && open -g -a 'Dante Virtual Soundcard'" },
"dvs_translation": { "host": "translation", "short": "DVS", "label": "restart Dante Virtual Soundcard on NA Translation (its engine restarts; audio to and from that Mac drops for 5-10 s)", "run": "sudo -n /usr/local/sbin/status-panel-dvs-start && open -g -a 'Dante Virtual Soundcard'" },
"dvs_ingest": { "kind": "local", "short": "DVS", "label": "restart Dante Virtual Soundcard on NA Ingest, then ProdCom (it keeps a dead DVS input otherwise)", "run": "sudo -n /usr/local/sbin/status-panel-dvs-start && open -g -a 'Dante Virtual Soundcard' || exit 1; sleep 5; pkill -TERM -x ProdCom; i=0; while pgrep -xq ProdCom && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProdCom && pkill -KILL -x ProdCom; sleep 1; open -g /Applications/ProdCom.app" },
"bridge": { "kind": "local", "short": "BRIDGE", "label": "restart the Resi bridge",
"run": "launchctl kickstart -k gui/$(id -u)/org.waterschurch.resi-propresenter || launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.waterschurch.resi-propresenter.plist" },
"captions": { "kind": "local", "short": "CAPTIONS", "label": "restart lobby captions (server and display)",
"run": "s=0; { launchctl kickstart -k gui/$(id -u)/org.waterschurch.lobby-captions || launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.waterschurch.lobby-captions.plist; } || s=1; { launchctl kickstart -k gui/$(id -u)/org.waterschurch.lobby-captions-display || launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.waterschurch.lobby-captions-display.plist; } || s=1; exit $s" },
"bibleapp": { "host": "bibletv", "short": "BIBLE APP", "label": "restart the Bible app on the Sanctuary TV PC (Windows: cmd.exe)",
"run": "taskkill /F /T /IM \"Bible App.exe\" >nul 2>&1 & ping -n 3 127.0.0.1 >nul & schtasks /Run /TN \"\\StatusPanel\\Start BibleApp\" >nul && ping -n 9 127.0.0.1 >nul && tasklist /NH /FI \"IMAGENAME eq Bible App.exe\" | find /I \"Bible App.exe\" >nul" },
"obs": { "host": "livestream", "short": "OBS", "label": "start OBS on the LiveStream PC if it is not running (wakes the PC if it is off), then reconnect Companion", "reconnect": true,
"run": "tasklist /NH /FI \"IMAGENAME eq obs64.exe\" | find /I \"obs64.exe\" >nul || (schtasks /Run /TN \"\\StatusPanel\\Start OBS\" >nul && ping -n 9 127.0.0.1 >nul && tasklist /NH /FI \"IMAGENAME eq obs64.exe\" | find /I \"obs64.exe\" >nul)" },
"arena": { "host": "lighting", "short": "ARENA", "label": "start Resolume Arena on the Lighting PC if it is not running, then reconnect Companion", "reconnect": true,
"run": "tasklist /NH /FI \"IMAGENAME eq Arena.exe\" | find /I \"Arena.exe\" >nul || (schtasks /Run /TN \"\\StatusPanel\\Start Arena\" >nul && ping -n 9 127.0.0.1 >nul && tasklist /NH /FI \"IMAGENAME eq Arena.exe\" | find /I \"Arena.exe\" >nul)" },
"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\" >nul && ping -n 9 127.0.0.1 >nul && tasklist /NH /FI \"IMAGENAME eq Vista.exe\" | find /I \"Vista.exe\" >nul)" },
"rtpmidi_start": { "host": "lighting", "short": "RTPMIDI", "label": "start rtpMIDI on the Lighting PC if it is not running (service, then tray app). A running rtpMIDI is never restarted: that drops every session.",
"run": "(sc query rtpMIDIService | find \"RUNNING\" >nul || net start rtpMIDIService) && (tasklist /NH /FI \"IMAGENAME eq rtpMIDI.exe\" | find /I \"rtpMIDI.exe\" >nul || schtasks /Run /TN \"\\StatusPanel\\Start rtpMIDI\")" },
"midi_reconnect": { "kind": "midi_connect", "short": "RECONNECT", "label": "reconnect the peer to the network MIDI session it dropped out of (like Connect in Audio MIDI Setup); the address is where it was last seen, else the check's \"address\"" },
"caption_screen": { "kind": "local", "short": "CAPTION SCREEN", "label": "restart the lobby caption screen (display app only)", "run": "launchctl kickstart -k gui/$(id -u)/org.waterschurch.lobby-captions-display || launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.waterschurch.lobby-captions-display.plist" },
"solo_afl": { "host": "studiob", "short": "PT SOLO", "label": "set Pro Tools on the Studio B Mac Studio back to Solo Mode AFL + Latch (clicks Options > Solo Mode)",
"run": "touch \"$HOME/Library/Application Support/status-panel/solo-mode.fix\"; sleep 3; ! grep -q '\"bad\":true' \"$HOME/Library/Application Support/status-panel/solo-mode.json\"" },
"atem_audio": { "kind": "atem", "part": "audio", "short": "ATEM AUDIO", "label": "set the switcher's audio inputs back to the restore file (Resi on input 16 on, the rest as saved)" },
"atem_camera": { "kind": "atem", "part": "camera", "short": "ATEM CAMERA", "label": "set the cameras' settings back to the restore file (only what differs)" },
"atem_midi": { "kind": "local", "short": "ATEM MIDI", "restart_ok": true,
"label": "turn off MIDI control in ATEM Software Control (quits and reopens the app; the switcher is not affected)",
"run": "was=$(pgrep -f \"ATEM Software Control.app/Contents/MacOS\"); pkill -TERM -f \"ATEM Software Control.app/Contents/MacOS\"; i=0; while pgrep -fq \"ATEM Software Control.app/Contents/MacOS\" && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; defaults write \"com.blackmagic-design.ATEM Software Control\" midiEnabled -bool false; [ -z \"$was\" ] || open -g -a \"ATEM Software Control\"; [ \"$(defaults read \"com.blackmagic-design.ATEM Software Control\" midiEnabled)\" = 0 ]" },
"spotify_play": { "kind": "spotify", "short": "SPOTIFY", "label": "play the Christian EDM 2026 playlist in Spotify on NA Ingest (opens Spotify if it is closed)" },
"proddash": { "kind": "local", "short": "PRODDASH", "label": "restart ProdDash (its launcher stops its server cleanly)",
"run": "pkill -TERM -x ProdDash; i=0; while pgrep -xq ProdDash && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; open -g /Applications/ProdDash.app" },
"prodcom": { "kind": "local", "short": "PRODCOM", "label": "restart ProdCom (transcription; lobby captions blank for 5-15 s)",
"run": "pkill -TERM -x ProdCom; i=0; while pgrep -xq ProdCom && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProdCom && pkill -KILL -x ProdCom; sleep 1; open -g /Applications/ProdCom.app" },
"ableton_restart": { "host": "tracks", "short": "ABLETON", "label": "restart Ableton on the Tracks Mac and reopen the set it had open (unsaved changes are lost; Live may ask to recover on the Tracks Mac)", "conn": "ableton", "reconnect": true, "timeout": 60,
"run": "L=$(ls -td ~/Library/Preferences/Ableton/Live*/ | head -1); S=$(grep -a 'info: Loading document \"' \"${L}Log.txt\" | grep -v '/Templates/' | tail -1 | sed -E 's/^.*Loading document \"(.*)\"[^\"]*$/\\1/'); pkill -TERM -x 'Live'; i=0; while pgrep -xq 'Live' && [ $i -lt 30 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq 'Live' && pkill -KILL -x 'Live'; sleep 1; if [ -n \"$S\" ] && [ -f \"$S\" ]; then open -a 'Ableton Live 11 Suite' \"$S\"; else open -a 'Ableton Live 11 Suite'; fi" },
"translate_restart": { "host": "translation", "short": "TRANSLATE", "label": "restart Church Translate on NA Translation (and its translation server)", "timeout": 60,
"run": "pg=$(ps -o pgid= -p \"$(pgrep -x 'Church Translate' | head -1)\" 2>/dev/null | tr -d ' '); pkill -TERM -x 'Church Translate'; i=0; while pgrep -xq 'Church Translate' && [ $i -lt 30 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq 'Church Translate' && pkill -KILL -x 'Church Translate'; [ -n \"$pg\" ] && [ \"$pg\" != \"$(ps -o pgid= -p $$ | tr -d ' ')\" ] && kill -KILL -- -\"$pg\" 2>/dev/null; sleep 1; open -a 'Church Translate'" },
"tascam_reconnect": { "kind": "reconnect", "conn": "tascam", "short": "TASCAM", "verify_seconds": 20, "hung_note": "HUNG - POWER\nCYCLE IT",
"label": "reconnect Companion to the Tascam; if it still does not answer but pings, its control port has hung: power-cycle it at the rack" },
"hyperdeck": { "kind": "hyperdeck", "short": "HYPERDECK", "verify_seconds": 15, "hung_note": "STILL OFFLINE\nHOLD AGAIN",
"label": "turn Companion's connection to that HyperDeck off and on (what gets a restarted deck green); never reboots the deck" }
},
"atem": {
"host": "10.1.10.2",
"node": "/Applications/Companion [0-9]*.app/Contents/Resources/node-runtimes/node22/bin/node",
"library": "~/Library/Application Support/companion/modules/bmd-atem-*/node_modules/atem-connection",
"reference": "atem-reference.xml"
},
"auto_fix": {
"windows": [{ "days": ["sun"], "start": "06:30", "end": "13:30" }],
"after_seconds": 20, "max_tries": 2, "retry_seconds": 90, "pause_after_network_seconds": 60,
"restart_connections": true,
"fixes": ["hyperdeck", "tascam_reconnect", "midi_reconnect", "rtpmidi_start", "vista", "arena", "obs",
"ableton", "translate", "dvs_prop", "dvs_tracks", "dvs_translation", "solo_afl",
"atem_audio", "atem_camera", "atem_midi", "spotify_play"]
},
"restart_page": {
"page": 20, "page_name": "20\\nRestart", "jump_pos": [2, 6], "back_pos": [2, 6],
"keys": [
{ "id": "rs_dvs_prop", "label": "DVS PROP", "pos": [0, 1], "fix": "dvs_prop" },
{ "id": "rs_dvs_tracks", "label": "DVS TRACKS", "pos": [0, 2], "fix": "dvs_tracks" },
{ "id": "rs_dvs_transl", "label": "DVS TRANSL", "pos": [0, 3], "fix": "dvs_translation" },
{ "id": "rs_dvs_ingest", "label": "DVS INGEST", "pos": [0, 4], "fix": "dvs_ingest" },
{ "id": "rs_propres", "label": "PROPRESENTER", "pos": [1, 1], "fix": "propresenter" },
{ "id": "rs_ableton", "label": "ABLETON", "pos": [1, 2], "fix": "ableton_restart", "watch": ["ableton", "conn:ableton"] },
{ "id": "rs_translate", "label": "TRANSLATE", "pos": [1, 3], "fix": "translate_restart", "watch": ["translate"] },
{ "id": "rs_spotify", "label": "SPOTIFY", "pos": [1, 4], "fix": "spotify_play" },
{ "id": "rs_prodcom", "label": "PRODCOM", "pos": [2, 1], "fix": "prodcom" },
{ "id": "rs_proddash", "label": "PRODDASH", "pos": [2, 2], "fix": "proddash" },
{ "id": "rs_captions", "label": "CAPTIONS", "pos": [2, 3], "fix": "captions", "watch": ["caption_screen"] },
{ "id": "rs_bridge", "label": "BRIDGE", "pos": [2, 4], "fix": "bridge" },
{ "id": "rs_tascam", "label": "TASCAM", "pos": [3, 1], "fix": "tascam_reconnect", "watch": ["conn:tascam"] }
]
},
"tiles": [
{ "id": "all", "label": "ALL", "pos": [0, 1], "kind": "master" },
{ "id": "rec", "label": "REC", "pos": [0, 2], "members": ["hd1", "hd2", "hd3", "hd4", "hd5", "hd6", "tascam"] },
{ "id": "audio", "label": "AUDIO", "pos": [0, 3], "members": ["x32", "dante"] },
{ "id": "rf", "label": "RF", "pos": [0, 4], "members": ["axient1", "axient2", "ulxd", "psm1", "psm2", "psm3"] },
{ "id": "show", "label": "SHOW", "pos": [0, 5], "members": ["midi", "apps", "vista", "spotify"] },
{ "id": "video", "label": "VIDEO", "pos": [0, 6], "members": ["atem", "led", "arena"] },
{ "id": "stream", "label": "STREAM", "pos": [0, 7], "members": ["obs", "resi"] },
{ "id": "hd1", "label": "HD1", "pos": [1, 1], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_1", "fix": { "conn": "hyperdeck" } }] },
{ "id": "hd2", "label": "HD2", "pos": [1, 2], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_2", "optional": true, "fix": { "conn": "hyperdeck" } }] },
{ "id": "hd3", "label": "HD3", "pos": [1, 3], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_3", "fix": { "conn": "hyperdeck" } }] },
{ "id": "hd4", "label": "HD4", "pos": [1, 4], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_4", "optional": true, "fix": { "conn": "hyperdeck" } }] },
{ "id": "hd5", "label": "HD5", "pos": [1, 5], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_5", "fix": { "conn": "hyperdeck" } }] },
{ "id": "hd6", "label": "HD6", "pos": [1, 6], "hold_always": "hyperdeck", "checks": [{ "type": "hyperdeck", "conn": "HyperDeck_6", "fix": { "conn": "hyperdeck" } }] },
{ "id": "tascam", "label": "TASCAM", "pos": [1, 7], "hold_always": "tascam_reconnect", "checks": [
{ "type": "tascam", "conn": "tascam", "fix": "tascam_reconnect" },
{ "type": "ping", "conn": "tascam", "host": "10.1.11.74", "name": "TASCAM" }
] },
{ "id": "x32", "label": "X32", "pos": [2, 1], "checks": [{ "type": "conn", "conn": "x32" }] },
{ "id": "dante", "label": "DANTE", "pos": [2, 2], "checks": [
{ "type": "dante", "conn": "audinate-dantecontroller",
"fix": { "NA-ProPresenter-Mac": "dvs_prop", "NA-Tracks": "dvs_tracks", "NA-Translation": "dvs_translation",
"STUDIO-A-Ingest": "dvs_ingest",
"*": "dante-auto" },
"devices": {
"FOH-DiGiCo-DMI-1": "DMI-1", "FOH-DiGiCo-DMI-2": "DMI-2", "BOH-WING": "WING", "BOH-DQ-Rack": "DQ RACK",
"BOH-AD4Q-A": "AD4Q-A", "BOH-AD4Q-B": "AD4Q-B", "STUDIO-A-X32": "STA X32",
"STUDIO-A-Resi-AJA-SDI": "RESI AJA", "STUDIO-A-Ingest": "INGEST", "NA-Translation": "TRANSL",
"STUDIO-B-RedNet-TNX": "STB TNX", "STUDIO-B-TB": "STB TB", "STUDIO-B-TB-MON": "STB TB MON",
"STUDIO-B-MON": "STB MON", "STUDIO-B-SOLO-MON": "STB SOLO", "STUDIO-B-Tascam": "STB TASCAM",
"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": "midi_reconnect", "address": "10.1.10.206:5004" },
{ "type": "midi_peer", "session": "NA Ingest", "peer": "SuperRack-LiveBox", "tag": "SUPERRACK", "fix": "midi_reconnect", "address": "10.1.13.140:5004" },
{ "type": "midi_peer", "host": "tracks", "session": "NA Tracks", "peer": "Lighting PC", "tag": "FX LIGHTS", "fix": "midi_reconnect", "address": "10.1.10.206:5004" },
{ "type": "midi_peer", "host": "tracks", "session": "NA Tracks", "peer": "SuperRack-LiveBox", "tag": "TRK LIVEBOX", "fix": "midi_reconnect", "address": "10.1.13.140:5004" },
{ "type": "midi_peer", "host": "tracks", "session": "NA Tracks", "peer": "Studio B Mac Studio", "tag": "TRK STUDIO B", "fix": "midi_reconnect", "address": "\tStudio B Mac Studio\tlocal." },
{ "type": "midi_peer", "host": "prop", "session": "NA ProP", "peer": "Lighting PC", "tag": "PROP LIGHTS", "fix": "midi_reconnect", "address": "10.1.10.206:5004" },
{ "type": "conn", "conn": "lighting-midi", "tag": "COMPANION MIDI" },
{ "type": "mdns", "instance": "Lighting PC", "name": "LIGHT PC MIDI", "fix": "rtpmidi_start" },
{ "type": "mdns", "instance": "NA Tracks", "name": "TRACKS MIDI" },
{ "type": "midi_rx", "source": "Network NA Ingest Listen", "name": "TRACKS IN" }
] },
{ "id": "spotify", "label": "SPOTIFY", "pos": [2, 7], "hold_always": "spotify_play", "checks": [
{ "type": "spotify", "fix": "spotify_play" }
] },
{ "id": "vista", "label": "VISTA", "pos": [2, 5], "checks": [
{ "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", "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" },
{ "type": "remote", "host": "translation", "cmd": "pgrep -xq 'Church Translate'", "msg": "TRANSLATE NOT RUNNING", "fix": "translate" },
{ "type": "ping", "host": "10.1.3.227", "name": "TRACKS MAC" },
{ "type": "http", "url": "http://10.1.14.225:1025/", "msg": "PROP TV DOWN", "interval_seconds": 5, "fix": "propresenter" },
{ "type": "http", "url": "http://10.6.7.13:8080/", "msg": "BIBLE APP DOWN", "interval_seconds": 5, "fix": "bibleapp" },
{ "type": "conn", "conn": "BibleTV", "tag": "BIBLE OSC" },
{ "type": "remote", "host": "studiob", "cmd": "! grep -q '\"bad\":true' \"$HOME/Library/Application Support/status-panel/solo-mode.json\"", "msg": "PT SOLO NOT AFL", "fix": "solo_afl" },
{ "type": "remote", "host": "studiob", "cmd": "f=\"$HOME/Library/Application Support/status-panel/solo-mode.json\"; [ $(( $(date +%s) - $(stat -f %m \"$f\") )) -lt 20 ] && grep -q '\"trusted\":true' \"$f\"", "msg": "PT SOLO CHECK OFF" }
] },
{ "id": "service", "label": "ALARMS", "pos": [3, 0], "kind": "service" },
{ "id": "atem", "label": "ATEM", "pos": [3, 1], "checks": [
{ "type": "conn", "conn": "ATEM" },
{ "type": "atem", "part": "audio", "msg": "ATEM AUDIO WRONG", "fix": "atem_audio" },
{ "type": "atem", "part": "camera", "msg": "ATEM CAMERA WRONG", "fix": "atem_camera" },
{ "type": "pref", "domain": "com.blackmagic-design.ATEM Software Control", "key": "midiEnabled", "want": "0", "msg": "ATEM SW MIDI ON", "fix": "atem_midi" }
] },
{ "id": "obs", "label": "OBS", "pos": [3, 2], "checks": [{ "type": "conn", "conn": "OBS-Youtube", "service_only": true, "fix": "obs" }] },
{ "id": "resi", "label": "RESI", "pos": [3, 3], "checks": [
{ "type": "conn", "conn": "RESI_Decoder", "tag": "DECODER" },
{ "type": "ping", "host": "10.1.10.203", "name": "DECODER" },
{ "type": "ping", "host": "10.1.10.202", "name": "ENCODER" },
{ "type": "http", "url": "http://10.1.10.202/", "msg": "ENCODER WEB DOWN", "interval_seconds": 10 },
{ "type": "conn", "conn": "resi-studio-cues" },
{ "type": "http", "url": "https://central.resi.io/", "name": "CLOUD" }
] },
{ "id": "net", "label": "NET", "pos": [3, 4], "kind": "network" },
{ "id": "ingest", "label": "INGEST", "pos": [3, 5], "checks": [
{ "type": "launchd", "label": "org.waterschurch.resi-propresenter", "name": "BRIDGE", "fix": "bridge" },
{ "type": "launchd", "label": "org.waterschurch.lobby-captions", "name": "CAPTIONS", "fix": "captions" },
{ "type": "launchd", "label": "org.waterschurch.lobby-captions-display", "name": "CAPTION SCREEN", "fix": "caption_screen" },
{ "type": "http", "url": "http://127.0.0.1:24480/api/v1/ping", "msg": "PRODCOM DOWN", "interval_seconds": 5, "fix": "prodcom" },
{ "type": "process", "match": "/Applications/ProdDash.app/Contents/MacOS/ProdDash", "name": "PRODDASH", "fix": "proddash" },
{ "type": "http", "url": "http://127.0.0.1:24500/", "msg": "PRODDASH DOWN", "interval_seconds": 10, "fix": "proddash" },
{ "type": "disk", "path": "/", "warn_gb": 25, "err_gb": 8 }
] },
{ "id": "led", "label": "LED", "pos": [3, 6], "checks": [
{ "type": "conn", "conn": "VX1000", "tag": "VX1000" },
{ "type": "conn", "conn": "UHDJr", "tag": "UHDJR" },
{ "type": "ping", "host": "10.1.14.116", "name": "VX1000" },
{ "type": "ping", "host": "10.1.14.115", "name": "UHDJR" }
] },
{ "id": "arena", "label": "ARENA", "pos": [3, 7], "checks": [{ "type": "conn", "conn": "arena", "fix": "arena" }] },
{ "id": "axient1", "label": "AXIENT 1", "checks": [{ "type": "shure", "conn": "Axient_1", "channels": 4 },
{ "type": "ping", "conn": "Axient_1", "host": "10.1.1.101", "name": "AXIENT 1" }] },
{ "id": "axient2", "label": "AXIENT 2", "checks": [{ "type": "shure", "conn": "Axient_2", "channels": 4 },
{ "type": "ping", "conn": "Axient_2", "host": "10.1.1.102", "name": "AXIENT 2" }] },
{ "id": "ulxd", "label": "ULXD", "checks": [{ "type": "shure", "conn": "ULXD-4", "channels": 1 },
{ "type": "ping", "conn": "ULXD-4", "host": "10.1.1.106", "name": "ULXD" }] },
{ "id": "psm1", "label": "PSM 1", "checks": [{ "type": "psm", "conn": "PSM_1", "channels": 2 },
{ "type": "ping", "conn": "PSM_1", "host": "10.1.1.103", "name": "PSM 1" }] },
{ "id": "psm2", "label": "PSM 2", "checks": [{ "type": "psm", "conn": "PSM_2", "channels": 2 },
{ "type": "ping", "conn": "PSM_2", "host": "10.1.1.104", "name": "PSM 2" }] },
{ "id": "psm3", "label": "PSM 3", "checks": [{ "type": "psm", "conn": "PSM_3", "channels": 2 },
{ "type": "ping", "conn": "PSM_3", "host": "10.1.1.105", "name": "PSM 3" }] }
]
}