Wetter-Cam mit dem Raspberry Pi

öffentlich freigegeben

21.01.2018 20:33 Uhr von neo

  • Werbung
    Mach Deine Cocktails einfach selbst !
  • 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
    Bewertung
    Ø

    Bewertungen

  • Werbung
    Mach Deine Cocktails einfach selbst !
  • Kommentare

    Du musst eingeloggt sein um zu kommentieren!