ATEM: RESI AUDIO SILENT when input 16 has no audio for 30 s; log what the switcher has wrong

2026-10-25 the Resi AJA passed no Dante audio and the panel stayed green (DANTE only sees the card on the
network). atem_watch.js now asks the switcher for its Fairlight meters and reports a metered input
stuck at the floor (-100 dB); the ATEM key turns red in auto-fix's hours or while a deck records.
Differences (audio, camera, silence) are logged when they change, so a fault says what it was.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 06:18:52 -04:00
co-authored by Claude Opus 5.5
parent 0d655bff3c
commit e5587cb109
6 changed files with 86 additions and 12 deletions
+6 -2
View File
@@ -187,6 +187,9 @@ field("atem.library", "path", "~/Library/Application Support/companion/modules/b
field("atem.reference", "path", "atem-reference.xml", "The saved switcher file to keep in line with.", "ATEM")
field("atem.compare", "dict", None, "What to keep in line: audio fields and camera settings; blank = everything.",
"ATEM", advanced=True)
field("atem.silence", "dict", None, "Inputs whose audio must never be silent, metered on the switcher: "
"{\"inputs\": {\"16\": \"Resi - RX1\"}, \"seconds\": 30}. A silent one turns its check red in auto-fix's "
"hours or while a HyperDeck records.", "ATEM")
field("atem.source_folder", "path", "", "Where ATEM Software Control saves its files (for 'pick the newest').",
"ATEM", apply="none")
@@ -328,7 +331,8 @@ field("tiles[].checks[].max_silence_seconds", "int", None, "Amber/red after this
field("tiles[].checks[].cmd", "str", None, "The command run on that computer.", "Keys", advanced=True)
field("tiles[].checks[].shell", "enum", None, "sh (Macs) or cmd (PCs); blank = from the computer's kind.", "Keys",
advanced=True, options=["sh", "cmd"])
field("tiles[].checks[].part", "enum", None, "Which part of the switcher.", "Keys", options=["audio", "camera"])
field("tiles[].checks[].part", "enum", None, "Which part of the switcher (silence: a metered input has no audio).", "Keys",
options=["audio", "camera", "silence"])
field("tiles[].checks[].template", "str", None, "The builder this check was made with.", "Keys", advanced=True, apply="none")
field("tiles[].checks[].item", "str", None, "Which line of the weekly checklist (READY page).", "Ready")
field("tiles[].checks[].params", "dict", None, "The builder's fields.", "Keys", advanced=True, apply="none")
@@ -508,7 +512,7 @@ CHECKS = {
"module": None, "question": "Is a program running?", "words": "A command on another computer succeeds."},
"artnet": {"fields": ["source", "max_silence_seconds", "msg"], "subs": ["artnet"], "identity": ["source"], "module": None,
"question": "Is the lighting console sending?", "words": "Art-Net is arriving from the lighting program."},
"atem": {"fields": ["part", "msg"], "subs": ["audio", "camera"], "identity": ["part"], "module": "bmd-atem",
"atem": {"fields": ["part", "msg"], "subs": ["audio", "camera", "silence"], "identity": ["part"], "module": "bmd-atem",
"question": "Is a setting right?", "words": "The switcher matches the saved file."},
"ready": {"fields": ["item"], "subs": ["ready", "<what is missing>"], "identity": ["item"], "module": None,
"question": "Is the weekend ready?", "words": "A line of the weekly checklist, checked against Planning Center."},