Beiträge von hyxamp

    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.

    Ich hatte eben noch probiert das & direkt hinter dem Python3 Befehl zu schreiben und dann das Skript entsprechend auszuführen.. Klappt im Terminal sehr gut, ich lande direkt wieder in der Konsole und muss nicht warten, bis python3 dann tatsächlich fertig ist. Der Schalter in Homebridge lässt sich allerdings nicht lumpen und wartet trotzdem nach meinem Geschmack zu lange.

    Klar. Also das gesamte Skript ist vielleicht ein bisschen viel, bin auch noch am basteln, ich kürze es mal ein wenig ab (ist blos noch ein Skript für alle Automationen..):



    Ist mein erstes Skript.. bisher funktioniert es. Der Zugriff auf python3 dauert relativ lange und später sind noch ein paar längere delays dabei, die den Programmablauf verzögern. Ich hatte gehofft das es irgendeine Möglichkeit gibt, das Skript zu starten und im Hintergrund laufen zu lassen, sodass Siri/Alexa nicht schimpfen. Ich meine es funktioniert ja.. aber mich stört es dann trotzdem. Das es eine Weile dauert eh dann die komplette Automation durchgelaufen ist, weis ich ja. Nur müssen mir die Damen dann nicht noch zusätzlich in den Ohren liegen.


    Mit cmdtrigger funktioniert es ja wie gesagt und sollte ähnlich ablaufen wie mit homebridge-delay-switch. Ich weis nur nicht wie ich die Schalter dann Sinnvoll benennen soll, wenn für jeden Zustand schon ein einzelner her muss. Den Schalter "Licht an" zu nennen führt nicht zum Ziel, da ich ihn dann beim Sprachassi meiner Wahl mit "Licht an an" aufrufen muss.

    Hmm stimmt, die Automation reagiert nicht. Das "aus" Signal des Schalters wird erneut gesendet, wenn er bereits auf "aus" steht. Daran liegt es nicht.


    Aber ich möchte ja jetzt nicht für jeden Zustand extra einen Schalter anlegen müssen. Bei dem Beispiel mit dem Licht, wie würde dann bei dir der Befehl via Spracheingabe lauten? "Licht an an" und "Licht aus an"? Im Moment habe ich die Automation direkt in meiner json.config hinterlegt (automationen mit ios 13.3 klappen bei mir derzeit sowieso nicht wie sie sollen), aber glücklich bin ich damit auch irgendwie nicht zu 100%.


    Nachtrag: Ich hatte mir jetzt überlegt, meine Automationen in eine bash zu packen und dann über ein cmd plugin ausführen zu lassen. Sollte im Falle vom doppelten Ausschalten auch funktionieren und ich bin nicht so Abhängig von den IOS - Macken. Jetzt habe ich aber auch ein paar relativ lange Automationen mit einigen Delays drin. Das führt dazu, dass Siri oder Alexa mir beim Ausführen ein "Gerät antwortet nicht" entgegenbringt. Ausgeführt werden die Skripte aber trotzdem bis zum Schluss, nur geduldig sind beide Damen nicht unbedingt. Mit Plugins wie cmdtrigger geht es, aber ich würde gern die "an" sowie "aus" - Stellung des Schalters nutzen. Hast du irgendeine Idee, wie ich die Skripte ausführen kann, ohne das die Home App bzw. Siri/Alexa ewig auf eine Rückmeldung warten?


    Ich hatte es bereits so probiert:

    pi@raspberrypi:~ $ bash /home/homebridge/automation.sh &


    Klappt via Terminal und SSH ganz ausgezeichnet. Wenn ich das Kommando in mein Plugin übernehme, wird allerdings wieder wie üblich auf eine Antwort gewartet.


    Code
    "accessories": [
        {
            "accessory": "CMD",
            "name": "Test",
            "on_cmd": "bash /home/homebridge/automation.sh &",
            "off_cmd": "bash /home/homebridge/automation2.sh &"
        }
    ]


    Hast du eine Idee?


    Viele Grüße

    Nun habe ich doch nochmal eine Frage zu sschuste seiner Herangehensweise in Bezug auf die Szenen.


    Ich habe mit dem Plugin homebridge-dummy einen virtuellen Schalter erzeugt, der wiederum mit einer entsprechender Automation ein paar Lampen schalten soll. Ganz einfaches Beispiel:


    Virtueller Schalter: an --> Deckenlicht Küche: an

    Virtueller Schalter: aus --> Deckenlicht Küche: aus, Deckenlicht Wohnzimmer: aus, Deckenlicht Schreibtisch: aus


    Hintergrund ist eben, dass ich Alexa das Ganze als Szene verkaufen will, die ich sowohl mit Siri als auch mit Alexa starten kann. Nun passiert aber folgendes: Ich sage: "virtueller Schalter aus", die Lampen gehen alle aus.. Dann drücke ich innerhalb der App den Button für das Deckenlicht in der Küche und sage danach nochmal: "virtueller Schalter aus". Nix passiert, denn er ist ja bereits aus. Natürlich könnte ich 3 Automationen mehr erstellen, die dann auch jedes Mal den virtuellen Schalter triggern.. will ich aber nicht. Ich hatte eigentlich gedacht, dass ich den virtuellen Schalter auch dann ausschalten kann, wenn er bereits aus ist. So ist es jedenfalls mit sämtlichen Schaltern anderer Plugins (webhooks, http-switch, http-dimmer). Nur eben mit dem Dummy funktioniert es nicht. Wo macht denn da Homebridge nun wieder unterschiede? Liegt es am Plugin, welches das doppelte schalten untersagt?


    Nachtrag:

    Hab jetzt "Fake Schalter" mit Webhooks gebaut, da geht das "doppelte Ausschalten". Trotzdem frage ich mich, warum es mit dem dummy-plugin nicht funktioniert. Ein Schalter in Homekit ist doch letztendlich auch blos ein Schalter, egal über welches Plugin oder irre ich mich?

    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..

    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.

    Hallo,

    ich habe jetzt dem Benutzer "homebridge" ein Passwort zugewiesen, sodass ich direkt via SSH agieren kann. Natürlich weiterhin nur im Rahmen der Nutzerrechte. Hier direkt eine Frage: Muss ich jetzt irgendetwas beachten, seitdem "homebridge" ein Passwort erhalten hat? Irgendwelche Änderungen in der json.config oder anderen Konfigurationsdateien von Homebridge?


    Dann ging es wieder los. Pip3 und pyatv hatte ich mit dem Nutzer "pi" installiert und vorerst keine Bibliotheken kopiert/verschoben. Alles ist quasi im Urzustand, jede Datei befindet sich dort, wo sie sein soll. Anschließend habe ich mich mit dem User "homebridge" eingeloggt und probiert pyatv auszuführen.. mit dem Ergebnis: "keine Berechtigung".


    Code
    homebridge@raspberrypi:/ $ python3 /home/pi/.local/lib/python3.7/site-packages/pyatv
    
    python3: can't open file '/home/pi/.local/lib/python3.7/site-packages/pyatv': [Errno 13] Permission denied


    Der gleiche Befehl mit "sudo" führt zu einer Fehlermeldung. Ich weis auch gar nicht ob diese Kombination "sudo python3 .." überhaupt funktioniert, war lediglich ein Versuch. Den gleichen Fehler erhalte ich im Übrigen auch, wenn ich pyatv mit sudo und eingeloggt als User "pi" ausführe. Ohne sudo geht es aber mit dem User "pi".


    Python
    homebridge@raspberrypi:/ $ sudo python3 /home/pi/.local/lib/python3.7/site-packages/pyatv
    
    Traceback (most recent call last):
      File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "/home/pi/.local/lib/python3.7/site-packages/pyatv/__main__.py", line 11, in <module>
        from pyatv import (const, exceptions, interface, scan, connect, pair)
    ModuleNotFoundError: No module named 'pyatv'


    Nun wollte ich mal probieren, pyatv mit dem User "homebridge" zu installieren. Zunächst musste pyatv aber erstmal deinstalliert werden:


    Code
    pi@raspberrypi:~/.local/lib/python3.7/site-packages $ pip3 uninstall pyatv
    
    Uninstalling pyatv-0.4.0a10:
      Would remove:
        /home/pi/.local/bin/atvremote
        /home/pi/.local/lib/python3.7/site-packages/examples/*
        /home/pi/.local/lib/python3.7/site-packages/pyatv-0.4.0a10.dist-info/*
        /home/pi/.local/lib/python3.7/site-packages/pyatv/*
    Proceed (y/n)? y
      Successfully uninstalled pyatv-0.4.0a10


    Anschließend folgte die Neuinstallation mit User "homebridge":


    Code
    homebridge@raspberrypi:~ $ pip3 install pyatv==0.4.0a10
    
    Successfully installed aiohttp-3.6.2 aiozeroconf-0.1.8 async-timeout-3.0.1 attrs-19.3.0 curve25519-donna-1.3 ecdsa-0.14.1 ed25519-1.5 multidict-4.7.3 netifaces-0.10.9 protobuf-3.11.2 pyatv-0.4.0a10 srptools-1.0.0 tlslite-ng-0.7.5 yarl-1.4.2


    Atvremote und pyatv befinden sich jetzt im Unterverzeichnis von homebridge und diesmal habe ich (auch ohne sudo) Zugriffsrechte auf pyatv:



    So weit war ich allerdings auch schon mal, als ich pyatv und alle benötigten Bibliotheken per Hand in der Unterverzeichnis von homebridge kopiert habe. Nun erfolgte die Installation des Plugins:


    Code
    homebridge@raspberrypi:~ $ sudo npm install https://github.com/lukasroegner/homebridge-atvremote.git -g
    
    npm ERR! code 128
    npm ERR! Command failed: git clone --mirror -q https://github.com/lukasroegner/homebridge-atvremote.git /root/.npm/_cacache/tmp/git-clone-aac48261/.git
    npm ERR! fatal: Konnte führende Verzeichnisse von '/root/.npm/_cacache/tmp/git-clone-aac48261/.git' nicht erstellen.
    npm ERR! 
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2020-01-02T15_35_22_697Z-debug.log


    Wie auch mit dem User "pi", lässt sich das Plugin mit dem User "homebridge" nicht installieren (trotz sudo). Nur der Wechsel zu "root" führt bei mir zum Erfolg:


    Code
    homebridge@raspberrypi:~ $ sudo su
    root@raspberrypi:/home/homebridge# sudo npm install https://github.com/lukasroegner/homebridge-atvremote.git -g
    
    + [email protected]
    added 1 package in 4.58s


    Ich habe Homebridge anschließend neu gestartet, nach meinem Apple TV gescannt und den Pairing-Prozess eingeleitet. Diesmal mit User "homebridge" statt mit User "pi", vielleicht ist das ja auch wichtig?


    Zum Schluss wurde die json.config entsprechend editiert:



    Versuche ich nun irgendwelche Befehle über das Plugin an den Apple TV zu senden, stürzt bei mir Homebridge ab. Hier ist ein Auszug aus dem log:


    Code
    Jan 02 16:57:20 raspberrypi homebridge[19936]: [2020-1-2 16:57:20] TypeError: commands.splice is not a function
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at Socket.<anonymous> (/usr/local/lib/node_modules/homebridge-atvremote/src/atv-remote-api.js:154:53)
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at Socket.emit (events.js:210:5)
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at addChunk (_stream_readable.js:309:12)
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at readableAddChunk (_stream_readable.js:286:13)
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at Socket.Readable.push (_stream_readable.js:224:10)
    Jan 02 16:57:20 raspberrypi homebridge[19936]:     at Pipe.onStreamRead (internal/stream_base_commons.js:182:23)
    Jan 02 16:57:20 raspberrypi homebridge[19936]: [2020-1-2 16:57:20] Got SIGTERM, shutting down Homebridge...


    Ich habe also ein neues Fehlerbild und bin wenigstens froh, dass diesmal überhaupt etwas angezeigt wird, wenn es schon nicht funktioniert ;)

    Offensichtlich gibt es hier wohl ein Problem mit der Definition "commands.splice" innerhalb deiner java Programmierung. Sehe ich das soweit richtig? Liegt es in diesem Fall also an deinem Plugin oder wieder irgendwie an pyatv oder irgendwelchen Nutzerrechten? Ich wundere mich blos, warum mir dieser Fehler früher nicht angezeigt wurde. Ich meine selbst wenn irgendwelche Rechte zum Ausführen von pyatv gefehlt haben, sollte doch trotzdem dein JavaScript ausgeführt worden sein (ich habe ja schließlich auch entsprechende Fehlermeldungen erhalten, wenn ich absichtlich den header falsch eingegeben habe...).


    Viele Grüße

    Hi, ich hatte jetzt nochmal ein bisschen Zeit mit pyatv rumzuspielen.. dein Plugin läuft bei mir leider immer noch nicht.


    Dann ging mir nochmal der Gedanke durch den Kopf, ob und wie man den Zustand des ATV auslesen könnte. Bei genauerer Betrachtung der Befehlssätze von pyatv sind dafür eigentlich bloß zwei relevant:


    - play_state (vorsicht, dieser command ist in der doku noch mit device_state angegeben, welcher nicht mehr existiert)

    - playing


    Die Rückgabewerte von "play_state" konnte ich allerdings nicht richtig interpretieren. Diese lagen öfter bei 0, 3 und 4 und sollen eigentlich auf den Status play/pause hindeuten. Aufschlussreicher fand ich dann "playing".


    Sofern gar nix gespielt wird, sich der Apple TV auf dem Homescreen oder im Ruhemodus befindet, erhalte ich diesen Rückgabewert:


    Code
    pi@raspberrypi:~ $ python3 /home/pi/.local/lib/python3.7/site-packages/pyatv --manual --address 192.168.2.xxx --port 49152 --protocol mrp --id apple playing
    
    Media type: Unknown
    Play state: Idle


    Wenn etwas abgespielt wird oder pausiert ist, sieht die Rückgabe entsprechend so aus (in diesem Beispiel läuft gerade eine Serie):


    Code
    pi@raspberrypi:~ $ python3 /home/pi/.local/lib/python3.7/site-packages/pyatv --manual --address 192.168.2.xxx --port 49152 --protocol mrp --id apple playing
    
    Media type: Video
    Play state: Playing
         Title: St. 4: Flg. 8 „Tiefe Einblicke“
      Position: 124/2550s (4.9%)


    Um Missverständnisse bezüglich des Titels auszuschließen: bei der getesteten Wiedergabe handelt es sich um eine Folge der Serie Suits :) Jedenfalls könnte ich mir vorstellen, dass der Rückgabewert in "play state" dazu verwendet werden könnte, um einen Schalter zu triggern.


    Dann habe ich mir überlegt, wie man denn feststellen könnte, ob der TV an oder im Ruhemodus ist. Dafür konnte ich kein command finden und ein Ping funktioniert nicht (sonst wäre es ja auch einfach über das People Plugin gegangen, welches dann wiederum den Schalter für AN/AUS triggert).. Jedenfalls habe ich über den gleichen Befehl den Debug laufen lassen und das Resultat zwischen eingeschalteten und ausgeschalteten (Ruhezustand) Apple TV verglichen.


    python3 /home/pi/.local/lib/python3.7/site-packages/pyatv --manual --address 192.168.2.xxx --port 49152 --protocol mrp --id apple --debug playing


    Hierbei ist mir besonders eine Zeile innerhalb der [deviceInfoMessage] aufgefallen, auch wenn ich absolut nicht weis, was sie besagt:


    logicalDeviceCount: 1 --> Apple TV An

    logicalDeviceCount: 0 --> Apple TV Ruhezustand


    Vielleicht lassen sich diese Infos ja irgendwie verwerten, sofern du zukünftig vor hast, irgendwelche Zustände auszulesen.

    Guten Morgen,

    als User "pi" kann ich atvremote sowie pyatv verwenden, egal in welchem Installationspfad sich die Libraries befinden. Ohne sudo.


    Das ich Python3 für pyatv benötige, konnte ich der entsprechenden Doku entnehmen. Habe sie erst gelesen, bevor ich pyatv installiert habe. Trotzdem wundere ich mich, warum dann pyatv zwei mal bei mir vorhanden war (aber beide in einem unterschiedlichen Unterverzeichnis von Python3). Somit kam es ja zu den ersten Fehlern. Nach einer Neuinstallation ging alles wie gewünscht.


    Wie bubffm bereits erwähnte, nutzen wir für Homebridge fast alle einen extra User "homebridge". Daher habe ich ja dann irgendwann angefangen, alle benötigten Libraries aus dem Python-Verzeichniss ins Home-Verzeichniss zu kopieren (hab keine Ahnung wie ich irgendwelche Nutzerrechte vergeben kann..). Via Shell commands und irgendeinem "cmd plugin" für Homebridge hat es dann funktioniert. Sowohl die Steuerung des Apple TV mit atvremote als auch direkt über pyatv.


    Schnellere Reaktionszeiten gibts dann mit CLI. Hatte es mit pyatv bereits getestet und mir auch deine *.js mal ein wenig angesehen (auch wenn ich davon absolut keine Ahnung habe). Daher würde ich gerne dein Plugin in Zusammenhang mit dem "http-switch plugin" nutzen, leider funktioniert es aber nicht. Meine json.config habe ich etwas weiter oben gepostet.


    Status auslesen wär mir eigentlich nicht so sehr wichtig. In gewisser Weise kann man das auch (Interpreten, Titel usw..). Gibt ja da tolle Dashboards, die das dann implementiert haben. Wie man allerdings einen einfachen Rückgabewert (0 = aus, 1 = an) erhält, konnte ich jetzt auch nicht in der Doku finden. Wichtig wärs mir aber auch nicht und schon gar nicht für mein Projekt mit der Klingel ;). Ich vermute es wird sich nicht realisieren lassen, aber das öffnen von Apps (so wie bei shortcuts) ohne erst irgendwelche Tastendrücke zu simulieren, wäre ganz nett.

    Muss ich beim Erstellen eines Images mit Pibaker irgendetwas beachten?


    Hatte damit vor einiger Zeit mal ein komplettes Backup meiner 16 GB SD Karte erstellt. Heute wollte ich es dann auf einer zweiten SD Karte, ebenfalls 16GB, installieren und hatte beim Booten des PIs so viele Fehlermeldung, dass er dann irgendwann abgeschmiert ist. Muss das Image zwingend mit Pibaker auf die SD Karte installiert werden? Hatte es nämlich ganz klassisch über das Terminal gemacht..

    Zum Thema "Sensor in Alexa Routinen":


    Nachdem ich heute meinen zweiten Raspberry zu Testzwecken neu aufgesetzt und das Alexa - Plugin installiert habe, ist mir folgende Definition aufgefallen: "routines": true


    Ich weis nicht ob es sie erst seit dem neuen Update gibt oder ob sie schon vorher existierte (jedenfalls hatte ich ich die Definition in meiner vorherigen Konfiguration gar nicht eingebunden).. Damit lassen sich dann auch die Sensoren als Trigger für Routinen einbinden, welche bei mir vorher nicht angezeigt wurden (siehe Post #21).

    Ich habe mich doch nochmal mit dem Plugin beschäftigt, da mir die Ladezeiten über atvremote ein wenig zu hoch waren. Dabei ist mir aufgefallen, dass der Aufruf von pyatv inklusive "manueller" Parameterübergabe nur halb so lange dauert als mit atvremote.


    python3 pyatv --manual --address 192.168.2.xxx --port 49152 --protocol mrp --id apple pause


    Die ID muss mit angegeben werden, kann aber eine fiktive sein (laut Beschreibung von pyatv).


    Über CLI geht es richtig schnell (habs ebenfalls mit pyatv getestet), dazu müsste aber auch das Plugin funktionieren. Vielleicht hat ja der Author später nochmal Zeit zum Antworten.


    Da ich doch gern alles über Schalter realisieren möchte, habe ich das Plugin homebridge-http-switch installiert. Meine json.config sieht jetzt so aus:


    Platforms (Credentials gekürzt):


    Accessories:


    "statusUrl" ist im Moment noch das Deckenlicht im Wohnzimmer um Fehler innerhalb von Homebridge zu vermeiden. Müsste ich dann mal schauen ob man den ATV bezüglich an/aus oder play/pause auch irgendwie auslesen und verwerten kann. Ansonsten mache ich eben stateless-switches draus.


    Wie gesagt: leider passiert nix. An dieser Stelle gebe ich dann vorerst auch auf und warte bis jemand mit einer gescheiten Lösung zur Hilfe eilt. Optimalerweise auch ohne die Bibliotheken erst hin und her schieben zu müssen.


    Viele Grüße

    bubffm genau das habe ich leider auch schon feststellen können und finde es äußerst schade zwei Puzzleteile zu besitzen, welche jede für sich (mehr oder weniger) gut funktionieren, aber nicht zusammengesetzt werden können. Daher ist ein entsprechendes Plugin tatsächlich angebracht. Allerdings ist die Steuerung des Apple TV für mich reine Spielerei und eigentlich auch ein wenig erschreckend, wieviel Zeit ich bereits investiert habe, damit es funktioniert..



    Nachdem ich nun atvremote und alle benötigten Bibliotheken nach "/home/homebridge/atvremote" kopiert habe, konnte ich auch entsprechende Befehle mit dem "homebride cmd" plugin an den Apple TV senden. Das "homebridge-atvremote" plugin läuft aber trotzdem nicht (der entsprechende Pfad "/home/homebridge/atvremote/pyatv" ist natürlich in der config hinterlegt).

    Trigger: Deine Klingel, dann Shortcut: Apps-> Apple TV Remote -> Apple TV in Ruhezustand // bzw. Wiedergeben/Anhalten


    Wo kann ich denn meine Klingel als Trigger definieren? Innerhalb von Shortcuts habe ich nichts gefunden. Mit Home würde es gehen, kann dann aber keine großartigen Aktionen am Apple TV ausführen. Wiedergabe/Anhalten funktioniert bei mir nur für Musik, An/Aus geht erst gar nicht. Die Shortcut app bietet da schon wesentlich mehr Möglichkeiten, allerdings weis ich nicht wie der Shortcut dann durch ein Event innerhalb von Home ausgelöst wird.

    Ich bin es nochmal ganz kurz und möchte meine ergänzenden Schritte zur Neuinstallation des Raspberrys in Kombination mit pyatv kurz aufführen:


    1. Installation Raspbian Buster lite

    2. Konfiguration (Passwort, SSH, Statische IP, Localisation settings...)

    3. Update/Upgrade


    4. Python Version abgefragt:

    - Python 2.7.16 bereits installiert

    - Python 3.7.3 bereits installiert


    5. Pip Version abgefragt:

    - Weder pip noch pip3 installiert (wobei laut meiner Recherche pip theoretisch pip3 ausführen sollte)

    - Pip3 für Python 3 Libraries installiert: sudo apt install python3-pip


    6. Installation von pyatv: pip3 install pyatv==0.4.0a10

    - Installation verlief ohne Fehler. Als ich pyatv auf meinem "richtigen PI" installieren wollte, gab es dauernd Probleme mit der Versionsnummer von aiohttp. Allerdings erhalte ich den Hinweis, dass sich die Skripte "srptools", "aiozeroconf" und "atvremote" außerhalb des Pfades in "/home/pi/.local/bin" befinden. Darauf hatte mich sschuste bereits in #18 aufmerksam gemacht, jedoch belasse ich die Skripte erstmal dort.


    7. Nach weiteren Orten für atvremote suchen: sudo find / -name atvremote

    - atvremote befindet sich nur in "/home/pi/.local/bin". Auf meinem "richtigen PI" hatte ich das Skript zusätzlich noch in "/usr/local/bin/". Keine Ahnung warum.. Gleiches gilt für pyatv. Während ich die Bibliothek damals in zwei Unterverzeichnissen von python3 finden konnte, habe ich sie jetzt blos noch in "/home/pi/.local/lib/python3.7/site-packages". Irgendwie scheint alles auf eine doppelte Installation von pyatv hinzudeuten, ich kann mir blos nicht erklären warum.


    8. Scanning und Pairing mit Apple TV und User "Pi" via ssh: kein Problem.

    9. Steuerung des Apple TV und User "Pi" via ssh: kein Problem.


    10. Installation von Homebridge nach sschuste seiner Anleitung: alles Bestens, vielen Dank!


    11. Plugin installieren "homebridge CMD" und Befehl ausführen: sudo /home/pi/.local/bin/atvremote --id xx:xx:xx:xx play

    - Ich erhalte Fehlermeldungen, dass diverse libraries nicht gefunden wurden. Unter anderem pyatv. Die gleiche Fehlermeldung bekomme ich übrigens auch, wenn ich eingeloggt als user "pi" atvremote mit sudo ausführe. Ohne sudo gehts mit user "pi".


    Da es sich ja um ein bastel-Pi handelt, habe ich zunächst atvremote in das Unterverzeichnis "/home/homebridge" kopiert und probiert es via "homebridge CMD" (sudo ist dann nicht mehr nötig) auszuführen. Gleiches Resultat: die ganzen Bibliotheken wurden nicht gefunden, obwohl sie sich alle in "/home/pi/.local/lib/python3.7/site-packages" befinden. Also habe ich angefangen ebenfalls jede einzelne Bibliothek in das Unterverzeichnis von homebridge zu kopieren, mit dem Resultat: es funktioniert! Alternativ könnte man atvremote in das Verzeichnis "/home/pi/.local/lib/python3.7/site-packages" packen und mit "homebridge CMD" dort ausführen..


    Jedenfalls klappt es jetzt und alles deutet darauf hin, dass bei mir vorher 2x pyatv drauf war und unterschiedlich ausgeführt wurde. Allerdings weis ich nicht warum. Ich nehme an das homebridge-atvremote plugin wird jetzt auch funktionieren. Den letzten Schritt hätte ich allerdings noch ein wenig eleganter gelöst, vielleicht kann sich sschuste freundlichweise nochmal dazu melden. Wie mache ich das jetzt am besten mit den ganzen Python Libraries, damit ich nicht alles doppelt in unterschiedlichen Ordner habe?


    Viele Grüße

    Ich habe jetzt die Bibliothek in das entsprechende Unterverzeichnis von Homebridge kopiert und den neuen Pfad in der config hinterlegt. Es passiert leider nix. Weder Fehler noch überhaupt irgendeine Ausgabe, genau wie vorher. Langsam weis ich ehrlich gesagt auch nicht mehr weiter.


    Auch wenn es nach wie vor nix mit dem Plugin zu tun hat:


    Mit: sudo find / -name atvremote


    wurden mir zwei Verzeichnisse angezeigt. Zum Einen der völlig unübliche, zum Anderen in dem von dir erwarteten /usr/local/bin.

    Wenn ich atvremote aus dem unüblichen Verzeichnis lösche, kann ich das Skript nicht mehr aus jedem beliebigen Ordner ohne Angabe des korrekten Pfades (in dem Fall bleibt ja dann blos /usr/local/bin/atvremote) starten.


    Bezüglich der unterschiedlichen Versionsnummern habe ich folgendes probiert:

    pi@raspberrypi:/ $ /home/pi/.local/bin/atvremote --version

    pi@raspberrypi:/ $ /usr/local/bin/atvremote --version


    und es wird bei beidem die gleiche Version (0.4.0a10) angezeigt. Aber nicht nur der Befehlssatz zwischen den Nutzern "pi" und "homebridge" beim Aufruf von atvremote ist unterschiedlich, sondern auch der pairing process. Ich verstehe es nicht.


    Rufe ich atvremote als user "pi" auf, kann ich diesem Ablauf folgen: https://postlund.github.io/pyatv/getting-started/

    Mit dem user "homebridge" sieht das ganze dann so aus: https://pyatv.readthedocs.io/en/master/atvremote.html


    Wie kann denn das sein? Mal abgesehen davon, dass wenn ich mit "homebridge": sudo /usr/local/bin/atvremote scan

    ausführe, mir mein Apple TV erst gar nicht angezeigt wird. Wird da vielleicht auf unterschiedliche Versionsstände innerhalb des Bibliothek zugegriffen? Ich weis ja nicht ob das geht.. Aber vielleicht wäre das dann auch bei Lukas seinem Plugin ähnlich? Also ist nur so ein Gedankengang, kann ja auch völliger Blödsinn sein.


    Ich habe bei mir auch unterschiedliche Python-Versionen gefunden.. 2.7.16 und 3.7.3. Könnte es damit zusammenhängen? Wobei der Verweis auf die Bibliothek innerhalb Lukas seinem Plugin bereits mit "python3" angegeben wird.



    bubffm Zum einen steht bei mir Alexa auf dem Küchentisch, welche mit den Shortcuts des Iphons nicht wirklich viel anfangen kann, zum anderen habe ich auch eine Szene: "Es klingelt an der Tür --> Apple TV pause". Ich wüsste nicht wie ich die Szene mit shortcuts umgesetzt bekomme.