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
+14
View File
@@ -348,6 +348,20 @@ class TestChecks(unittest.TestCase):
self.assertIn(f, CONFIG["auto_fix"]["fixes"])
self.assertIn("midiEnabled -bool false", CONFIG["fixes"]["atem_midi"]["run"])
def test_resi_audio_silent(self):
"""An input stuck at the meter floor (2026-10-25: the Resi AJA passed no Dante audio and nothing said so):
red in auto-fix's hours or while a deck records, left alone at 4 AM when the console may be off."""
self.assertEqual(sp.atem_levels(CONFIG["atem"]["silence"]), {"levels": {"16": "Resi - RX1"}, "silence_seconds": 30})
engine = sp.Engine(CONFIG)
sunday_7am = datetime(2026, 10, 25, 7, 0).timestamp() # the tests' auto-fix hours start 06:30
quiet = ["input 16 Resi - RX1: no audio for 30 s or more"]
self.snap.atem = {"connected": True, "audio": [], "camera": [], "silence": quiet, "time": sunday_7am}
self.assertEqual(run_steps(engine, self.snap, sunday_7am, 4)[0]["atem"]["x"], "ATEM\nRESI AUDIO SILENT")
thursday_4am = datetime(2026, 10, 22, 4, 0).timestamp()
engine = sp.Engine(CONFIG)
self.snap.atem = dict(self.snap.atem, time=thursday_4am)
self.assertEqual(run_steps(engine, self.snap, thursday_4am, 4)[0]["atem"]["x"], "ATEM\nOK")
def test_atem_fix_goes_through_the_watcher(self):
class W:
def __init__(self): self.parts = []