Schlagwort: Software

Android Apps mit ADB auf eine SD Karte verschieben

Wer viel Fotos, Videos, Musik und Apps auf seinem Handy hat, dem wird vielleicht schon mal der Speicher vollgelaufen sein. Auf den meisten Androidgeräten kann man diesen aber mit einer SD-Karte einfach erweitern. Dateien lassen sich darauf ohne Probleme speichern, Apps seit Android 6 leider nicht mehr. Über einen Umweg funktioniert das aber.

Mit dem tool adb kann man über USB auf die shell des Mobilgeräts zugreifen. Dazu müssen dort zuerst die Entwicklereinstellungen aktiviert werden

Entwicklereinstellungen aktivieren

In den Einstellungen des Geräts befindet sich ein Punkt „Telefoninfos“, „Über das Telefon“ oder ähnlich. Meist ganz oben oder ganz unten. Darin befindet sich die Buildnummer, wo du nun so oft drauf tippst, bis die Meldung „Du bist jetzt Entwickler“ erscheint.

Das Aktivieren von den Entwicklereinstellungen kann von Gerät zu Gerät unterschiedlich sein. Bei Xiaomi ist es zum Beispiel nicht die Buildnummer, sondern die MIUI Version.

Entwicklereinstellungen unter MIUI aktivieren
Entwicklereinstellungen unter MIUI aktivieren

ADB aktivieren

Nun öffnen wir die Entwicklereinstellungen. Wo sich diese befinden, ist wieder von Gerät zu Gerät unterschiedlich. Hier ein Beispiel für Xiaomi:

ADB unter MIUI aktivieren
ADB unter MIUI aktivieren

In den Entwicklereinstellungen gibt es einen Punkt „USB-Debugging“. Wenn du diesen aktivierst, kannst du nun auf dein Gerät über USB zugreifen.

ADB installieren und Shell öffnen

Auf Debian basierenden Linuxdistributionen geht das beispielsweise mit

Bei anderen Betriebssystemen hilft dir das Internet weiter! -> https://www.xda-developers.com/install-adb-windows-macos-linux/

Nachdem du dein Gerät über USB angeschlossen hast, kannst du jetzt mit

In die Shell des Mobilgeräts wechseln. Es kann sein, dass du den Zugriff noch bestätigen musst.

Paketname einer App herausfinden

Um eine App auf die SD Karte zu verschieben, musst du zuerst den Paketnamen er App herausfinden. Die meisten Apps bestehen aus nur einem Paket, manche aber auch aus mehreren.

1. Möglichkeit: Playstore

Öffne den Playstore, am besten im Browser und klicke die gewünschte App an. In der Adresszeile findest du jetzt den App-Namen. Beispiel:

https://play.google.com/store/apps/details?id=org.mozilla.firefox

Der Paketname ist hier org.mozilla.firefox.

2. Möglichkeit: Suchen

Gib in der Shell des Mobilgeräts pm list packages ein. So werden dir alle installierten Pakete aufgelistet und du kannst nach dem gewünschten suchen.

UUID der SD Karte herausfinden

Bevor wir nun endlich mit dem Verschieben anfangen können, brauchen wir noch die UUID der SD Karte. Gib in der Shell ls /storage ein. Neben „emulated“, was der interne Speicher ist, sollte dir auch noch die SD Karte angezeigt werden. Diese müsste im Format XXXX-XXXX sein.

App auf die SD Karte verschieben

Mit folgendem Befehl lässt sich nun ein Paket verschieben:

Wenn nach etwas Warten die Ausgabe „Success“ kommt, hat es funktioniert. Es ist auch möglich, dass es nicht funktioniert, da dich nicht alle Apps auf die SD-Karte verschieben lassen. Nun solltest du auch testen, ob die App noch funktioniert. Manche Apps lassen sich zwar verschieben, funktionieren dann aber nicht mehr.

Möchtest du eine App wieder zurück auf den internen Speicher verschieben, gibst du beim oberen Befehl statt der UUID „internal“ ein.

Bonus: Bloatware entfernen

Mithilfe von pm lassen sich auch Apps deinstallieren, die man am Gerät selbst nicht deinstallieren kann. Hierzu gibt es den Befehl

