[Modul] Tvheadend

Version Version License Check Style

Tvheadend

Bindet einen Tvheadend-Server (TV-Server und Videorekorder) in IP-Symcon ein: Aufnahmen, Programm, Tuner, Streams, Netzwerke und Kanäle als Variablen, Funktionen und Kacheln für die Visualisierung, live über den WebSocket des Servers.

Funktionen

  • Zustand des Servers: erreichbar, Version, Speicherplatz, nächste Aktivität, Ruhezustand, Wake-on-LAN
  • Aufnahmen: geplante, laufende, fertige und fehlgeschlagene, Aufnahmen anlegen, stoppen und löschen
  • Serien- und Zeitaufnahmen anlegen, bearbeiten, ein- und ausschalten und löschen
  • Programm: was läuft gerade und was kommt als Nächstes, Suche, Aufnahme direkt aus dem Programm
  • Tuner mit Belegung, Signal und SNR, laufende Streams und verbundene Clients
  • Netzwerke, Muxe und Scans, Kanalverwaltung, Probleme im Serverlog und EPG-Grabber
  • Kacheln für die Kachel-Visualisierung: Programmführer, Aufnahmen, Aufnahmeregeln, Tuner, Streaming und Kanäle
  • Live-Daten über den WebSocket des Servers

Enthaltene Instanzen

  • Tvheadend Gateway: Verbindet IP-Symcon mit dem Server, alle anderen Instanzen hängen daran.
  • Tvheadend Konfigurator: Legt die übrigen Instanzen an.
  • Tvheadend Server: Zeigt Online-Zustand, Version, Speicherplatz und Ruhezustand, weckt den Server per Wake-on-LAN.
  • Tvheadend DVR: Zeigt geplante, laufende, fertige und fehlgeschlagene Aufnahmen, mit Kachel.
  • Tvheadend EPG: Zeigt, was auf ausgewählten Kanälen läuft, sucht im Programm und nimmt Sendungen auf.
  • Tvheadend EPG-Kachel: Programmführer für die Visualisierung als Zeitleiste oder Liste.
  • Tvheadend Aufnahmeregeln: Verwaltet Serien- und Zeitaufnahmen im Formular, in einer Kachel und per Funktion.
  • Tvheadend Tuner: Alle Tuner mit Belegung, Signal und SNR, mit Listen-Kachel.
  • Tvheadend Streaming: Zeigt laufende Streams und Clients, trennt Clients, mit Kachel.
  • Tvheadend Netzwerk: Zeigt ein Netzwerk mit Muxen, Services und Scan-Stand und startet Scans.
  • Tvheadend Diagnose: Sammelt auffällige Zeilen aus dem Serverlog und zeigt EPG-Grabber.
  • Tvheadend Kanalverwaltung: Schaltet Kanäle ein und aus und benennt sie um, mit Kachel.

Screenshots

Voraussetzungen

  • IP-Symcon 9.0 oder neuer (die maximierte Ansicht der Kacheln gibt es ab 9.1)
  • Tvheadend 4.3 oder neuer
  • Ein Benutzer des Tvheadend-Webinterfaces, für Status, Tuner, Netzwerke und Streams mit Administratorrechten

Installation

Die Installation erfolgt über den Module Store.

Dokumentation und Changelog

Die Konfiguration, die Variablen und die Funktionen stehen in der README auf GitHub.

Das Changelog steht im zweiten Beitrag dieses Threads.

Spenden

Dieses Modul ist für die nicht kommerzielle Nutzung kostenlos. Schenkungen als Unterstützung für den Autor werden gerne angenommen:

PayPal Amazon Wunschzettel

Wünsche und Rückmeldungen gerne hier im Thread. :slight_smile:

Grüße,
Kai

Changelog

19.10.2026 - Version 2.0.1

Fixes

  • Die Instanzen mit Kachel (Kanäle, DVR, Aufnahmeregeln, EPG, Streaming und Tuner) lassen sich unter Symcon 9.0 wieder anlegen, vorher brach das Anlegen mit „Undefined constant“ ab.

12.10.2026 - Version 2.0

