Wetter-Cam mit dem Raspberry Pi


Da ich meinen Raspberry aktuell mal wieder neumachen muss, halte ich hier mal meine Schritte fest, um es beim nächsten mal schneller machen zu können.

Vielleicht nützt es dem einen oder anderen auch etwas.



Ich nutze einen Raspberry Zero und als Cam aktuell eine Micorsoft HD-3000.



Die Grundkonfiguration eines Raspberry-Pi erkläre ich hierbei allerdings nicht.



Auf dem Raspberry verwende ich die standard Konsolenversion vom Raspberry OS.



Zur Kommunikation mit dem Webserver verwenden wir eine Rest-Schnittstelle für den Bilderupload und zur einfachen Datenübermittlung.

Da das Video etwas zu groß wird für die Übertragung (ca 25 MB) über die Rest-Schnittstelle, wird dieses direkt per FTP hochgeladen.



Installation der notwendigen Komponenten



// Das Tool um die Webcam anzusteuern


sudo apt-get install fswebcam



// Um unser Foto auf unseren Webserver hochzuladen


sudo apt-get install python-requests



// Um aus unseren Fotos des Tages eine Zeittraffer-Aufnahme zu erstellen


sudo apt-get install ffmpeg



// Um das Video hochzuladen


sudo apt-get install ftp





makepicture.sh

Mit dieser Datei wird das Foto gemacht und lokal abgespeichert. Ein weiteres Skript übernimmt anschließend den Upload des Fotos.

Weitere Parameter für fswebcam findest du hier



Wetere Parameter für fswebcam werden aus einer externen Konfigurationsdatei geladen. Diese findest du weiter unten.


#!/bin/bash

days=(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag)
months=(null Januar Februar März April Mai Juni Juli August September Oktober November Dezember)
KEY_DAY=`date +%w`
KEY_MON=`date +%-m`
day="${days[${KEY_DAY}]}"
mon="${months[${KEY_MON}]}"

if [ -e '/dev/video0' ]; then
        echo "Making Picture..."

        fswebcam --timestamp "${day}, der %d. ${mon} %Y - %H:%M Uhr" --config /home/pi/cam_default.conf

else
        printf '\033[0;31m' + "Cam Disconnected - sending Notification..." + '\033[0m'
        python /home/pi/notify.py offline
fi


echo "Uploading Picture..."
python /home/pi/upload.py
echo "Retrieving Weather Info..."
python /home/pi/weather.py

KEY_LAPSE=`date +%H%M`
echo "Copy to Timelapse of the Day (${KEY_LAPSE})"
cp -rf tmp.jpg "/home/pi/timelapse/${KEY_LAPSE}.jpg"

if [ "${KEY_LAPSE}" = "1200" ]; then
        theday=`date +%m%d`
        echo "Copy to Timelapse of Year (${theday})"
        cp -rf tmp.jpg "/home/pi/yearlapse/${theday}.jpg"

        if [ "{theday}" = "0106" ]; then
                bash /home/pi/makevideo_year.sh
        fi

fi





cam_default.conf

Hier nun die globale Konfigurationsdatei für unser Webcambild.


######################
#  Initial Settings  #
######################

device /dev/video0
input 0
quiet

set lights=off
resolution 1280x720


#####################################
#  Configuration for Logitech C525  #
#####################################

#delay 1
#skip 50

#set "Exposure, Auto"=False
#set "Exposure (absolute)"=2047

#subtitle "Kamera: Logitech C525"

################################################
#  Configuration for Microsoft Lifecam H 3000  #
################################################

skip 100

subtitle "Kamera: Microsoft Lifecam HD-3000"

##########################
#  Global Configuration  #
##########################

title "Wetter-Cam von SunSingle.de"
info "Dating & Flirten - 100% kostenlos"

banner-colour "#aa2222aa"
line-colour "#00ff6600"
text-colour "#00ffffff"

#####################
#  Saving Settings  #
#####################

jpeg 75
save /home/pi/tmp.jpg





upload.py


#!/usr/bin/env python3
import requests

