Montag, 27. August 2018

Regenradar - Bilder sammeln oder manuell abrufen

Auf der Internetseite des Bayerischen Rundfunk kann man sich für die jeweils letzten 3 Std. das aktuelle Regenradar anschauen. Auf dem Webserver selber werden aber die Daten der letzten 21 Tage zwischengespeichert.



Mit dem nachfolgenden Script getRadar.sh, kann man die Daten automatisch per Cron-Job oder manuell durch Parameter Übergabe abrufen.

wget http://www.shemel.de/download/bash/getRadar.sh
chmod +x getRadar.sh

Parameter Aufruf mit UTC Time
./getRadar.sh 2018-08-20 00:00:00

Cron-Job Aufruf (jede volle Std. mit 55min) für crontab -e
55  *  *  *  *       /home/pi/regen/getRadar.sh >> /home/pi/regen/myscript.log 2>&1



Quellcode: 


#!/bin/bash
#
echo '------------------------------------'
echo '| Hole Wetterradar-Daten von br.de |'
echo '| (c) Sebastian Hemel, 2018        |'
echo '------------------------------------'
echo ' '

#Aufruf per cron job am Besten jede volle Stunde mit 55min
#crontab -e
#55  *  *  *  *        /home/pi/regen/getRadar.sh >> /home/pi/regen/myscript.log 2>&1

#Beispiele der Dateien, Benamung erfolgt nach UTC (date -u), Bilder stehen ca. 10min nach der eigentlichern UTC Zeit zur Verfuegung
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_08/aroona.radar.180808_0815.png
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_08/aroona.radar.180808_0830.png
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_09/aroona.radar.180809_1130.png
#
#Achtung beim Tageswechsel:
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_20/aroona.radar.180820_2145.png => OK, 23:45
#http://www.br.de/wtr-data/img/radar_aroona/2018_08_20/aroona.radar.180820_2200.png => ERROR => http://www.br.de/wtr-data/img/radar_aroona/2018_08_21/aroona.radar.180820_2200.png

scriptFolder=/home/pi/aroona.radar.*
copyFolder=/home/pi/regen/radar

if [ $1 ]
  then
    echo Uebergabeparameter: $1 $2
    echo ' '
    Date=$1
    Time=$2
    DateTime=$Date' '$Time
    ##echo $DateTime
   
    DateArray=()
    for X in {00..59} ;                         # check every minute
    do
      # use manual date an time
      eval $(date -d "${DateTime}" -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      #eval $(date -d '2018-08-20 22:00:00' -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      M=$X
      [[ "$M" < "15" ]] && M=00                 # cater for octal clash
      M=$(((M/15)*15))
      ((M==0)) && M=00                             # the math returns 0, so make it 00
      ##echo $Y.$m.$d $H:$M
      DateArray+=($Y$m$d'_'$H$M)                # write in to array for the file name
    done
   
    #echo '--DateArray--'
    #for i in ${DateArray[@]}; do
    # echo $i
    #done
   
    # use manual date an time for the folder
    eval $(date -d "${DateTime}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
    DateTimePlusOneDay="${DateTime}+1 days"

    typeset -i i=0 max=${#DateArray[*]}
    while (( i < max ))
    do
        a=$( expr "$i" + 1 )
        # compare the array entries
        if [[ ${DateArray[$i]} != ${DateArray[$a]} ]]; then
            #catch error on midnight UTC
            if [ "$H" == "22" ]
                then
                    eval $(date -d "${DateTimePlusOneDay}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                    echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                    wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                elif [ "$H" == "23" ]
                    then
                        eval $(date -d "${DateTimePlusOneDay}" -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                    else
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
            fi      
            #echo "${DateArray[$i]}"
            #echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
            #wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
        fi
       i=i+1
    done  
   
########################################################################################################################################  
  else
    echo Es wurde kein Uebergabeparameter eingegeben! Verwenden Sie z.B. \"./getRadar.sh 2018-08-20 00:00:00\" UTC
    echo ' '
   
    DateArray=()
    for X in {00..59} ;                            # check every minute
    do
      eval $(date -u +Y=%y\;m=%m\;d=%d\;H=%H\;M=%M)
      M=$X
      [[ "$M" < "15" ]] && M=00                 # cater for octal clash
      M=$(((M/15)*15))
      ((M==0)) && M=00                             # the math returns 0, so make it 00
      ##echo $Y.$m.$d $H:$M
      DateArray+=($Y$m$d'_'$H$M)
    done
   
    # use manual date an time for the folder
    eval $(date -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)

    typeset -i i=0 max=${#DateArray[*]}
    while (( i < max ))
    do
        a=$( expr "$i" + 1 )
        # compare the array entries
        if [[ ${DateArray[$i]} != ${DateArray[$a]} ]]; then
            #catch error on midnight UTC
            if [ "$H" == "22" ]
                then
                    eval $(date -d tomorrow -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                    echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                    wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                elif [ "$H" == "23" ]
                    then
                        eval $(date -d tomorrow -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
                    else
                        eval $(date -u +Y=%Y\;m=%m\;d=%d\;H=%H\;M=%M)
                        echo "wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png"
                        wget http://www.br.de/wtr-data/img/radar_aroona/"$Y"_"$m"_"$d"/aroona.radar."${DateArray[$i]}".png
            fi
        fi
       i=i+1
    done  
   
fi

#move files to folder
mv $scriptFolder $copyFolder

Sonntag, 19. August 2018

Raspberry Pi - automatischer reboot einmal am Tag

Mit dieser kurzen Anleitung startet der Raspberry Pi automatisch einmal am Tag neu.

Dies kann z.B. erforderlich sein, wenn gewisse Dienste nach einer längeren Laufzeit zum Absturz neigen.

Wechsel auf "root" Berechtigung vornehmen:
sudo su
Den crontab Editor vom root Benutzer öffnen:
sudo crontab -e
Hinweis: Evtl. kann anschließend eine Abfrage des zu verwendeten Editor erfolgen. Hier am besten 2 (nano) oder 3 (vim) auswählen.

Den folgenden Eintrag am Ende der Datei einfügen (der reboot erfolgt um 5 Uhr Nachts):
00 5 * * * sudo reboot
Hinweis: Alternative Ausführzeiten lassen sich schnell über crontab guru erstellen.

Die Datei mit "Ctrl" + "o" speichern ung mit "Ctrl" + "x" verlassen.

Jetzt den "root" Benutzer wieder verlassen mit "Ctrl" + "d".

Sonntag, 12. August 2018

Windows 10 - Cortana abschalten

Den digitalen Sprachassistenten von Microsoft kann man per Registry sehr schnell deaktivieren.

Editor mit dem folgenden Befehl aufrufen: regedit



Zu dem folgenden Schlüssel navigieren:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
Jetzt muss ein neuer Schlüssel mit dem Namen Windows Search erstellt werden.


Über den DWORD Wert AllowCortana, lässt sich dann der Assistent Ein- (1) und Ausschalten (0).

Donnerstag, 9. August 2018

Raspberry Pi - zero : Wetterstation incl. OLED-Display

In Kombination mit einem Raspberry Pi (z.B. zero), ist es durch abbarbeiten der nachfolgenden Blog Einträge möglich einen Webcam- und Temperatur-Server mit OLED Display zu betreiben.

Zur Anwendung kommt dies auf meinen Webseiten:
 

Bitte folgende Blog Einträge nacheinander durchgehen:

  1. http://sebastianhemel.blogspot.com/2018/07/raspberry-pi-stretch-lite-installation.html
  2. http://sebastianhemel.blogspot.com/2015/01/temperatursensor-ds18b20-raspberry-pi.html
  3. http://sebastianhemel.blogspot.com/2016/01/raspberry-pi-monitoring-mit-mrtg-und.html
  4. http://sebastianhemel.blogspot.com/2018/05/raspberry-pi-oled-display-ssd1306-i2c.html
  5. http://sebastianhemel.blogspot.com/2018/11/raspberry-pi-python-prozess-automatisch.html 
Webcam USB oder Camera Modul V2.1:
Optional:

Raspberry Pi - Sensor BME280 Temperatur, Luftfeuchtigkeit, Luftdruck (innen)

Raspberry Pi - Adafruit Mini PiTFT 135x240 Color TFT Add-on [Programmierung]