Neues Modul für Tvheadend [70_Tvheadend.pm]

Begonnen von Quantum, 18 März 2018, 22:38:01

Vorheriges Thema - Nächstes Thema

Quantum

Hallo FHEM-Gemeinde,

schon seit Jahren verwendet ich als TV den Tvheadend Server in Verbindung mit Kodi -> https://github.com/tvheadend/tvheadend
Tvheadend bietet eine wenig bekannte und eher mager dokumentierte JSON Schnittstelle, über die so ziemlich alles manipuliert werden kann.
Das habe ich zum Anlass genommen hierfür ein Modul zu schreiben, das ich nun als ersten Wurf veröffentliche.

Siehe hierzu: https://github.com/Quantum1337/70_Tvheadend.pm und die commandref.

Was kann das Modul zu diesem Zeitpunkt ?

Intelligente Abfrage des EPGs. Was läuft gerade und als nächstes im TV?. Hierfür werden verschiedene readings angelegt. Titel,Beschreibung,Sendername,Start,Stop ...
Erneute Abfrage des EPG bei Ende einer Sendung.

Abfragen des EPGs mithilfe einer get Methode.

Anlegen eines DVR(Digital Video Recorder) Eintrags mithilfe einer EventId.

Mögliches Anwendungszenario: Abfrage von EPG Informationen aus der Ferne mithilfe eines Endgeräts bspw. Smartphone (Messenger), Email etc..
Daraufhin setzen enes DVR Eintrags mithilfe dieser Information aus der Ferne. Ohne zuhause zu sein, bzw. Kodi starten zu müssen.

Frühe Entwicklerversion. Fehlverhalten nicht ausgeschlossen !

Freundliche Grüße
Quantum

eldrik

Hi,

interessant!

Ich betreibe zu Hause auch schon seit längerem einen Tvheadend Server in Verbindung mit einem 4 Fach SAT IP Receiver und Kodi zur Wiedergabe, der SAT IP Receiver wird in Abhängigkeit der tatsächlichen Nutzung (10 min. vor anstehendem Recording oder bei angemeldeten Clients) mit einem Homematic Aktor eingeschaltet.

Bisher hole ich mir die Informationen zum nächsten Recording und angemeldeten Clients aus der status.xml von tvheadend, mit dem Modul httpmod (30Sek Frequenz) zusätzlich läuft auf dem tvheadend Server ein Shell Skript (5Sek Frequenz), welches einen FHEM Dummy schaltet insofern auf dem Tvheadend Server eine Clientverbindung festgestellt wird, woraufhin der SAT IP Receiver eingeschaltet wird.

Werde das Modul mal die Tage testen und würde mich freuen, wenn der JSON Schnittstelle weitere Informationen zum Client entlockt werden könnten und das Modul um weitere Readings angereichert werden könnte, dann könnte ich die diversen Abfragequellen, über das Modul konsolidieren.

Greetz
Eldrik

MadMax-FHEM

Hi, super!

Suche schon lange danach...

Betreibe auch TVHeadend Server mit TVHeadend-App (Smartphone und FireTV-Stick) bzw. KODI...

Vielen Dank!

Werd ich mal ausprobieren...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

So angelegt und läuft! :)

Danke!

Habe folgendes beim laden (reaload 70_Tvheadend.pm):


2018.03.19 23:15:31 1: PERL WARNING: Scalar value @entriesNow[0] better written as $entriesNow[0] at ./FHEM/70_Tvheadend.pm line 227.
2018.03.19 23:15:31 1: PERL WARNING: Scalar value @entriesNow[...] better written as $entriesNow[...] at ./FHEM/70_Tvheadend.pm line 228.
2018.03.19 23:15:31 1: PERL WARNING: Scalar value @args[0] better written as $args[0] at ./FHEM/70_Tvheadend.pm line 383.


Allerdings konnte ich in der Commandref nichts finden... ;)
Muss wohl erst "angelegt" bzw. "integriert" werden (also aus dem Modul "extrahiert")...

Daher habe ich im Modul selbst "gespickt" wie das Anlegen geht:

define myTVHeadend Tvheadend IP[:Port] [username passwort]

Was nicht so schön ist und vermutlich/hoffentlich nicht so bleibt: die Anmeldedaten sind in Klarschrift in der DEF...

Ansonsten werde ich mal testen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

eldrik

Hi,

bei mir stürzt FHEM kurz nach der Definition

define tvheadend Tvheadend 10.0.81.72:9981 user passwort

mit der Meldung

Can't use an undefined value as a HASH reference at ./FHEM/70_Tvheadend.pm line 215.

