Webcam

es wäre cool beim Container in Mols eine Webcam Richtung See zu haben, um zu sehen ob es Wind hat oder nicht. (Die Windverhältnisse von Mühlehorn sind wesentlich anders als das was in Mols ankommt.)

Rahmenbedingungen

  • aktuell haben wir keinen Stromanschluss, das System muss deshalb autark sein.
  • die Kamera muss so platziert und ausgerichtet werden, dass keine Personen erkannt werden können. (Datenschutz)
  • die Datenmenge soll so gering sein, dass keine grossen Kosten entstehen.

Systemidee

Mit Raspi und Raspi-Cam die Bilder aufnehmen, bearbeiten und komprimieren und dann auf den Server hochladen. Als Energiespeicher soll eine Power-Bank dienen, welche mit einer Solarzelle tagsüber geladen wird.

Systemkomponenten Hardware

Raspi

mit dem Raspi Bilder aufnehmen und zu speichern ist easy, hatte ich schon mal gemacht.

Raspi Optimierungen

um den Stromverbrauch zu reduzieren und das System bei möglichst allen Bedingungen lauffähig zu halten, ist der Raspberry die einzige Optimierungsmöglichkeit. Da für die Nachtabschaltung das Witty Pi 3 ohnehin benötige, bietet es sich auch an, den Raspi nach Aufnahme und Upload des Bildes abzuschalten. Auch wenn es nur 20s pro Minute sind, spart das schon ein Drittel der Energie. Um minütlich herunterzufahren und wieder aufzustarten, lohnt es sich den Startvorgang auf Geschwindigkeit zu optimieren.
Möglicherweise ist die Sequenz zu kompliziert (ca. 1565 Zeilen) und dauert zu lange. Schon wenn das wiittypi Skript gewählt wird dauert die Auswertung und Berechnung des nächsten Startvorgans sehr lange. Gleichzeitig lohnt es sich den generellen Stromverbrauch zu reduzieren und nicht benötigte Hardware wie HDMI, BlueTooth und USB zu deaktivieren.

Startup Zeit

gemäss systemd-analyze: Startup finished in 3.829s (kernel) + 19.371s (userspace) = 23.200s graphical.target reached after 12.048s in userspace

gemäss https://himeshp.blogspot.com/2018/08/fast-boot-with-raspberry-pi.html habe ich für mich folgende Optimierungen vorgenommen

Editing the /boot/config.txt with the following changes:

  1. Disable the rainbow splash screen

disable_splash=1

  1. Disable bluetooth

dtoverlay=pi3-disable-bt

  1. Set the bootloader delay to 0 seconds. The default is 1s if not specified.

boot_delay=0

→ das hat schon fast 10s gebracht! Jetzt 13.4s

Use systemd-analyze blame, systemd-analyze critical-chain to disable services I didn't need

Headless ohne Tastatur und der braucht etwa 1s deshalb entfernen: sudo systemctl disable keyboard-setup.service

Weitere Möglichkeiten, die ich im Moment nicht angewendet habe:

  • SD Card overclock (dtoverlay=sdtweak,overclock_50=100 in /boot/config.txt)
  • fixe IP statt DHCP. (Ich weiss nicht ob das vom Tethering Hotspot unterstützt würde)
  • die Aufnahme des Bildes könnte schon früher als Service stattfinden
Stromverbrauch

BlueTooth ist schon abgeschaltet durch die Startup-Optimierung. Der HDMI-Ausgang wird ebenfalls nicht benötigt. USB wollte ich ursprünglich zur Speicherung der Fotos benutzen. Doch die Stromeinsparung durch Deaktivierung vom USB/LAN-Controller ist relativ gross.

USB deaktivert mit
echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/unbind
halbiert die Stromaufnahme fast. Das lohnt sich auf jeden Fall. Somit
echo '1-1' |tee /sys/bus/usb/drivers/usb/unbind &
zu rc.local hinzugefügt.

Beim HDMI konnte ich nicht beobachten, dass es viel bringt. Aber schaden wird es nichts. Deshalb
/opt/vc/bin/tvservice -o &
zu rc.local hinzugefügt.

Solarzelle

Energiespeicher

mein Raspi für den TempLogger braucht etwas wenig als 2.5W am Eingang vom Netzteil. Das gäbe auf 24h einen Energiebedarf von 60Wh. Meine System-Akkus vom Rasenmäher haben 2Ah bei 20V, also 40Wh. Das scheint vom Bereich her etwa zu passen.

