Wetter-Cam mit dem Raspberry Pi
öffentlich freigegeben
21.01.2018 20:33 Uhr von neo
-
Werbung
-
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 anzuzeigenBewertung
ØBewertungen
-
Werbung
Kommentare