ab  :(

Greetz
Eldrik

Quantum

@eldrik Es lassen sich über die JSON Schnittstelle Infrormationen über upcoming/finished und failed recordings des DVRs entlocken.
Des Weiteren ist es auch möglich abzufragen, wieviele und wer sich genau mit dem Server zum Abfragezeitpunkt verbunden hat. Gepollt werden muss aber weiterhin.

Zu dem Fehler: Es sieht so aus, wie wenn er keine Informationen bekommt. Werde hier noch eine Abfrage implementieren, so dass er nicht mehr abstürzt.
Welche Tvheadend Version hast du ? Ich betreibe selbst kein IP-Gerät an Tvheadend und weis deshalb nicht wie die konfiguriert sind.
Geh mal ins Webinterace. Werden im EPG-Reiter Programminformationen angezeigt? Und sind im Reiter Configuration/Channel Kanalinformationen hinterlegt ?

@MadMax Schön das es funktioniert :). Die Warnungen sind nichts schlimmes. Werde das beim nächsten commit beheben.  Die define Information schreibe ich noch in die Readme.
Ich kann anbieten, dass das passwort base64 encodiert angegeben werden muss, dann ist es zumindest vor flüchtigen blicken geschützt. Welche Tvheadend Version hast du ?

@all Die JSON Schnittstelle befindet sich noch unter heavy development. Ich teste das ganze mit Tvheadend v4.0 mit 4.2 wurde die Schnittstelle erweitert. Ich weis allerdings nicht in wie weit diese abwärtskompatibel ist.

Freundliche Grüße
Quantum

eldrik

#6
Zitat von: Quantum am 20 März 2018, 10:13:06
@eldrik Es lassen sich über die JSON Schnittstelle Infrormationen über upcoming/finished und failed recordings des DVRs entlocken.
Des Weiteren ist es auch möglich abzufragen, wieviele und wer sich genau mit dem Server zum Abfragezeitpunkt verbunden hat. Gepollt werden muss aber weiterhin.

Zu dem Fehler: Es sieht so aus, wie wenn er keine Informationen bekommt. Werde hier noch eine Abfrage implementieren, so dass er nicht mehr abstürzt.
Welche Tvheadend Version hast du ? Ich betreibe selbst kein IP-Gerät an Tvheadend und weis deshalb nicht wie die konfiguriert sind.
Geh mal ins Webinterace. Werden im EPG-Reiter Programminformationen angezeigt? Und sind im Reiter Configuration/Channel Kanalinformationen hinterlegt ?


Hallo Quantum,

das weiterhin gepollt werden muss, damit hab ich gerechnet und dagegen spricht auch nichts solange dies nonblocking passiert und ich meine eigenen Konstrukte peu à peu abgelöst bekäme.

Ich nutze Tvheadend 4.3-1152, in der Tvheadend Web Oberfläche ist alles tuti, der EPG ist zugreifbar und es gibt auch passende Detailinformationen, mit dem angeschlossenen DVB Input Adapter hat dies wahrscheinilch weniger zu tun.

Sobald der Absturz abgefangen wird, kann ich in die Details gehen (falscher User, mangelnde Berechtigungen etc.) woran es liegen könnte.

Danke für deine Arbeit.

Edit:

Habe nun direkt deine letzte Version mit dem Bugfix zur Abfrage genommen und Fhem stürzt nicht mehr ab :) wenn ich einfach nur die Abfrage get Tvheadend EPGQuery absende erhalte ich auch einen Eintrag sowie eine Meldung im Fhem Log

arte HD
20.03 [10:35:00 - 11:25:00]
Superhelden
Keine Informationen verfügbar
EventId: 67112891


2018.03.20 11:20:19.804 1: PERL WARNING: Use of uninitialized value $args[1] in concatenation (.) or string at ./FHEM/70_Tvheadend.pm line 355.

Eine Abfrage auf get Tvheadend EPGQuery 10:Sat liefert

ro7 MAXX
20.03 [10:46:18 - 11:41:22]
Polizeieinsatz Alaska
Keine Informationen verfügbar
EventId: 67124867
Pro7 MAXX
20.03 [11:41:36 - 12:37:05]
Polizeieinsatz Alaska
Keine Informationen verfügbar
EventId: 67124868
SAT.1
20.03 [11:58:13 - 12:59:38]
Anwälte im Einsatz
Keine Informationen verfügbar
EventId: 67124848
Pro7 MAXX
20.03 [12:37:19 - 13:32:20]
Polizeieinsatz Alaska
Keine Informationen verfügbar
EventId: 67124869
SAT.1
20.03 [12:59:38 - 13:59:55]
Anwälte im Einsatz
Keine Informationen verfügbar
EventId: 67124849
PHOENIX HD
20.03 [16:45:00 - 17:30:00]
Wie werden wir morgen alle satt?
Keine Informationen verfügbar
EventId: 67116684
SAT.1
20.03 [17:30:00 - 17:59:33]
Schicksale / oder SAT.1 Regional-Magazine
Keine Informationen verfügbar
EventId: 67121561
SAT.1 Gold
20.03 [19:23:55 - 19:46:28]
K 11 - Kommissare im Einsatz
Keine Informationen verfügbar
EventId: 67123591
SAT.1 Gold
20.03 [19:46:28 - 20:14:24]
K 11 - Kommissare im Einsatz
Keine Informationen verfügbar
EventId: 67123592
SAT.1
20.03 [19:55:43 - 20:14:33]
SAT.1 Nachrichten
Keine Informationen verfügbar
EventId: 67124876


