Od śladu na wodospadzie do treści wiadomości

Kto próbował oglądać lokalną sieć mesh przez SDR, zna ten moment: na ekranie pojawia się sygnał, po chwili znika, a poza jego częstotliwością i długością niewiele wiadomo. Czy to wiadomość? Ogłoszenie węzła? Kolejna kopia pakietu przekazana przez przekaźnik? Sam wodospad (wykres widma w czasie) nie odpowie na te pytania. Potrzebny jest jeszcze program, który odzyska dane z transmisji i pokaże je w czytelnej formie.

Właśnie do takich prób przygotowałem RadioMesh IQ. Program łączy odbiornik z dekoderem LoRa, a wyniki zbiera w rozmowie i liście ramek. Moja część to interfejs, konfiguracja wejść, klucze kanałów, zapis i podgląd widma. Dane z modulacji LoRa odzyskuje zewnętrzny LoRa Wideband Decoder. Jego licencja PolyForm Noncommercial 1.0.0 ogranicza wykorzystanie komercyjne; warunki są dołączone do paczki i trzeba je sprawdzić przed takim zastosowaniem.

Jedna wiadomość, kilka dróg

Najciekawszy widok pojawia się wtedy, gdy ten sam pakiet dociera do stanowiska kilka razy. W sieci MeshCore retransmisje mogą przynieść kolejne kopie wiadomości, różniące się zapisaną trasą. Zamiast wypełniać czat powtarzającymi się wpisami, RadioMesh IQ łączy rozpoznane kopie w jedną pozycję. Obok tekstu pokazuje liczbę odbiorów oraz trasy poszczególnych kopii. Oddzielnie wysłane wiadomości o identycznej treści pozostają osobnymi wpisami.

Kopie można ze sobą porównać. Skróty węzłów nie są jednak potwierdzonymi nazwami przekaźników, a brak wpisanej trasy nie dowodzi bezpośredniego odbioru. Program pokazuje odebrane ramki, nie wszystkie zdarzenia w eterze.

Zaszyfrowane i nietekstowe pakiety pozostają w zakładce „Wszystkie ramki”; nie zaśmiecają rozmowy. Dwukrotne kliknięcie w obu widokach pokazuje surowe dane (RAW), a przy zgrupowanej wiadomości także jej kopie. Kolumna „Czas” pokazuje godzinę; pełna data i źródło czasu są w podglądzie.

W UX30 program sprawdza rozmiar i budowę ramki przed próbą odszyfrowania. Odrzuca między innymi ucięte dane, ścieżki wychodzące poza pakiet i niepełne bloki szyfrowane. Błędny kod MAC nie daje zweryfikowanego tekstu. Pakiet o poprawnej strukturze, ale bez pasującego klucza, może nadal pozostać na liście jako zaszyfrowany kandydat.

Mapa odebranych tras i regiony

Mapa sieci Live pozwala przejść od listy ramek do węzłów i zapisanych ścieżek. W zakładce „Wszystkie ramki” wybierz pakiet, a następnie „Wyświetl na mapie” lub „Trasa pakietu”. Można wracać do wcześniejszych ramek i porównywać ich drogi. Małe punkty reprezentują węzły; kliknięcie odsłania szczegóły. Mapa ulic korzysta z OpenStreetMap, a bez internetu dostępna jest mapa offline oraz graf połączeń.

Odcinek na mapie wymaga znanych pozycji obu węzłów i jednoznacznego dopasowania ich skrótów. Program zapamiętuje nazwy, klucze publiczne i pozycje z poprawnie zweryfikowanych ogłoszeń węzłów. Baza zostaje na komputerze po ponownym uruchomieniu. Ścieżkę odczytuje z pakietu, a nie z tekstu wiadomości. Gdy brakuje współrzędnych, kolejność przekaźników można obejrzeć na schemacie bez GPS.