weitere Akku-Grössen Matrix X-One Akku 2,0 Ah (511010596) Matrix X-One Akku 4,0 Ah (511010597) Matrix X-One Akku 5,0 Ah (511010624)

Eine 18650 LiIon-Zelle hat etwa 3000mAh sagen wir mal bei ca. 4V. Das entspricht etwa 12Wh. Mit 5 solcher Zellen hätte man auch bereits 60Wh. Dazu gibt es bei chinesischen Händlern leere Gehäuse und 18650-Zellen gibts auf Ricardo ebenfalls günstig. (Informiertes Fachpersonal, kann auch einfach einen alten E-Bike Akku zerlegen.)

Es ist sicher empfehlenswert den Leistungsverbrauch zu optimieren, dann kommt man vermutlich ziemlich weit. Folgende Möglichkeiten sehe ich:

  • Nachtabschaltung (braucht Zusatz-Hardware, der Raspi kann sich nicht von Haus aus selber wieder wecken)
  • ev. zwischen den Aufnahmen und Datentransfer den Raspi ebenfalls schlafen legen

Ohne Nachtabschaltung wird das System nicht genügend Leistung haben. Deshalb habe ich den Witty Pi 3 bestellt. Die Doku ist hier zu finden: witty_pi_3_user_manual.pdf

Ebenfalls interessant erscheint der PiJuice HAT. Der würde ebenfalls alle Wünsche abdecken. Der mitgelieferte Akku ist sicher zu klein. Da ich für diesen Fall keinen frei-fliegenden Aufbau möchte, habe ich mich für den Witty Pi 3 entschieden. Und habe damit dann nur eine Sorte Akku, die ich je nachdem auch anderswo wieder verwenden könnte.

Power-Bank Adapter für System-Akkus
Mögliche Produkte: https://www.hbh24online.de/de/product-34546.html

Braucht dann vermutlich einen Bastel um den Akku im Adapter auch laden zu können.

Energy Budget

Die erste Abschätzung war nur mal über den Daumen gerechnet.

Hier die Tabelle, mit gemessenen Werten:

KomponenteLeistung [W]KommentarDauer pro 24h [h]Wh/day
MobilePhone1.3mit Thetering, Akku fast voll2431.2
Raspberry1.3noch ohne Stromspar Tricks1519.5
Raspberry0.79ca. mit den Stromsparmassnahmen  
Verluste??Umwandlung, Ladeverluste, ist vermutlich nicht so viel.24??
Total  2451

Wenn von der Solarzelle täglich während 10 Stunden 5W verwertet werden können ist das Budget ausgeglichen.

Kommunikation

altes Handy als "Modem".

Das funktioniert. Es gibt aber ein paar Tücken:

  • PowerLoss: Wenn der Handy-Akku leer wird, schaltet sich das Handy ab. Aber es schaltet sich nicht wieder selber ein, auch wenn es wieder geladen wird. Selbst wenn man den PowerButton z.B. via Raspi steuern würde bleibt das Problem, dass dann Tethering nicht automatisch aktiviert ist.
  • Das Handy als Mobiler Hotspot verhindert, dass ein direkter Zugriff z.B. via SSH auf den Raspberry Pi möglich ist. Zugriff via RealVNC-Cloud klappt. (Dies setzt wiederum eine Desktop-Umgebung voraus. Das ist nicht per se ein Problem, aber verhindert den Rückbau auf ein minimalistisches System.)

Das MobilePhone benötigt etwa 1.3W, wenn der Akku geladen wird und Traffic stattfindet. Wenn der Akku voll ist, sinkt der Verbrauch auf ca. 0.75W mit gelegentlichem Anstieg auf 1.3W (vermutlich während Traffic). Nach längerer Zeit ohne Traffic und mit vollem Akku geht der Verbrauch auf praktisch 0W zurück. (Vermutlich Stromsparfunktion des MobilePhones.) Es handelt sich um ein Samsung S5690 Galaxy Xcover.

Datenmenge

Wegen der Dateigrösse ist jpg als Format vorzuziehen.

Annahme bei 50kB pro Bild ergibt das bei 60 Bildern pro Stunde etwa 3 MB, wenn pro Tag die Cam während 18h läuft ergibt das 54 MB pro Tag oder etwa 1.6 GB pro Monat.
Die Datenmenge bei einer Auflösung von 1024 x 576 mit Quality 85 ergibt etwa 320 kB pro Bild oder etwa 240 MB pro 12h. (ohne Thumbnails) Die Bilder sind nach convert mit -quality 85 nur noch etwa 75 kB gross. Das gibt dann aber immer noch etwa 30 GB pro Jahr ;-)