Das wäre doch erst einmal das erwartete Ergebnis oder?

Greetz
Eldrik

MadMax-FHEM

Zitat von: Quantum am 20 März 2018, 10:13:06
@MadMax Schön das es funktioniert :). Die Warnungen sind nichts schlimmes. Werde das beim nächsten commit beheben.  Die define Information schreibe ich noch in die Readme.
Ich kann anbieten, dass das passwort base64 encodiert angegeben werden muss, dann ist es zumindest vor flüchtigen blicken geschützt. Welche Tvheadend Version hast du ?

Freundliche Grüße
Quantum

Hmmm, macht es für den Anwender komplizierter und führt gegebenenfalls zu neuen "Fehlern"/Problemen...

Aktuell stört es mich nicht, da ich das Modul erst mal auf meinem Testsystem laufen habe und mit meinem Test-TVHeadend-Server verbunden habe ;)

Denke aber, wenn es ein offizielles Modul werden soll (und das wäre schön), dann sollte es evtl. wie bei anderen Modulen sein:

- Ablage verschlüsselt (echodevice.pm). Aber auch da wird bereits nach anderer "Ablage" und anderem "Anlegen" gefragt/hingewiesen...

- set-Befehl zur Übergabe von User/Passwort und dann verschlüsselte Ablage (z.B. Fritzbox-Modul)


TVHeadend: HTS Tvheadend 4.2.5-49~g8973d48e5 auf einem PI3 mit Raspbian Stretch lite (frisch vor einigen Tagen installiert)


Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Quantum

ok. Werde mir das mit der Verschlüsselung mal genauer anschauen. Vielen Dank für die Info!

@eldrik Habe dir eine PM geschrieben. Ist besser wenn wir das Detail Problem über diesen Weg lösen, ansonsten explodiert der Thread :)

Freundliche Grüße
Quantum

CoolTux

Hallo Quantum,

Ich habe mir erlaubt für Dein Modul einen Patch zu schreiben. In erster Linie werden ein paar FHEM Eigenheiten hier korrigiert.
$hash->{helper}{http} statt $hash->{helper}->{http}

Eventuell ist es ja hilfreich für Dich. Das Problem mit Username und Passwort in der DEF kannst Du ganz einfach erschlagen in dem Du die DEF neu erstellst nachdem Du Dir die Daten gezogen hast.
Ich musste aber feststellen das Du vieles an Code doppelt hast und da wo es besser wäre mehr zu machen hast Du kurze Formen gewählt. eingebettete Subroutinen und so. Das macht es sehr schwer Deinen Code zu folgen und zu interpretieren was da genau passieren soll.
Zum Beispiel das angehängte return an den Logausgaben, fast hätte ich nicht verstanden was da genau gemacht werden soll.


Solltest Du Fragen haben oder Hilfe brauchen einfach melden.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Quantum

Hallo CoolTux,

hab mir deinen Patch angeschaut. Hab ein paar Sachen übernommen. Allerdings nicht alles.
Werd dir bei Zeit mal ne PM schreiben, dann können wir darüber reden.

Das noch einiges wiederholt wird, ist mir bewusst und ist auf der Agenda. Ich wollte erstmal schauen ob überhaupt Interesse an einem solchen Modul besteht,
bevor ich "ünnötige" Arbeit in Codeoptimierung investiere. Das Modul ist alles, aber noch längst nicht perfekt :).

Freundliche Grüße
Quantum

CoolTux

Können wir gerne machen.
Jetzt verstehe ich auch Deinen Code nachdem ich gerade noch mal in Deinem git geschaut habe.

$entries = decode_json($data)->{entries};

Ich würde hier dennoch über einen eval Aufruf nachdenken.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Quantum

freut mich, dass du dich in den Code einliest :).
Eval-Umgebung wird noch reinkommen. One step after the other :).

Freundliche Grüße
Quantum

Quantum

#13
ich möchte euch meine Arbeit der letzten Tage nicht vorenthalten. So habe ich gerade die Commits gepushed.

Neue Features:
-> GET Funktion zur Abfrage von Kanälen, die Tvheadend kennt
-> GET Funktion um aktuelle Verbindungen abzufragen.

-> Neues Attribut um die EPG readings zu filtern.
-> Neues Attribut um bestimmte GET Funktionen zu pollen.
-> Neues Attribut um den polling Intervall festzulegen.

Bekannte Probleme:
-> Wenn Verbindung zum Server verloren geht, wird das polling und das updaten des EPG abgebrochen. Kann zZ nur durch ein redefine wieder gestartet werden. Arbeite aber an einer Lösung

Ich bitte ausgiebig zu testen. Danke !

Freundliche Grüße
Quantum


eldrik

Hi,

danke für die neue Version, ich hab mit den neuen Möglichkeiten gespielt und konnte erst einmal keine Probleme feststellen :)

Der Attribut EPGChannelList fehlt scheinbar noch in der Commandref.

Greetz
Eldrik