#!/bin/sh
## Hole Webcam-Bilder vom Brocken

DEBUG=1

## Liftzustand Harz auf einen Blick:
##   http://www.harz-ski.de/?site=pistenzustand.php
##   http://www.schneehoehen.de/schneehoehen/detail/126/403

## Brocken auf einen Blick: http://www.harztourist.de/content/8_detail.asp?ch=0

SCRIPTNAME=`basename $0`
# Stelle sicher, dasz das Skript nicht bereits laeuft und nur im letzten
# cron job noch nicht fertig geworden ist
if ps ax | grep -v grep | grep -q "[0-9] $SCRIPTNAME" ; then
    # echo "Script $SCRIPTNAME laeuft bereits"
    exit 0
fi

URLS="https://www.hsb-wr.de/out/pictures/webcam/BRO/CAM-PIC-BRO.jpg \
      http://harzcam.de/cams/torfhaus1.img \
      http://harzcam.de/cams/torfhaus2.img \
      https://www.hsb-wr.de/out/pictures/webcam/DRW/CAM-PIC-DRW.jpg \
      http://www.ferienhaus-wernigerode.de/images/webcam/schloss-wernigerode.jpg \
      http://www.webcam-profi.de/bilder/schierke-arena/image.jpg \
      http://www.webcam-profi.de/bilder/altora/altora.jpg"

#       http://www.wernigerode-information.de/wetterkamera.jpg \

#  Das geht seit August 2021 nicht mehr  -->> brocken-getimgs-feratel

# Since 2015-03-31 the way brocken images are provided has changed ... but there is a new way (see below #Brockenimages)
#      http://www.harztourist.de/extern/cam/aktuell/brocken01.jpg \
#      http://www.harztourist.de/extern/cam/aktuell/brocken02.jpg \
#      http://www.harztourist.de/extern/cam/aktuell/brocken03.jpg \

#      http://www.ferienhaus-wernigerode.de/images/webcams/wernigerode-schloss.jpg \
#      http://www.ferienhaus-wernigerode.de/images/webcams/wernigerode-panorama.jpg \
#      http://webcam.netco.de/bilder/hsb-brocken/brocken-bhf.jpg \
#      http://webcam.netco.de/bilder/hsb/drei_annen_hohne/drei_annen_hohne_bhf.jpg \
#      http://harzcam.de/cgi/cam8.cgi \
#       http://www.harztourist.de/brockencam/brocken01.jpg \
#      http://www.harztourist.de/brockencam/brocken02.jpg \
#      http://www.wernigerode-ferienhaus.de/images/webcam/webcam_01.jpg \
#	http://www.wernigerode-ferienhaus.de/images/webcam/webcam_02.jpg \
#	http://www.wernigerode-ferienhaus.de/images/webcam/webcam_03.jpg \
#	http://www.das-wernigeroeder-ferienhaus.de/files/page42_1.jpg
#	http://www.hassero.de/images/webcam/webcam.jpg
#       http://www.das-wernigeroeder-ferienhaus.de/images/webcam/webcam.jpg
#      http://www.dwfh.de/images/webcam/webcam.jpg \
#      http://www.dwfh.de/images/webcam/webcam_weitwinkel.jpg \
#      http://www.das-wernigeroeder-ferienhaus.de/images/webcam/webcam_weitwinkel.jpg \
#      http://www.am-kleinsten-haus.de/images/webcam/webcam_weitwinkel.jpg \
#      http://www.dwfh.de/images/webcam/webcam.jpg \
#      http://www.dwfh.de/images/webcam/wettercam.jpg \
#      http://www.harz-now.de/images/webcam/webcam_01.jpg \
#      http://www.harz-now.de/images/webcam/webcam_02.jpg \
#      http://www.hassero.de/images/webcam/webcam_01.jpg \
#      http://www.hassero.de/images/webcam/webcam_02.jpg \
#      http://wernigerode-ferienhaus.de/images/webcams/wernigerode-schloss.jpg \
#      http://www.wernigerode-ferienhaus.de/images/webcams/schloss-wernigerode.jpg \
#      http://wernigerode-ferienhaus.de/images/webcams/wernigerode-panorama.jpg \
#      http://www.harzz.de/images/webcams/schloss-wernigerode.jpg \
#      http://www.servicekanal.de/webcams/marktwr.jpg \

# gibt es nicht mehr
#      http://www.braunlage.de/eis/wetterkamera/camWurm/Cam4.jpg \
#       http://www.quedlinburg-online.de/webcam/image.jpg \
#      http://webcamschierke.wernigerode.de/schierke01.jpg \


# Thale
# http://www.seilbahnen-thale.de/webcam/trasse.jpg
# http://www.seilbahnen-thale.de/webcam/bodetal.jpg
# http://www.seilbahnen-thale.de/webcam/harzbob.jpg
# http://www.seilbahnen-thale.de/webcam/kabine.jpg

# Innerstetalsperre
# http://www.innerste.de/livepic/live.jpg

# Braunlage
# http://www.braunlage.org/~berghotel2/maritim/maritim.jpg
# http://www.braunlage.de/eis/wetterkamera/camConc/Cam1.jpg

# Quedlinburg
# http://www.quedlinburg-online.de/webcam/image.jpg

# Minimale Groesze eines Bildes, sonst ist der download kaputt
MINSIZE=8500