Neu

  • Neue Module für Tvheadend ab Version 4.3: Gateway, Konfigurator, Server, DVR, EPG, EPG-Kachel, Aufnahmeregeln, Tuner, Streaming, Netzwerk, Diagnose und Kanalverwaltung. Das bisherige Modul bleibt unverändert erhalten.
  • Live-Daten über den WebSocket des Servers: Aufnahmen, Streams, Tuner, Speicherplatz und mehr aktualisieren sich ohne Wartezeit, auch wenn der Server den WebSocket nur kurz hält.
  • Gateway mit Konfigurator: Zugangsdaten stehen nur im Gateway, der Konfigurator legt alle weiteren Instanzen an.
  • Server: Online-Zustand, Version, Speicherplatz, nächste Aktivität, „Ruhezustand erlaubt“ und Wake-on-LAN.
  • DVR: Zähler, nächste Aufnahme und Kachel mit geplanten, fertigen und fehlgeschlagenen Aufnahmen. Aufnahmen lassen sich anlegen, stoppen und löschen.
  • EPG: Variablen für „Läuft jetzt“ und „Als Nächstes“ ausgewählter Kanäle, Suche im Programm, Aufnahme aus dem Programm und Stream-Adressen.
  • EPG-Kachel: Programmführer für die Kachel-Visualisierung als Zeitleiste oder Liste nach Kanalnummer, mit Aufnehmen, Serie aufnehmen und Löschen.
  • Aufnahmeregeln: Alle Serien- und Zeitaufnahmen anlegen, bearbeiten, ein- und ausschalten und löschen, im Formular, in einer Kachel und per Funktion.
  • Tuner: Alle Tuner in einer Instanz mit Belegung, Signal, SNR und Bitrate, optional als Variablen je Tuner, mit Listen-Kachel.
  • Streaming: Wer schaut gerade was, Clients trennen, mit Kachel.
  • Netzwerk: Muxe, Scan-Ergebnisse, Services und Scan-Warteschlange je Netzwerk, Scan starten.
  • Diagnose: Probleme im Serverlog und EPG-Grabber samt nächsten Abrufen.
  • Kanalverwaltung: Kanäle nach Kanalnummer aktivieren, deaktivieren und umbenennen, im Formular, in einer Kachel und per Funktion.
  • Kacheln übernehmen Schrift, Größe, Ränder und Farben der Kachel-Visualisierung. Die maximierte Ansicht gibt es ab IP-Symcon 9.1.
  • Achtung: Die neuen Module sind eigenständig. Bestehende Instanzen des bisherigen Moduls laufen weiter, ein Umstieg bedeutet, neue Instanzen über Gateway und Konfigurator anzulegen. Ausschalten des Servers per SSH gibt es in den neuen Modulen nicht.

27.08.2020: Version 1.8.1
Fix - Wenn Server offline ist, kommen keine Fehlermeldungen mehr.
26.06.2019: Version 1.8
Fix - Beim Versuch den Server herunterzufahren, wenn er offline ist, gab es eine Fehlermeldung im Log.
15.02.2019: Version 1.7
Übersetzungen hinzugefügt
07.02.2019: Version 1.6
Fix - module.json für IPS 5.1 angepasst
27.08.2018: Version 1.5
Neu - Wenn keine Aufnahme vorhanden sind, werden die Variablen geleert
Fix - Bei Subscriptions wird nun geprüft ob die Array Keys vorhanden sind.
27.08.2018: Version 1.4
Neu - Variable hinzugefügt, ob eine Aufnahme aktiv ist oder nicht, eine Vorlaufzeit und Nachlaufzeit kann in den Einstellungen gesetzt werden.
Fix - Fehler bei den Aufnahmen gefixt (subtitle wurde nicht gefunden)
26.08.2018: Version 1.3
Fix - Username und Passwort für das Webinterface konnten nicht eingestellt werden.
15.08.2018: Version 1.2
Fix - Konfigurationsformular JSON
Fix - Errors wenn keine User mit dem TVH Server verbunden sind
31.07.2018: Version 1.1
Anzahl der Subscriptions hinzugefügt

Vielen Dank Kai.
Die Anzahl der Abonnements wäre noch interessant.

Gruß
Dieter

Hallo Dieter,

Version 1.1 ist online mit der Anzahl der Subscriptions.

Grüße,
Kai

Super
Danke Kai

Bei mir kommt noch anhängender Fehler in der Webconsole. In der Legacy lässt sich alles konfigurieren.tvheadend.png

