Heute habe ich mir ein Wetter Modul für meine i3 Statusbar zusammengebastelt.

Aufmerksam darauf wurde ich durch dieses Video. Um meine Wetterdaten zu bekommen benutze ich den Dienst wttr.in. Wenn man mit Curl die URL aufruft bekommt man eine ANSI-formattierte Tabelle mit den aktuellen Daten, den heutigen und eine zwei Tage weite Vorhersage. Den Standort beschafft sich der Dienst über unsere IP-Addresse. Alternativ, wenn man zum Beispiel ein VPN oder Tor benutzt, oder um eine höhere Genauigkeit zu erzielen, kann man hinter die URL noch seinen Städtenamen dranhängen.

Screenshot wttr.in

Zuerst fange ich an uns die Daten herunterzuladen und in eine temporäre Datei zu schreiben.

export LOCATION="Koeln"
curl -s "wttr.in/$LOCATION" > "/tmp/weatherlog.txt"

Nun kann ich beginnen die Daten zu extrahieren. Ich fange mit der Regenwarscheinlichkeit an.

#Die Werte durch Leerzeichen getrennt aus der Zeile extrahieren
raindata=$(cat /tmp/weatherlog.txt | sed "16q;d" | grep -wo "[0-9]*%" | sort -n | sed -e "/0%/d" | tr -d "%")
#Den minimalen Wert speichern
min=$(echo $raindata | awk '{print $1}')
#Den maximalen Wert speichern
max=$(echo $raindata | rev | awk '{print $1}' | rev)
#Wenn alle werte 0 sind, ist raindata leer und damit auch min
if [ "$min" != "" ]; then
    rainStr="$min-$max%"
else
    rainStr="0%"
fi

Für die Temperaturen läuft das ganz ähnlich ab

tempdata=$(cat /tmp/weatherlog.txt | sed "13q;d" | grep -o "/\\(-\\)*[0-9]\\+" | sort -n -t "m" -k 2n | tr -d "m")
min=$(echo $tempdata | awk '{print $1}')
max=$(echo $tempdata | rev | awk '{print $1}' | rev)
tempStr="$min-$max°C"

Nun muss ich das ganze nur noch "schön" formattiert ausgeben

echo "🌧 $rainStr 🌡 $tempStr"

Falls ihr (noch) kein Emoji-Font habt, um diese im Terminal darzustellen beschreibe ich in diesem Blogpost, wie ich mir mein eigenes Emoji-Font erstel lt habe.