W ramkach i przy odczytanych wiadomościach pojawia się też region (w MeshCore: scope), czyli oznaczenie ograniczające obszar, w którym przekaźniki przekazują pakiet. To informacja z transmisji, a nie ustalona lokalizacja nadawcy. Program sprawdza znane nazwy regionów; jeśli wynik jest nieznany lub niejednoznaczny, pozostawia taki opis wraz z kodem zamiast zgadywać. Zakładka „Usłyszane węzły” zbiera repeatery, czyli przekaźniki, i companiony, czyli węzły użytkowników, z poprawnie zweryfikowanych ogłoszeń ADVERT podczas zwykłego odbioru. Przekazane ogłoszenie nie potwierdza bezpośredniego zasięgu.

Mapa wyróżnia cztery ostatnie odebrane trasy: ostatnią na żółto, poprzednią na niebiesko, dwie wcześniejsze na różowo i zielono. Legenda pozwala wybrać ramkę, a „Odbiór Live” przywraca bieżący ruch.

SDR dostarcza sygnał, komputer odzyskuje dane

Do odbioru MeshCore potrzebne są próbki I/Q: dwie składowe sygnału zachowujące informację o jego amplitudzie i fazie. Takie dane pozwalają komputerowi analizować modulację LoRa. Zwykłe nagranie dźwięku z głośnika po demodulacji FM nie jest ich zamiennikiem. To ważna różnica, bo oba rodzaje danych mogą występować jako wejście audio albo plik WAV.

Odbiór MeshCore sprawdziłem na dwóch odbiornikach: RTL-SDR Blog V4 oraz Malahicie. RTL-SDR V4 przekazywał próbki bezpośrednio przez USB, a jego częstotliwość ustawiał program. Malahit dostarczał stereo I/Q przez wejście audio USB; częstotliwość ustawiałem na samym radiu. W aktualnej wersji beta (v46.1) na liście są oddzielnie V3 i V4 oraz opcja „własne urządzenie” dla odbiorników, które podają I/Q jako systemowe wejście audio stereo. Ta ostatnia opcja nie oznacza automatycznej obsługi sterowników USB każdego SDR: najpierw trzeba uzyskać zgodny strumień próbek.

Dodana obsługa „SDRplay USB” korzysta bezpośrednio z API producenta, bez wirtualnego wejścia audio. Ta implementacja wymaga osobno zainstalowanego SDRplay API 3.15. Wybór odbiornika, anteny i automatycznej regulacji wzmocnienia jest wspólny dla odbioru sieci, skanera KF, ADS-B oraz CW/RTTY/FT8. Sprawdzono ją programowo, także w EXE ze sztuczną biblioteką testową; odbioru na fizycznym RSP jeszcze nie potwierdzono.

Zapisane próbki I/Q pozwalają wrócić do tej samej transmisji po zmianie ustawień lub klucza. Format nagrania musi odpowiadać wybranemu trybowi.

Więcej miejsca na odbiór

W v46.1 beta każdą główną kartę można powiększyć, chowając parametry i narzędzia. Przycisk „Przywróć widok” lub klawisz Escape przywraca układ; przyciski „Start” i „Stop” pozostają dostępne. Najnowsze wiadomości są u góry, a kolory nazw pomagają rozróżniać nadawców. Rozmowa odświeża się partiami, co ogranicza pracę interfejsu przy wielu wpisach. To usprawnienie wyświetlania, nie obietnica odczytania większej liczby słabych sygnałów.

Górny pasek prowadzi do modułów „Sieci / APRS”, „CW / RTTY / FT8”, „Skaner KF” i „Lotnictwo / mapa”. Panel „Odbiornik” zbiera ustawienia radia, a „Narzędzia” pliki, profile i diagnostykę. Można je chować także w osobnych oknach. Historia sesji pozwala wracać do zapisanych ramek i tras, a profile odtwarzają konfigurację po zatrzymaniu odbioru.

Co udało się sprawdzić

W kontrolnym nagraniu MeshCore z programu HDSDR (34,12 s) RadioMesh IQ zdekodował pięć ramek: trzy kopie wiadomości kanałowej ze sprawdzonym kodem uwierzytelniającym MAC oraz dwa ogłoszenia węzłów ADVERT ze zweryfikowanym podpisem. MAC sprawdza integralność wiadomości przy użyciu klucza kanału; nie potwierdza jednak tożsamości konkretnej osoby. Nie każdy wydzielony fragment nagrania dał wynik.

