APRS Telemeriedaten des RaspberryPi

In einem meiner Artikel („APRS-IS mit dem Raspberry Pi“ aus 2013) habe ich ja schon beschrieben wie man mit nc, einem Text-File und dem APRS-IS Netzwerk eine APRS-Bake abesetzen kann. In diesem Artikel möchte ich euch zeigen wie ich APRS Telemetriedaten des RaspberryPi Sende.

Das APRS Protokoll beinhaltet eine möglichkeit Telemetrie zu versenden eine Erklärung findet man im APRS Protocol Reference (pdf) Handbuch.

Hier sieht man die Temperaturkurve des Raspberry CPUs.

Für die Telemetrie gibt es im APRS folgende felder das T (Telemetry Report Format), die PARM. (Parameter Name Message), die UNIT. (Unit/Label Message), die EQNS. (Equation Coefficients Message) und die BITS. (Bit Sense/Project Name Message). Da ich mein Datenpakt mit nc an den APRS-IS Server sende, muss ich mir das Paket selbst zusammenbauen. Wenn das Paket fertig ist sieht es bei mit so aus:

DO7TC-1>APE001,WIDE1-1,TCPIP*:!5236.49N/01324.96EI Denis / http://www.do7tc.de / RaspberryPi TESTBETRIEB
DO7TC-1>APE001,WIDE1-1,TCPIP*:>Verbunden via HAMNET - Telemetrie zeigt System Status des RaspberryPi
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :UNIT.Gard C Temp,Voltage,Voltage,Off,kB
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :PARM.CPUCore Temp,V Core,V SDram,Off,FreeMem kB
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :BITS.00000000,RaspberryPi Status
DO7TC-1>APE001,WIDE1-1,TCPIP*:T#160,39.0,1.2000,1.2250,50,25092,000000

Wie erstelle ich nun das Paket, dazu ich habe mir eine Skript geschrieben – das wie folgt aussieht:

#!/bin/bash
echo "user DO7TC pass 17401
DO7TC-1>APE001,WIDE1-1,TCPIP*:!5236.49N/01324.96EI Denis / http://www.do7tc.de / RaspberryPi TESTBETRIEB
DO7TC-1>APE001,WIDE1-1,TCPIP*:>Verbunden via HAMNET - Telemetrie zeigt System Status des RaspberryPi
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :UNIT.Gard C Temp,Voltage,Voltage,Off,kB
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :PARM.CPUCore Temp,V Core,V SDram,Off,FreeMem kB
DO7TC-1>APE001,WIDE1-1,TCPIP*::DO7TC    :BITS.00000000,RaspberryPi Status
DO7TC-1>APE001,WIDE1-1,TCPIP*:T#"`cat /tmp/zahl.txt`\
","`vcgencmd measure_temp | awk -F'=' '{print $2}' | awk -F"'" '{print $1}'\
`","`vcgencmd measure_volts core | awk -F'=' '{print $2}' | awk -F'V' '{print $1}'`\
","`vcgencmd measure_volts sdram_p | awk -F'=' '{print $2}'| awk -F'V' '{print $1}'`\
",50"``\
","`free | grep Mem | awk '{print $3}'`\
",000000"``\ > /tmp/aprs-telemetrie.txt
quelle="$(cat /tmp/zahl.txt)"
wert=1
ziel="/tmp/zahl.txt"
zahlneu=$((quelle+wert))
echo $zahlneu > "$ziel"

In diesem Skript wird also das Telemetriepaket zusammen gebaut, (verzeiht mir bitte die Art und Weise – ich bin kein Entwickler, es hat so einfach funktioniert). Das Skript schreibt eine Datei nach /tmp/ diese übergebe ich dann nc und sende es an einen APRS-IS Server. In meinem fall direkt ins HAMNET mit

nc -w 5 44.225.73.2 14580 < /tmp/aprs-telemetrie.txt

So, dass soll es erst mal gewesen sein, schaut mal auf aprsdirekt oder aprs.fi. Anregungen, Verbesserungen und Fragen gern in die Kommentare.

APRS-IS mit zusätzlichen Daten befüllen

Nach dem ich nun seid meinem letzten Beitrag meine APRS-Bake erfolgreich mit meinem Raspberry PI ins APRS-TCPIP-Netz einspiele, blieb nun noch etwas Spielraum für mehr. Es ist zum einen möglich noch mehr Information „Letzter Status“ (so nennt das aprs.fi) hinzuzufügen.

Beispiel für meine eigentliche APRS Bake mit GPS-Daten:

DO7TC-1>APRS,WIDE1-1,TCPIP*:!5236.49N/01324.96E- Denis - D11 - http://www.do7tc.de

Und so sieht die zusatz Information dazu aus:

DO7TC-1>APRS,WIDE1-1,TCPIP*:>Zurzeit QRT - keine Antenne - APRSd via TCPIP Gateway auf RaspberryPI

Bei APRS.fi sieht das dann wiederum so aus:
aprs-RPI

Somit ist es auch möglich andere Stationen oder Wichtige POIs auf die Karte zu bringen, ich habe nun einige Sprachrelais und Baken mit aufgenommen diese werde nun auch Angeziegt, ich glaube das ist für was Gutes. Hoffe ich zumendest.

Bielspiel für zusatz Stationen:

DM0UB-B>APRS,WIDE1-1,TCPIP*:!5225.31NB01252.89E0 DM0UB Bakensender 115m ü. NN (VFDB Z94 - http://z94.vfdb.org)
DM0UB-B>APRS,WIDE1-1,TCPIP*:>Sendefrequenzen: 1296.850 MHz / 2320.850 MHz / 5760.850 MHz / 10368.850 MHz

dm0ub-aprs

APRS-IS mit dem Raspberry Pi

Angeregt von DL1MX, will ich nun auch eine Stationskennung per Internet an das APRS-IS Netzwerk absetzen, da ich wie er selbst einen Raspberry Pi in betrieb habe, bot sich das an.

Ich gehe hier wie DL1MX davon aus das Raspbian vollständig eingerichtet ist und sich über SSH erriechbar ist. Als erstes werden alle Pakete auf den neuesten Stand gebracht:

sudo aptitude update && sudo aptitude upgrade -y

Nun muss man noch Pakete die benötigt werden Installieren zum einen

  • aprsd (Ist ein Internet-zu-RF-Gateway (Igate) für das APRS (Automatic Position Reporting System). Er erlaubt ‚hams‘ im Internet, Text-Mitteilungen zu ‚hams‘ im RF zu senden, hauptsächlich bei Verbindungen zum weltweiten APRServe-Netzwerk (www.aprs.net))
  • netcat (auch nc genannt, ist ein einfaches Werkzeug, um Daten von der Standardein- oder -ausgabe über Netzwerkverbindungen zu transportieren. Es arbeitet als Server oder Client mit den Protokollen TCP und UDP.)

Diese Pakete werden nun wie folgt Installiert:

sudo aptitude install netcat aprsd

Jetzt benötigt man noch ein Passwort um sich auf einem APRS-IS Server anmelden zu können. Dieses Passwort kann komfortabel mittels des Programms aprspass aus dem Paket aprsd erzeugt.

Beispiel ausgabe:

aprspass DO7TC
APRS passcode for DO7TC = 54321 

Jetzt müssen wir die Passenden APRS Daten erzeugen die wir an den APRS-IS Server übergeben wollen, ich lege mir, wie DL1MX, dafür ein eigene Verzeichnis in meinem /home an.

sudo mkdir ~/aprs/ 
cd ~/aprs/ 
sudo mcedit ~/aprs/do7tc.txt

Nun Kopiere ich hier die APRS Daten hinein, bei mir sieht das so aus:

user DO7TC pass 54321
DO7TC-1>APRS,TCPIP*:!5236.49N/01324.96E- Zurzeit QRT - keine Antenne - http://www.do7tc.de
DL0WF-1>APRS,TCPIP*:!5228.40ND01317.75Ea DARC OV D11 - Treffen Donnerstag ab 19Uhr (http://www.ov-d11.de)

In die ersten Zeile melden wir uns an einen Server an mit Rufzeichen und das Passwort welches wir zuvor generiert haben, in der zweiten Zeile mein QTH als APRS-Frame mit der Position und meinem ergänzendem Text, in der dritten Zeile das selbe nur für meinen OV bzw. dessen Clubstation.

Wie man diese Daten erzeugt findet ihr auf Seiten wie aprs-dl.de oder sucht einfach mal beim google.de. Ich habe mit meine Daten bei aprs.fi herausgezogen.

Jetzt fehlt noch die regelmäßige übergabe der APRS-Frames an einen APRS-IS Server. Hierzu müssen wir uns ersteinmal mit einem APRS-IS Server verbinden um die Daten zu übertragen, dazu erstellen wir ein bash-Script was durch den cron Daemon regelmäßig aufgerufen wird.

sudo mcedit aprsbake.sh

Hier sind nun folgenden hinein Kopiert:

nc -v 195.190.142.207 14580 < /home/do7tc/aprs/do7tc.txt

So nun Speichern ung Fertig. Zum testen kann man nun das bash-Script ausführen.

 sh ~/aprs/aprsbake.sh

Es sollte so eine ausgabe wie..

Connection to 85.214.83.187 14580 port [tcp/*] succeeded!
# aprsc 2.0.1-g7a4bcfe
# logresp DO7TC verified, server T2LEIPZIG

..erscheinen, wenn das der fall ist hat alles geklappt.

Die o.g. IP-Adresse gehört wie bei DL1MX zu dem APRS-IS Server in Leipzig. Es kann aber auch ein beliebig anderer APRS-IS Server genutzt werden z.b. Erfurt (195.190.142.207) oder Koblenz (85.116.202.225). Zuletzt muss nur noch der cron Daemon programmiert werden:

sudo crontab -e

Diese sich nun öffnende Datei enthält am Ende eine neue Zeile mit folgendem Inhalt, was einem 15 Minuten Intervall entspricht:

*/15 * * * * sh /home/pi/aprs/aprsbake.sh

Auchtung inder Anleitung von DL1MX fehlt ein „sh“ was mich etwas verwirrte. Nun ist alles Abgeschlossen und ihr solltet nun APRS-Baken mit eurem Call sehen können. An dieser Stellt möchte ich mich bei Marco Kubon, DL1MX für die Anregung bedanken.