AndroidDB: Unterschied zwischen den Versionen
Zap (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
K (Modul FireTV verlinkt) |
||
(7 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox Modul | |||
|ModPurpose=Steuerung von Android Geräten | |||
|ModType=d | |||
|ModForumArea=Sonstiges | |||
|ModTechName=89_AndroidDB | |||
|ModOwner=zap ({{Link2FU|10980|Forum}}/[[Benutzer Diskussion:Zap|Wiki]])}} | |||
== Allgemeines == | == Allgemeines == | ||
Die Module AndroidDB und AndroidDBHost erlauben die Steuerung von Android Geräten über die Android Debug Bridge (ADB). Man kann z.B. Befehle auf Android Geräten ausführen, Android Geräte neu starten oder Tastatur- und Touchscreen-Eingaben an Android Geräte senden und so eine Fernbedienung simulieren. Die Module wurden primär entwickelt, um Android TV Geräte zu steuern, sollten aber auch mit Tablets oder Telefonen funktionieren. Ein "rooten" der zu steuernden Geräte ist nicht erforderlich! | Die Module AndroidDB und AndroidDBHost erlauben die Steuerung von Android Geräten über die Android Debug Bridge (ADB). Man kann z.B. Befehle auf Android Geräten ausführen, Android Geräte neu starten oder Tastatur- und Touchscreen-Eingaben an Android Geräte senden und so eine Fernbedienung simulieren. Die Module wurden primär entwickelt, um Android TV Geräte zu steuern, sollten aber auch mit Tablets oder Telefonen funktionieren. Ein "rooten" der zu steuernden Geräte ist nicht erforderlich! | ||
Zeile 50: | Zeile 56: | ||
== Steuerung von Android Devices in FHEM == | == Steuerung von Android Devices in FHEM == | ||
=== Tastatureingaben senden === | |||
Eine der nützlichsten Funktionen dürfte das Senden von Tastendrücken sein. So kann man in FHEM eine Fernbedienung oder auch die Sprachsteuerung von Android Geräten realisieren. | |||
Beispiel: Home-Taste drücken | Beispiel: Home-Taste drücken | ||
set myTV sendKey KEYCODE_HOME | |||
Beispiel: Umschalten auf Programm 12 / mehrere Keycodes senden: | |||
set myTV sendkey KEYCODE_1 KEYCODE_2 | |||
Eine Liste der Keycodes findet man hier: https://developer.android.com/reference/android/view/KeyEvent | |||
Weitere Befehle zum Senden von Tastatureingaben sind '''set sendNumKeys''' und '''set sendText'''. | |||
=== Makros === | |||
Ein Makro fasst eine Folge von Tastatureingaben oder einen ADB-Befehl unter einem Befehl zusammen. Tastaturmakros können anschließend mit dem Befehl '''set remoteControl''' ausgeführt werden. Makros für ADB-Befehle stehen als set-Befehle zur Verfügung. | |||
Beispiel: Es wird ein Makro "DasErste" definiert, bei dessen Ausführung die Sequenz "0001" an ein Android TV Gerät gesendet wird: | |||
attr myTV macros DasErste:KEYCODE_0,KEYCODE_0,KEYCODE_0,KEYCODE_1 | |||
set myTV remoteControl DasErste | |||
Beispiel: Es wird ein Makro "listPackages" zum Auflisten aller Apps definiert, die auf einem Android-Device installiert sind: | |||
attr myTV macros listPackages:shell pm list packages | |||
set myTV listPackages | |||
=== Presets === | |||
Presets sind eine Liste von Makrodefinitionen. AndroidDB hat Presets bereits eingebaut für Magenta TV Stick, Magenta One. Man kann eigene Presets in einer Datei definieren und mit dem Attribut 'presetFile' laden. Eine solche Preset-Datei kann mehrere Preset-Definitionen enthalten. Ein Preset kann mit dem Attribut 'preset' ausgewählt werden. | |||
Eine Preset-Datei hat folgenden Aufbau:<syntaxhighlight lang="text"> | |||
# Kommentar | |||
PresetName1 | |||
MacroName1:MacroDef1[,...] | |||
MacroName2:MacroDef2[,...] | |||
... | |||
PresetName2 | |||
... | |||
</syntaxhighlight>Ein ''MacroName'' darf keine Leerzeichen enthalten. Der Parameter ''MacroDef'' steht entweder für eine Liste von Keycodes oder einen ADB-Befehl. Siehe auch Abschnitt "Makros". | |||
Um eine eigene Preset-Datei zu erstellen, kann man die internen Definitionen von AndroidDB mit dem Befehl '''set exportPresets''' als Preset-Datei exportieren und diese Datei dann anpassen: | |||
set myTV exportPresets /home/fhem/android.dat | |||
Beispiel: Eine Preset-Datei wurde unter dem Namen "/home/fhem/android.dat" angelegt. Sie enthält 2 Presets mit den Namen "SonyTV" und "[[FireTV]]". | |||
Preset-Datei laden: | |||
attr myTV presetFile /home/fhem/android.dat | |||
Preset auswählen: | |||
attr myTV preset SonyTV | |||
=== Fernbedienungen === | |||
AndroidDB unterstützt das Anlegen von Remotecontrol-Devices mit dem FHEM Modul remotecontrol. Für die eingebauten Presets kann eine Fernbedienung mit dem Befehl set createRemote angelegt werden: | |||
set myTV createRemote MagentaOne | |||
AndroidDB legt damit zwei neue FHEM devices an: | |||
* Ein Device vom Typ "remotecontrol" mit dem Namen "myTV_RC" | |||
* Ein Device vom Typ "notify" mit dem Namen "notify_myTV_RC" (Weiterleitung der Tastendrücke aus "myTV_RC" an "myTV") | |||
Beispiel: | |||
[[Datei:SampleRemote.png|links|Remote control created by set createRemote command|alternativtext=|512x512px]] | |||
== Erzeugen von Readings == | |||
Die Ausgabe von "shell" Befehlen kann in FHEM Readings konvertiert werden. Voraussetzung ist, dass die Ausgabe eine oder mehrere Zeilen im Format "Parameter=Wert" enthält. Führende Leerzeichen werden dabei automatisch entfernt. | |||
Zunächst legt man mit dem Attribut createReadings fest, für welche Shell-Befehle Readings erzeugt werden sollen. Das Argument dieses Attributs ist ein regulärer Ausdruck. | |||
Beispiel: Die Ausgabe des Befehls "set shell dumpsys" soll in Readings gespeichert werden: | |||
attr myDev createReadings dumpsys | |||
Befehl ausführen: | |||
set myDev shell dumpsys power | |||
[[Kategorie:Android]] | [[Kategorie:Android]] |
Aktuelle Version vom 15. Januar 2024, 13:18 Uhr
AndroidDB | |
---|---|
Zweck / Funktion | |
Steuerung von Android Geräten | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstiges |
Modulname | 89_AndroidDB |
Ersteller | zap (Forum /Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Allgemeines
Die Module AndroidDB und AndroidDBHost erlauben die Steuerung von Android Geräten über die Android Debug Bridge (ADB). Man kann z.B. Befehle auf Android Geräten ausführen, Android Geräte neu starten oder Tastatur- und Touchscreen-Eingaben an Android Geräte senden und so eine Fernbedienung simulieren. Die Module wurden primär entwickelt, um Android TV Geräte zu steuern, sollten aber auch mit Tablets oder Telefonen funktionieren. Ein "rooten" der zu steuernden Geräte ist nicht erforderlich!
Die Module wurden mit folgenden Geräten getestet:
- Samsung Android Tablet
- SONY Android TV AF9
- Magenta TV Stick
- Magenta One
- NVidia Shield
Einige mögliche Befehle als Anwendungsbeispiele:
- Aufnahmetaste drücken: set myTVDev remoteControl RECORD
- Neu starten: set myTVDev reboot
- Installierte Apps anzeigen: set myTVDev shell pm list packages
Installation
Voraussetzungen für die Nutzung der Module in FHEM:
- Installation des Perl Moduls IPC::Open3
- Installation der Android Plattform Tools
Für die Installation des Perl Moduls verwendet man CPAN. Die Android Plattform Tools werden unter Debian/Raspbian mit dem folgenden Befehl installiert:
apt-get install android-sdk-platform-tools
Für andere Plattformen (Windows, Linux x86, MacOS) findet man die Tools hier: https://developer.android.com/studio/releases/platform-tools Bei der manuellen Installation der Tools von developer.android.com (MacOs und Linux) muss man darauf achten, dass der Nutzer, unter dem der FHEM Prozess läuft, den Befehl 'adb' ausführen darf. Dazu ggf. die Rechte auf 'read' und 'execute' für alle setzen:
sudo chmod 755 adb
Definition eines I/O Device (AndroidDBHost)
Je FHEM Instanz gibt es nur 1 I/O Device. Die Syntax für die Definition sieht so aus:
define Name AndroidDBHost [adb=Pfadangabe]
Die Angabe des Parameters 'adb' ist nur erforderlich, wenn sich der Befehl 'adb' nicht im Suchpfad für ausführbare Programme befindet. Beispiel:
define myADBServer AndroidDBHost adb=/usr/local/platform-tools/adb
Defintion von Android Devices in FHEM (AndroidDB)
Android Gerät vorbereiten
Auf jedem Android Device, das über AndroidDB gesteuert werden soll, muss der Entwicklermodus aktiviert und das USB Debugging eingeschaltet sein. Dies sollte auf jedem Android Gerät ohne "root" Berechtigung möglich sein.
Die Aktivierung des Entwicklermodus kann sich von Gerät zu Gerät etwas unterscheiden, ist aber meist ähnlich. Bei Android TV Geräten geht man so vor (einmalige Aktion je Gerät):
- Sollte das Android Gerät einen USB-Anschluss haben, sollte daran kein Gerät angeschlossen sein (z.B. LAN-Adapter bei TV Geräten)
- Auf dem Android Gerät Geräteeinstellungen > Info auswählen
- Ganz nach unten scrollen bis zu einer Angabe, die meistens "Build" oder "Version" heißt
- Auf diese Angabe wiederholt drücken. Android zeigt dann irgendwann die Meldung "in X Schritten bist Du Entwickler" an. Dann noch X Mal drücken bis "Du bist jetzt Entwickler" angezeigt wird
- Nun unter Geräteeinstellungen > Entwickleroptionen das USB-Debugging einschalten (heißt zwar USB, die Verbindung erfolgt aber über das Netzwerk)
- Sollte sich das USB-Debugging nicht aktivieren lassen, das Android Gerät neu starten. Dies kann vorkommen, wenn ein Gerät per USB angeschlossen war (siehe 1)
AndroidDB Device in FHEM definieren
Nun kann man ein AndroidDB Device in FHEM definieren:
define myTV AndroidDB 192.168.1.100
Einziger Parameter ist die IP-Adresse des Android-Geräts (man sollte eine feste IP zuordnen). Beim ersten Zugriff auf das Gerät kann es sein, dass man auf dem Gerät einmal die Verbindung von FHEM zulassen muss. In dem Fall sollte man den Haken bei "Zugriff immer erlauben" setzen.
Steuerung von Android Devices in FHEM
Tastatureingaben senden
Eine der nützlichsten Funktionen dürfte das Senden von Tastendrücken sein. So kann man in FHEM eine Fernbedienung oder auch die Sprachsteuerung von Android Geräten realisieren.
Beispiel: Home-Taste drücken
set myTV sendKey KEYCODE_HOME
Beispiel: Umschalten auf Programm 12 / mehrere Keycodes senden:
set myTV sendkey KEYCODE_1 KEYCODE_2
Eine Liste der Keycodes findet man hier: https://developer.android.com/reference/android/view/KeyEvent
Weitere Befehle zum Senden von Tastatureingaben sind set sendNumKeys und set sendText.
Makros
Ein Makro fasst eine Folge von Tastatureingaben oder einen ADB-Befehl unter einem Befehl zusammen. Tastaturmakros können anschließend mit dem Befehl set remoteControl ausgeführt werden. Makros für ADB-Befehle stehen als set-Befehle zur Verfügung.
Beispiel: Es wird ein Makro "DasErste" definiert, bei dessen Ausführung die Sequenz "0001" an ein Android TV Gerät gesendet wird:
attr myTV macros DasErste:KEYCODE_0,KEYCODE_0,KEYCODE_0,KEYCODE_1 set myTV remoteControl DasErste
Beispiel: Es wird ein Makro "listPackages" zum Auflisten aller Apps definiert, die auf einem Android-Device installiert sind:
attr myTV macros listPackages:shell pm list packages set myTV listPackages
Presets
Presets sind eine Liste von Makrodefinitionen. AndroidDB hat Presets bereits eingebaut für Magenta TV Stick, Magenta One. Man kann eigene Presets in einer Datei definieren und mit dem Attribut 'presetFile' laden. Eine solche Preset-Datei kann mehrere Preset-Definitionen enthalten. Ein Preset kann mit dem Attribut 'preset' ausgewählt werden.
Eine Preset-Datei hat folgenden Aufbau:
# Kommentar
PresetName1
MacroName1:MacroDef1[,...]
MacroName2:MacroDef2[,...]
...
PresetName2
...
Ein MacroName darf keine Leerzeichen enthalten. Der Parameter MacroDef steht entweder für eine Liste von Keycodes oder einen ADB-Befehl. Siehe auch Abschnitt "Makros".
Um eine eigene Preset-Datei zu erstellen, kann man die internen Definitionen von AndroidDB mit dem Befehl set exportPresets als Preset-Datei exportieren und diese Datei dann anpassen:
set myTV exportPresets /home/fhem/android.dat
Beispiel: Eine Preset-Datei wurde unter dem Namen "/home/fhem/android.dat" angelegt. Sie enthält 2 Presets mit den Namen "SonyTV" und "FireTV".
Preset-Datei laden:
attr myTV presetFile /home/fhem/android.dat
Preset auswählen:
attr myTV preset SonyTV
Fernbedienungen
AndroidDB unterstützt das Anlegen von Remotecontrol-Devices mit dem FHEM Modul remotecontrol. Für die eingebauten Presets kann eine Fernbedienung mit dem Befehl set createRemote angelegt werden:
set myTV createRemote MagentaOne
AndroidDB legt damit zwei neue FHEM devices an:
- Ein Device vom Typ "remotecontrol" mit dem Namen "myTV_RC"
- Ein Device vom Typ "notify" mit dem Namen "notify_myTV_RC" (Weiterleitung der Tastendrücke aus "myTV_RC" an "myTV")
Beispiel:
Erzeugen von Readings
Die Ausgabe von "shell" Befehlen kann in FHEM Readings konvertiert werden. Voraussetzung ist, dass die Ausgabe eine oder mehrere Zeilen im Format "Parameter=Wert" enthält. Führende Leerzeichen werden dabei automatisch entfernt.
Zunächst legt man mit dem Attribut createReadings fest, für welche Shell-Befehle Readings erzeugt werden sollen. Das Argument dieses Attributs ist ein regulärer Ausdruck.
Beispiel: Die Ausgabe des Befehls "set shell dumpsys" soll in Readings gespeichert werden:
attr myDev createReadings dumpsys
Befehl ausführen:
set myDev shell dumpsys power