Danke, habe nur mit der Legacy Konsole getestet. Mein Fehler, schaue ich mir an.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Hallo Kai,

habe gerade Dein Modul mal installiert.
Leider werden bei mir nicht die Variablen für die anstehenden Aufnahmen etc. aktualisiert.

Muß da das phpseclib noch installiert werden ? wenn ja wie ?

viele Grüße
Georg

Hallo,

der Fehler ist behoben. :wink:

Grüße,
Kai

Sorry, habe deine Frage übersehen.
Funktioniert es jetzt? Nein, die Lib wird mitgeliefert.

Grüße,
Kai

Hallo Kai,

leider nein - es werden nur die Variablen für Power, Online, Verbindungen , subscriptions und subscriptions info aktualisiert jedoch im Monitor kommt beim Aktualisieren nur folgendes

24.08.2018 09:02:09 | VariableManager | [EG\Wohnzimmer \TVHeadend\Tvheadend\Power] = false
24.08.2018 09:02:07 | VariableManager | [EG\Wohnzimmer \TVHeadend\Tvheadend\Power] = true

Die Variablen für nächste Aufnahme etc wurden noch nie aktualisiert.

viele Grüße
GEorg

Hallo,

kannst du mal folgendes tun?

Ruf mal diese URL im Browser auf:

http://admin:passwort@IP:Port/api/dvr/entry/grid_upcoming?sort=start

Natürlich Benutzer, Passwort, IP und Port anpassen.

Bekommst du dort eine Ausgabe?

Edit: Ich habe die Beiträge mal in den Modul Thread verschoben.

Grüße,
Kai

Hallo Kai,

dort bekomme ich als Ausgabe alle anstehenden Aufnahmen korrekt gelistet.
Auch eine Neuinstallation des Moduls ergab keine Änderung.
Ich habe IPS 5 in Betrieb.
Fehlt da womöglich eine Library ?

Viele Grüße
Georg

Nein, das wird alles mitgeliefert.
Ich baue mal Debug Meldungen an der Stelle ein. Würdest du dann nochmal für mich testen?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

ja klar !

Georg

Hallo,

so ich habe jetzt eine Debug Ausgabe hinzugefügt, nun sollte eine Anzahl der vorhandene Elemente im Array zu sehen sein.
Kannst du das mal testen und mir ggf. auch mal das JSON von der API zukommen lassen?
Also das was du im Browser sehen konntest.

Grüße,
Kai

Hallo Kai.

Da ich das gleiche Verhalten habe wie Georg klinke ich mich mal mit ein :).

Hier einige Eckdaten:

  • Aktuellste Version von deinem TVheadend Modul installiert
  • IPS 5.0 auf Raspberry Pi
  • TV-Headend läuft auf meiner QNAP NAS
  • TV-Headend läuft in Version 4.1-2141~g01c26fc

Ich habe eine Aufnahme testweise über das TVH Webinterface programmiert, was ich auch im API Abruf erkennen kann.
http://<IP>:9981/api/dvr/entry/grid_upcoming?sort=start


{
  "entries": [
    {
      "uuid": "b17a0dfaa84c13ec65e715540c4f0590",
      "enabled": true,
      "start": 1535180400,
      "start_extra": 0,
      "start_real": 1535180370,
      "stop": 1535182200,
      "stop_extra": 0,
      "stop_real": 1535182200,
      "duration": 1800,
      "channel": "be7a335dced7000d656d7bf37404fe64",
      "channel_icon": "",
      "channelname": "n-tv",
      "title": {
        "ger": "Nachrichten"
      },
      "disp_title": "Nachrichten",
      "disp_subtitle": "",
      "description": {
        "ger": "n-tv informiert über die aktuellen Top-Themen des Tages ..."
      },
      "disp_description": "n-tv informiert über die aktuellen Top-Themen des Tages ...",
      "pri": 2,
      "retention": 0,
      "removal": 0,
      "config_name": "69c62c25fcd0bc8c4295721f0c2c4de2",
      "creator": "192.168.x.y",
      "filename": "/share/Filme/TV-Aufnahmen/Nachrichten-5.ts",
      "errorcode": 0,
      "errors": 0,
      "data_errors": 530,
      "dvb_eid": 44128,
      "noresched": false,
      "norerecord": false,
      "autorec": "",
      "autorec_caption": "",
      "timerec": "",
      "timerec_caption": "",
      "parent": "",
      "child": "",
      "content_type": 0,
      "broadcast": 3145389,
      "url": "dvrfile/b17a0dfaa84c13ec65e715540c4f0590",
      "filesize": 17529120,
      "status": "Running",
      "sched_status": "recording",
      "duplicate": 0
    }
  ],
  "total": 1
}

