Idee: HbbTV notification plugin

  • Hallo zusammen,


    Ich wollte kurz in die Runde fragen, was ihr von dieser Idee haltet. Das Thema wurde in den letzten 5-7 Jahren in vers. Foren angerissen, aber wohl nie verfolgt . Ich würde mich mal an einer Implementierung versuchen, da ich das Feature schon "vermisse".


    Meine Situation:


    Neben der Dreambox, nutze ich im Gästezimmer einen LG TV mit Sattuner und default HbbTV Implementierung. Dort wird, wie bei eigentlich allen HbbTV Geräten, beim Zap kurz das HbbTV "Popup" angezeigt. Das hat bei den "Privaten" eher weniger Wert, aber bei ARD, ZDF, Arte, etc. finde ich die "Vorschläge/Optionen" schon ganz hilfreich. Auch weil oft direkt mit der Mediathek verlinkt (z.B. arte).


    Bei der Dreambox ist es ja anders, was natürlich auch Vorteile hat (weniger CPU-Last beim Zapping, keine passive Rückmeldung an die Sender, etc.)


    Nun zur Idee: Natürlich habe ich auch kein Interesse dran, dass immer HbbTV permanent geladen ist, da dass bei der Dream einige Funktionen blockiert. Deshalb folgender Ansatz:


    • Nach dem Zapp, direkt nach dem ausblenden der Infobar, lädt das Plugin kurz das HbbTV-Plugin (simulation der roten Taste) und zeigt für ca. 5-7 Sekunden HbbTV an. Wird keine Farbtaste gedrückt, wird HbbTV wieder geschlossen (Simulation Exit Taste).
    • Wird in der 5-7 sekündigen Anzeigezeit ein fabiger Knopf gedrückt, dann wird der automatische Exit nicht ausgeführt und HbbTV kann normal genutzt werden.


    Nice to have:

    • Eingrenzen der kurzen HbbTV Anzeige auf bestimme Sender
    • Ausschalten der HbbTV Plugin LCD Displayanzeige, zumindest für die automatische Funktion.


    Ich werde in den kommenden Wochen mich an einer Implementierung versuchen. Wenn interesse besteht, und ein brauchbares Ergebnis erreicht wird, kann ich das Plugin auch hier einstellen. Leider werde ich es, aus Zeitgründen, nicht wirklich supporten können. Was meint ihr zu der Idee? Hat das vielleicht schon mal jemand versucht (und ist gescheitert). Meine Recherchen haben nichts ergeben.


    Viele Grüße


    Skullmonkey

  • Okay ;) Dann lege ich am WE los.


    Erster Gedanke: Ich werde mich in InfoBarGenerics(.py) in die Class InfoBarShowHide einklinken (überschreiben) und nach hide() die HbbTV Notification einbauen. Mal sehen wies läuft...


    Gut das ich gerade eine Reservebox da habe, dann muss ich die Familie nicht im Wohnzimmer vom Fernseh fernhalten;)

  • Reichi :


    Habe jetzt ein wenig rumgespielt. Meine erste Idee wäre im Plugin InfoBarGenerics.InfoBarShowHide.__onHide(self) zu überschreiben und dort unter

    self.__state = self.STATE_HIDDEN


    InfobarHbbtvPlugin.__init__(self)

    InfobarHbbtvPlugin.startHbbtv(self)


    einzufügen. Das funktioniert soweit auch. Um festzustellen ob ein Senderwechsel erfolgte und nicht nur OK gedrückt wurde, würde ich mir ref und nref (mittels self.session.nav.getCurrentlyPlayingServiceReference()) an den entsprechenden Stellen merken und abfragen. Das muss ich testweise noch einhängen.


    Nun stellen sich mir aber einige Frage:


    1. Ist das auch aus objektiver Sicht die geeignete Stelle?
    2. Es gibt kein Stop oder close def in der HbbTV Klasse. Muss ich wirklich den Exit Knopfdruck simulieren im Code oder gibt es einen besseren Weg. Ich vermute, dass __onClose(self) genutzt werden müsste. aber eErhlich gesagt bin ich durch die def noch nicht ganz durchgestiegen. Das mit der app verstehe ich schon, aber ich kriege es nicht aufgerufen -> GS. Keine Ahnung was ich da falsch mache.
    3. Mit 5-7 Sekunden Anzeigezeit werden wir nicht auskommen, ich denke die Einbeldung muss eher 20-30 Sekunden werden.
    4. Wenn ich die 20-30 Sekunden mit einem eTimer realisiere, kann ich den einfach mit dem Druck auf eine HbbTV Taste (Farbtasten) unterbrechen? In dem Fall soll ja das zeitgesteuere Close nicht ausgeführt werden.

    Falls jemand helfen kann, gerne; ansonsten "forsche" ich weiter ;)


    So long Skullmonkey911

  • Ist das auch aus objektiver Sicht die geeignete Stelle?

    Fast ;).

    ich würden den "onHide" callback nutzen (vom Screens.Screen.Screen geerbt).

    also sowas wie InfoBar.instance.onHide.append(self._showHbbTVMethod)


    um auf ein einblenden der InfoBar zu reagieren kann man parallell dazu auch noch sowas machen InfoBar.instance.onShow.append(self._hideHbbTV)


    Beim deaktivieren des Plugins zur Laufzeit halt nicht vergessen die callbacks wieder aus den listen zu entfernen.

    Auf diesem Weg musst du nämlich überhaupt nix an der InfoBar manipulieren und kannst als reines Plugin agieren :)


    Es gibt kein Stop oder close def in der HbbTV Klasse. Muss ich wirklich den Exit Knopfdruck simulieren im Code oder gibt es einen besseren Weg. Ich vermute, dass __onClose(self) genutzt werden müsste. aber eErhlich gesagt bin ich durch die def noch nicht ganz durchgestiegen. Das mit der app verstehe ich schon, aber ich kriege es nicht aufgerufen -> GS. Keine Ahnung was ich da falsch mache.


    Jeder Screen hat u.A. eine close() Methode und noch ganz viele Callbacks etc.

    Da der HbbTV Browser ein Screen ist, hat auch dieser dieser sie :).

    Siehe dazu /usr/lib/enigma2/python/Screens/Screen.py


    Mit 5-7 Sekunden Anzeigezeit werden wir nicht auskommen, ich denke die Einbeldung muss eher 20-30 Sekunden werden.

    Das denke ich auch. Das könntest du aber sehr leicht Konfigurierbar machen, so dass jeder es so einstellen kann wie es ihm Beliebt.

    Ich denke Ausblendezeiten im Bereich von 10 - 40 Sekunden in 10-Sekunden Schritten sollten aber völlig ausreichen. Zuviele Optionen machen die Konfiguration für die meisten User sehr schnell unverständlich/zu aufwändig.


    Man müsste mal sehen ob die HbbTV Imlementierungen nicht sogar selbst den "hide" callback rufen. Ich hab das grad nicht mehr im Kopf. Wenn ja, so könnte man eventuell auf den "offiziellen Timeout" reagieren.

    Wenn ich die 20-30 Sekunden mit einem eTimer realisiere, kann ich den einfach mit dem Druck auf eine HbbTV Taste (Farbtasten) unterbrechen? In dem Fall soll ja das zeitgesteuere Close nicht ausgeführt werden.

    Ja, eTimer hat eine "stop()" Methode welche jeden laufenden Timer unterbricht.

    mfg ,
    Reichi