W dodatkowym nasłuchu RTL-SDR Blog V4 z 9 października 2026, przy pojedynczym presecie MeshCore Switzerland (869,618 MHz, BW 62,5 kHz, SF8), wzmocnieniu (gain) 10 dB i progu detekcji 4 dB, w 90 s uzyskałem cztery zweryfikowane pakiety, w tym trzy wiadomości tekstowe. Mimo nazwy nie chodzi o test w Szwajcarii: te same parametry stosuje niemal cała polska sieć MeshCore. W tej próbie kolejka nie pomijała fragmentów. Próby innych wzmocnień odbywały się w kolejnych oknach czasu, więc wynik nie oddziela wpływu wzmocnienia od zmian ruchu i sygnału.

Meshtastic: dopasuj odbiór do swojego węzła

Na RTL-SDR odebrałem wiadomości Meshtastic w ustawieniu MediumFast, na kanale WAWtest. Program rozpoznaje również jawny kanał PLwaw i kanał MediumFast ze wspólnym publicznym kluczem. Klucz PSK to współdzielony klucz do odczytu treści; poprawnie odczytany tekst Meshtastic nie daje takiego potwierdzenia integralności jak MAC w MeshCore.

Dla Warszawy punktem odniesienia jest konfiguracja wiki.868.band. W programie jest preset (gotowy zestaw parametrów odbioru) dla MediumFast w europejskim paśmie EU868. Wybranie go w RadioMesh IQ ustawia program, ale nie zmienia konfiguracji nadającego węzła. Porównaj częstotliwość, szerokość kanału (BW) i współczynnik rozpraszania (SF) z ustawieniami swojego radia. Dopiero gdy te wartości się zgadzają, przyczyny braku ramek warto szukać w samym odbiorze.

Kilka presetów z jednego tunera

Jeśli w okolicy działają różne ustawienia MeshCore i Meshtastic, program może analizować kilka profili z jednego odbiornika RTL-SDR lub SDRplay, z tego samego strumienia I/Q. Program nie przestraja się co chwilę między nimi: szuka różnych modulacji w zarejestrowanym wycinku pasma. To wygodne przy obserwowaniu obu sieci, choć bardziej obciąża komputer niż jeden preset.

Co mieści się w jednym wycinku pasma?

Obsługiwany plan częstotliwości zajmuje zakres 869,400–869,650 MHz i obejmuje kanały o szerokości 62,5, 125 i 250 kHz. Tor RTL przekazuje do analizy 500 tysięcy próbek I/Q na sekundę, zapisywanych w ustawieniach jako 500 kS/s. Częstotliwość środka oraz pełna szerokość kanału muszą mieścić się w przechwyconym sygnale. Wejście I/Q Malahita o szerokości 192 kHz nie obejmie pełnego kanału LoRa Meshtastic MediumFast o szerokości 250 kHz.

APRS, mapa samolotów i emisje krótkofalarskie

RadioMesh IQ v46.1 beta ma też funkcje spoza sieci mesh. Odbiera APRS, czyli krótkie raporty m.in. o położeniu stacji – zarówno w wersji LoRa (lora_aprs), jak i AFSK 1200 z dźwięku po demodulacji FM (aprs_afsk); niczego przy tym nie nadaje ani nie przekazuje do internetowej sieci APRS-IS. Przycisk „Lotnictwo / mapa” otwiera mapę samolotów z danymi ADS-B. Bezpośredni odbiór na 1090 MHz korzysta z RTL-SDR lub obsługiwanego SDRplay przy próbkowaniu 2 MS/s (2 miliony próbek na sekundę); dane można też wczytać z nagrania albo z działającego dekodera (aircraft.json), a także ze źródeł internetowych ADSB.lol, ADSB.fi i OGN po wybraniu obszaru. W tym samym oknie są eksperymentalne tryby identyfikacji radiolatarni NDB i VOR. Osobne okno „CW / RTTY / FT8” odbiera telegrafię Morse’a, dalekopis RTTY i komunikaty FT8; ten ostatni tryb wymaga dokładnego czasu systemowego. Szczegółową obsługę tych trybów opisuje pełny poradnik.

