AppleTV und Fernseher steuern mit CEC-Client

  • Hallo zusammen,


    erstmal vielen Dank für die Arbeit, die Inspirationen, Anleitungen und alles, was ihr alle hier leistet. Ich träume schon seit längerem davon, meine Wohnung smarter zu machen, als die üblichen "Licht an" "Licht aus" Kommandos und habe hier wirklich großartige Dinge gesehen. ...mehr zum Träumen, aber leider auch mehr zum Verzweifeln...

    Ich stehe (unter anderem) vor folgendem Problem:
    Ich konnte Homebridge auf meinem herumliegenden Pi 3 ohne Probleme dank der ausführlichen Anleitung installieren und es läuft zuverlässig. Ich habe allerdings wirklich sehr wenig, bis keine Ahnung, was ich mit den einzelnen Befehlen da überhaupt getan habe.
    Einige Plugin laufen auch schon und funktionieren zuverlässig. Lampen gehen dank DelaySwitches verzögert aus und schalten sich nur für ein paar Sekunden an.

    DarkSky protokolliert sauber dank Weather-Plus gefühlt alles, was man so protokollieren kann.


    Mein eigentlicher Gedanke, als ich Homebridge installiert habe, war aber ein anderer. Ich wollte den AppleTV (und Fernseher) mit Sprachbefehl ausschalten. Abends ist die Standardroutine: Esszimmer aus, Wohnzimmer dimmen, kurze Zeit später aus, Schlafzimmer an, etc... Nun stehe ich in meinem dunklen Wohnzimmer und der AppleTV strahlt mich durch meinen Fernseher an. Ich weiß mit iOS 12.2 könnte da mehr möglich sein, aber 1. mag ich basteln und 2. würde ich den Fernseher auch für andere Dinge an und aus schalten wollen als den AppleTV.

    Gegooglet, getan. Homebridge gefunden und installiert,...

    AppleTV plugin gefunden (-apple-tv): Versucht zu installieren, Fehler. autoconf installiert, immer noch Fehler. libsodium installiert, libtool, g++ und was nicht noch alles: Resultat: Installation läuft nach ca. 10 Minuten weiterhin in einen Fehler. Haben anscheinend auch andere, ich konnte bislang keine Lösung dafür finden: "Error: make nodesodium exited with code null" etc.


    Neue Idee. Pi 3 mit HDMI an Fernseher anschließen, schließlich gibt es ja CEC:

    CEC-Accesories gefunden (-cec-accessories): cec-client installiert. Plugin wird angezeigt. Scan durchgeführt. Fernseher und AppleTV gefunden. Config aktualisiert, Restart. Beide Geräte werden in der Eve App angezeigt, aber können nicht gesteuert werden.

    Weitere plugins gefunden (-hdmi-cec und -tv-cec und -cec). Alle haben das gleiche Probleme. Die Schalter werden angezeigt, aber nichts lässt sich ansteuern.


    Nach einiger Zeit habe ich dann versucht ohne plugin die Geräte über die Kommando-Zeile zu steuern: Siehe da: echo standby 0 | cec-client -s -d 1 macht den TV aus, standby 4 den AppleTV. echo on 0 bzw. 4 fährt alles wieder hoch und pow liefert zuverlässig ihren ON/OFF Status. Mehr brauche ich ja erstmal gar nicht. Das muss doch auch in HomeKit Schaltern gehen?!...


    Neue Idee: Homebridge-cmdswitch2: Befehle eintragen und gut ist. Leider wieder kein Erfolg. plugin läuft, Geräte werden angezeigt, aber werden als unresponsive angezeigt und schalten weder TV noch AppleTV.

    Seid bitte gnädig mit mir, ich habe wirklich wenig Ahnung von dem was ich da in die Kommandozeile tippe... Ich will doch nur meinen Fernseher aus machen.

    Ich hoffe jemand kann mir helfen.
    Schon mal Danke fürs durchlesen und erneut Danke für dieses Forum!
    Rohwi


    p.s.: sollte das im Forum schon beantwortet sein, verweist mich gerne dahin. Ich habe versucht zu Suchen, aber leider nichts passendes finden können.

    Einmal editiert, zuletzt von Rohwi ()

  • Hi,


    Ich habw das bei mir ueber einen anderen Weg geloest.


    Mein setup:


    - LG Fernseher mit webo-os-tv verbunden, womit ich die Eingaenge, Lautstaerke und das Ausschalten steuern kann. (Einschalten leider nicht, da mein Fernseher dafuer zu alt ist, bzw. Nicht die noetigen Softwareeinstellungen mitbringt.

    -iPad Pro mit iOS 12.2 beta installiert, um auch den Fernseher steuern zu koennen, wenn du noch ein wenig wartest, bis es offiziell draußen ist, dann musst du dich nicht mit etwaigen beta bugs rumschlagen.

    -und jetzt kommt die App Fuse ins Spiel. Hier kann man naemlich Plattformuebergreifend Routinen erstellen. Ich kann vorhanden HomeKit Szenen hinzufuegen und neue Ablaeufe einlernen. Heißt wenn ich bei mir auf ATV aus tippe, dann haelt die App die Hometaste gedrueckt, dann ein kurzer delay und dann wir die Select Taste gedrueckt. (Also wie wenn man nativ das ATV ausmachen wuerde. Da koenntest du dann danach als naechstes den Fernseher ausmachen lassen, oder direkt eine Gute Nacht Szene starten lassen, die du in HomeKit festlegst.


    Mit deinen oben beschriebenen Befehlen, kenn ich mich leider nicht aus und kann die da nicht den entscheidenden Tipp geben...

  • Hi,

    danke für den Tip mit Fuse.
    Eine Routine um den AppleTV auszuschalten, wäre schon mal ein Schritt in die richtige Richtung. Wenn ich das mit Fuse richtig lese, dann müsste also:
    - In Fuse Routine anlegen für AppleTV ausschalten (lange home, delay, switch) -> HomeKit Szene schalten
    - in HomeKit die Szene entsprechend vorbereiten
    - in Shortcuts einen Shortcut anlegen der die Fuse Routine schaltet und ihm den Sprachbefehl ("Alles aus") oder dergleichen beibringen.

    Dann kann ich vom Sofa aufstehen, "Alles aus" meinem iPhone zuflüstern und aTV bekommt Routine (=OFF), schickt dadruch CEC Signal an Fernseher (=OFF), Szene Lampen wird geschaltet (=OFF). Soweit richtig verstanden?

    Da mein 'alter' Samsung Fernseher (H6470-Reihe) leider (soweit ich weiß) keine Möglichkeit bietet smart gesteuert zu werden, bleibt für ihn erstmal nur CEC (oder Harmony Hub und dergleichen). Ich würde aber gerne ohne neue Hardware auskommen wollen erstmal. Fuse klingt für AppleTV aus = Fernseher aus schon mal gut, bleibt das Problem ihn unabhängig von AppleTV steuern zu können.

    Aber Erfahrung mit Befehlen über cmdswitch2 hast du keine? Ich hab hier im Forum und überall verstreut im Internet config Beispiele gesehen die dort curl Befehle, SSH befehle etc drin haben, aber ich bekomme die Befehle, die direkt über SSH auf dem Pi funktionieren, nicht in den plugin Schaltern zum laufen.

  • Hab es gerade getestet (nutze Shortcuts gar nicht und musste die App erstmal installieren, haha)


    Wenn du in Shortcuts nach Fuse suchst (wenn installiert und Routinen angelegt), dann findet es automatisch deine Routinen und diese koennen damit komplett geschaltet werden.


    Nope leider nicht. Ich habe ein laienhaftes Grundverstaendnis was Befehle machen koennten und wie sie aufgebaut sind, aber das wars auch schon. Nutze solche plugins auch gar nicht...

  • Haben anscheinend auch andere, ich konnte bislang keine Lösung dafür finden: "Error: make nodesodium exited with code null" etc.

    Beispielsweise ich ?(. Ich arbeite dran...


    Nach einiger Zeit habe ich dann versucht ohne plugin die Geräte über die Kommando-Zeile zu steuern: Siehe da: echo standby 0 | cec-client -s -d 1 macht den TV aus, standby 4 den AppleTV. echo on 0 bzw. 4 fährt alles wieder hoch und pow liefert zuverlässig ihren ON/OFF Status. Mehr brauche ich ja erstmal gar nicht. Das muss doch auch in HomeKit Schaltern gehen?!...

    Geht das auch, wenn du das nicht einfach so als User pi eintipperst, sondern als User homebridge? Mach ma:


    sudo su - homebridge

    echo standby 0 | cec-client -s -d 1


    Funktioniert das immer noch?


    Zum Verlassen der Shell des Users homebridge gibst du exit ein und arbeitest wieder als der User pi.


    Es ist gut, wenn man nicht nur das Kommando kennt, sondern den ganzen Pfad dorthin und beides zum Konfigurieren des cmdswitch2 verwendet. Den Pfad ermittelst du mit


    which cec-client


    wobei so was wie /usr/bin oder /usr/local/bin herauskommt. Der Aufruf wäre dementsprechend dann sowas wie /usr/bin/cec-client -s -d 1.


    Stefan

  • Ich würde darauf auch eigentlich verzichten das mit Befehlen "selbst" zu bauen, aber da bei mir, aus welchen Gründen auch immer, alle "fertigen" plugin für CEC bzw. AppleTV nicht funktionieren, bleibt mir (glaube ich) nichts anderes übrig.

  • Hi Stefan,


    bisher habe ich es immer nur mit pi probiert und auch immer nur ohne den gesamten Pfad.


    Habe derzeit leider keinen Zugang zu dem pi. Ich werde es heute Abend testen.


    Rein hypothetisch: Wenn es mit user homebridge nicht funktioniert, wie würde ich das dann beheben?

    Ich hatte gestern schon mal probiert homebridge mit allen Rechten auszustatten (gem. Anleitung Schritt 2) und hatte auch keinen Erfolg (glaube ich zumindest, wird heute abend auch neu getestet).


    Aber der cmdswitch2 Befehle wäre theoretisch richtig mit

  • Ja, das sieht doch gut aus. Ich bin in dem Thema CEC leider gar nicht fit, aber weiß halbwegs, wie ein Linux-Rechner funktioniert :)

  • Weißt du wie das state_cmd funktioniert?
    Auch hier wieder:
    Wenn ich im Terminal (mit User Pi) echo pow 0 | cec-client -s -d 1 eingebe, bekomme ich power status: standby bzw power status: on.

    Dann müsste ich doch dem Schalter in cmdswitch2 über state_cmd Abfragen lassen können, ob der Fernseher gerade an oder aus ist.

    Wie ich dem plugin beibringe dass power status: on/standby bedeutet Homekit-Switch = AN/AUS verstehe ich allerdings nicht.
    Hast du eine Idee, wie ich den Befehl hier eingebe?
    Ich dachte an etwas wie "state_cmd": "echo pow 0 | cec-client -s -d 1" | grep -i 'power status: on'" , aber das ist auch mehr geraten mit dem was ich im Internet finden konnte

  • sudo su - homebridge

    echo standby 0 | cec-client -s -d 1


    Funktioniert das immer noch?

    Hier scheint sich ein Problem aufzuzeigen.
    Wenn ich echo on 0 | cec-client -s -d 1 als homebridge ausführe, bekomme ich * failed to open vchiq instance zurück.

    which cec-client  meldet wie erwartet /usr/bin/cec-client



    edit:

    ...und mit ein wenig weiterem googeln folgendes gefunden:

    sudo usermod -a -G video $(whoami)

    Das ganze habe ich als homebridge ausgeführt und jetzt funktionieren alle cec-Befehle aus HomeKit heraus.

    Einmal editiert, zuletzt von Rohwi ()

  • Ok, um das ganz schnell zu lösen, änderst du dein Setup dahingehend, dass du deine Homebridge nicht mehr unter dem User homebridge laufen lässt, sondern unter dem User pi. Dazu tust du folgendes als User pi:


    sudo systemctl stop homebridge

    sudo nano /etc/systemd/system/homebridge.service


    Hier änderst du die Zeile User=homebridge in User=pi. Abspeichern. Auf der Shell geht's weiter:


    sudo systemctl daemon-reload

    sudo chown -R pi:pi /var/homebridge

    sudo systemctl restart homebridge; sudo journalctl -fau homebridge


    Jetzt sollte der Prozess homebridge unter dem User pi laufen und der darf dein Kommando ja ausführen. Ich will mal checken, wie das auch der homebridge-User machen kann und dann unsere Anleitung verbessern.


    Stefan


    PS: Offenbar geht's auch, wenn man den User homebridge der Gruppe video hinzufügt, siehe hier: https://raspberrypi.stackexcha…v-vchiq-permission-errors


    sudo usermod -a -G video homebridge

  • So,

    wie sagte man noch in der Schule immer: "Das Gelernte gleich anwenden"

    Nachdem ich gestern mit verschiedensten Kombinationen von on_cmd, off_cmd und state_cmd's rumgetestet habe funktioniert jetzt alles relativ zuverlässig und mit nur einem Switch, der alles in der richtigen Reihenfolge aus- bzw. anschaltet.
    "MovieTime", "RetroTime" und "Ab ins Bett" etc steht jetzt nichts mehr im Wege.

    Die HomeApp selber ist nur etwas zickig, weil das state_cmd etwas lange dauert, weil der cec-status etwas auf sich warten lässt.

    Die HomeApp meint dann häufig, das Geräte sei nicht erreichbar. Eve ist da schlauer.

    Nochmal tausend Dank!

  • Danke dafür, dass wir das Drama miterleben durften. Die Lösung wird in die Forenanleitung eingepflegt werden. Ich will mich über das Wochenende noch mit GPIO auseinandersetzen, denn das geht mit unserer Anleitung auch noch nicht vernünftig, und dann mach da mal ein Update, das gleich zwei Fliegen wegfächelt.


    Stefan

  • mach da mal ein Update, das gleich zwei Fliegen wegfächelt.

    Kann man das dann eventuell auch auf eine bestehende Installation loslassen? Oder wäre das zuviel Aufwand?

  • Das kann man dann mit Minimalaufwand. Ich schätze, dass man dann zeitlich noch mal so 10-12 Sekunden investieren muss. Kein Witz. ;)


    Stefan

  • Ich klink mich auch mal ein. Ich brauch irgendwie ne Möglichkeit, dass ich den aktuellen Status der AppleTV abgreifen kann.

    Ich würde den Status gern als Triggersignal nutzen.

    Quasi wenn AppleTV an soll ein anderes gerät aus gehen. Gibts da irgendwie ne Möglichkeit?

  • Bei funktioniert die Abfrage mit der EVE App mit dem CMD Switch Plugin in Kombination mit dem cec-client relativ zuverlässig. Ob du das dann als Trigger nutzen kannst, musst du mal testen.

  • Homebridge läuft bei mir im docker. Daher kann ich da nicht so einfach den cec-client nutzen. Das muss doch auch einfacher gehen. Hab schon überlegt mit ner eve steckdose den strom vom appletv zu überwachen. Das müsst ja auch klappen.

    Noch einfach wäre es ja, wenn man den AppleTv nativ mit homekit steuern könnte :D

  • Ich verstehe auch bis heute nicht warum es keine HomeKit Integration für den Ruhezustand vom AppleTV gibt. Da wird aber sicher bei Apple jemand einen guten Grund für haben ...


    Ohne ein zusätzliches Skript wird Dir der Strom der Steckdose wohl nichts bringen. Der Wert ist meines Wissens nur Info und kann nicht in Automationen genutzt werden.

  • Doch mit der Eve App kann man das anlegen ab welchen Wert etwas geschaltet werden soll.