Bei Salt gibt es für ca. 10 CHF pro Monat 5 GB oder bei Digitec iot Daten Flat mit 0.4Mbit/s. (Stand 21.03.21). (Oder ich nehme eine zusätzliche Surf SIM auf mein Abo.)

Resultate aus dem Versuch:

  • Bei Betrieb über 13 Stunden ergibt pro Tag ca. 70 MB
  • das iot Datenabo mit 0.4Mbit/s ist ausreichend, bei Bedarf geht sogar eine VNC-Verbindung mit schlechter Qualität

Systemkomponenten Software

Raspi Software

Sicherheit

Firewall ist zwingend!

ufw gemäss Installation von https://www.raspberrypi.org/documentation/configuration/security.md

Bild Erzeugung

Basic mit
raspistill -w 1024 -h 576 -o "Pfad zum Bild"

kann eventuell noch mit Optionen ergänzt oder optimiert werden.

Bild Manipulation

Das Bild soll mit Datumstempel und Logo versehen werden.

Vermutlich mit ImageMagick: https://imagemagick.org/ für Annotation siehe https://legacy.imagemagick.org/Usage/annotating/

Lokal unmodifizierte Bilder behalten? → macht irgendwie keinen Sinn

Logo und Text auf Himmel oder so platzieren.

Logo und Text oben Links platziert:
convert -quality 80 "Kamerabild.jpg" -font helvetica-oblique -fill white -pointsize 25 -annotate +160+60 'Trockenplatz Mols' -annotate +160+95 '24.04.21 17:30' "Logo.png" -geometry +30+30 -composite "Bild fertig"

Viewer für Bilder für Homepage

Angeschaut und probiert

foto-webcam.eu

scheint auf qualitativ gute Webcams spezialisiert zu sein.
Der Archiv-Viewer entspricht einigermassen meinen Vorstellungen. Die Umsetzung Serverseitig scheint machbar zu sein. Für die Erzeugung der Bilder habe ich weniger hohe Anforderungen und versuche das anders zu lösen.

Hier die Links zu den Infos:
https://www.foto-webcam.eu/wiki/software
https://www.foto-webcam.eu/wiki/konfiguration

simplelightbox

https://github.com/andreknieriem/simplelightbox

basiert auf JavaScript und hat MIT-Lizenz. War einfach um lokal zu probieren. Ist so wie die Demo aufgebaut ist vermutlich eher für statische Galerien gedacht.

ToDo

Datenhaltung Raspi

Aktuell ist eine 64GB SD-Card verbaut. Ein Jahr Bilder braucht ca. 28GB. Serverseitig habe ich bereits einen Cronjob, der die Bilder je nach Alter ausdünnt. Einen ähnlichen Mechanismus braucht es auch auf dem Raspi, sonst ist die SD-Card relativ schnell voll. (Mit einer grösseren Karte liesse sich das Problem relativ leicht 3 Jahre verzögern.) Mit drei Jahren Betrieb habe ich das Problem jetzt schon erzeugt, aber mit einer Manuellen Bereinigung um ein halbes Jahr verschoben.

Die manuelle Bereinigung für einen Monat kann mit find 01/ -type f ! \( -name "*[0-9][0-9]00_*" -o -name "*[0-9][0-9]15_*" -o -name "*[0-9][0-9]30_*" -o -name "*[0-9][0-9]45_*" \) -exec rm {} + leicht gemacht werden. Dies löscht alle Bilder ausser jene welche auf einer Viertelstunde. Also 00, 15, 30 und 45 werden behalten. (⚠ alles mit * und rm ist gefährlich! Vielleicht mal schauen, ob es eine bessere Lösung gibt. Funktioniert genau in der Ordnerstruktur welche ich erzeuge und nur mit Bildern gefüllt habe. Es wird alles raus-geputzt.) Sicherer ist
rm 01/[0-9][0-9]/[0-9][0-9][0-9][12346789]_[ls][am].jpg; rm 01/[0-9][0-9]/[0-9][0-9][0235]5_[ls][am].jpg; rm 01/[0-9][0-9]/[0-9][0-9][1245]0_[ls][am].jpg
oder
rm 01/[0-9][0-9]/[0-9][0-9][0-9][12346789]_{sm,la}.jpg; rm 01/[0-9][0-9]/[0-9][0-9][0235]5_{sm,la}.jpg; rm 01/[0-9][0-9]/[0-9][0-9][1245]0_{sm,la}.jpg
(hab ich aber noch nicht probiert)