Aber Achtung: Man sollte sich vorher gut überlegen, was man löscht. Manche Apps sind wichtig und sollten nicht gelöscht werden.

Lokale Hostnames in Pi-hole korrekt auflösen

Seit einigen Jahren suchte ich schon nach einer Lösung, Hostnames im lokalen Netzwerk mit Pi-Hole korrekt aufzulösen. Nun bin ich selbst auf eine Lösung gekommen.

1. Möglichkeit: Conditional Forwarding

Diese Möglichkeit hatte ich einige Zeit, ich war damit aber nie so wirklich zufrieden, da immer hinter den Hostnames ein .fritz.box ergänzt werden musste, also z.B. raspberrypi.fritz.box.

Bei „Settings“ > „DNS“ > „Advanced settings“ muss man dazu folgende Punkte einstellen:

  • Unter „Never forward non-FQDNs“ und „Never forward reverse lookups for private IP ranges“ keinen Haken setzen.
  • Unter „Use Conditional Forwarding“ einen Haken setzen.
  • Den Bereich des lokalen Netzwerkes eingeben, zum Beispiel 192.168.178.0/24. /24 steht für x.x.x.1 bis x.x.x.255.
  • Die IP Adresse des DHCP Servers, meist der Router, eingeben, z.B. 192.168.178.1.
  • Als Local Domain Name verwende ich fritz.box

2. Möglichkeit: Der Router als einziger DNS Server

Diese Möglichkeit funktionierte bei mir schon besser. Bei „Settings“ > „DNS“ > „Advanced settings“ muss man dazu folgende Punkte einstellen:

  • In dem linken Kasten „Upstream DNS Servers“ alle Haken rausnehmen.
  • Im rechten Kasten „Upstream DNS Servers“ Als Custom 1 und Custom 3 die IP Adressen (IPV4 und IPV6) der Fritzbox bzw. des Routers eintragen.

Nun funktionieren die Hostnames wie gewohnt.

13″ Touchscreen Wandeinbau

Ich habe jetzt seit Längerem einen 7″ Touchscreen bei mir in der Wand hängen. Der lief bis jetzt auch gut, aber er wurde mir zu klein. Deshalb hab ich mich auf die Suche nach einem Neuen gemacht und schließlich diesen 13″ Touchscreen von Waveshare gefunden und bestellt.

Materialliste

Testaufbau

Nach deutlich verspäteter Lieferung Konnte ich den Touchscreen ausprobieren. Ein Netzteil hatte ich noch da, aber keinen passenden Stecker. Da musste dann eben der Lötkolben zum Einsatz kommen:

Im Wiki stand zwar, dass man die Auflösung einstellen muss, das war aber bei mir nicht der Fall. Das Display lief Plug and Play.

Software

Beim 7″ Touchscreen habe ich rpi-backlight genutzt, um den Bildschirm bzw. die Hintergrundbeleuchtung an- und auszuschalten. Hier verwende ich jetzt vcgencmd display_power 0 und vcgencmd display_power 1.

Als Oberfläche verwende ich, wie beim alten Display auch, eine selbst gebaute HTML Seite. Da ich jetzt deutlich mehr Platz habe, konnte ich hier auch mehr auf einmal darstellen. Die Seite gibts auf Github zum Download. Sie ist noch nicht fertig.

https://github.com/jjk4/displayoberflaeche

Das Gehäuse

Ein Problem, dass mich länger beschäftigt hat, was ein passendes Gehäuse. Bei dem alten 7″ Touchscreen passte ja dieses Gehäuse sehr gut, aber dieser Zufall war schon so zufällig, den gibts nicht zweimal. Also wollte ich das Gehäuse drucken.

Dieses Gehäuse ist dabei raus gekommen:

Gehäuse zum Download: https://www.thingiverse.com/thing:4934655

An den Ecken kann man eine Mutter einschmelzen und an der Rückseite gibt es eine Befestigungsmöglichkeit für den Raspberry (In meinem Fall ein Pi 3). Gedruckt sieht das Ganze dann so aus:

Da bei einem Teil das dünne Stück zerbrochen ist, hab ich noch schnell ein weiteres Teil gedruckt, dass nicht nur das abgebrochene wieder fixiert, sondern auch die beiden Teile zusammenhält:

