NEWS
Steuerung von allen Android Geräten (inkl. Android TV z.B. nvidia shield tv)
-
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?