FHEM > Sonstiges

Neue Module 89_AndroidDBxx zur Steuerung von Android Devices

(1/3) > >>

zap:
Die Module 89_AndroidDB und 89_AndroidDBHost erlauben die Steuerung von Android Devices über die Android Debug Bridge (ADB). Man kann Shell-Befehle auf Android Geräten ausführen, Android Geräte neu starten oder aber Tastendrücke an Android Geräte senden und so eine Fernbedienung simulieren. Getestet habe ich das mit

- Samsung Android Tablet
- SONY Android TV AF9
- Magenta TV Stick
- NVidia Shield


* Beispiel Aufnahmetaste drücken: set myTVStick remoteControl RECORD
* Beispiel neu starten: set myTVStick reboot
* Beispiel installierte Apps anzeigen: set myTVStick shell pm list packages
Installation

Voraussetzungen für FHEM:

- Installation des Perl Moduls IPC::Open3
- Installation der Android Plattform Tools

Die Installation des Perl Moduls erledigt man wie gehabt mit CPAN. Die Android Plattform Tools werden unter Debian/Raspbian mit dem folgenden Befehl installiert:


--- Code: ---apt-get install android-sdk-platform-tools
--- Ende Code ---

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:


--- Code: ---chmod 755 adb
--- Ende Code ---

Definition eines I/O Device (das gibt es nur 1x je FHEM Instanz)

Nach der Installation aller notwendigen Komponenten definiert man zunächst ein I/O Device, das den ADB-Server repräsentiert:


--- Code: ---define myADBServer AndroidDBHost
--- Ende Code ---

Wenn sich der ADB Befehl (der mit den Android Platform Tools installiert wurde) nicht im Pfad befindet, muss man den Pfad zum Befehl als Parameter angeben:


--- Code: ---define myADBServer AndroidDBHost adb=/usr/local/platform-tools/adb
--- Ende Code ---

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: ---define myTV AndroidDB 192.168.1.100
--- Ende Code ---

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: ---set myTV sendKey KEYCODE_HOME
--- Ende Code ---

Beispiel: Umschalten auf Programm 12


--- Code: ---set myTV sendKey KEYCODE_0 KEYCODE_0 KEYCODE_1 KEYCODE_2
--- Ende Code ---
(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: ---set myTVStick remoteControl APPS
set myTVStick remoteControl EPG
--- Ende Code ---

Mit Macros:


--- Code: ---attr myTV macros DasErste:KEYCODE_0,KEYCODE_0,KEYCODE_0,KEYCODE_1
set myTV remoteControl DasErste
--- Ende Code ---

In Arbeit:

- Laden eigener Presets aus Dateien

delMar:
Geniale Idee dieses Modul.
Vor allem die Makros find ich spitze

Danke

zap:
Es gibt noch 1-2 Bugs. Im Moment noch eher zum Testen. Aber och werde in den nächsten Tagen hin und wieder ein Update hochladen.

steffen83:
Hallo,

ich klinge mich hier mal rein, da ich auch schon ein Problem habe:

Nach
"define myADBServer AndroidDBHost adb=/usr/local/platform-tools/adb"

habe ich diese Fehlermeldung
ADB command not found or is not executable in

Er zieht sich auch nicht selbst den Pfad....

Gruß
Steffen

gamauf:
Da würde ich auf ein Rechte Problem tippen:
Hat der Linux User unter dem FHEM läuft ("fhem"?) das Recht (xr) abd auszuführen?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln