Spotify: alarms like every other key, any day (Sunday window is only for auto-fix)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-13 10:20:29 -04:00
co-authored by Claude Opus 5.5
parent bdec4251d9
commit 9a108b2508
6 changed files with 4 additions and 8 deletions
+1 -1
View File
@@ -120,7 +120,7 @@ The **page number key** on every page follows the ALL button. It's green when ev
| RESI | decoder (RossTalk connection and ping, 10.1.10.203); **encoder** (ping and its web page, 10.1.10.202, LAOEncoder); resi-studio-cues; Resi cloud reachable. Only shows they are on the network, not that the encoder is streaming. | | RESI | decoder (RossTalk connection and ping, 10.1.10.203); **encoder** (ping and its web page, 10.1.10.202, LAOEncoder); resi-studio-cues; Resi cloud reachable. Only shows they are on the network, not that the encoder is streaming. |
| 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). A blip **flashes amber** for 5 minutes, then goes by itself; press NET to stop the flashing, hold NET 2 s to clear it now. | | 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). A blip **flashes amber** for 5 minutes, then goes by itself; press NET to stop the flashing, hold NET 2 s to clear it now. |
| INGEST | the bridge (makes ProPresenter's stage screen count down to the next Resi cue), lobby captions server and caption screen, **ProdCom** (transcription, answering on :24480), ProdDash (running and its page on :24500); free disk | | INGEST | the bridge (makes ProPresenter's stage screen count down to the next Resi cue), lobby captions server and caption screen, **ProdCom** (transcription, answering on :24480), ProdDash (running and its page on :24500); free disk |
| SPOTIFY | Spotify on NA Ingest during Sunday services (06:30–13:30) must be playing the **Christian EDM 2026** playlist (`spotify:playlist:2uTpJVYQLFnKF1WnSOuco8`): **SPOTIFY CLOSED**, **NOT PLAYING**, or **WRONG PLAYLIST** (the song list comes from Spotify's public playlist page, refreshed every 6 h; it shows the first 100 of the playlist's songs, so the alarm needs 3 songs in a row that are not on it). Outside services it just shows PLAYING / PAUSED / CLOSED. Hold 2 s (and Sunday auto-fix) plays the playlist, opening Spotify first if needed. | | SPOTIFY | Spotify on NA Ingest must be playing the **Christian EDM 2026** playlist (`spotify:playlist:2uTpJVYQLFnKF1WnSOuco8`): **SPOTIFY CLOSED**, **NOT PLAYING**, or **WRONG PLAYLIST** (the song list comes from Spotify's public playlist page, refreshed every 6 h; it shows the first 100 of the playlist's songs, so the alarm needs 3 songs in a row that are not on it). Hold 2 s (and Sunday auto-fix) plays the playlist, opening Spotify first if needed. |
| RF (group) | Shure connections; battery ≤1 bar red, 2 bars amber; RF interference (only while that transmitter is on); PSM RF muted; each receiver pinged every 3 s ("AXIENT 1 NO PING" in about 6–9 s; Companion's Shure modules take 18–27 s to notice). The address is the one set on its Companion connection, read from Companion's settings every minute, so changing it there is enough; `"host"` in `config.json` is only the fallback. | | RF (group) | Shure connections; battery ≤1 bar red, 2 bars amber; RF interference (only while that transmitter is on); PSM RF muted; each receiver pinged every 3 s ("AXIENT 1 NO PING" in about 6–9 s; Companion's Shure modules take 18–27 s to notice). The address is the one set on its Companion connection, read from Companion's settings every minute, so changing it there is enough; `"host"` in `config.json` is only the fallback. |
A problem has to last 3 seconds before it shows, so one bad reading doesn't trigger an alarm. Recovery shows immediately. A problem has to last 3 seconds before it shows, so one bad reading doesn't trigger an alarm. Recovery shows immediately.
+1 -2
View File
@@ -170,8 +170,7 @@
{ "type": "midi_rx", "source": "Network NA Ingest Listen", "name": "TRACKS IN" } { "type": "midi_rx", "source": "Network NA Ingest Listen", "name": "TRACKS IN" }
] }, ] },
{ "id": "spotify", "label": "SPOTIFY", "pos": [2, 7], "hold_always": "spotify_play", "checks": [ { "id": "spotify", "label": "SPOTIFY", "pos": [2, 7], "hold_always": "spotify_play", "checks": [
{ "type": "spotify", "playlist": "spotify:playlist:2uTpJVYQLFnKF1WnSOuco8", "name": "Christian EDM 2026", "fix": "spotify_play", { "type": "spotify", "playlist": "spotify:playlist:2uTpJVYQLFnKF1WnSOuco8", "name": "Christian EDM 2026", "fix": "spotify_play" }
"windows": [{ "days": ["sun"], "start": "06:30", "end": "13:30" }] }
] }, ] },
{ "id": "vista", "label": "VISTA", "pos": [2, 5], "checks": [ { "id": "vista", "label": "VISTA", "pos": [2, 5], "checks": [
{ "type": "artnet", "source": "10.1.10.206", "max_silence_seconds": 5, "fix": "vista" } { "type": "artnet", "source": "10.1.10.206", "max_silence_seconds": 5, "fix": "vista" }
Binary file not shown.
Binary file not shown.
+1 -4
View File
@@ -424,14 +424,11 @@ def check_http(chk, snap, ctx):
def check_spotify(chk, snap, ctx): def check_spotify(chk, snap, ctx):
"""Spotify on NA Ingest must be playing the service playlist during the check's "windows" """Spotify on NA Ingest must be playing the service playlist."""
(Sunday service). Outside them the button just says what it is doing."""
sp_ = snap.spotify sp_ = snap.spotify
if sp_ is None: if sp_ is None:
return [("spotify", Result(OK))] # not read yet return [("spotify", Result(OK))] # not read yet
state = "CLOSED" if not sp_.get("running") else (sp_.get("state") or "?").upper() state = "CLOSED" if not sp_.get("running") else (sp_.get("state") or "?").upper()
if not in_windows(chk.get("windows", []), ctx["now"]):
return [("spotify", Result(OK if state == "PLAYING" else OFF, info=state))] # grey when not playing
if not sp_.get("running"): if not sp_.get("running"):
return [("spotify", Result(ERR, "SPOTIFY CLOSED", named=True))] return [("spotify", Result(ERR, "SPOTIFY CLOSED", named=True))]
if state != "PLAYING": if state != "PLAYING":
+1 -1
View File
@@ -115,7 +115,7 @@ class TestChecks(unittest.TestCase):
self.assertEqual(msg().level, sp.OK) # not read yet self.assertEqual(msg().level, sp.OK) # not read yet
s.spotify = {"running": False} s.spotify = {"running": False}
self.assertEqual(msg().msg, "SPOTIFY CLOSED") self.assertEqual(msg().msg, "SPOTIFY CLOSED")
self.assertEqual(msg({"now": WEDNESDAY}).level, sp.OFF) # grey, not an alarm, outside services self.assertEqual(msg({"now": WEDNESDAY}).msg, "SPOTIFY CLOSED") # alarms like every other key, any day
s.spotify = {"running": True, "state": "paused", "track": "spotify:track:a"} s.spotify = {"running": True, "state": "paused", "track": "spotify:track:a"}
self.assertEqual(msg().msg, "NOT PLAYING") self.assertEqual(msg().msg, "NOT PLAYING")
s.spotify["state"] = "playing" s.spotify["state"] = "playing"