url = "https://****.sunsingle.de/******/upload?cam=***"
files = {"file": open("/home/pi/tmp.jpg","rw")}
response = requests.post(url, files=files)





makevideo.sh

Wir verwenden alle Fotos aus dem timelapse-ordner um unser Video zu erstellen. Weitere Informationen zu ffmpeg findest du hier.

Die Erstellung des Videos dauert mit dem Raspberry Zero allerdings auch etwas. In meinem Fall sind das zwischen 2 und 3 Stunden. Deshalb musste ich auch den automatischen Upload nach der Fertigstellung hier rausnehmen und über einen extra Cronjob ausführen. Andernfalls kommt der automatische Reconnect meiner Fritzbox dem Upload dazwischen. Wer eine schnellere Internetleitung als ich hat oder einen schnelleren Raspberry verwendet, kann die entsprechenden Zeile auch wieder einkommentieren.



#!/bin/bash

TIME_START=`date +%H:%M:%S`
name=`date +%Y%m%d`
echo "Setting Name to ${name}.mp4..."
echo "Waiting 15 seconds, until current picture was saved..."
sleep 15

echo "Generating Video-File from Images..."
ffmpeg -y -framerate 15 -pattern_type glob -i '/home/pi/timelapse/*.jpg' -c:v libx264 -vf scale=960:-1 tmp.mp4
echo "done."
TIME_VIDEO=`date +%H:%M:%S`

echo "Uploading rendered Video..."
#sh ./upload_video.sh $name
echo "---upload canceled - will be uploaded in extra cron script"
echo "Finished!"
TIME_END=`date +%H:%M:%S`

echo ""
echo "Summary"
echo "------------------------"
echo ""
echo "Time Start:     ${TIME_START}"
echo "Time Rendering: ${TIME_VIDEO}"
echo "Time Finished:  ${TIME_END}"





upload_video.sh

Unser Video wird per FTP hochgeladen, da es zu groß für die REST_Schnittstelle ist.


#!/bin/bash

password="***"
username="***"
server="***.sunsingle.de"
mydate=`date -d "yesterday" +%Y%m%d`
file="/home/pi/tmp.mp4"
remote="/video"

echo "FTP Upload started..."
echo  `date '+%Y-%m-%d %H:%M:%S'` + " > uploading ${file} to ${username}@${server}${remote}/${mydate}.mp4"

ftp -n $server <<END_SCRIPT
quote USER $username
quote PASS $password
cd $remote
bin
put "${file}" "${mydate}.mp4"
quit
END_SCRIPT

echo `date '+%Y-%m-%d %H:%M:%S'` + " > FTP Upload done."

exit 0





Einrichten der Crontabs

Um unser Skript nun automatisch jede Minute durchzuführen und die automatische Generierung der Zeittrafferaufnahme zu starten, müssen wir noch die Cronjobs einrichten.


crontab -e




...
#
# m h  dom mon dow   command
* * * * *   /home/pi/makepicture.sh > /home/pi/logs/crontab.picture.log 2>&1
59 23 * * * /home/pi/makevideo.sh > /home/pi/logs/crontab.video.log 2>&1
30 03 * * * /home/pi/upload_video.sh > /home/pi/logs/crontab.upload.log 2>&1







weather.py



Diese Datei hat aktuell noch keine richtige Funktion. Ich versuche mittels eines 433 MHz-Empfängers meine Wetterstation auszulesen.

Mit Pilight empfange ich eine ganze Menge an Wetterstationen, jedoch ist meine (Auriol IAN 91679) nicht dabei und die anderen Sender geben seltsame Werte von sich, wie eine permanente Temperatur von -59°C. Sobald ich hierfür eine Funktionsfähige Version habe, werde ich Diese noch nachtragen.



Geplant ist zumindest noch die aktuelle Temperatur in das Bild mit einzufügen.

Außerdem wäre noch denkbar, die Wetterdaten auf den Server zu übertragen und einen Temperaturverlauf des Tages anzuzeigen

Kommentare:

Bisher wurden noch keine Kommentare zu diesem Blog geschrieben!
Du kannst hier nicht kommentieren!