HKS mit HA - Die Anleitung zum Nachbauen - #03.02 AppleTV

  • Zurück zur Startseite und zum Inhaltsverzeichnis

    Version: 2024-10-17

    #AppleTV


    Die offizielle AppleTV-Integration funktioniert recht gut und lässt sich regulär in HA hinzufügen.


    Wenn der AppleTV sich im selben Netz wie der HA-Server befindet sollte der AppleTV automatisch unter "Discoverd" angezeigt werden:


    pasted-from-clipboard.png



    "Configure" klicken und dem Assistenten folgen. (Pairing !)


    Am Ende werden dann zwei Entities erstellt.

    • media_player.appletv
    • remote.appletv

    Über diese können wir unseren AppleTV steuern und Daten abfragen.


    Damit sich der AppleTV schön unsere Heimkinosteuerung einfügt habe ich ein passendes Device-Dashboard erstellt.


    pasted-from-clipboard.png

  • Namor Noditz

    Hat den Titel des Themas von „HKS mit HA - Die Anleitung zum Nachbauen - #03.02 Tasmota SmartPlugs“ zu „HKS mit HA - Die Anleitung zum Nachbauen - #03.02 AppleTV“ geändert.
  • Out of the Box kann man AppleTV in HA mit der Standard Media-Player-Card einbinden:


    pasted-from-clipboard.png


    Diese sieht auch nett aus, ist aber recht limitert. Daher habe ich das erweiterte Dashboard mit folgenden Funktionen erstellt, die im folgenden beschrieben werden.


    1) Laufzeit


    2) Filmcover


    3) Filmsuche mit Google


    4) App-Auswahl


    5) Steuerung


    6) Lichtsteuerung bei Play/Pause


    7) Im letzten Post dieser Reihe findet ihr das Dashboard inkl. der Demos zum Download.

  • 1) Laufzeit


    Die ATV Media-Player Integration liefert beim Abspielen folgende Infos zur Laufzeit als Attribute:


    media_duration: 7543

    media_position: 2005

    media_position_updated_at: 2024-10-26T10:03:44.503052+00:00


    pasted-from-clipboard.png


    Die Standard Media-Player-Karte macht daraus einen Fortschrittsbalken (siehe oben), wir können aber daraus mehr Informationen ableiten.


    • Laufzeit, Position und Restzeit (in Minuten) und
    • Endzeit als Uhrzeit


    Im Dashboard kann das dann so dargestellt sein:


    pasted-from-clipboard.png



    Da die Integration die Daten nicht in dieser Form liefert, müssen wir diese vor der Anzeige aufbereiten.

    Dafür gibt es mehrere Möglichkeiten in HA. (zB. Helper)


    Ich finde es aber am einfachsten (nachvollziebarer), wenn man den Code dazu direkt in die Dashboards schreibt.

    Mit Custum:Button-Card geht das sehr gut, da man zur Erstellung von Werten im YAML JavaScript nutzen kann.


    Hier zwei Beispiele:

    a) Anzeige der aktuellen Uhrzeit

    Code
    type: custom:button-card
    name: |-
        [[[
            return new Date().toTimeString().slice(0, 5);
        ]]]

    Es wird ein control vom Type "custom:button-card" erstellt.

    Der Parameter "name" gibt an was am Button angezeigt wird. Dies kann ein statischer Text sein, oder ein Text welcher dyamisch berechnet wird.

    In diesem Beispiel wird die aktuelle Uhrzeit bestimmt und angezeigt.


    b) Anzeige der Laufzeit

    Hierfür müssen wir mehrere Werte kombinieren:

    - ermitteln der <mediaPosition> (Attribut des AppleTVs)

    - wann wurde dieser Wert zuletzt aktualisiert <mediaPositionUpdatedAt> (Attribut des AppleTVs)

    - was ist die aktuelle Zeit <currentTime>

    - berechnen der Laufzeit in Sekunden aus <currentTime> - <mediaPositionUpdatedAt> + <mediaPosition>

    - Umrechnen in Minuten

    - Wert zurückgeben und die Einheit "min" hinzufügen.


    Um alle Werte auf einem Button darzustellen bietet custom:Button-Card Layout-Funktionen


    Das lauffähige Demo-Dashboard dazu ist in der View "Demo 1" enthalten:


    pasted-from-clipboard.png

  • 2) Filmcover


    Die AppleTV-Integration liefert, wenn ein Film läuft, einen Link im Attribut <entity_picture>

    über welchen der Browser das Film-Cover laden kann.

    Um dieses Bild im Dashboard darzustellen sieht der YAML-Code so aus:



    Damit das Bild nicht leer ist, wenn nichts wiedergegeben wird, stelle ich in diesem Fall die Logos gerade aktiven Apps dar.



    Das lauffähige Demo-Dashboard dazu ist in der View "Demo 2" enthalten:

  • 3) Filmsuche mit Google


    Die AppleTV-Integration liefert, wenn ein Film läuft, den Titel des Films im Attribut <media_title>.

    Ich recherchiere gelegentlich die Film/Serien-Infos. Daher öffnet sich der Browser bei einem Klick auf den Film-Titel.


    Um die Suchergebnisse einzuschränken wird, wenn die Gesamtlaufzeit <media_duration> kleiner als 70min wird der Suchbegriff "Serie" zum Titel ergänzt, andernfalls "Film"


    Der YAML-Code dazu:



    Dieser Button ist unter anderen in der View "Demo 2" (letzter Button) enthalten.

  • 4) App-Auswahl


    Die AppleTV-Integration liefert die Liste aller direkt aufrufbaren Apps im Attribut <source_list>.

    pasted-from-clipboard.png


    a) Um zB. Netflix zu starten, wenn auf den Netflix-Button gedrückt wird, ist dies der YAML-Code.


    b) Um den Button zu markieren (einfärben), wenn Netflix aktiv ist, ist das Attribut <app_id> zu prüfen.

    Der YAML-Code des Netflix-Button wäre wie folgt zu erweitern:


    c) Um zu erkennen, dass ein App-Button gedrückt wurde, kann das Attribute <app_id> beim Klick vorab gesetzt werden. Dies ist praktisch, da das Attribute <app_id> sehr verzögert gesetzt wird.

    Hier für gibt es in der homecinema_nn-Integration die Funktion (=Service=Action) <homecinema_nn.call_action_and_set_attributes>

    Damit wird hier die App gestartet und das Attribute <app_id> vorab auf "Netflix+" gesetzt


    Damit erkenntlich dargestellt wird, ob Netflix am Starten ist oder bereits läuft, wird im <styles>-Block des Buttons der Hintergrund entsprechend dem Attribut gesetzt.


    Das lauffähige Demo-Dashboard dazu ist in der View "Demo 3" enthalten:


    pasted-from-clipboard.png

  • 5) Steuerung


    Um Fernbedienungskommandos an den AppleTV zu senden, wurde im Zuge der Installation der Integration die Entity <remote.appletv> eingerichtet.


    Um damit via Klick auf eine costum:button-card Button eine Kommando, in diesem Beispiel "home", zu senden, sieht der YAML-Code wie folgt aus:



    Die vollständige Liste der Kommandos finden wir hier

    https://www.home-assistant.io/integrations/apple_tv/#remote

    Wobei bei meinem ATV nicht alle Kommandos tun was man erwarten würde.


    Das lauffähige Demo-Dashboard dazu ist in der View "Demo 4" enthalten:

    pasted-from-clipboard.png

  • 6) Lichtsteuerung bei Play/Pause


    Es ist ja immer wieder Thema, wie man die Kinobeleuchtung bei Filmbetrieb abschaltet und bei Pause und Stop einschaltet.


    Mein Ansatz mit HA ist zur Zeit Folgender:

    1. Wird das Kino gestartet, wird das Licht automatisch eingeschalten.
    2. Sobald ein Player (UHD, AppleTV, etc.) in den Status "Play" wechselt wird das Licht ausgeschalten
    3. Ist kein Player im Status "Play" wir das Licht wieder eingeschalten
    4. Wird das Kino abgedreht, wird das Licht eingeschalten und es wird nach 5min wieder abgeschalten


    Leider lässt sich am <state> des AppleTV-Mediaplayers nicht eindeutig erkennen, ob tatsächlich ein Film bzw. eine Serie abgespielt wird.

    Der <state> "Playing" wird teilweise auch gesetzt werden, wenn eine Vorschau im Menü automatisch abgespielt wird und wenn bei Netflix das Serien-Intro spielt oder kurz vor Filmende ist der <state> machmal "idle".

    Eine 100%ig Lösung habe ich noch keine gefunden, aber "playing" schaltet bei mir zumindest nur dann das Licht ein, wenn ein Filmtitel vorhanden ist. Das hilft zumindest bei den Vorschauen, nicht aber beim Intro.


    Um das Licht abzuschalten nutze ich diese Automatisierung:

    Trigger: "Playing"

    Kriterum: "Media-Titel != Null" + "Beamer == Ein"


    Um das Licht einzuschalten ist diese Automatisierung eingerichtet:

  • 7) Hier der YAML-Code für das vorgestellte AppleTV-Dashboard.

    Dieses Dashboard besteht aus mehreren Views

    1. AppleTV homecinema_nn
      Erweitert mit den Funktionen der homecinema_nn-Integration
    2. AppleTV Solo
      Dashboard ohne homecinema_nn Funktionen
    3. MediaControl
      Standard MediaControl Karte
    4. Demo1 bis Demo4
      Vereinfachte Teile des Dashbards entlang der obigen Beschreibungen


    Vorbedingungen:

    1. Home Assistant (siehe Link)
    2. custom:button_card ist installiert (siehe Link)
    3. AppleTV-Integration installieren (siehe Post 1)

    Installation:

    1. Unter HomeAssistant/Settings/Dashboards ein neues Dashboard anlegen (Siehe Link)
    2. Das neue Dashboard öffnen
    3. In den Edit-Modus wechseln (Stift-Symbol rechts oben)
    4. Einstellungen Anzeigen (drei Punkte rechts oben)
    5. Raw-Configuration-Editor auswählen
    6. Den gesamten Inhalt des YAML-Codes (Anhang) in den Editor kopieren. Alle vorhandene Texte überschreiben.
    7. Die Bilder (AppleTV-Header, App-Logos) sind im Download nicht enthalten! Diese sind selbst zu erstellen (als png) und mit dem FileEditor unter /www/images/ abzulegen.
    8. Wird im YAML auf die Bilder referenziert, steht die IP-Adresse meines HA-Server im Link. Daher, diese IP-Adresse entsprechend ersetzen!
  • Super das werde ich mir demnächst genau anschauen.

    Dein Tip mit Licht ein nur wenn Titel >10min ist hat für mich das Problem der Menü Wiedergabe gelöst.


    Ich habe jetzt nur noch beim spulen das Problem dass das Licht angeht. Ist das bei dir auch so?


    mfg

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!