Datenstrom aus dem APRS in aprslib filtern?


#1

Ich würde gern mit aprslib einen Datenstrom verarbeiten. Allerdings möchte ich nicht den vollen Datenstrom aus dem APRS-IS haben, sondern einen - von mir definierten - Filter davor setzen.

Wenn ich den Stream via telnet abgreife, stehen mir ja einige Optionen zur Filterung zur Verfügung. Konkret geht es mir um den Digipeater filter http://www.aprs-is.net/javAPRSFilter.aspx - das habe ich vor einiger Zeit mal getestet, funktioniert ganz gut.

Aber wie setze ich so einen Filter in aprslib? Natürlich könnte ich auch den vollen Stream verarbeiten und innerhalb meiner Applikation filtern, aber ich befürchte, dass das nicht so ressourcensparend ist. Ich will eigentlich nur Daten von einem bestimmten Digi verarbeiten, alle anderen Pakete will ich ignorieren.

Vielleicht hat @dk3ml eine Idee?


#2

Was ist dieses aprslib? Klingt wie eine einfache Library. Dann kannst du die Filter doch einfach als Regexp (was anderes scheint der Digipeater filter auch nicht zu ein) in der Programmiersprache deiner Wahl schreiben.


#3

aprslib ist eine Bibliothek, die den Umgang mit APRS-Paketen innerhalb von Python vereinfacht.
https://pypi.python.org/pypi/aprslib/0.6.34

Wie ich den vollen Strom nachträglich gefiltert bekomme, weiß ich.
Ich will aber nicht den vollen Datenstrom mit meiner Software anschauen müssen. Ich will nur das vorgefilterte 1 Prozent was mich interessiert, verarbeiten müssen. Selbst von diesem Teil werden später alle nicht relevanten Pakete verworfen - und das sind fast alle.


#4

Es gibt da eine Methode “set_filter(filterstring)”, damit sollte das gehen

aprsis = aprslib.IS(“N0CALL”)
aprsis.set_filter(“put your filter text here”)
aprsis.connect()


#5

Danke, das funktioniert so. Habe jetzt diese Zeile zur Filterung:

AIS.set_filter('d/DB0LOS/DB0LDS -t/oimqstunw')

Damit bekomme ich nur Positionspakete, die von DB0LOS oder DB0LDS gehört worden sind. Damit kann ich dann weitermachen und meine hier vorgestellte Idee umsetzen.