Bilder vom Einbau

RaspberryPi als Überwachungskamera

Hier möchte ich dir gerne zeigen, wie ich mit einem Raspberry Pi eine Überwachungskamera gebaut habe und wie auch du das machen kannst.

Hardware

Materialliste

Raspberry: Ein Raspberry Pi Zero ist klein, günstig und verbraucht nur wenig Strom. Er ist aber auch in der Leistung stark beschränkt. Bei HD Auflösung (1280×720) hat er bei mir bei Bewegungserkennung und beim Speichern der Bilder ca. 1FPS erreicht. Das reicht mir aus. Wer mehr braucht, sollte lieber zu einem Raspberry Pi 4 greifen.

Netzteil: Ich verwende hier ein Hutschienennetzteil (Für den Pi4 hier). Wer lieber eines mit Stecker (Für den Pi4 hier) mag, kann das auch verwenden.

Kühlung: Da bei einer Videoübertragung und Bewegungserkennung der RPi ganz schön viel zu tun hat, ist eine Kühlung auf jeden Fall sinnvoll. Ich verwende diese Kühlkörper (Für den Pi4 hier). Da auch der USB Stick ziemlich heiß wurde und ich vom RPi Zero noch den kleinen Kühlkörper übrig hatte, habe ich diesen zum Kühlen des USB Sticks genutzt. In eine normale USB-Buchse passt er dann aber nicht mehr.

SD Karte: Ich verwende diese hier. 16 GB sind für das Projekt völlig ausreichend. Theoretisch würden auch weniger reichen, kleinere SD Karten kosten aber fast genau so wenig.

Kameramodul: Hier hat man eine große Auswahl. Ob mit Weitwinkel, Infrarot, gleich beidem, in extrem klein oder in High Quality (nicht für den Pi Zero zu empfehlen). Es gibt aber auch sehr günstige Kameras wie diese hier, die absolut ausreichend sind.

Flachbandkabel: Die meisten Kameras kommen bereits mit einem Kabel. Da Raspberry Pi Zero aber einen kleineren CSI Anschluss hat, braucht man dafür ein Adapterkabel.

USB Stick: Wenn Aufnahmen gespeichert werden sollen, macht man das wegen der begrenzten Haltbarkeit am besten nicht auf der SD Karte. Stattdessen kann man einen USB Stick verwenden oder die Aufnahmen auf einem NAS speichern. Ich verwende diesen Stick.

Adapter für USB-Stick: Da der Raspberry Pi Zero nur einen Micro USB Anschluss hat, braucht man für den USB Stick einen Adapter. Ich verwende diesen hier.

Gehäuse: Hier gibt es auch sehr viel Auswahl. Es gibt das offizielle Raspberry Pi Zero Gehäuse, welches schon eine Aussparung für eine Kamera hat, aber ich verwende gerne Kamera Dummys. Diese sehen dann nicht nur aus wie echte Kameras, sondern lassen sich auch gut einstellen.

Zusammengerechnet komme ich dann nach aktuellem Stand auf ca. 60€.

Zusammenbau

Zum Zusammenbau braucht man nicht viel sagen. Alles kommt in den Stecker, wo es reinpasst ;). Zusammengebaut sieht die Kamera (ohne Gehäuse) so aus:

Einbau in das Gehäuse

Meine Kamera soll in einen Kameradummy. Ich habe diese hier verwendet. Vermutlich sind aber die meisten Kamera Dummys auf eBay sehr ähnlich, wenn nicht sogar gleich. Er lies sich sehr gut zerlegen. Das sieht dann so aus:

Das Schutzglas lässt sich ebenfalls noch ausbauen. So kann man es reinigen. Die Kameralinse und die LED werden nicht benötigt. Zwischen den beiden Hälften des Gehäuses lässt sich sehr gut eine Kunststoffplatte befestigen. Auf dieser habe ich dann den Raspberry festgeschraubt.

Hinter der Platte mit den IR LED Attrappen kann man mit Heißkleber die Kamera befestigen. Das sieht dann so aus:

Jetzt muss nur noch alles wieder zusammengebaut werden. Der Raspberry hängt bei mir in der unteren Kamerahälfte, da es wegen dem Batteriefach oben sehr eng wird.

