Android-Smartphone als IoT-Gerät nutzen, Teil 2 APIs von Android mit Termux ansprechen

Autor / Redakteur: Mirco Lang / Stephan Augsten

Mit den Apps Termux und Termux:API lässt sich ein altes Android-Smartphone als IoT-Gerät einsetzen – ganz simpel per Shell-Scripting. Hier zeigen wir praktische Beispiele unter Verwendung diverser Hardware- und Android-Features wie Kamera, Sharing und Sensoren.

Anbieter zum Thema

Mitteilungen lassen sich über Termux präzise und umfangreich steuern.
Mitteilungen lassen sich über Termux präzise und umfangreich steuern.
(Bild: Lang / Android Studio)

Im ersten Teil zu Termux haben wir Features, Einrichtung und erste Schritte beleuchtet. Zur Erinnerung: Termux läuft auch in einem virtuellen Android-Device, wie es etwa das Android Studio bereitstellt. Sensoren und Kameras liefern dann bei Bedarf Dummy-Daten.

Für die folgenden Beispiele müssen Termux und die Termux:API-Erweiterung installiert sein. Zudem müssen Sie Termux noch die Rechte spendieren, um eine Verknüpfung in Android auf den Speicherort des Home-Verzeichnisses von Termux anzulegen: „termux-setup-storage“ führt das Prozedere aus.

Und natürlich: Shell-Scripting mit Termux bietet auch die üblichen Annehmlichkeiten für den Arbeitsalltag – es muss nicht zwangsläufig ein IoT-Projekt sein. Beispielsweise gibt es im Netz sehr viele Nutzer, die eine Möglichkeit suchen, Fotos ohne Auslösergeräusch zu erstellen, was Termux natürlich kann. Ein typisches IoT-Szenario für ein ausgedientes Smartphone könnte aber zum Beispiel die Zeitrafferfotografie sein, die das erste Beispiel umsetzt.

Zeitrafferaufnahmen

Zeitrafferaufnahmen werden gerne genutzt, um zum Beispiel den Fortschritt auf Baustellen oder die Jahreszeiten im heimischen Garten zu dokumentieren. Dafür benötigen Sie ein Gerät, das in festgelegten Intervallen Bilder erstellt und diese am besten auch noch auf einen Server oder ähnliches spielt – etwa ein Smartphone.

Das Skript beschränkt sich (fast) auf das Nötigste: Pro Minute wird ein Bild erstellt und geteilt, alle 60 Bilder eine Mitteilung/Notification ausgeben – und mittendrin gibt es ein optionales Gimmick:

i=1
while true; do
   termux-camera-photo -c 0 timelapse_$i.jpg
   (( i++ ))
   sleep 60
   termux-share -a send -d $i.jpg
   termux-wallpaper -f $i.jpg
   if (( $i % 60 == 0 )); then
      termux-notification -c "60 weitere Bilder erstellt."
   fi
done

Den Rahmen bietet eine Endlos-while-Schleife, die Arbeit erledigen vier Termux-Aufrufe: „termux-camera-photo“ ist aus dem ersten Artikel schon bekannt und speichert im aktuellen Ordner Bilder nach dem Muster „timelapse_1.jpg“. Mehr zu Bash-Schleifen und zu Conditions folgt.

Der Befehl „termux-share“ bemüht Androids Sharing-Funktion, die ohne weitere Parameter die übergebenen Dateien schlicht anzeigt. Stattdessen wird über „-a“ die Aktion Versand festgelegt. „-d“ wiederum steht für Default und meint die Standard-Teilen-App. An der Stelle wird es etwas nervig: Die Standard-App zum Teilen können Sie nirgends explizit festlegen. Sie müssen tatsächlich manuell etwas teilen und in dem Once-/Always-Dialog entsprechend „Always“ wählen.

Das angesprochene Gimmick hört auf den Befehl „termux-wallpaper“ und setzt erwartungsgemäß das aktuelle Bild als Hintergrundbild für den Homescreen. So lässt sich der aktuelle Stand gut einsehen.

Mitteilungen lassen sich über Termux präzise und umfangreich steuern.
Mitteilungen lassen sich über Termux präzise und umfangreich steuern.
(Bild: Lang / Android Studio)

