Live-TV: der Empfänger spricht eine andere Sprache als der Programmführer

Aus der Antwort von /media/grabbers/devices/1:

    {"channelKey":"6228f7f2364e02fa5ec8e51c-5fc706063f45c6002eab58a3",
     "deviceIdentifier":"300",
     "lineupIdentifier":"002"}

Der Programmführer kennt den Sender als `6228f7f2…-5fc706…`, der Tuner
als `300`. Die Zuordnung im Empfänger übersetzt zwischen beidem — und
genau diese Übersetzung habe ich nie benutzt. Jede Anfrage an den
Empfänger ging in der Sprache des Programmführers hinaus, und darauf gibt
es nur eine Antwort: 404.

Die Nummer am Empfänger steht jetzt an erster Stelle im Suchraum und im
Bericht. Der Empfänger ist ein HDHomeRun FLEX QUATRO mit vier Tunern; er
kennt Sender ausschließlich unter dieser Nummer.

Nebenbei aus derselben Ausgabe: /livetv/sessions antwortet mit size 0.
Die Route gibt es also — sie ist eine Liste. /livetv/sessions/<uuid> gibt
es nur, wenn die Sitzung vorher angelegt wurde, und deshalb war jeder
Abruf dort ein 404 ohne Aussagekraft.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-12 15:18:12 +02:00
co-authored by Claude Opus 5
parent 7987dbf9a4
commit 08e6e14534
3 changed files with 93 additions and 3 deletions
@@ -295,6 +295,36 @@ struct LiveTVGuideTests {
#expect(path == "/livetv/sessions/xyz/stream")
}
@Test("Die Zuordnung übersetzt zwischen Programmführer und Empfänger")
func translatesChannelKeyToDeviceChannel() {
// Der Programmführer kennt den Sender als `6228f7f2…-5fc706…`, der
// Tuner als `300`. Ohne diese Übersetzung spricht man den Empfänger
// in einer Sprache an, die er nicht versteht — und bekommt 404 auf
// alles. Genau daran ist das Einschalten reihenweise gescheitert.
let dvr = PlexDVR(
key: "2",
devices: [PlexTunerDevice(key: "1", channelMappings: [
PlexChannelMapping(
channelKey: "6228f7f2364e02fa5ec8e51c-5fc706063f45c6002eab58a3",
deviceIdentifier: "300",
lineupIdentifier: "002"
),
PlexChannelMapping(
channelKey: "6228f7f2364e02fa5ec8e51c-5fc705fa6b022a002d77f212",
deviceIdentifier: "299",
lineupIdentifier: "001"
),
])]
)
#expect(dvr.deviceChannel(forChannelKey: "6228f7f2364e02fa5ec8e51c-5fc706063f45c6002eab58a3") == "300")
#expect(dvr.deviceChannel(forChannelKey: "6228f7f2364e02fa5ec8e51c-5fc705fa6b022a002d77f212") == "299")
// Auch ohne den Vorsatz der Senderliste, denn die Kennung kommt je
// nach Quelle mit oder ohne ihn.
#expect(dvr.deviceChannel(forChannelKey: "5fc706063f45c6002eab58a3") == "300")
#expect(dvr.deviceChannel(forChannelKey: "unbekannt") == nil)
}
@Test("Die Sender des Tuners stehen unter DeviceChannel")
func readsDeviceChannelKey() async throws {
// Der Server lieferte 278 Sender, die Hülle verwarf sie: sie kannte