Von vorne sieht die Kamera dann so aus:

Software

Installation des Images

Als Software für die Überwachungskamera verwende ich Motioneye OS. Das ist eine für verschiedene Einplatinencomputer optimierte Linuxdistribution, mit der man sehr einfach und benutzerfreundlich Überwachungskameras bauen kann.

Nachdem das Image heruntergeladen und mit z. B. dem Raspberry Pi Imager auf die SD Karte gespielt wurde, muss noch das WLAN, falls vorhanden eingestellt werden. Erstelle dazu auf der kleineren der beiden Partitionen auf der SD Karte (boot Partition) eine Datei mit dem Namen „wpa_supplicant.conf“. Diese Datei braucht folgenden Inhalt:

Die SSID und das Passwort müssen natürlich angepasst werden.

Konfiguration von Motioneye

Nach dem Booten und aufrufen der IP im Browser sieht man direkt das Bild der Kamera:

Userinterface Motioneye

Um weitere Einstellungen vorzunehmen, muss man sich aber anmelden. Das geht über den „switch user“ Button oben links. Der Benutzername ist „admin“ und das Passwort muss leer gelassen werden.

Jetzt kann man im seitlichen Menü alle möglichen Einstellungen vornehmen. Diese sind meist selbsterklärend, trotzdem gibt es noch neben jeder Einstellung ein ?, welches die Einstellung noch mal erklärt. Meine Einstellungen sehen so aus:

Wenn man auf den Livestream und anschließend auf das „Foto“ Icon klickt, kann man sich Kameraaufnahmen anschauen:

Picture Browser

SDM630 Modbus Zähler auslesen

In diesem Tutorial zeige ich dir, wie du mit einem RaspberryPi (oder auch jedem anderen Linux Rechner) einen SDM630 Modbus Zähler auslesen kannst. Das Tutorial soll eher eine Grundlage für ein eigenes Projekt sein. Fertige Software gibt es genug, wie zum Beispiel Smartmeter.

Hardware

An der oberen Klappe des Zählers gibt es u.A. die Anschlüsse A+ und B-. Diese werden mit den Klemmen A und B am Adapter verbunden. Ein Abschlusswiderstand von 150 Ohm kommt an die Endes des Bus bzw. an das letzte und erste Gerät. Da ich nur 2 Geräte habe, ist das der Zähler und der USB Adapter.

Am Bus können theoretisch mehrere Zähler parallel angeschlossen werden.

Software

Einstellungen am Zähler

Am Zähler müssen für den Modbus verschiedene Einstellungen vorgenommen werden. Das geht bei meinem Zähler so:

  1. Lange die Taste E drücken
  2. Passwort eingeben (Standard: 1000)
  3. Lange die Taste E drücken
  4. Es erscheint „Set Addr“
  5. Durch langes Drücken der Taste E die Einstellung wählen und mit den Pfeilen die Adresse ändern. Durch langes Drücken der Taste E die Einstellung Verlassen
  6. Mit den Pfeilen die Einstellungen „Set baud“, „Set Pari“ und „Set Stop“ wählen und ebenfalls einstellen

Die Adresse ist dazu das, das Gerät im Bus zu identifizieren. Wenn du nur ein Gerät hast, kannst du die Adresse bei 1 lassen, wenn du mehrere hast, den Geräten entsprechend unterschiedliche Adressen geben.

Die Baudrate ist einfach gesagt die Übertragungsgeschwindigkeit. Bei höherer Baudrate ist aber nur eine kürzere Kabellänge möglich.

Parität benutze ich keine, also „none“

Der Stop-Bit kann auf 1 gelassen werden

Mit Skript Werte auslesen

Neben den Einstellungen die du vorher vorgenommen hast, brauchst du noch einen weiteren Wert: Den USB Port. Durch ausprobieren ist man hier ziemlich erfolgreich. Mit ls /dev/ttyUSB* kannst du dir alle Ports anzeigen lassen. In meinem Fall gab es nur einen einzigen.

Mein Code sieht folgendermaßen aus:

In Zeile 1 wird das Modbus Modul von Python importiert. Dieses musst du vielleicht noch installieren:

