AndroidDB

Aus FHEMWiki
Version vom 15. Februar 2022, 09:58 Uhr von Zap (Diskussion | Beiträge) (Beschreibung der Module AndroidDB und AndroidDBHost)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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

Voraussetzung: Auf jedem Android Device, das über AndroidDB gesteuert werden soll, muss der Entwicklermodus aktiviert und das USB Debugging eingeschaltet sein. Das Gerät muss nicht(!) gerootet 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):

- 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 "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)

Nun kann man ein AndroidDB Gerät in FHEM definieren:

Code: [Auswählen]

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.

Nun kann man sein Android Gerät steuern. Eine der nützlichsten Funktionen dürfte das Senden von Tastendrücken sein. So kann man in FHEM eine Fernbedieung realisieren.

Beispiel: Home-Taste drücken

Code: [Auswählen]

set myTV sendKey KEYCODE_HOME

Beispiel: Umschalten auf Programm 12

Code: [Auswählen]

set myTV sendKey KEYCODE_0 KEYCODE_0 KEYCODE_1 KEYCODE_2(die beiden führenden 0en könnte man weglassen, dann dauert das Umschalten aber länger, da das Gerät wartet, ob weitere Tasten kommen)

Eine Liste der Keycodes findet man hier: https://developer.android.com/reference/android/view/KeyEvent

Presets

Ich habe einige Presets hinterlegt (am Beispiel eines Magenta TV Sticks). Ein Preset kann mit dem Attribut 'preset' eingestellt werden. Alternativ kann man mit dem Attribut 'macro' eigene RemoteControl Befehle definieren. Ein solcher Befehl kann mehrere Tastendrücke senden.

Nach der Auswahl eines Presets kann man Befehle etwas abkürzen, z.B.:

Code: [Auswählen]

set myTVStick remoteControl APPS

set myTVStick remoteControl EPG

Mit Macros:

Code: [Auswählen]

attr myTV macros DasErste:KEYCODE_0,KEYCODE_0,KEYCODE_0,KEYCODE_1

set myTV remoteControl DasErste

In Arbeit: