Lorarx: Unterschied zwischen den Versionen
Dl1nux (Diskussion | Beiträge) |
Dl1nux (Diskussion | Beiträge) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 82: | Zeile 82: | ||
</nowiki> | </nowiki> | ||
== Ausführliche Beschreibung der Parameter == | == Ausführliche Beschreibung der Parameter (aktuell noch unvollständig - wer will helfen?) == | ||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 130: | Zeile 130: | ||
| X <netid> || filter netwok-id (sync pattern), 1xx stops decode on wrong id (12) | | X <netid> || filter netwok-id (sync pattern), 1xx stops decode on wrong id (12) | ||
|} | |} | ||
== Beispielkonfiguration == | == Beispielkonfiguration == | ||
Zeile 167: | Zeile 166: | ||
[++++++++++++++++++]<[FF][01]DL1NUX-12>APLT00,WIDE1-1:!5014.06N/01059.01E[165/000/A=001076TTGO Attila !w{b![0A] | [++++++++++++++++++]<[FF][01]DL1NUX-12>APLT00,WIDE1-1:!5014.06N/01059.01E[165/000/A=001076TTGO Attila !w{b![0A] | ||
</nowiki> | </nowiki> | ||
== Empfang von Meshcom und LoRa WAN == | |||
Folgende (unbearbeitete) Info stammt direkt von Chris OE5DXL. Wer kann/will hier unterstützen zur Aufarbeitung? | |||
Die genannten py-Dateien liegen bei OE5DXL auf dem Server: [http://oe5dxl.hamspirit.at:8025/aprs/py/ http://oe5dxl.hamspirit.at:8025/aprs/py/] | |||
<nowiki> | |||
#pipe file anlegen wenn nicht schon vorhanden | |||
mknod pipe p | |||
#aprs zum igate oder aprsmap schicken mit metadaten | |||
python3.3 loradec.py & | |||
#meshcom4 auf aprs wandeln und zu aprsmap senden, zu aprsis sendens schon andere | |||
python3.3 meshdec.py & | |||
#aprs und meshcom zugleich empfangen | |||
./lorarx -f u8 -i pipe -v -N -X 0 -b 7 -H -s 12 -r 1000000 -o 300000 -J 127.0.0.1:5100 -g -66 -M 433.775 -w 128 -W 40 -Z 0.05 0.999 & | |||
rtl_sdr -f 433.475m -g 48 -p 0 -s 1000000 -b 2000 - | tee pipe | ./lorarx -f u8 -i /dev/stdin -g -66 -v -N -b 8 -H -s 11 -w 64 -r 1000000 -o -300000 -J 192.168.1.45:5200 -Z 0.05 0.999 -J 127.0.0.1:5200 | |||
#aprs empfangen und rtl stift auf mitte so dass der mitten-birdy weg ist und die lauten signale auf 433.9 am rand sind | |||
#das -W autonotch sollte man weg lassen wenn die aprs frequenz sauber ist | |||
rtl_sdr -f 433.400m -g 48 -p 0 -s 1000000 -b 2000 - | ./lorarx -f u8 -i /dev/stdin -g -66 -b 7 -v -N -H -s 12 -r 1000000 -o 375000 -W 50 -J 127.0.0.1:5100 | |||
#meshcom4 ampfangen | |||
rtl_sdr -f 433.175m -g 48 -p 0 -s 1000000 -b 2000 - | ./lorarx -f u8 -i /dev/stdin -v -N -H -b 8 -s 11 -r 1000000 | |||
#lorawan alle modulationen und invers (igates) zugleich auf 867.9 und 868.1mhz empfangen und nur frames mit richtigem crc ausgeben -Q | |||
#geht am besten mit vv und bandfilter gegen gsm und 4g sender drunter und drueber | |||
./lorarx -b 7 -f u8 -i pipe -v -N -s -7 -s -8 -s -9 -s -10 -s -11 -s -12 -s 12 -s 11 -s 10 -s 9 -s 8 -s 7 -r 1000000 -o 100000 -W 50 -H -Q | |||
rtl_sdr -f 868.0m -s 1000000 -g 48 - | tee pipe | ./lorarx -b 7 -f u8 -i /dev/stdin -v -N -s -7 -s -8 -s -9 -s -10 -s -11 -s -12 -s 12 -s 7 -s 8 -s 9 -s 10 -s 11 -r 1000000 -o -100000 -W 50 -H -Q | |||
#wenns geht vorher mit gqrx oder sdr# schaun ob sauberer empfang geht mit den 8 bit rtl-stiften | |||
#ansonsten bandfilter oder pegel (-g) absenken, zur not tuts auch autogain (-g weg lassen) | |||
</nowiki> |
Aktuelle Version vom 26. März 2024, 08:31 Uhr
Über lorarx
lorarx ist ein Dekoder für LoRa modulierte Signale mithilfe eines RTL-SDR USB Sticks (und Ähnlichem). lorarx benötigt wie afskmodem den SDR-Server rtl-tcp und ggf. das Empfangsmodul sdrtst zum funktionieren.
Seit 2024 kann es neben LoRa APRS auch Meshcom und LoRa WAN Signale dekodieren. Eine ausführliche Dokumentation zu Meshcom und LoRa WAN gibt es derzeit noch nicht. Eine kurze Anleitung mit Beispielen von OE5DXL wurde unten in die Beschreibung mit eingefügt, benötigt jedoch ggf. weiterer Erklärungen. Wer hier gerne mithelfen möchte das Wiki zu vervollständigen, darf sich gerne melden :-)
Wichtig:
- sdrtst muss mindestens den Stand vom 18. Mai 2022 haben um lorarx nutzen zu können!
- Nachträglicher Download von lorarx und dem aktuellen sdrtst bei OE5DXL, z.B. hier: http://oe5dxl.hamspirit.at:8025/aprs/bin/
- Ein Update aller Komponenten ist dringend zu empfehlen!
Parameter in der Kurzübersicht
Decode lora out of IQ-File/Pipe (samplerate must be exact +/-0.00001) output data in udp, axudp or json, view aprs, pr, lorawan, fanet -A (*) enable frame chaining for ax25 longframes -a <afc-speed> (*)follow frequency drift, 0 off (0.5), on sf<9 (0) -b <bandwidth> kHz 0:7.8 1:10.4 2:15.6 3:20.8 4:31.25 5:41.7 6:62.5 7:125 8:250 9:500 (7) -C (*)use crc on implicit header -c <cr> (*)coding rate and enable implicit header (4..8) (else from header) -D (*)if dcd lost go on decoding until frame length limit (for external FEC or monitoring) -d (*)swith off collision detection (less cpu but loose stronger frames starting in weaker -E switch off useing crc to repair 1 chirp (crc checks 4 variants) (on) -F max. block energy FEC off (hamming code fec remains on) (on) -f u8|i16|f32 IQ data format -g <dB> add this to measured signal level (0.0) -H show -v data in ascii if printable else in [hex] -h this -i <file> IQ-filename or pipe -J <x.x.x.x:destport> send demodulated data(base64) with metadata in json -j <file/pipe> write demodulated data(base64) with metadata in json to file or (unbreakable) pipe -L <x.x.x.x:destport> (*)as -U but AXUDPv2 with metadata for igate may be repeated with same -b but different -s after -L -l <len> (*)fixed datalen for implicit header else guess datalen from dcd -M <MHz> pass through rx frequency to json metadata -M 433.775 -N if verbous add empty line after data line -n <[-]Hz> <[-]Hz> notchfilter baseband from-to Hz (may be repeatet) -O <0..1> (*)optimize on off else automatic on sf/bw (-1) -o <Hz> shift input iq band +-Hz -P <+/-ppm> (*)tune datarate (chirp sampelrate) or preset for auto (-a) in ppm (0) -Q verbous only for frames with crc and crc ok -q (*)invers chirps or swapped I/Q (prefer negative spread factor) -R switch off repairing multipath or if-filter fase distortion -r <Hz> downsample input, give exact input sampelrate in Hz (off) -S <level> (*)modifiy squelch level critical for implicit header frame length guess (automatic) -s [-]<sf> (*)spread factor (5..12) (12) and start a new demodulator negativ value for invers chirps or swapped I/Q -t <x.x.x.x:destport> (*)send raw frame bytes in udp frame only if has crc and crc ok -U <x.x.x.x:destport> (*)send frame in AXUDP -u <x.x.x.x:destport> (*)send raw frame bytes in udp frame -V very verbous -v verbous +:no hamming or ok, -:error, h:corrected, ~:weakest chirp replaced, c:try until crc ok ^:bins with maximum power sum used until fitting hamming -W <n> every n*firlen samples update notch filter 0=off, ok:50 (0) -w <len> downsample fir length else automatic (8..4096) (0) -X <netid> (*)filter network-id (sync), 1xx stops decode on wrong id so fast ready for new frame if set -d 0 is wildcard, 20 will pass 2*, 03 for *3, 00 pass all (00) -Y d|f|b <filename> iq debug output in float32-iq dechirped or filtered -Z <upspeed> <downspeed> add pulse noise filter (noise blanker) (0.05 0.999) (*) may be repeated for more demodulators, to start next demodulator apply -s <sf> before other pramaeters example1: aprs with autonotch for birdies: rtl_sdr -f 433.775m -s 1000000 - | ./lorarx -i /dev/stdin -f u8 -v -N -b 7 -s 12 -w 64 -r 1000000 -W 50 example2: lorawan all modulations: rtl_sdr -f 869.525m -s 1000000 - | ./lorarx -i /dev/stdin -f u8 -v -N -b 7 -s 12 -s 11 -s 10 -s 9 -s 8 -s 7 -s -12 -s -11 -s -10 -s -9 -s -8 -s -7 -Q -w 64 -r 1000000 example3: fanet: rtl_sdr -f 868.215m -s 1000000 - | ./lorarx -i /dev/stdin -f u8 -v -N -b 8 -s 7 -Q -w 128 -r 1000000 example4: sdrtst IQ output with FIR 125kHz in sdrcfg.txt: q 433.775 0 0 0 192000+125000,32 sdrtst -t 127.0.0.1:1234 -c sdrcfg.txt -r 250000 -s /dev/stdout -k | lorarx -i /dev/stdin -f i16 -b 7 -v -s 12 -L 127.0.0.1:2300 -s 10 -L 127.0.0.1:2301 example: decode payload in json with python3: -J 127.0.0.1:5100 import json, base64, socket IP=("0.0.0.0",5100) sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.bind(IP) while True: data, addr=sock.recvfrom(1500) obj = json.loads(data.decode()) print(obj) try: payload=base64.b64decode(obj["payload"]) print("payload=",payload) except: pass
Ausführliche Beschreibung der Parameter (aktuell noch unvollständig - wer will helfen?)
Parameter | Beschreibung |
---|---|
a <afc-speed> | follow frequency drift, 0 off (0.2), on sf<11 (0) |
b <bandwidth> | kHz 0:7.8 1:10.4 2:15.6 3:20.8 4:31.25 5:41.7 6:62.5 7:125 8:250 9:500 (7) |
C | use crc on implicit header |
c <cr> | coding rate and enable implicit header (4..8) (else from header) |
d | swith off collision detection (less cpu but loose stronger frames starting in weaker |
D | if dcd lost go on decoding until frame length limit (for external FEC or monitoring) |
F | max. block energy FEC off (hamming code fec remains on) (on) |
i16|f32 | IQ data format |
g <dB> | add to measured signal level (0.0) |
h | Hilfetext. |
i <file> | IQ-filename or pipe |
L <x.x.x.x:destport> | as -U but AXUDPv2 with metadata for igate. may be repeated with same -b but different -s after -L |
l <len> | fixed datalen for implicit header else guess datalen from dcd |
O <0..1> | optimize on off else automatic on sf/bw (-1) |
s <sf> | spread factor (6..12) (12) |
S <level> | enable squelch for low SF (0.0) |
U <x.x.x.x:destport> | send frame in AXUDP |
u <x.x.x.x:destport> | send raw frame bytes in udp |
V | Zeige mehr Informationen in der Bildschirmausgabe. |
v | Zeige Informationen in der Bildschirmausgabe: +:hamming ok, -:error, h:corrected, ~:weakest chirp replaced, ^:bins with maximum power sum used until fitting hamming |
X <netid> | filter netwok-id (sync pattern), 1xx stops decode on wrong id (12) |
Beispielkonfiguration
Eine Beispielkonfiguration des lorarx:
- Achtung, eigene Pfade beachten und anpassen!
- Audiopipe wird in Zeile 2 automatisch angelegt
- updbox ist in dem Beispiel dabei, kann aber auch weggelassen werden. Dann Zielport bei lorarx ODER udpgate4 anpassen.
- Bitte automatischen Zeilenumbruch bei udpgate4 beachten. Gehört natürlich alles in eine Zeile.
rtl_tcp -a 127.0.0.1 -d0 -p 18100 & mknod lorapipe p 2> /dev/null sdrtst -t 127.0.0.1:18100 -r 250000 -s lorapipe -c qrglora.txt -k -v & lorarx -i lorapipe -f i16 -b 7 -s 12 -L 127.0.0.1:9702 -v & udpbox -R 127.0.0.1:9702 -l 127.0.0.1:10702 -r 127.0.0.1:9999 -v & udpgate4 -s MYCALL -R 127.0.0.1:0:10702#LoRa -H 10080 -I 1440 -u 50 -B 60 -n netbeacon.txt -g rotate.aprs2.net:14580#m/1,-t/t -p <PASSCODE> -t 14580 -w 14501 -D /home/pi/dxlAPRS/aprs/www/ -v &
Inhalt qrglora.txt:
p 5 0 # Bei Stick mit Frequenzabweichung passenden Wert hier angeben p 8 1 # Autogain kann manchmal zu Problemen führen. Ggf. mit fixem Gain arbeiten. q 433.775 0 0 0 140000+125000,16
Beispiel Bildschirmausgabe lorarx:
bw=125000.0 cr=from header sf=12 optimize=1 driftloop=0.200 12:0:id:12 cr:5 len:71 crc:ok lev:-12dB snr:5.4dB nf:-53.0dB txd:491 q:90% afc:-1748Hz df:120Hz [++++++++++++++++]<[FF][01]DL1NUX-12>APLT00,WIDE1-1:!5014.06N/01059.01E[165/000/A=001097 !wrx![0A] 12:0:id:12 cr:5 len:81 crc:ok lev:-12dB snr:6.9dB nf:-54.3dB txd:491 q:89% afc:-7173Hz df:-572Hz [++++++++++++++++++]<[FF][01]DL1NUX-11>APRS:!5014.07N/01059.02E>077/000/A=001100 Batt=3.67V LoRa 1W Tracker 12:0:id:12 cr:5 len:82 crc:ok lev:-12dB snr:5.5dB nf:-53.1dB txd:491 q:90% afc:-1579Hz df:116Hz [++++++++++++++++++]<[FF][01]DL1NUX-12>APLT00,WIDE1-1:!5014.06N/01059.01E[165/000/A=001076TTGO Attila !w{b![0A]
Empfang von Meshcom und LoRa WAN
Folgende (unbearbeitete) Info stammt direkt von Chris OE5DXL. Wer kann/will hier unterstützen zur Aufarbeitung?
Die genannten py-Dateien liegen bei OE5DXL auf dem Server: http://oe5dxl.hamspirit.at:8025/aprs/py/
#pipe file anlegen wenn nicht schon vorhanden mknod pipe p #aprs zum igate oder aprsmap schicken mit metadaten python3.3 loradec.py & #meshcom4 auf aprs wandeln und zu aprsmap senden, zu aprsis sendens schon andere python3.3 meshdec.py & #aprs und meshcom zugleich empfangen ./lorarx -f u8 -i pipe -v -N -X 0 -b 7 -H -s 12 -r 1000000 -o 300000 -J 127.0.0.1:5100 -g -66 -M 433.775 -w 128 -W 40 -Z 0.05 0.999 & rtl_sdr -f 433.475m -g 48 -p 0 -s 1000000 -b 2000 - | tee pipe | ./lorarx -f u8 -i /dev/stdin -g -66 -v -N -b 8 -H -s 11 -w 64 -r 1000000 -o -300000 -J 192.168.1.45:5200 -Z 0.05 0.999 -J 127.0.0.1:5200 #aprs empfangen und rtl stift auf mitte so dass der mitten-birdy weg ist und die lauten signale auf 433.9 am rand sind #das -W autonotch sollte man weg lassen wenn die aprs frequenz sauber ist rtl_sdr -f 433.400m -g 48 -p 0 -s 1000000 -b 2000 - | ./lorarx -f u8 -i /dev/stdin -g -66 -b 7 -v -N -H -s 12 -r 1000000 -o 375000 -W 50 -J 127.0.0.1:5100 #meshcom4 ampfangen rtl_sdr -f 433.175m -g 48 -p 0 -s 1000000 -b 2000 - | ./lorarx -f u8 -i /dev/stdin -v -N -H -b 8 -s 11 -r 1000000 #lorawan alle modulationen und invers (igates) zugleich auf 867.9 und 868.1mhz empfangen und nur frames mit richtigem crc ausgeben -Q #geht am besten mit vv und bandfilter gegen gsm und 4g sender drunter und drueber ./lorarx -b 7 -f u8 -i pipe -v -N -s -7 -s -8 -s -9 -s -10 -s -11 -s -12 -s 12 -s 11 -s 10 -s 9 -s 8 -s 7 -r 1000000 -o 100000 -W 50 -H -Q rtl_sdr -f 868.0m -s 1000000 -g 48 - | tee pipe | ./lorarx -b 7 -f u8 -i /dev/stdin -v -N -s -7 -s -8 -s -9 -s -10 -s -11 -s -12 -s 12 -s 7 -s 8 -s 9 -s 10 -s 11 -r 1000000 -o -100000 -W 50 -H -Q #wenns geht vorher mit gqrx oder sdr# schaun ob sauberer empfang geht mit den 8 bit rtl-stiften #ansonsten bandfilter oder pegel (-g) absenken, zur not tuts auch autogain (-g weg lassen)