Files
heos/zidoo.py
T
franzz 58a2dedc03
Deploy HEOS panel / deploy (push) Successful in 25s
Remove group management
2026-09-16 13:43:31 +02:00

40 lines
1.5 KiB
Python

"""Minimal client for the Zidoo media player's own HTTP API
The AVR only tells HEOS which of its inputs is selected, never what a
device plugged into one is actually showing, so a Zidoo's "now playing"
has to be asked for directly, over its own control API on port 9529.
Its video player only answers getPlayStatus while a video is actually
loaded -- with nothing playing, that route does not exist yet, which
looks the same here as the box being off or unreachable. Both are simply
"nothing to show" rather than an error: this is a nice-to-have on top of
an AVR input, not something the rest of the panel depends on.
"""
import json
import urllib.error
import urllib.request
class ZidooClient:
def __init__(self, host, port=9529, timeout=1.5):
self.base_url = f"http://{host}:{port}"
self.timeout = timeout
def now_playing(self):
"""{"song", "artist", "image"} for whatever video is loaded, in the
same shape a room's now-playing card already expects -- or None."""
try:
with urllib.request.urlopen(
f"{self.base_url}/ZidooVideoPlay/getPlayStatus", timeout=self.timeout
) as response:
payload = json.loads(response.read())
except (urllib.error.URLError, ValueError):
return None
if payload.get("status") != 200:
return None
title = (payload.get("video") or {}).get("title")
if not title:
return None
return {"song": title, "artist": None, "image": None}