Die Debug Ausgabe zeigt auch einen Eintrag. Die Variablen werden aber nicht aktualisiert (siehe angehängte Screenshots).

Interessant ist, wenn ich zwei oder drei Aufnahmen testweise programmiere, dann ändert sich die Debug Ausgabe nicht (RecordingsCount=1).
Das JSON vom Webservice listet allerdings schon alle drei Aufnahmen inkl. Details auf.

Gruß
Thorsten

Vielen Dank für die ausführliche Antwort.
Kannst du mir bitte noch eine Ausgabe des JSON mit zwei Aufnahmen zukommen lassen?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Kein Problem.
Hier das JSON mit zwei geplanten Aufnahmen.


{
  "entries": [
    {
      "uuid": "f011755cf0fcc721e72befd1ef3fe5c3",
      "enabled": true,
      "start": 1535186700,
      "start_extra": 0,
      "start_real": 1535186670,
      "stop": 1535189400,
      "stop_extra": 0,
      "stop_real": 1535189400,
      "duration": 2700,
      "channel": "86c6e8c112edcb4ea96453e0d78fc349",
      "channel_icon": "",
      "channelname": "zdf_neo HD",
      "title": {
        "ger": "Terra X"
      },
      "disp_title": "Terra X",
      "subtitle": {
        "ger": "Der Limes (1) - Grenzwall gegen die Barbaren"
      },
      "disp_subtitle": "Der Limes (1) - Grenzwall gegen die Barbaren",
      "description": {
        "ger": "Eine schwer befestigte Grenzanlage zieht sich vor beinahe 2000 Jahren quer durch ganz Europa - der Limes. Ein Bollwerk von Nordbritannien bis zum Schwarzen Meer.Das Team von \"Schliemanns Erben\" spürt den immer noch vorhandenen Resten des Schutzwalls nach und begleitet Wissenschaftler, die mit ausgefallenen Ideen das Geheimnis des Limes zu enträtseln versuchen. Wozu diente der Grenzwall gegen die Barbaren?HD-ProduktionAltersfreigabe: 6"
      },
      "disp_description": "Eine schwer befestigte Grenzanlage zieht sich vor beinahe 2000 Jahren quer durch ganz Europa - der Limes. Ein Bollwerk von Nordbritannien bis zum Schwarzen Meer.Das Team von \"Schliemanns Erben\" spürt den immer noch vorhandenen Resten des Schutzwalls nach und begleitet Wissenschaftler, die mit ausgefallenen Ideen das Geheimnis des Limes zu enträtseln versuchen. Wozu diente der Grenzwall gegen die Barbaren?HD-ProduktionAltersfreigabe: 6",
      "pri": 2,
      "retention": 0,
      "removal": 0,
      "config_name": "69c62c25fcd0bc8c4295721f0c2c4de2",
      "creator": "192.168.x.y",
      "filename": "",
      "errorcode": 0,
      "errors": 0,
      "data_errors": 0,
      "dvb_eid": 33888,
      "noresched": false,
      "norerecord": false,
      "autorec": "",
      "autorec_caption": "",
      "timerec": "",
      "timerec_caption": "",
      "parent": "",
      "child": "",
      "content_type": 8,
      "broadcast": 3090525,
      "url": "",
      "filesize": 0,
      "status": "Scheduled for recording",
      "sched_status": "scheduled",
      "duplicate": 0
    },
    {
      "uuid": "21bee7cce04e234724328b3494035d2c",
      "enabled": true,
      "start": 1535187416,
      "start_extra": 0,
      "start_real": 1535187386,
      "stop": 1535190718,
      "stop_extra": 0,
      "stop_real": 1535190718,
      "duration": 3302,
      "channel": "5c2dba59714ffaef32e6f007ca409483",
      "channel_icon": "",
      "channelname": "kabel eins",
      "title": {
        "ger": "Castle"
      },
      "disp_title": "Castle",
      "subtitle": {
        "ger": "Eine Rose für immer und ewig, Crime-Serie, USA 2009"
      },
      "disp_subtitle": "Eine Rose für immer und ewig, Crime-Serie, USA 2009",
      "description": {
        "ger": "Am Morgen einer Hochzeit wird die Brautjungfer tot aufgefunden. Castle muss feststellen, dass die Braut seine längst verflossene Liebe Kyra ist. Die Ermittler versuchen herauszufinden, warum die Brautjungfer die Hochzeit verhindern wollte. Unterdessen sieht sich Beckett mit der Tatsache konfrontiert, dass sie offenbar Gefühle für Castle hegt und eifersüchtig reagiert. Castle kommt unterdessen seine Objektivität abhanden - schon bald beschuldigt er den Verlobten des Mordes ...

Regie: Bryan Spicer
Drehbuch: Alexi Hawley, Terri Miller, Terence Winter
Komponist: Robert Duncan

Darsteller:
Nathan Fillion (Richard Castle)
Stana Katic (Kate Beckett)
Molly C. Quinn (Alexis Castle)
Seamus Dever (Kevin Ryan)
Susan Sullivan (Martha Rodgers)
Jon Huertas (Javier Esposito)
Alyssa Milano (Kyra Blaine)
Brady Smith (Greg Murphy)
Kimberly Estrada (Lisa Bloomfield)"
      },
      "disp_description": "Am Morgen einer Hochzeit wird die Brautjungfer tot aufgefunden. Castle muss feststellen, dass die Braut seine längst verflossene Liebe Kyra ist. Die Ermittler versuchen herauszufinden, warum die Brautjungfer die Hochzeit verhindern wollte. Unterdessen sieht sich Beckett mit der Tatsache konfrontiert, dass sie offenbar Gefühle für Castle hegt und eifersüchtig reagiert. Castle kommt unterdessen seine Objektivität abhanden - schon bald beschuldigt er den Verlobten des Mordes ...

Regie: Bryan Spicer
Drehbuch: Alexi Hawley, Terri Miller, Terence Winter
Komponist: Robert Duncan

Darsteller:
Nathan Fillion (Richard Castle)
Stana Katic (Kate Beckett)
Molly C. Quinn (Alexis Castle)
Seamus Dever (Kevin Ryan)
Susan Sullivan (Martha Rodgers)
Jon Huertas (Javier Esposito)
Alyssa Milano (Kyra Blaine)
Brady Smith (Greg Murphy)
Kimberly Estrada (Lisa Bloomfield)",
      "pri": 2,
      "retention": 0,
      "removal": 0,
      "config_name": "69c62c25fcd0bc8c4295721f0c2c4de2",
      "creator": "192.168.x.y",
      "filename": "",
      "errorcode": 0,
      "errors": 0,
      "data_errors": 0,
      "dvb_eid": 46596,
      "noresched": false,
      "norerecord": false,
      "autorec": "",
      "autorec_caption": "",
      "timerec": "",
      "timerec_caption": "",
      "parent": "",
      "child": "",
      "content_type": 0,
      "broadcast": 3155908,
      "url": "",
      "filesize": 0,
      "status": "Scheduled for recording",
      "sched_status": "scheduled",
      "duplicate": 0
    }
  ],
  "total": 2
}

Disclaimer: Die gezeigten Aufnahmen sind zufällige Testeinträge und lassen keinen Rückschluss auf meinen tatsächlichen und simplen TV Geschmack zu :smiley:

Mir ist noch eine Kleinigkeit aufgefallen.
Mit der aktuellsten IPS Version sehe ich alle 20 Sekunden (Update Intervall) folgenden Fehler im Logfile.

Also ab in den Code und schauen was in Zeile 90 passiert:

[ol]
[li]$this->SendDebug(FUNCTION." Recordings Count",count($recordings),0);
[/li][li]$recordings ==> $TVH->[b]getUpcomingRecordings/b
[/li][li]return $this->request(„api/dvr/entry/grid_upcoming?sort=start“);
[/li][/ol]

Die API liefert JSON zurück, welches aber offensichtlich nicht als zählbares Array gewertet wird.
Ich dachte erst, dass das passiert, wenn keine Aufnahme programmiert ist, weil das JSON dann so aussieht:

{"entries":[],"total":0}

Aber der Fehler tritt auch auf, wenn eine Aufnahme programmiert wurde.

Gruß
Thorsten