NEWS
Steuerung von allen Android Geräten (inkl. Android TV z.B. nvidia shield tv)
-
Hallo,
ich suche gerade einen Weg meinen NVidia Shield TV über ioBroker zu steuern. Hierbei geht es mir in erster Linie um An und Ausschalten und eventuell auch noch eine bestimmte App starten.
In meinem Fall soll darüber der Kino Modus gestartet bzw. beendet werden. Beamer geht an, Leinwand fährt runter, 5.1 System geht an und jetzt fehlt noch Shield TV an und am besten noch Netflix starten. Über das Forum habe ich keine aktuelle Möglichkeit gefunden. Über Google bin ich dann darauf gestoßen, dass man über ADB Tastenkürzel an jedes Android Gerät schicken kann (vorausgesetzt dieses ist im Entwicklermodus). Somit sollte eigentlich eine Grundlegende Bedienung per ioBroker möglich sein.
Ich habe es mal kurz vom Laptop mit Linux und installierter ADB ausprobiert und es funktioniert. Auch Apps sollten sich über ADB starten lassen.
Da ich gerade erst mit dem Thema ioBroker anfange und mir leider auch aktuell die Zeit für eine Adapter Entwicklung fehlt kann ich leider keinen Adapter schreiben. Wenn sich jemand finden sollte der dieses übernehmen würde, könnte ich natürlich gerne helfen und testen.
Ich werde morgen mal die ADB auf meinem Pie einrichten und versuchen die Grundlegenden Befehle per Shell Execute über ein JavaScript an den Shield zu schicken. Sobald ich da ein Ergebnis habe werde ich es hier posten.
adb tcpip 5555 adb connect 123.456.789.123:5555 adb shell input keyevent "KEYCODE_POWER" adb shell input keyevent "KEYCODE_HOME" //Alle Apps auflisten adb shell pm list packages -f //Netflix starten adb shell monkey -p com.netflix.ninja -c android.intent.category.LAUNCHER 1
Gruß
Martin
-
Guten Morgen,
wie gesagt, habe ich es heute mal kurz über ein JavaScript vom ioBroker versucht und es funktioniert. Also für meinen Fall reicht das vollkommen aus, wie sieht das Interesse bei anderen aus? Wird ein besseres Script benötigt oder eventuell auch ein Adapter?
Bevor der Code funktioniert muss auf dem Rechner auf dem das Script läuft ADB installiert sein.
Auf dem RaspberryPie habe ich dieses über:
sudo apt-get install -y android-tools-adb android-tools-fastboot
erledigt.
Folgendes Script habe ich unter Global angelegt:
function SendAdbKey(keycode) { exec('adb connect 192.168.178.39:5555'); exec('adb shell input keyevent "' + keycode + '"'); } function SendAdbPower() { SendAdbKey('KEYCODE_POWER'); } function SendAdbHome() { SendAdbKey('KEYCODE_HOME'); }
Gruß
Martin
-
Hey Martin,
ich bin Neuling der ersten Stunde und versuche mich mit IOBroker hier ein wenig einzulesen. :shock: Ich war auch auf der Suche nach einer Einbindung meiner Shield TV, in IOBroker und habe hier deinen Thread gefunden. Ich würde es sehr begrüßen, wenn du das ganze weiter ausbaust. Im Grunde würde mir es schon ausreichen einige Apps zu starten, wie z.b. Kodi, Netflix, Amazon Prime oder Tunein.
Ich habe auch schon die ADB auf meinem PI installiert, aber weiß nun nicht wirklich wie ich dein Script verstehen soll um es eben zu erweitern. Leider beherrsche ich keine Programmiersprachen. Wenn ich das richtig verstehe startet das Script im Moment nur die Shield TV. Richtig?
Gruß André
-
Ja, mit dem Script kann man aktuell nur den Shield an und ausschalten.
Bzw. Es ist auch möglich (nicht getestet) jeden keycode an das Android Gerät zu schicken.
Apps starten sollte auch möglich sein, im ersten Beitrag steht der nötige ADB Befehl. Das kann ich morgen mal über eine entsprechende Javascript Funktion ausprobieren.
Damit es funktioniert, muss auf dem Shield der Entwickler Modus aktiviert sein und anschließend USB und Netzwerk Debugging erlaubt werden.
Um den Entwicklermodus zu aktivieren musst du mehrfach hintereinander auf den buildnummer auf dem Shield drücken. Anschließend hast du unter dem Einstellungen den Eintrag Entwickler, da musst du dann USB und Netzwerk Debugging erlauben.
Anschließend solltest du die Verbindung von pie zum Shield testen. Wie im ersten Beitrag geschrieben. Bei der ersten Verbindung fragt dich der Shield ob du dem Computer vertrauen möchtest. Hier immer zulassen aktivieren.
Gruß
Martin
-
Also ich habs jetzt bei mir einfach mal übers Terminal getestet. Verbindung steht definitiv, aber weder der HOME noch POWER Button startet die Shield. Aber wenn ich direkt die Netflix App starte, dann startet auch die Shield automatisch. Würde mir so auch schon reichen als Script. Dies könnte man ja dann auch an diverse andere Apps anpassen. Ich werd mal mein Glück versuchen das Script anzupassen. :?
Gruß
-
Schaut euch mal den „PAW“ Adapter an!.
https://www.npmjs.com/package/iobroker.paw
Vielleicht kann der was ihr sucht/wollt.
-
Ich bekomme das mit dem Script nicht hin. Ich habe auch den Paw Adapter am laufen, aber der läuft bei mir nur mit meinen Tablets. Auf der Shield macht der Adapter keinen Mucks. Per Tablet läuft alles wie es soll. Keine Ahnung was da los ist.
Deswegen habe ich es weiter mit der adb shell versucht. Und da funktionieren jetzt die Befehle. Also ich kann die Shield aufwecken mit KEYCODE_WAKEUP, in den SLEEP schicken und Apps starten. Alles via Putty.
Jetzt meine Frage, ob mir jemand die Befehle in Javascript umbauen kann? Ich hab vom Scripten absolut keine Ahnung.
Hier die Befehle:
Für den Wakeup
adb connect 192.168.1.29:5555 adb shell input keyevent KEYCODE_WAKEUP
Für den Sleep Modus
adb connect 192.168.1.29:5555 adb shell input keyevent KEYCODE_SLEEP
Für den App start z.b. Netflix
adb connect 192.168.1.29:5555 adb shell monkey -p com.netflix.ninja -c android.intent.category.LAUNCHER 1
Danke für eure Hilfe!!
LG
-
Gibt es eine Liste mit den möglichen keyevents?
Sowas wie Pause/Play wäre zB nett.
-
Das Thread ist zwar schon etwas älter aber hab noch mal eine Frage an den TO. Wenn du dein Shield TV mit deinem ADP Script steuerst dann nur über USB oder funktioniert das auch über LAN?
-
Ich schließe mich hier "noch später :D" mal an.
In meinem unraid Docker lässt sich adb nicht installieren.
Gibt es noch jemanden, der das hier aktiv verwendet? -
Danke für den thread hier, das hat mir meine Automatisierung nun endlich auch mal automatisiert!
Nur woher habt ihr die keycodes/keyevents?
Ich nutze derzeit den keycode_power zum an und ausschalten der Shield. Jedoch muss es noch andere shutdown Befehle geben. Schalte ich sie mit der Fernbedienung aus, so beendet die Shield auch gemäß meinen Einstellungen auch den TV und AVR. Nur mit dem adb keycode_power scheint sie mir eher nur schlafen zu gehen.
Kennt ihr noch einen anderen keycode?Danke!
-
hallo zusammen,
gibt es eigentlich eine möglichkeit den status einer android tv box zu erfragen? speziell, wenn die box ausgemacht wird, würde ich das gerne hinkriegen, um eine aktion ausführen zu können.
so wie ich das bis jetzt hier überflogen habe, kann sowohl der umweg über adb als auch über den PAW adapter nur an die Box senden, aber nichts empfangen, richtig?
anpingen der box ist leider keine option -.-
-
@ice86
Da bei mir adb (erstmal) nicht läuft habe ich durch Zufall festgestellt, dass es auf meinem Shield ganz gut mit Chromecast geht.
Dort kann ich verschieden Status abfragen u.a. ob der Shield An ist, oder im Standby, ob gerade etwas gespielt wird (z.B. Netflix o.ä.), die aktuelle laustärke uvm.
Damit steuere ich aktuell meine umliegende Peripherie. Bisher keine Ausfälle oder Anomalien -
@sauerm eeehm.... details?
wenn möglich... bitte!
-
@ice86
Ich schaue morgen gern mal genauer
Hast du die Möglichkeit Chromecast auf deiner Android Box zu installieren?
Wenn ja, brauchst du nur den Chromecast Adapter im Broker. Wenn er den Client nicht automatisch findet, kannst du ihn manuell hinzufügen. Anschließend werden alle Datenpunkte zum Endgerät automatisch angelegt. -
@sauerm ich schaue heute abend mal nach, aber denke, dass es gehen sollte mit chromecast!
aah, jetzt versteh ich das auch. also chromecast adapter für iobroker, chormecast app auf die Mi Box S und dann quasi schauen, wie sich die Werte im Adapter ändern wenn die Box an/aus ist.
-
@ice86 Ja genau
Klappt es denn?
Bei der MiBox geht es ja vielleicht auch über ADB, das klappt beim nvidia Shield nicht so gut/einfach. Daher bin ich mit dieser Lösung recht zufrieden.strikethrough textEDIT: siehe Folgepost
-
@sauerm sagte in Steuerung von allen Android Geräten (inkl. Android TV z.B. nvidia shield tv):
Ich schließe mich hier "noch später :D" mal an.
In meinem unraid Docker lässt sich adb nicht installieren.
Gibt es noch jemanden, der das hier aktiv verwendet?Ich würde mich gerne in das Thema mit rein hängen.
Bei mir ist das gleiche Problem.
Kann ich überhaupt die ADB-Tools in einem Docker installieren oder benötige ich einen ADB-Server in einem separatem Docker?Über Hinweise wäre ich sehr froh.
Update 29.03.21: Um die ADB-Tools im ioBroker lauffähig zu bekommen muss man sich lediglich das Installations-zip bei Google herunterladen und in einem Verzeichnis auf dem ioBroker entpacken.
Mit der entsprechenden Pfad-Angabe kann man denn den jeweiligen Befehl ausführen.
(Geht vielleicht auch mit dem setzen einer PATH-Angabe)
@sauerm -
Ich habe es nun auch hinbekommen - allerdings bin ich mittlerweile auf einen Pi4 gewechselt. Im Docker läuft nur noch mein Backup.
Auf dem Pi ist es relativ simpel. Auch die Aktivierung von ADB auf dem ShieldTV ist mittlerweile relativ einfach. Hierzu gibt es zahlreiche, kurze Tutorials.
Eine Übersicht der Befehle habe ich hier gefunden.
Mein Skript sieht nun so aus:
var Name, Initialisation, Description, Type, Role, SmartName, Text_Alexa, Alexa_Notification, Message, timeout; function Create_DP(Name, Initialisation, Description, Type, Role, SmartName) { createState(Name, Initialisation, { name: Description, read: true, write: true, type: Type, role: Role, smartName: SmartName }); } function SendAdbKey(keycode) { exec('adb connect 10.1.1.25:5555'); exec('adb shell input keyevent "' + keycode + '"'); } function SendAdbPower() { SendAdbKey('KEYCODE_POWER'); } function SendAdbHome() { SendAdbKey('KEYCODE_HOME'); } function CheckAdbPowerState() { exec('adb connect 10.1.1.25:5555'); exec('adb shell \'dumpsys power | grep -e "mWakefulness="\'',function (error, stdout, stderr) { setState("0_userdata.0.Devices.WZ.ShieldTV.info.state", stdout.replace('mWakefulness=','')); }); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// Create_DP('0_userdata.0.Devices.WZ.ShieldTV.info.state', '', 'Power State', 'string', 'state',''); Create_DP('0_userdata.0.Devices.WZ.ShieldTV.power.switch', false, 'Power Switch', 'boolean', 'switch','Shield T.V.'); schedule("*/5 * * * * *", async function () { CheckAdbPowerState(); }); on({id: '0_userdata.0.Devices.WZ.ShieldTV.power.switch'}, function (obj) { SendAdbPower(); });
Über den DP "state" kann der Zustand des Shield abgefragt werden ("Awake", "Asleep", "Dreaming")
-
@sauerstofff Vielen Dank für das tolle Skript, ich habe es trotz meiner absoluten Unwissenheit bzgl. Javascript ohne Fehlermeldungen zum laufen gebracht.
Es funktioniert sowohl der Home Switch, als auch der Power Switch wenn ich diese manuell oder über ein Blockly-Skript auslöse.
Was leider nicht funktioniert, ist das auslesen des Zustands vom DP "state". Wenn dieser "Asleep" ist, soll der Power Switch ausgelöst werden:
Es funktioniert aber nicht so wie abgebildet mit dem Inhalt des grünen Text-Blocks ("Asleep"). Wenn ich den unter Objekte aus dem DP heraus kopiere, habe ich in der Zwischenablage " Asleep" (2 Leerzeichen davor). Das Gleiche ist es bei " Dreaming" und " Awake". Wenn ich den kopierten Text mit Leerzeichen in den Text-Block einfüge passiert auch nichts. Also werden dort vielleicht Leerzeichen ignoriert oder in Wirklichkeit sind es andere Zeichen die da noch davor stehen und nicht korrekt kopiert werden?
Hat vielleicht jemand eine Idee wie ich das Problem lösen kann?