In der nächsten Zeile wird das Gerät initialisiert. Hier musst du evtl. noch den USB Port und die Modbus Adresse ändern. Danach gibt es einen sehr langen Part, durch den das Skript später weiß, welcher Wert welche Nummer und welche Einheit hat. Durch das „use“ kann festgelegt werden, ob der Wert verwendet werden soll oder nicht. Dazu einfach den Wert auf True bzw. False setzen. In Zeile 177 befindet sich eine for Schleife, die einmal für jeden Wert ausgeführt wird. Zeile 178 prüft, ob der Wert verwendet werden soll. Alles danach (Einrückungen nicht vergessen) kannst du jetzt frei programmieren. In meinem Beispiel werden alles Daten einfach nur per print ausgegeben. Die Zeile

gibt den Wert zurück (der, bei der die for Schleife gerade ist). Mit

bekommst du die Einheit.

Dieses Codebeispiel schreib zum Beispiel die Daten in eine Influx Datenbank.

Und jetzt viel Spaß beim Programmieren!

Mobile Alerts Sensoren ohne Rest API auslesen

Ich habe einige Mobile Alerts Sensoren im Haus. Diese wollte ich ursprünglich mit dem RaspberryPi über die Mobile Alerts Rest API auslesen. Da dort aber nur bestimmte Sensoren funktionieren (meine leider nicht) habe ich es auf eine etwas andere Art versucht. Diese Variante ist zwar nicht so zuverlässig und auch etwas umständlich, aber sie funktioniert immerhin.

Tipp: Es gibt auch eine andere Methode

Vorbereitungen

Die Sensoren sollten schon mit dem Gateway verbunden und in die Mobile Alerts App integriert sein. In den Einstellungen der App findet man relativ weit unten die Phone ID. Diese wird später noch gebraucht.

Dann besucht man die Seite https://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=XXXXXXXXXXXX

Am Ende muss noch die Phone ID ergänzt werden. Dort sollte man nun alle Sensoren sehen.

Skript erstellen

Jetzt brauchen wir einige Zeilen aus dem Quellcode. So wird auch später das Python Skript, welches die Daten ausliest, funktionieren. Dazu macht man einen Rechtsklick auf die Seite und wählt dann „Seitenquelltext anzeigen“ (Kann je nach Browser variieren).

Hier sehe ich zum Beispiel, dass sich die Temperatur des Badezimmers in Zeile 66 befindet. Die Luftfeuchtigkeit befindet sich in Zeile 70. Und da ist dann auch die Schwachstelle des Skripts. Sollte sich die Temperatur des Badezimmers mal nicht mehr in Zeile 66 befinden, funktioniert das Skript nicht mehr und muss angepasst werden. In der Regel gibt es so eine Änderung aber nur, wenn ein weiterer Sensor hinzugefügt oder entfernt wird.

Das ist auch schon das Skript. Es liest vorerst nur die Daten aus.

Zeile 4: Hier wird der Quelltext der Webseite heruntergeladen. Er wird in /home/pi/sensors.txt gespeichert. (nicht vergessen, die Phone ID zu ersetzen) (Update: Seit 15.4.21 Wird der Download per wget von Mobilealerts blockiert. Die zusätzliche Option „-U firefox“ lässt die Webseite denken, dass es sich um einen firefox browser handelt. Ich hoffe, dass das so weiterhin funktionieren wird.)

Zeile 5 und 6: Hier wird eine Variable auf die entsprechenden Zeilen (66 und 70) gesetzt und dann alles, bis auf die Zahl entfernt. Bei Der Temperatur muss noch das Komma durch einen Punkt ersetzt werden.

Zeile 8 und 9: Hier werden die ausgelesenen Daten ausgegeben. Natürlich kann hier auch etwas ganz anderes stehen. Die Daten könnten zum Beispiel in eine Datenbank geschrieben werden oder anderweitig verarbeitet werden (z.B: Wenn es im Schlafzimmer zu heiß aber draußen kälter ist, soll das Fenster geöffnet werden)

Zeile 10: Der Quelltext wird gelöscht. Er wird ja nicht mehr benötigt.

Ich hoffe, ich konnte dir mit diesem kurzen Tutorial weiterhelfen 😉