Unwetterwarnung

20 07 2011

So this time in Deutsch. Der Deutsche Wetterdienst gibt auf seiner Homepage relativ zeitnah Unwetterwarnungen heraus. Um mir die Arbeit zu ersparen, dort des Öfteren nachsehen zu müssen, und trotzdem bescheid zu wissen wann ein größeres Gewitter o.ä. aufzieht hab ich mir das folgende Skript erdacht.

Es holt sich von der Homepage die Warnungen für den festgelegten Landkreis. Dieser String wird bei Vorhandensein einer Warnung im untigen Fall an notify-send übergeben und erscheint somit als kleines Popup, wie es auch andere Programme verwenden. Zudem wird dann noch die Timeline-Grafik (für die Dauer der Warnung) heruntergeladen und kurzzeitig mit einem image_viewer angezeigt.
Vom Prinzip her ist das Meiste glaub ich selbsterklärend. Auch im Panel erscheint ein Warnsymbol.

Die Landkreise entsprechen (meiner Erkenntnis nach) den entsprechenden amtlichen Kennzeichen, bei Bedarf mit ‘X’en auf drei Buchstaben erweitert (BXX – Berlin , KIX – Kiel, COE – Coesfeld). Zur Sicherheit einfach mal auf der DWD-Seite nachschaun. Hierzu auf der Warnkarte den gewünschen Kreis anklicken und in der URL das entsprechende Kürzel suchen (Ausnahmen z.B. WUE statt WÜX für Würzburg – macht ja auch Sinn).

[edit: normalerweise wird der Standard-Landkreis gecheckt, bei übergebener Variable der alternative Kreis]
usage:
$ wetterdienst [LKR]

#!/bin/bash
# display weather warnings using notify-send
## settings
notify_header="Wetterwarnungen für Berlin"
popup_icon=~/Bilder/Wetterwarnung.png
landkreis=BXX
image_viewer=display # must be able to handle URLs
## check for alternative location
if [ "$1" != "" ] 
then landkreis=$1
     notify_header="Wetterwarnungen für "$landkreis
fi
## get warnings
textstring=$(wget 'http://www.dwd.de/dyn/app/ws/html/reports/'${landkreis}'_warning_de.html' -O -  | grep -i "warnung vor" | sed s/\<\\/p\>//g ) 
## check warnings
if [ "$textstring" = ""  ]  
## if there's no warning
# then exit 0;
then notify-send --icon=$popup_icon """$notify_header""" "keine Warnungen vorhanden"
## if there are warnings
# do funny things
else notify-send --icon=$popup_icon """$notify_header""" """$textstring"""
# do some acoustic output
#espeak -v de """$textstring"""
# set a notification in the taskbar
zenity --notification --text="""$textstring""" &
# display the warning timeline for some seconds
 $image_viewer http://www.dwd.de/dyn/app/ws/maps/${landkreis}_timeline.png &
 sleep 4
 kill $!
fi


Natürlich kann man den Warn-String beliebig anderweitig weiterverarbeiten, sich einen cronjob anlegen, der alle 30 Minuten nachschaut ob’s was neues gibt (hierbei nicht vergessen das DISPLAY zu definieren) und sich nur bei vorhandener rührt, ansonsten abbricht.

Grundsätzlich könnte man auch die Timeline über imagemagick mit dem Desktop-Hintergrund oder einem sonstigen Element verwursten…das jedoch obliegt den Anforderungen und dem Ideenreichtum jedes Einzelnen. Viel Freude!

Advertisements




Bon Voyage! (german railway edition)

1 07 2011

So. This might be especially helpful to our german friends who quickly want to know when the next train goes from A to B. Or when the trains go on a special date.
Opens your favourite browser with the travelling-information-page without the need to klick a lot before.
Usage:
$ bahnanfrage start ziel [nv]
or
$ bahnanfrage start ziel dd.mm.yy hh:mm [nv]
The last parameter nv is optional, meaning that no ICE or IC trains are to be used (Nur Nahverkehr).

#!/bin/bash
# bahnanfrage - short bash tool to launch browser with right data feed
## Help
if [ "$1" = "-h" ]
then echo "bahnanfrage start ziel [nv]
	or
bahnanfrage start ziel dd.mm.yy hh:mm [nv] "
exit 1
fi
## Variables
browser=firefox
von=$1
nach=$2
if [ "$3" = "nv"  ] || [ "$3" = ""  ]
then
	wochentag=$( date +%a)
	datum=$(date +%d.%m.%y)
            zeit=$(date +%H:%M)
	if [ "$3" = "nv"   ]
		then
		        nahverkehr="&journeyProducts=1016"
		else
		        nahverkehr=""
	fi

else
	wochentag=$( date -d $(echo $5-$4-$3) +%a)
	datum=$3
	zeit=$4
	if [ "$5" = "nv"   ]
	then    
	        nahverkehr="&journeyProducts=1016"
	else
	        nahverkehr=""
	fi  
fi
$browser 'http://reiseauskunft.bahn.de/bin/query.exe/dn?revia=yes&existOptimizePrice=1&country=DEU&initialAvail=ON&dbkanal_007=L01_S01_D001_KIN0001_qf-bahn_LZ003&start=1&S='${von}'&REQ0JourneyStopsSID=&Z='${nach}'&REQ0JourneyStopsZID=&trip-type=single&date='${wochentag}'%2C+'${datum}'&time='${zeit}'&timesel=depart&returnTimesel=depart&optimize=0&travelProfile=-1&adult-number=1&children-number=0&infant-number=0&tariffTravellerType.1=E&tariffTravellerReductionClass.1=0&tariffTravellerAge.1=&qf-trav-bday-1=&tariffClass=2'$nahverkehr





Bon Voyage!

30 06 2011

A simple but yet helpful line if you quickly want to look up the track from A to B. Opens google maps in your favourite browser, displaying the desired route.
$ gmaps city_1 city_2

#!/bin/bash
browser=firefox
from=$1
to=$2
$browser 'http://maps.google.de/maps?saddr='${from}'&daddr='${to}





Happy Birthday! (part two)

19 06 2011

…and now…how often was my birthday on a monday (tuesday etc.)?
(example for 18th of june, 2001-1011)

for i in {2001..2011}; do date +%A --date=$i-06-18; done | sort -k 2 | uniq -c





happy birthday!

18 06 2011

ever wanted to know on which day of the week your birthday was in the past years (or will be in the future)? here you go!
(example for 18th of june, 2001-1011)

 for i in {2001..2011}; do date +%Y%t%A --date=$i-06-18; done