Wetterdaten aus pywws als APRS-Bake versenden

Um regelmäßig Wetterdaten als Bake über einen APRS-IS-Server zu verschicken, muss man aus den Daten eine gültige APRS-Bake erstellen. Basierend auf der Anleitung von Marco Kubon, eine APRS-IS Bake mit dem Raspberry Pi als Stationskennung für eine Amateurfunkstation zu verschicken, habe ich eine pywws-Template erstellt, um Wetterdaten als Bake zu verschicken.

Wie die Bake aussehen muss, ist in der APRS Protocol Reference beschrieben. Eine gültiger String sieht zum Beispiel folgendermassen aus:

DC5DM-1>APRS,TCPIP*:@121300z5053.16N/00808.37E_225/002g002t056b10112h96p024r001P018 ASL:324m - Fine Offset WH-1080 - PYWWS - RaspberryPi

Die genaue Definition, wie die obige Bake aufgebaut ist, ist in (2) auf Seite 66 beschrieben.

Um einen solchen String aus den von pywws erfassten Wetterdaten zu erstellen, hilft ein pywws-Template. Das Template muss sich im pywws-Template Verzeichnis befinden, das in der Konfigurationsdatei von pywws im Abschnitt [paths] angegeben ist.

[paths]
templates = /data/weather/share/templates/
graph_templates = /data/weather/share/graph-templates/
work = /tmp/weather
local_files = /var/www

Die Ausgabe erfolgt in das unter "local_files" angegebene Verzeichnis, hier im Beispiel ist dies "/var/www".

Das Template für pywws kann eine beliebiegen Namen haben. So wie das Template heißt später auch die von pywws generierte Datei im Ausgabeverzeichnis, welche die Wetterdaten enthält. Zum Beispiel aprs.log. Hier der Aufbau im Detail:

#timezone utc#
#raw#
user DC5DM pass 12345
DC5DM-1>APRS,TCPIP*:@#idx "%H%M%S"#z5053.16N/00808.37E_#wind_dir "%03d" "..." "winddir_degrees(x)"#/#wind_ave "%03d" "..." "wind_mph(x)"#g#wind_ave "%03d" "..." "wind_mph(x)"#t#temp_out "%03d" "..." "temp_f(x)"#b#rel_pressure "%05d" "....." "x * 10"#h#hum_out "%02d" ".."#p#jump -288##loop 1##calc "rain_inch(prevdata['rain']-data['rain'])" "%03d" "..." "x * 100"##jump 288##endloop#r#live##calc "rain_inch(rain_hour(data))" "%03d" "..." "x * 100"#P#live##calc "rain_inch(rain_day(data))" "%03d" "..." "x * 100"# ASL:324m - Fine Offset WH-1080 - PYWWS - RaspberryPi

Anweisungen für pywws sind in hastags (#) eingeschlossen. Wichtig ist hierbei, dass die 4 Zeilen keinen Zeilenumbruch enthalten, damit der APRS-String später auch in einer Zeile steht. Eine ausführliche Erklärung der Anweisungen gibt es in der pywws Dokumentation (3). Zeile 3 ist notwendig, damit man später die Bake an den APRS-IS-Server senden kann, da man sich mit Benutzernamen (Rufzeichen) und einem daraus generierten Passcode anmelden muss, um die Bake zu verschicken. Einzelheiten dazu auf der oben verlinkten Seite von Marco Kubon (4).

Um jetzt die Bake mit den Wetterdaten abzusetzen, ruft man ein Shellscript regelmäßig per cron auf. Hier im Beispiel "aprsbake.sh". Der Inhalt des Shellscripts sieht folgendermaßen aus:

#!/bin/bash nc -v euro.aprs2.net 14580 < /pfad/zur/pywws/ausgabe/aprs.log

Die Zeile für den Cronjob sieht so aus, wenn die Bake alle 15 Minuten abgesetzt werden soll:

*/15 * * * * /pfad/zum/script/aprsbake.sh

Jetzt sollte die Bake alle 15 Minuten an den APRS-IS Server geschickt werden.

(1) PYWWS Dokumentation
http://pywws.readthedocs.io/en/latest/index.html

(2) APRS Protocol Reference
ftp://ftp.tapr.org/aprssig/aprsspec/spec/aprs101/APRS101.pdf

(3) PYWWS Templates
http://pywws.readthedocs.io/en/latest/api/pywws.Template.html

(4) APRS-IS Bake mit dem Raspberry Pi
http://www.kubonweb.de/?p=58

(5) APRS in Deutschland
http://www.aprs-dl.de/index.php?APRS_Detailwissen:Lokale_Informationen

(6) DC5DM-1 Wetterstation
http://aprs.fi/#!mt=roadmap&z=11&lat=50.8860&lng=8.1395&timerange=3600&tail=3600