#!/bin/bash
#-----------------------------------------------------------------------------------------------------------------
# Script zur Suche nach Wetterwarnunggen vom DWD anhand einer Region (z.B. BXXX=Berlin)
# Quelle: https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls?__blob=publicationFile&v=18
#
# Komplett überarbeitete Fassung
# DL 7 ATA 05-05-2018 / 10.05.2018
#
#------------------individuelle Anpassungen-Anfang----------------------------
CALL="DB0TGO"
TYP="txt"	#Lange Textfassung - gut für TTS/svxlink, "sms" ideal für APRS
PFAD=/tmp
FILE="dwd.msg"
REGION="PD" 	#PD Potsdam f. B/BB, SU Stuttgart,...
QTH="BXXX"  	#BXXX f. Berlin, FRXF Freiburg
#QTH="TOLX"  	#BXXX f. Berlin, FRXF Freiburg
#REGION="MS" 	#PD Potsdam f. B/BB, SU Stuttgart,...
#--------------------------------Anpassungen- ende-------------------------
von_text="Amtliche"
bis_text="Detaillierte"			#Meldung kürzen bis
link="https://opendata.dwd.de/weather/alerts/$TYP/$REGION"

#TTS Variablen
server="marytts.phonetik.uni-muenchen.de"
port="59125"
voice="bits4unitselautolabel&de&female"
voice1="bits3-hsmm&de&male&hm"			#alternative Mary-Stimmen; bei der uni-muechen gibt es noch weitere Stimmen
server2="mary.dfki.de"				#Reserve
voice2="bits4&de&female&unitselection&general"	#Reserve
tM1=$(echo "INPUT_TYPE=TEXT&OUTPUT_TYPE=AUDIO&INPUT_TEXT=")
tM2=$(echo "&OUTPUT_TEXT=AUDIO_OUT=WAVE_FILE&LOCALE=de&VOICE=$voice&AUDIO=WAVE_FIL")
tM22=$(echo "&OUTPUT_TEXT=AUDIO_OUT=WAVE_FILE&LOCALE=de&VOICE=$voice2&AUDIO=WAVE_FIL")
d=$(date +%y%m%d.%H%M%S)

# Das Verzeichnis vom DWD mit weiteren möglichen Meldungsdateien holen
/usr/bin/wget -q -O $PFAD/$FILE $link
mkdir -p $PFAD/wx_msg/

IFS=$'\n'
array=$(cat $PFAD/$FILE )
for item in $array; do
	qth=$(echo : $item : | cut -c39-42)
	if [[ "$qth" == "$QTH" ]];then
		ort=$(echo $item | cut -d'"' -f2)
		#Meldungstyp "WW"=Wetterwarnung
		warn=$(echo $ort | cut -b1-2)

	    	# prüfen ob schon vorhanden und eine WW (Wetterwarnung)
	     if [[ ! -s "$PFAD/wx_msg/dwd_msg.$ort" ]] && [[ $warn == "WJ" || $warn == "WD" ]]
		then
		#Noch nicht vorhanden, baue kompletten Dateinamen zusammen und hole eigentliche Meldungsdatei
		/usr/bin/wget -q -O $PFAD/wx_msg/dwd_msg.$ort $link/$ort
		echo "$d: $REGION $QTH / $ort"

		if [[ $warn == "WJ" ]]
		   then
		   #Audioaufbereitung
		   #In dieser Variablen steckt die gesamte Nachricht die von MARY in eine WAV gewandelt werden soll
		   messageT=$(cat $PFAD/wx_msg/dwd_msg.$ort | sed -n '/Amtliche/,/Detaillierte/p' | sed -e 's/^[ \t]*//;s/m\/s/ meter pro sekunde /g;s/kn/ Knoten /g;s/Bft/ boo ford /g;s/l\/qm/ Liter pro Quadratmeter/g;s/ Uhr/h/' | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ/abcdefghijklmnopqrstuvwxyzäöü/' |  sed '$d')
		elif  [[ $warn == "WD" ]]
		   then
		   #Audioaufbereitung
		   #In dieser Variablen steckt die gesamte Nachricht die von MARY in eine WAV gewandelt werden soll
		   messageT=$(cat $PFAD/wx_msg/dwd_msg.$ort | sed -n '/VORABINFORMATION/,/Detaillierte/p' | sed -e 's/^[ \t]*//;s/m\/s/ meter pro sekunde /g;s/kn/ Knoten /g;s/Bft/ boo ford /g;s/l\/qm/ Liter pro Quadratmeter/g;s/ Uhr/h/' | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ/abcdefghijklmnopqrstuvwxyzäöü/' |  sed '$d')
		fi

		# Prüfen ob es sich um eine AUFHEBUNG handelt
		var="AUFHEBUNG"
		if [ -z "${messageT%%*${var}*}" ]; then
		   echo -e "Meldung ist eine $var, beende /n"
		   exit
		fi

		# prüfen ob Uni Muc erreichbar.......
		Status_code=$(curl --output /dev/null --silent --head --write-out '%{http_code}\n' "http://$server:$port")
		# wenn ja = 200
		if [ $Status_code = "200" ]; then
			message="$tM1$messageT$tM2";
			wget --timeout=15 --quiet -O $PFAD/Warnwetter.$ort.wav "http://$server:$port/process?$message"
		else
			# prüfen ob DFKI erreichbar.......
			Status_code=$(curl --output /dev/null --silent --head --write-out '%{http_code}\n' "http://$server2:$port")
			# wenn ja = 200
			if [ $Status_code = "200" ]; then
				message="$tM1$messageT$tM22";
				wget --timeout=15 --quiet -O $PFAD/Warnwetter.$ort.wav "http://$server2:$port/process?$message"
			else
				# sonst mit Fehler 9 abbrechen ...
				echo "Kein TTS-Server erreichbar! " $d
				exit 9
			fi
		fi

		cp $PFAD/Warnwetter.$ort.wav /var/spool/svxlink/weatherinfo/$CALL.$ort.wav
		echo $messageT > /var/spool/svxlink/weatherinfo/$CALL.$ort.info

		# Parallele Ausgabe auf Remotelogic aufbereiten
		call=$CALL"-2m"
		cp $PFAD/Warnwetter.$ort.wav /var/spool/svxlink/weatherinfo/$call.$ort.wav
		echo $messageT > /var/spool/svxlink/weatherinfo/$call.$ort.info

		rm $PFAD/Warnwetter.$ort.wav

	     fi
	fi
done

# löschen alter Meldungen (> 14 Tage)
find $PFAD/wx_msg -name 'dwd_msg.*' -mtime +14 -exec rm {} \;

exit 0