W lotnictwie kliknięcie symbolu lub podpisu samolotu otwiera kartę danych. UX30 pokazuje kod transpondera, czyli squawk, oraz odebrany status awaryjny. Kody 7500, 7600 i 7700 oraz zgłoszone stany awaryjne wyróżniają wiersz i znacznik na czerwono; filtr „Tylko alarmy” ułatwia ich odnalezienie. Po 120 s bez nowego zgłoszenia wpis staje się historyczny. Oznaczenie przedstawia odebrane dane, a nie niezależne potwierdzenie sytuacji samolotu.

RadioMesh IQ v46.1: okno ADS-B z mapą OpenStreetMap i ustawieniami odbiornika RTL-SDR.
Wcześniejszy interfejs v46.1, sprzed oznaczeń alarmowych UX30. Okno lotnictwa z podkładem OpenStreetMap. Na tym zrzucie tabela pozycji jest pusta. Dane mapy: © OpenStreetMap contributors. Zrzut ekranu: RadioMesh IQ.

Zrzut pokazuje interfejs i ustawienia, ale nie potwierdza odczytu APRS, pozycji ADS-B ani emisji krótkofalarskich w eterze.

Skaner KF przeszukuje ustawiony zakres fragmentami, pokazuje widmo i wodospad oraz może zatrzymać się na sygnale. Obsługuje RTL-SDR V4 i dodany tor SDRplay. Odsłuch, ręczny wybór emisji, klikalne znane częstotliwości i zapis własnych wykryć pomagają wrócić do interesującego punktu. Widok „Całe pasmo” zachowuje pomiary i poprzednie obiegi zamiast czyścić historię przy nawrocie skanowania; nie jest jednoczesną obserwacją całego zakresu.

Ograniczenia

RadioMesh IQ wyłącznie odbiera i pokazuje to, co dotarło do stanowiska oraz zostało zdekodowane. Słabe lub nakładające się sygnały mogą zniknąć z wyników. Z listy ramek nie da się więc wywnioskować całego zasięgu sieci ani aktywności wszystkich jej stacji. Widmo pomaga znaleźć sygnał, ale jego skala cyfrowa nie jest pomiarem mocy radiowej w dBm.

Do odczytu zaszyfrowanych wiadomości potrzebne są właściwe klucze. Bez nich ramka będzie widoczna, ale jej tekst pozostanie nieczytelny. Klucze i wyniki są przechowywane lokalnie; zapis można wyłączyć bez zatrzymywania odbioru. Czyszczenie ekranu porządkuje widoki, ale nie usuwa wcześniejszych plików.

Kanału PLwaw nie sprawdziłem osobną próbą radiową. Wejście Malahita (192 kHz) nie obejmuje całego opisanego planu częstotliwości. Przy przeciążeniu dekodera nadal mogą wystąpić pominięcia. Kolejka mieści do 64 oczekujących fragmentów i najwyżej 128 MiB próbek; jej zapełnienie zgłasza licznik. Większy bufor i sprawniejsze wyświetlanie nie zastępują wydajności samego dekodera. Fragment to porcja sygnału, nie odebrana ramka.

„Stan odbiornika” pokazuje poziom próbek, przerwy i kolejkę dekodera, a w UX30 także czas CPU, czyli pracy procesora, zużyty na obróbkę fragmentu LoRa. Pomiar obejmuje proces dekodera podczas pracy, bez interfejsu i przerw między transmisjami. Indeksowanie kluczy przyspieszyło syntetyczną próbę odszyfrowywania, ale różnica dla całej kontrolnej próbki I/Q była mała. Wyniki nie potwierdzają zmniejszenia obciążenia całego nasłuchu o połowę.

Od czego zacząć

Pierwszą próbę przeprowadź z własnym węzłem i pojedynczym presetem. Zatrzymaj odbiór przed zmianą ustawień, wybierz źródło, zastosuj preset i porównaj parametry z nadajnikiem. Po kliknięciu „Start” wyślij krótką, rozpoznawalną wiadomość. Sprawdzaj liczbę ramek, a nie sam numer fragmentu. Dla RTL program zaczyna od wzmocnienia (gain) 10 dB i progu ponad szum 4 dB, sprawdzonych na moim stanowisku. Dopasuj je do swoich warunków; większe wzmocnienie może również przesterować wejście. Wartość 0 oznacza regulację automatyczną, nie brak wzmocnienia.

