homebridge-apple-tv-remote

  • So, jetzt revidiere ich meine Aussage. Ich habe mal geschaut was der Fehler innerhalb der .js genau besagt.. Letztendlich läuft alles darauf hinaus, dass sich mein Kommando nicht innerhalb eines Arrays befindet (hatte die eckigen Klammern nicht berücksichtigt, da ich nur einen Befehl wie "play" senden wollte). Gleiches muss dann auch bei der Verwendung von Shortcuts beachtet werden, d.h.:


    - Haupttext anfordern: JSON

    - Array hinzufügen mit dem "titel" commands

    - Objekte -> neues Objekt hinzufügen -> Text -> "command (play/pause...)"


    Dann geht es auch. Für einzelne Befehle muss ich sagen, läuft die Kommunikation über das Plugin nicht schneller als direkt über pyatv. Bei mehreren aufeinanderfolgenden Befehlen wird allerdings auf CLI zurückgegriffen, sodass es dann doch schneller gehen sollte (beispielsweise die Navigation durch ein Menü). Muss jeder selber wissen, wieviel bzw. wie oft durch das Menü navigiert werden soll. Mir reicht fürs erste "an/aus" und "play/pause". Eventuell würde ich dann noch das Starten einer App einrichten, weshalb die Verwendung des Plugins für mich wieder Sinn ergibt.


    Zusammenfassend hat es bei mir in dieser Reihenfolge funktioniert:


    - Python3 installieren (wenn nicht bereits installiert)

    - Pip3 installieren

    - Kennwort für User homebridge anlegen (wenn nicht bereits geschehen) und pyatv via SSH (mit User homebridge) installieren

    - homebridge-atvremote also User root installieren

    - Bei der Übergabe von Befehlen darauf achten, dass sich diese in einem Array befinden


    Ich hoffe das ich nix vergessen habe. So kompliziert wars ja jetzt doch nicht :)


    Die Kommunikation mit dem Apple TV erfolgt bei mir jetzt über das webhooks-plugin, statt über http-switches. Der Vorteil (für mich jedenfalls): Man benötigt bei einfachen an/aus - Schaltern keine Url bezüglich der Statusabfrage. Falls der Author tatsächlich noch eine Statusabfrage implementiert, werde ich evtl. zu http-switches wechseln. Allerdings muss ich gestehen: letztendlich sind mir die Schalterstellungen egal. Den Apple TV über Schalter via Home zu steuern, ist meines Erachtens alles andere als praktikabel. Ich würde an dieser Stelle auf Sprachsteuerung zurückgreifen, in meinem Fall mit Alexa. Hier besteht die Möglichkeit, den Apple TV zu pausieren, selbst wenn der Schalter schon auf "pause" steht. Gleiches gilt ja dann auch für an/aus usw.. Der Befehl wird einfach nochmal gesendet, genauso wie innerhalb von Automationen.. Wenn es an der Tür klingelt und Apple TV pausieren soll, der Schalter allerdings schon auf "pause" steht (weil es sich mit der Fernbedienung überschnitten hat), wird trotzdem pausiert. Solange ich die Schalter für den Apple TV also in einen Raum schiebe, den ich nicht sehe, ist mir auch egal, was die jeweiligen Schalter anzeigen.

    7 Mal editiert, zuletzt von hyxamp ()

  • Als ich gestern diese Vorgehensweise auf meinen richtigen Pi anwenden wollte, ist mir etwas aufgefallen.


    Mit: sudo pip3 install pyatv==0.4.0a10


    werden pyatv und atvremote in die Unterverzeichnisse von /usr/local/ installiert. In der Installationsanleitung von pyatv fehlt das sudo, weshalb die entsprechenden Dateien bei mir vermutlich immer in einem etwas ungewöhnlichen Unterverzeichnis gelandet sind.


    homebridge@raspberrypi:/home/pi $ sudo find / -name pyatv

    /usr/local/lib/python3.7/dist-packages/pyatv

    homebridge@raspberrypi:/home/pi $ sudo find / -name atvremote

    /usr/local/bin/atvremote


    Es wurde auch kein Hinweis angezeigt, dass sich atvremote außerhalb des Pfades befindet. Vielleicht ist hier einfach bloß das Voranstellen von sudo die Lösung aller Probleme und macht die Installation von pyatv mit User "homebridge" überflüssig.


    _______________________________________________________________________________________


    Einen Verbesserungsvorschlag habe ich allerdings noch, da ich diese Problematik im Zusammenhang mit dem Webhooks Plugin bereits kenne:


    Bisher habe ich zuhause alle smarten Komponenten selbst gebaut. Sei es die Steuerung unserer Beleuchtung mit ESP8266, Optotriacs und Optokopplern, die Klingelanlage oder RF/IR Sender/Empfänger (ebenfalls in Kombination mit dem ESP8266) um Funksteckdosen zu schalten oder nicht ganz so smarte IR Komponenten im Wlan einzubinden. Immer war der ESP8266 die Schlüsselkomponente, welche einen Webserver eröffnet und fast ausschließlich über das homebridge-http-webhooks mit Homebridge kommuniziert. Das einzige Problem: sobald ich irgendeinen Schalter in Home umlegte und einen Befehl an den ESP8266 sendete, erwartete Webhooks irgendeinen Rückgabewert innerhalb des Bodys. Es funktionierte auch ohne, die Verarbeitung dauerte dann aber sehr lang. Mit Siri oder Alexa habe ich teilweise die Antwort: "Das Gerät reagiert nicht" erhalten, geschaltet wird dann aber trotzdem irgendwann. Dementsprechend habe ich jedem Befehl einen Rückgabewert zugeordnet (Deckenlicht Küche: an, Ambilight: aus... es muss nicht true/false sein) um die Schalterstellungen innerhalb von Home schneller zu aktualisieren.


    Wenn ich das http-webhooks Plugin in Zusammenhang mit deinem Plugin zur Steuerung des Apple TV verwende, besteht die gleiche Problematik. Hier würde ich mir wünschen, dass es irgendeinen Rückgabewert gibt, um die Bearbeitung der gesendeten Befehle zu Beschleunigen. Es ist völlig egal was für Werte ausgegeben werden, es könnte einfach nur "true", "1" oder "command send" sein. Irgendetwas.. Im Moment sieht es so aus (body=null):


    Zitat

    Jan 03 11:01:41 raspberrypi homebridge[422]: [2020-1-3 11:01:41] [HttpWebHooks] Switch state for 'switch3'...

    Jan 03 11:01:41 raspberrypi homebridge[422]: [2020-1-3 11:01:41] [HttpWebHooks] Adding Body { "commands": ["suspend"] }

    Jan 03 11:01:48 raspberrypi homebridge[422]: [2020-1-3 11:01:48] [HttpWebHooks] Request to 'http://localhost:40222/Wohnzimmer' finished with status code '200' and body ''. null


    Natürlich ist es nicht nötig, solange man dein Plugin mit Shortcuts verwendet. Ich hätte aber gerne den einen oder anderen Schalter um auch außerhalb von Automationen den Apple TV per Sprache steuern zu können. Hier hatte ich zunächst das homebridge-http-switch Plugin in Betracht gezogen (welches ohne Rückgabewerte besser zurecht kommt und ich dann jetzt doch wieder verwenden werde), dieses benötigt allerdings eine URL zum Auslesen des aktuellen Status. Hatten wir ja bereits schon vorher angesprochen. Da werde ich wohl vorerst irgendeine Deckenlampe nehmen, da mir die Schalterstellungen des Apple TV eigentlich egal sind ;)

    Alternativ könnten es auch Dummy-Switche sein, dann müsste aber für jeden on/off - Befehl eine Automation erstellt und die Kommandos via Shortcuts implementiert werden. Bin ich jetzt auch nicht so scharf drauf.



    Nachtrag: Habs eben mit HTTP-SWITCH und direkt über Shortcuts probiert, dauert beides genauso lang wie mit HTTP-WEBHOOKS. Ich glaube einfach das es an dem fehlenden Rückgabewert liegt. Wie gesagt, kenne dieses Verhalten aus den Projekten mit meinen ESPs. Falls es interessiert: Wenn man in HTTP-SWITCH die Definition "stateful" durch "toggle" ersetzt, wird auch keine StatusURL benötigt..

    3 Mal editiert, zuletzt von hyxamp ()

  • Wow, das ist ja wirklich ein absolut enormer Aufwand nur um ein Plugin zum Laufen zu bringen.... Ich denke da hat Lukas noch ein paar Hausaufgaben zu erledigen damit das wirklich praxistauglich wird. :/

  • Hab noch ein wenig probiert. Mal abgesehen davon, dass ein Rückgabewert fehlt.. bin ich mir nicht sicher ob dieser außerhalb von webhooks überhaupt relevant ist. Ich befürchte das meine Hardware einfach zu schlapp ist um pyatv zügig auszuführen.


    Code
    pi@raspberrypi:~ $ time python3 /usr/local/lib/python3.7/dist-packages/pyatv -h
    
    real    0m6,251s
    user    0m6,118s
    sys     0m0,131


    So lange dauert es, bis bei mir ein Befehl gesendet wird. Den Schaltern innerhalb der App ist es zu lang, weshalb sie manchmal "keine Antwort" liefern (Kommandos werden trotzdem gesendet). Ich benutze einen Raspberry Pi 3 mit Raspbian buster lite auf dem neben Homebridge noch PiHole und der UniFi Controller läuft.

  • bubffm Deshalb ist das Plugin auch nicht im NPM Repo, sondern nur über GitHub zu installieren. Ich habe das Plugin einfach nur für mich persönlich geschrieben und war verwundert, dass es überhaupt jemand verwendet :D


    Die Alternative zu pyatv wäre das node-appletv Package, das bekomme ich (und alle Anderen, wenn man die Issues auf GitHub betrachtet) aber nicht zum Laufen, da eine Dependency nicht funktionieren möchte. Vielleicht tut sich da in Zukunft etwas, dann könnte man auf die Python-Implementierung verzichten.


    hyxamp Aktuell ist das Plugin so geschrieben, dass bei jedem HTTP Call die Verbindung zum Apple TV aufgebaut, die Commands geschickt und dann die Verbindung geschlossen wird. Man könnte ausprobieren, ob eine dauerhafte Verbindung zum Apple TV möglich ist...dann würden die Commands sofort (Millisekunden) ausgeführt werden können.

  • Also, neuer Versuch: ich habe jetzt das node Package node-appletv zum Laufen bekommen (ein spezieller Fork hat die Fehler behoben). Bei mir läuft es sowohl auf macOS als auch auf dem Raspberry Pi. Auf dem Mac konnte ich es ohne sudo nicht installieren, auf dem Pi hat es ohne sudo funktioniert.


    Die Verbindung wird wesentlich schneller aufgebaut als bei dem Python Package. Das neue Plugin hat in der Config Einstellungen, um einen On/Off Switch und einen Play/Pause Switch in HomeKit zu erstellen. Den Status zum Apple TV zu erhalten habe ich noch nicht hinbekommen.


    Das neue Plugin ist hier zu finden: https://github.com/lukasroegner/homebridge-appletv

    Aufgrund des neuen Aufbaus und der neuen Grund-Library habe ich mich dazu entschieden, ein neues Repo zu machen und nicht das Alte zu verwenden.


    Ich freue mich über Feedback.

  • Ich habe auf dem Pi 3B+ die Linux dependeny installiert:


    Code
    sudo apt-get install libtool autoconf automake

    Dann versuche ich node-appletv zu installieren und bekomme folgenden Fehler:


    Code
    sudo npm install -g https://github.com/GioCirque/node-appletv.git --unsafe-perm
    npm ERR! code 128
    npm ERR! Command failed: git clone --mirror -q https://github.com/GioCirque/node-appletv.git /root/.npm/_cacache/tmp/git-clone-374cfb36/.git
    npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-374cfb36/.git'
    npm ERR! 
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2020-01-05T13_31_06_527Z-debug.log


    Any Idea?

  • Ist bei mir das gleiche, ob mit oder ohne root:



    ...dann dauert es furchtbar lange, bis das ganze Terminal voll mit Fehlermeldungen ist.


    lukas.roegner

    Welcher Befehl wird denn beim Ausschalten des ATV über den von dir implementieren Schalter gesendet? Ich hatte es immer mit "suspend" probiert aber auch die Erfahrung gemacht, dass sich der Apple TV danach nicht mehr starten lässt. Da hat bloß noch ein hard-reset geholfen. Inzwischen schalte ich den Apple TV über die Kombination: "home_hold" + "select" aus.

    2 Mal editiert, zuletzt von hyxamp ()

  • Ohne sudo bleibt er komplett hängen. Habe Terminal gekillt und neugestartet.


    sudo su - und dann das andere direkt dran oder mit Leerzeile?

    Lass ihn mal ruhig weiter laufen...man meint, dass es hängt, aber er tut was. Der Build für die Dependency sodium dauert lange, einfach mal 10 Minuten laufen lassen

  • Welcher Befehl wird denn beim Ausschalten des ATV über den von dir implementieren Schalter gesendet? Ich hatte es immer mit "suspend" probiert aber auch die Erfahrung gemacht, dass sich der Apple TV danach nicht mehr starten lässt. Da hat bloß noch ein hard-reset geholfen. Inzwischen schalte ich den Apple TV über die Kombination: "home_hold" + "select" aus.

    Der Schalter ist über home + select implementiert, da der suspend die HDMI CEC Geräte nicht beachtet.

  • Ahh... Ja node könnte ein Problem sein. Ich wollte ja bereits vor 2 Wochen den ATV in Homebridge implementieren (was auch mehr oder weniger der Grund ist, warum ich mich mit deinem Plugin so ausgiebig beschäftigt habe).


    Ich hatte mich damals auf das homebridge-apple-tv Plugin konzentriert, einen entsprechenden Beitrag gibt es bereits im Forum. Das Plugin basiert meines Erachtens ebenfalls auf node-appletv, welches ich nie zum Laufen gebracht habe. Ein sehr langes Issue auf Github existiert bereits:


    https://github.com/lprhodes/homebridge-apple-tv/issues/43


    Hatte alles durchgearbeitet, aber nix hat funktioniert. Im vorletzten Beitrag wird auf einen Downgrade zur Node Version 8 verwiesen... Das war es mir dann allerdings nicht wert. Wer weis was danach dann wieder nicht funktioniert. Von mir ist übrigens der letzte Beitrag des Issues: 17 Tage, ohne Antwort.

  • hyxamp Hatte auch alle diese Probleme. Daher habe ich auch erstmal auf pyatv gesetzt. Das von dir angegebene Plugin nutzt aber die Standard-Variante von node-appletv, welche sodium 2.0.3 benötigt, das habe ich auch nicht zum Laufen bekommen. Ich nutze einen Fork, welcher die Package Dependencies geupdated hat, also im Fall von sodium die Version 3.0.2 verwendet. Das hat auf jeden Fall bei mir zum Erfolg geführt. Welche Fehlermeldung bekommst du ohne sudo nach der langen Warterei?

  • Lass ihn mal ruhig weiter laufen...man meint, dass es hängt, aber er tut was. Der Build für die Dependency sodium dauert lange, einfach mal 10 Minuten laufen lassen

    Ok, hab ihn jetzt laufen lassen, nach 5min oder so kam dann auch Seitenweise Fehlermeldungen


    Meine Versionen:

    Node: 12.13.0

    NPM: 6.13.0