CompareCurrent() {
    current=$1
    checksymlink=$(find $PWD -type l -xtype l -name $current)
    if [ "$checksymlink" != "" ] ; then
      # no idea why this does not work - checksymlink is just empty when called inside this script
      echo "Need to fix symlink"
      new_current=`find . -type f -name "*_*.jpg" | sort | grep -v _current | tail -n1`
      ln -sf "$new_current" "$current"
    fi
    checksymlink2=$(readlink $current)
    if [ ! -e "$checksymlink2" ] ; then
      echo "Need to fix symlink - $current -> $checksymlink2 ($PWD)"
      new_current=`find . -type f -name "*_*.jpg" | sort | grep -v _current | tail -n1`
      ln -sf "$new_current" "$current"
    fi
    newfile=$2
    downloadfile=$3

    if [ -L "$current" ] ; then
	CMP=`cmp $downloadfile $current`
	if [ -z "$CMP" ] ; then
	    # echo "Bild $downloadfile ist unveraendert."
	    rm -f $downloadfile
	    return
	fi
    fi
    mv "$downloadfile" "$newfile"
    chown `whoami`: "$newfile"
    rm -f "$current"
    ln -s "$newfile" "$current"
    chown `whoami`: "$current"
}

# in case of not updated clouds file sleep some time
TIMETOSLEEP=0
# and try fetching again NUMTRY times
NUMTRY=3
GetFile() {
    getfile="$1"
    geturl="$2"

    rm -f "$getfile"
    wget -q --no-cache "$geturl"
    if [ $? -ne 0 ] ; then
	i=$NUMTRY
	while [ $i -gt 0 ] ; do
	    if [ $TIMETOSLEEP -gt 0 ] ; then
		sleep $TIMETOSLEEP
	    fi
	    wget -q --no-cache "$geturl"
	    if [ $? -eq 0 ] ; then
		break
	    fi
	    i=$((i-1))
        done
    fi
    if [ ! -e "$getfile" ] ; then
	echo "Bild "$3" konnte nicht geholt werden."
	return 72 # EX_OSFILE
    fi

    i=$NUMTRY
    while [ $i -gt 0 ] ; do
        SIZE=`wc -c "$getfile" | sed 's/^\([0-9]\+\).*/\1/'`
	if [ $SIZE -gt $MINSIZE ] ; then
	    return 0 # EX_OK
	fi
	if [ $TIMETOSLEEP -gt 0 ] ; then
	    sleep $TIMETOSLEEP
	fi
	wget -q --no-cache "$geturl"
        i=$((i-1))
    done
    # echo "Bild "$3" wahrscheinlich kaputt."
    # ... bisher war's wirklich immer kaputt, also  weg damit
    rm -f $getfile
    return 1 # irgendwas lief schief
}

IMGDIR=/var/lib/brocken
DATE=`date +%Y%m%d%H%M`

for url in $URLS ; do
    file=`basename $url`
    name=`basename $file .jpg`
    name=`basename $name .cgi | tr '[A-Z]' '[a-z]'`
    name=`basename $name .img | tr '[A-Z]' '[a-z]'`
    dir="$IMGDIR"/"$name"
    mkdir -p "$dir"
    cd "$dir"
    if GetFile "$file" "$url" "$name"_"$DATE".jpg ; then
        CompareCurrent "$name"_current.jpg "$name"_"$DATE".jpg "$file"
        if [ $DEBUG -eq 1 ] ; then echo "${name}_${DATE}.jpg stored" ; fi
    fi
done

#Brockenimages
BDATE=`date +%Y%m%d%H`
MINUTES=`date +%M`
if [ $MINUTES -gt 10 ] ; then ## zur vollen Stunde noch kein Bild verfügbar
  for i in 01 02 03 04 05 ; do
    name="brocken${i}"
    file="${name}_${BDATE}.jpg"
    burl="http://www.harztourist.de/extern/cam/folge${i}/tag/${BDATE}.jpg"
    dir="$IMGDIR"/"$name"
    mkdir -p "$dir"
    cd "$dir"
    if [ ! -s $file ] ; then
	wget -q --no-cache -O $file $burl
	ln -sf $file "${name}_current.jpg"
        if [ $DEBUG -eq 1 ] ; then echo "${file}.jpg stored" ; fi
    fi
  done
fi

# Dett jeht eh nich mehr ... aber brocken-data-dwd jeht wieder

# Wetterdaten
# set -x
# brocken-data-dwd
# for data in brocken-data-hsb brocken-data-msn werni-data werni-data-msn ; do
for data in brocken-data-dwd ; do
    dir="$IMGDIR"/data/"$data"
    mkdir -p "$dir"
    cd "$dir"
    $data > $data 2> "$DATE"_err
    if [ $? != 0 -o -s "$DATE"_err ] ; then
	# wenn Fehlerausgabe mehr als 0 Byte
	sleep 17 # warten
	$data > $data 2> "$DATE"_err2  ## und noch mal versuchen
    else
	rm -f "$DATE"_err
    fi
    # Uhrzeit des Datensatzes konkret remitteln
    TIME=`grep Uhr $data | sed 's/^.* \([0-9]\+\):*[0-9]* Uhr/\1/'`
    if [ -n "$TIME" ] ; then
	DATE=`date +%Y%m%d`"$TIME"
    fi
    CompareCurrent data_current data_"$DATE" $data
    if [ $DEBUG -eq 1 ] ; then echo "data_${DATE}.jpg stored" ; fi
done

torify brocken-getimgs-feratel

if [ -x /usr/local/bin/rsync-images ] ; then /usr/local/bin/rsync-images ; fi

exit

DAYSTOSTORE=10

### löschen älterer Wolkenbilder
find $CLOUDSDIR -maxdepth 2 -mtime +${DAYSTOSTORE} -name "*.jpg" -exec rm \{\} \;