Die if-Abfrage sorgt nun dafür, dass alle 60 Bilder (hier gleich Minuten) der Befehl „termux-notification“ ausgeführt wird, der als Content (-c) eben den Text als Notification ausgibt. Mit den Notifications können Sie noch deutlich mehr anstellen, beispielsweise das geschossene Foto mit einbauen, alte Meldungen löschen, Buttons mit Funktionen hinzufügen und allerhand mehr. Es ist eine der eher wenigen Funktionen, die mehr als nur ein, zwei Optionen haben – ein Blick in die Doku lohnt sich. [https://wiki.termux.com/wiki/Termux-notification]

Automatische Lichtsteuerung

Häufig werden im IoT-Bereich Raspberry Pis und Arduino-Boards in Kombination verwendet und mit allerlei Sensoren, Displays und so weiter aufgerüstet. Das Smartphone hat all dies bereits, und vor allem jede Menge Sensoren, die sich mittels „termux-sensor –l“ anzeigen lassen.

Das folgende Beispiel zeigt die Nutzung exemplarisch mit dem Umgebungslichtsensor: Das Smartphone als automatische Steuerung für ein Philips-Hue-System. Der Lichtsensor wird ausgelesen und je nach gemessenem Helligkeitswert wird die Helligkeit einer bestimmten Hue-Leuchte reguliert. Zunächst der Code:

light=$(termux-sensor -s light -n 1 | sed '4q;d')while true; do
   if (( $light <= 50 )); then
      curl -X PUT --data '{"bri":254}' --url 192.168.178.10/api/123456789ABCDEFG/lights/1/state
   elif (( $light <= 150 )); then
      curl -X PUT --data '{"bri":150}' --url 192.168.178.10/api/123456789ABCDEFG/lights/1/state
   elif (( $light <= 200 )); then
      curl -X PUT --data '{"bri":70}' --url 192.168.178.10/api/123456789ABCDEFG/lights/1/state
   else
      curl -X PUT --data '{"bri":10}' --url 192.168.178.10/api/123456789ABCDEFG/lights/1/state
   fi
done

Termux-spezifisch ist eigentlich nur die erste Zeile relevant: Über „termux-sensor -s“ bekommen Sie kontinuierlich die Live-Daten eines Sensors, hier des „Ambient Light“-Sensors. Es genügt, einen Teil des Namens anzugeben, im Beispiel „light“.

Mit „-n 1“ wird nicht kontinuierlich gestreamt, sondern nur ein einziges Mal abgefragt. Der sed-Befehl schneidet dann einfach die vierte Zeile aus, in der in diesem Fall eben der Helligkeitswert steckt. Je nachdem, welchen Wert Sie aus welchem Sensor benötigen, müssen Sie hier mit Sed oder ähnlichen Tools den gewünschten String extrahieren.

Der Rest ist eine ganz herkömmliche while-Endlosschleife: Liegt der gemessene Wert „$light“ bei maximal 50, wird die Hue-Leuchte auf einen maximalen Helligkeitswert von 254 gesetzt („bri“ für Brightness). Liegt der Wert über 200, wird die Leuchte auf 10 gedimmt. Und dazwischen gibt es noch die Stufen bis 150 und bis 200. Mit ein paar mehr Zeilen ließe sich das Prozedere über den Tag auch ganz flüssig verteilen, um etwa Tageslicht zu „kompensieren“. Freilich gibt es diese Funktion auch als Hue-App in Kombination mit dem Hue-Lichtsensor.

An dieser Stelle könnten Sie nun analog für Sensoren für Temperatur, Höhe oder Abstandsmesser verfahren und unterschiedlichste Aktoren im Bereich der Heimvernetzung ansprechen oder Daten zur Analyse in die Cloud schicken oder andere Skripte antriggern und so weiter. Dabei müssen Sie jedoch gerätespezifisch auf die exakten Sensordaten achten. Beispielsweise gibt es Abstandssensoren, die tatsächlich den Abstand liefern, andere liefern lediglich Werte wie „> 5 cm“ oder „> 2 cm“ – was die Einsatzmöglichkeiten ziemlich einschränkt.

Echter Praxiseinsatz

Wenn Sie ein Android-Gerät ganz praktisch als (unbeaufsichtigtes) IoT-Gerät verwenden wollen, sollten Sie freilich noch ein wenig mehr Arbeit investieren als nur ein Shell-Skript zu bauen. Zum einen sollte alles deinstalliert und deaktiviert werden, was nicht unbedingt benötigt wird. Auch sollten Sie jegliche Warnungen, App-Updates, Berechtigungen, Nachrichten und so weiter abwürgen.

Zum anderen sollten Sie eine zuverlässige Fernverbindung einrichten – einmal installiert, sollte ein IoT-Werkzeug schließlich ohne direkten Zugriff darauf funktionieren. Zu der Verbindung gehört tendenziell auch eine stabile Datensynchronisation, sei es über FTP, Mail, Messenger oder das übliche rsync, das Sie in Termux über ...

pkg install rsync

... bekommen.

Das Termux-Widget mit ein paar Shortcuts.
Das Termux-Widget mit ein paar Shortcuts.
(Bild: Lang / Android Studio)

Ein letzter Tipp: Wenn Sie die App Termux:Shortcuts installieren, können Sie auf dem Homescreen eine Liste mit Skripten anzeigen lassen und diese auch direkt starten. Hier erscheinen alle Skripte, die Sie im versteckten Verzeichnis „~/.shortcuts“ ablegen.

(ID:46304974)