Jeśli odbiór nie działa, w „Ustawieniach zaawansowanych” można włączyć „Diagnostykę RTL” i wybrać zapis przez 30 s, 1 min lub 5 min. Wariant 30 s zachowuje próbki przed i po filtracji, dłuższe warianty zapisują próbki po filtracji. Przed startem sprawdź miejsce na dysku: dłuższy zapis może zajmować gigabajty. Taki zapis pozwala później sprawdzić ten sam sygnał bez powtarzania transmisji. Dziennik oraz raporty błędów pomagają odróżnić problem wejścia USB od problemu dekodowania.

Dostępność i pełny poradnik

Opisana wersja aplikacji to RadioMesh IQ v46.1 beta UX31 z 28 października 2026. Pakiet dla Windows zawiera pojedynczy plik RadioMesh-IQ.exe i instrukcję INSTRUKCJA.txt. Biblioteki są wbudowane w EXE; Python ani dodatkowe foldery programu nie są potrzebne. Rozpakowanie bibliotek przy uruchomieniu może potrwać kilka sekund. Linux i macOS mają osobne paczki źródłowe ze skryptami uruchomienia i instrukcjami. Nie są to gotowe natywne binaria i nie przeszły testów na docelowych systemach. Lokalnie trzy archiwa znajdują się w jednym folderze wydania. Program będzie można pobrać ze strony RadioMesh IQ. Adres strony i odnośnik do pobrania uzupełnię po jej udostępnieniu.

Pełny poradnik UX31 opisuje uruchomienie SDRplay, skaner KF, alarmy ADS-B i metryki CPU oraz pozostałe funkcje v46.1: APRS, lotnictwo, CW, RTTY, FT8, ich widmo i wodospad oraz Bias-Tee, czyli zasilanie aktywnej anteny z odbiornika RTL-SDR przez przewód antenowy. Zawiera szczegółowe kroki uruchomienia tych trybów i opis zakresu wykonanych testów.

Dla UX30 przeszło 99 testów jednostkowych i osiem dodatkowych zestawów regresji. Gotowy EXE sprawdzono na stałej próbce I/Q, syntetycznych ramkach ADS-B i atrapach urządzeń. To testy programowe; wcześniejsze próby radiowe MeshCore na RTL-SDR V4 i Malahicie pozostają osobnymi wynikami.

RadioMesh IQ v46.1 jest wersją beta. Chętnie przyjmę uwagi z testów i propozycje dalszych zmian. Przy zgłoszeniu problemu podaj system, model odbiornika, preset i ustawienia oraz opisz, co się wydarzyło. Nie dołączaj prywatnych kluczy ani cudzych rozmów.

Nowe zakresy skanera UX31

UX31 rozszerza skaner o Aircraft VHF i UHF, pasma 2 m i 70 cm oraz PMR446. Kliknięcie znanej częstotliwości ustawia strojenie i przypisany tryb, który można zmienić ręcznie. Szczegóły obsługi i prób opisuje pełny poradnik.

28 października 2026 sprawdzono podłączony RTL-SDR V4 w 15 punktach nowych zakresów. W każdym odebrano po 2 miliony próbek, łącznie 30 milionów, przy próbkowaniu 1 MS/s i gain 28 dB. Tor odbioru oraz demodulacja AM/NFM zwróciły poprawne wyniki liczbowe. W interfejsie wykonano pełne obiegi 2 m i PMR446, częściowe Aircraft VHF i 70 cm oraz punktową próbę Aircraft UHF. Nie potwierdzono zrozumiałych rozmów ani tożsamości widocznych pików.

Widmo i wodospad PMR446 w pełnym widoku skanera UX31
Pełny widok skanera UX31 podczas próby RTL-SDR V4. Kadr: RadioMesh IQ / materiały własne.

Aktualizacja 28.10.2026: opis uzupełniono do v46.1 beta UX31 o nową nawigację, obsługę SDRplay USB, zmiany w obsłudze ramek MeshCore i danych ADS-B oraz nowe zakresy skanera z wynikiem próby RTL-SDR V4 i aktualnym zrzutem ekranu. Zachowano wcześniejsze wyniki testów.