Strona główna  /  Ciekawostki  /  IC‑9700 w przeglądarce

Stacja · oprogramowanie · relacja z dwóch wieczorów

Claude Code i programowanie
IC‑9700 i FT8

8 października wieczorem zapytałem: „a to radio IC‑9700 to moglibyśmy oprogramować, żebym miał aplikację w przeglądarce?”. Niecałe dwie godziny później miałem panel z analogowymi miernikami, gruszką pod spacją, kanałami z pamięci radia, FT8 z przyciskiem AUTOMAT i historią łączności z QRZ.com. Wszystko napisał Claude Code, asystent AI działający w terminalu, a ja mówiłem, czego chcę, i sprawdzałem przy radiu. Następnego dnia panel sam zrobił dwie łączności FT8 na 2 m. Pokazuję, jak to działa, jak powstawało i co poszło nie tak.

IC‑9700 po LAN bez wfview i WSJT‑X Python na domowym serwerze dźwięk 16 kHz w obie strony FT8 · ft8_lib Claude Code
Kolaż z panelu IC-9700: wyświetlacz z częstotliwością 145,775 MHz i nazwą kanału SR5U Ursus, analogowy S-metr i krzyżowy miernik mocy i SWR
pierwszy wieczór1,5 h

Od pomysłu do AUTOMATU

8.10 od 20:59 do 22:31: mierniki, sterowanie, nadawanie z laptopa, kanały, FT8 i historia z QRZ. Drugi wieczór poszedł na poprawki i panoramę pasma.

odświeżanie~20 / s

Naciskam gruszkę i od razu widzę

Usługa pyta radio o mierniki i ustawienia bez przerwy i wypycha każdy nowy odczyt do przeglądarki od razu, bez czekania na kolejną porcję.

kod~2850

wierszy, ani jednego mojego

1357 wierszy Pythona na serwerze, 1337 wierszy strony i 158 wierszy panoramy. Serwer używa tylko biblioteki standardowej Pythona. Do FT8 dochodzą numpy i dwa małe programy z ft8_lib.

Jak przeglądarka rozmawia z radiem

Jedna usługa zamiast trzech programów

Do pierwszej łączności FT8 potrzebowałem na Macu wfview, dwóch wirtualnych kart dźwiękowych i WSJT‑X (opisałem to w artykule o FT8 na 2 m). Teraz między radiem a przeglądarką jest jedna usługa na moim domowym serwerze, w tej samej sieci co IC‑9700.

Droga sygnałów panelu IC-9700: radio, usługa na domowym serwerze, przeglądarka, QRZ.com i Claude Code IC-9700 w domowej sieci LAN rozmawia protokołem Icoma po UDP z usługą panelu na serwerze w tej samej sieci: sterowanie, rozkazy CI-V i dźwięk 16 kHz. Usługa wysyła do przeglądarki stan radia około 20 razy na sekundę, dźwięk w obie strony i widmo panoramy, a przyjmuje przyciski i PTT. Po łączności FT8 wysyła wpis do dziennika QRZ.com. Claude Code na Macu łączy się z serwerem przez SSH, pisze kod i restartuje usługę. W domu · ta sama sieć LAN Laptop albo telefon · przez internet Icom IC-9700 gniazdo LAN analizator widma jedna sesja sieciowa 2 m · 70 cm UDPsterowanieCI-VdźwiękprotokółIcoma Usługa panelu domowy serwer · Python sesja z radiem jak wfview CI-V: odczyt ~20/s dźwięk 16 kHz RX i TX widmo 27 00 → panorama PTT z bezpiecznikami FT8: ft8_lib + AUTOMAT log ADIF łączy się z radiem tylko, gdy ktoś ogląda panel Przeglądarka RADIO · FT8 · HISTORIA mierniki z bezwładnością wodospad FT8 (FFT w przeglądarce) głośnik i mikrofon laptopa spacja = PTT hasło · adres niepubliczny QRZ.com Logbook API: wpis po każdym QSO i dziennik do zakładki HISTORIA Claude Code (terminal na Macu) SSH na serwer · pisze kod usługi i strony · kopia przed zmianą restart w okresie odbioru FT8 · czyta dziennik usługi stan PTT dźwięk QSO SSH stan radia ~20/s (strumień SSE) przyciski i PTT (HTTPS) dźwięk (WebSocket) Claude Code Radio przez sieć widzi tylko usługa. Przeglądarka nie łączy się z radiem bezpośrednio.

← przesuń w bok, żeby zobaczyć całość →

Droga sygnałów. IC‑9700 ma gniazdo LAN i rozmawia własnym protokołem Icoma po UDP. Usługa loguje się do radia tak jak wfview, odczytuje i ustawia je rozkazami CI‑V i odbiera dźwięk. Przeglądarka dostaje stan radia strumieniem, a dźwięk osobnym połączeniem w obie strony. Panel jest zamknięty hasłem i nie podaję jego adresu.

Radio przyjmuje jednego gościa

IC‑9700 po sieci obsługuje jedną sesję naraz. Dlatego usługa łączy się z radiem tylko wtedy, gdy ktoś ma otwarty panel, a 20 s po zamknięciu ostatniej karty sama się rozłącza. Jest też przycisk Zwolnij radio, gdy chcę wrócić do wfview albo WSJT‑X na Macu.

Protokół podejrzany w wfview

Sieciowego protokołu Icoma nie ma w instrukcji radia. Rozpracowali go autorzy otwartego programu wfview i jest w ich kodzie źródłowym. Claude Code napisał własną implementację w Pythonie na tej podstawie: logowanie, pakiety z rozkazami CI‑V, strumień dźwięku i podtrzymywanie połączenia. Dźwięk w obie strony to 16‑bitowe próbki mono, 16 000 na sekundę.

Rozkazy CI‑V

To ten sam język co przez kabel USB, tylko zapakowany w pakiety UDP. Każdy odczyt to krótkie pytanie i odpowiedź. Usługa zadaje jedno pytanie naraz i czeka na odpowiedź najwyżej 0,25 s. Część zmian radio zgłasza samo, np. gdy kręcę gałką strojenia.

RozkazCo panel czyta
03 · 04częstotliwość, emisja i filtr
1C 00czy radio nadaje (także z gruszki)
15 02S‑metr
15 11 · 12 · 13moc wyjściowa, SWR, ALC
15 15 · 16napięcie i prąd
14 0A · 03 · 01 · 02moc, blokada szumów, głośność, wzmocnienie w.cz.
16 02 · 11przedwzmacniacz, tłumik
0F · 0C · 1B 00duplex, przesunięcie, ton CTCSS
1A 00kanały pamięci z nazwami (w tle, 50 kanałów w kilka sekund)
1A 05 0116menu DATA MOD: skąd modulacja przy emisjach cyfrowych
27 00widmo do panoramy

Przy odbiorze usługa w każdym obiegu pyta o nadawanie, S‑metr i częstotliwość, a przy nadawaniu o moc, SWR i ALC. Resztę ustawień czyta na zmianę, po jednym na obieg.

Zakładka RADIO · prawdziwy zrzut

Wszystko, co pokazuje wyświetlacz radia

Zrzut z 10 października, 10:40: radio stoi na przemienniku SR5U Ursus, na kanale 2 z pamięci. Najedź na numer albo na opis, a zobaczysz, o którą część panelu chodzi.

Zakładka RADIO panelu IC-9700: wyświetlacz z częstotliwością 145,775 MHz i nazwą kanału SR5U Ursus, bloki sterowania, kafle ustawień, trzy mierniki i panorama z wodospadem
  1. Częstotliwość odbioru i nazwa kanału, odczytana z pamięci radia. Klik w cyfry pozwala wpisać nową.
  2. Stan radia jak na wyświetlaczu: pasmo, emisja i filtr, duplex z przesunięciem, częstotliwość nadawania, ton CTCSS, RX albo TX.
  3. Strojenie krokami od 100 Hz do 1 MHz, strzałki trzymane powtarzają krok, „Wpisz MHz” do podania częstotliwości.
  4. Kanał pamięci: pasmo 2 m, 70 cm albo VFO, lista kanałów z nazwami i ◀ ▶ po kanałach 1–99.
  5. Przesunięcie: simpleks, DUP− albo DUP+ i wartość przesunięcia.
  6. Ton CTCSS: wyłączony, TONE (nadawanie) albo TSQL (też blokada odbioru) i wybór tonu.
  7. PTT: „Słuchaj” i „Mikrofon” to dźwięk przez laptopa, „Odblokuj PTT” uzbraja nadawanie. Okrągły przycisk albo spacja = gruszka.
  8. Kafle ustawień: moc, blokada szumów i głośnik radia z suwakami, wzmocnienie w.cz., przełącznik przedwzmacniacza, tłumik, napięcie i prąd.
  9. Miernik krzyżowy: moc padająca (FWD) i odbita (REF), a w miejscu przecięcia wskazówek odczyt SWR.
  10. S‑metr przy odbiorze i skala mocy wyjściowej (Po) przy nadawaniu.
  11. ALC: czerwona strefa zaczyna się tam, gdzie wfview stawia granicę dla IC‑9700.
  12. Panorama i wodospad z analizatora widma radia, z nazwami kanałów nad ich częstotliwościami.
Analogowe mierniki

Wskazówki z bezwładnością

Od tego zaczęła się cała zabawa: chciałem „fajną analogową miarkę mocy, SWR”. Są trzy: krzyżowy miernik mocy padającej i odbitej z liniami SWR, S‑metr połączony ze skalą mocy oraz ALC.

Trzy analogowe mierniki w stylu tarcz z kremowym tłem: krzyżowy miernik mocy padającej i odbitej z liniami SWR, S-metr ze skalą mocy oraz ALC
Miernik krzyżowy, S‑metr i ALC w czasie odbioru. Na mierniku krzyżowym SWR odczytuje się z punktu, w którym przecinają się wskazówki mocy padającej (FWD) i odbitej (REF).

Surowe liczby z radia

IC‑9700 nie podaje watów ani dB, tylko liczbę od 0 do 255 na każdy miernik. Przeliczenie wziąłem z pliku opisu radia IC‑9700.rig z wfview. W tabeli obok są wartości z tego pliku, a panel interpoluje między nimi.

Moc w watach zależy od pasma

Radio podaje moc w procentach maksymalnej. Panel mnoży ją przez maksimum IC‑9700 na danym paśmie: 100 W na 2 m, 75 W na 70 cm i 10 W na 23 cm.

Wskazówka, nie słupek

Każda igła to mały model sprężyny z tłumieniem. Gdy przychodzi nowy odczyt, igła dochodzi do niego z rozpędem jak w prawdziwym mierniku, zamiast skakać. Przy szybkich miernikach sprężyna jest sztywna, więc wskazówka nie wlecze się za sygnałem.

MiernikSurowoZnaczy
S‑metr0 · 120 · 241S0 · S9 · S9+64 dB
Moc (Po)21 · 105 · 213 · 2555% · 30% · 100% · 120%
SWR0 · 48 · 80 · 120 · 2401,0 · 1,5 · 2 · 3 · 6
ALC0 · 120 · 2550 · granica strefy · 2× granica
Napięcie13 · 185 · 24110 V · 13,8 V · 16 V
Prąd121 · 24110 A · 20 A

Źródło: wfview, plik rigs/IC-9700.rig, sekcja Meters. Liczby w panelu sprawdziłem z tym plikiem 10.10.2026, zgadzają się co do jednej.

Gruszka w przeglądarce

Nadawanie z laptopa z bezpiecznikami

Drugą prośbą było „dorób mi sterowanie częstotliwością i możliwość naciśnięcia gruszki”. Pierwsze nadawanie z przeglądarki poszło 8.10 o 21:32, kilka minut po tej prośbie. Nadajnik sterowany przez sieć musi się sam wyłączyć, gdy coś pójdzie nie tak, więc bezpieczników jest kilka.

PTT

Pięć bezpieczników

  • PTT działa dopiero po przestawieniu przełącznika Odblokuj PTT, a ten sam wraca na „zablokowane” po 2 minutach;
  • nadaje się tylko przy trzymanym przycisku albo spacji; przeglądarka co 250 ms potwierdza, że przycisk dalej jest wciśnięty;
  • gdy potwierdzenie nie przyjdzie przez 0,7 s, serwer sam kończy nadawanie, np. po zerwanym Wi‑Fi albo zamkniętej karcie;
  • jedno nadawanie trwa najwyżej 180 s, niezależnie od ustawień samego radia;
  • polecenia przyjmowane są tylko ze strony panelu, a strojenie tylko w pasmach 2 m i 70 cm. Pasmo 23 cm wyłączyłem na swoją prośbę.
Dźwięk

Mówię do mikrofonu laptopa

  • Słuchaj puszcza dźwięk z radia w głośniku laptopa; przeglądarka trzyma bufor 80–450 ms, żeby nie trzeszczało;
  • Mikrofon wysyła głos do serwera, ale do radia trafia tylko przy wciśniętym PTT;
  • w FM radio bierze modulację z gruszki, nie z sieci, dlatego na czas PTT usługa przełącza je na FM‑D, czyli FM z modulacją z sieci, a po puszczeniu przycisku wraca na zwykłe FM;
  • Safari nie wysyła hasła przy połączeniu dźwięku, więc strona najpierw pobiera klucz ważny 2 minuty.
Pasek sterowania panelu: kroki strojenia, kanał pamięci 2 SR5U Ursus, DUP minus 0,600 MHz, ton 127,3 Hz i blok PTT z przyciskami Słuchaj, Mikrofon i Odblokuj PTT
Strojenie, kanały, duplex, ton i PTT. Kroki strojenia od 100 Hz do 1 MHz albo wpisanie częstotliwości. Kanały pamięci to te zapisane w radiu, z nazwami. Panel czyta je z IC‑9700 w tle po każdym połączeniu, a ◀ ▶ przechodzi po kanałach 1–99.
Panorama i wodospad

Widać, kto nadaje, zanim otworzy się blokada

Drugiego wieczoru zapytałem, co jeszcze można dodać. Na pierwszym miejscu listy była panorama, a ja odpisałem: „zrób wodospad, to ważne”. Po kilkunastu minutach była na dole zakładki RADIO.

Panorama pasma 145,275–146,275 MHz: widmo na górze, wodospad pod nim, nazwy kanałów nad ich częstotliwościami i żółta linia częstotliwości odbioru
±500 kHz wokół 145,775 MHz, 10.10.2026. U góry widmo, pod nim wodospad, nad nim nazwy kanałów z pamięci radia w miejscach ich częstotliwości. Żółta linia to częstotliwość odbioru. Kliknięcie w sygnał stroi radio, a kółko myszy zmienia częstotliwość o jeden krok.
Skąd obraz

Analizator jest w radiu

  • IC‑9700 ma wbudowany analizator widma i przez sieć wysyła go rozkazem CI‑V 27 00, jak dla wfview;
  • jedna ramka to 475 punktów, każdy w skali 0–160, do 25 ramek na sekundę;
  • radio wysyła widmo tylko wtedy, gdy ktoś ogląda panoramę, więc nie zapycha sieci na darmo.
Sterowanie

Przyciski jak na radiu

  • tryb ŚRODEK (wokół częstotliwości) albo STAŁA (od krawędzi do krawędzi);
  • szerokość od ±2,5 kHz do ±500 kHz, prędkość FAST, MID, SLOW i poziom odniesienia REF;
  • kontrast wodospadu liczony od mediany szumu, więc słaby sygnał widać bez ręcznego kręcenia.
Zakładka FT8

FT8 bez WSJT‑X i przycisk AUTOMAT

Po kanałach zapytałem, czy da się zrobić zakładki RADIO / FT8 i obsługę FT8. Dwadzieścia minut później poprosiłem o „przycisk 100% automat, wszystko robi sam”, a po dwóch kolejnych minutach przycisk był na stronie.

Zakładka FT8 panelu: przyciski Start FT8 i AUTOMAT, zegar UTC z paskiem okresów, mały miernik SWR, pusty wodospad, lista aktywności z wywołaniami CQ i log z łącznościami SP5XTF i SP5CWC
Zakładka FT8, 10.10.2026, 08:40 UTC. FT8 jest teraz wyłączone, więc wodospad stoi pusty. Na liście zostały wpisy z 9 października, a w logu po prawej obie łączności z panelu z oznaczeniem „wysłane” do QRZ.

Co robi Start FT8

Zapamiętuje, gdzie stało radio: kanał, emisję, moc, blokadę szumów i DATA MOD. Potem przestawia je na VFO, simpleks, 144,174 MHz w USB‑D, ustawia modulację z sieci i blokadę szumów na zero. Stop FT8 przywraca wszystko z powrotem. Zapamiętane ustawienia leżą w pliku, więc przeżywają nawet restart usługi.

Odbiór

Serwer zbiera dźwięk z radia i 14,1 s po początku każdego okresu przekazuje go dekoderowi z biblioteki ft8_lib (Kārlis Goba, licencja MIT). Wodospad na górze zakładki liczy już przeglądarka, z tego samego dźwięku. Dwuklik w linię na liście to odpowiedź tej stacji.

Nadawanie

Tony wiadomości daje ft8_lib, a sam sygnał (GFSK) usługa liczy w numpy od razu w 16 kHz, w jakich przyjmuje go radio. Nadajnik włącza się 0,08 s po początku okresu, a dźwięk idzie od 0,35 s, bo radio buforuje go ok. 150 ms. W eterze sygnał zaczyna się więc tak jak z WSJT‑X, pół sekundy po początku okresu.

Zasady AUTOMATU

  • sam robi Start FT8 i woła CQ co drugi okres;
  • najpierw odpowiada stacjom, które wołają mnie;
  • gdy nikt nie woła, odpowiada na najsilniejsze zwykłe „CQ znak lokator”;
  • pomija CQ DX, CQ EU, CQ POTA, znaki z ukośnikiem i stacje, które już mam w logu na tym paśmie;
  • po 5 nieudanych próbach odpuszcza stację na 10 minut;
  • wyłącza się po 60 minutach bez łączności, po Stop albo gdy zamknę panel.

Po łączności

QSO trafia do logu ADIF na serwerze i od razu do mojego dziennika na QRZ.com przez jego API. Przy wpisie w logu pojawia się znaczek: czeka, wysłane albo błąd.

Działa tylko przy otwartym panelu

Bez otwartego panelu usługa nie trzyma sesji z radiem, więc FT8 nie nadaje. Gdy zamknę kartę, AUTOMAT gaśnie, a bez łączności wyłącza się sam po godzinie.

9.10.2026, UTCStacjaRaporty (wysł. / odebr.)Co się działo
15:118 stacji do 177 kmod +11 do −16 dBPSK Reporter: nasze CQ słyszą SP5XMU, SP5MXG, SP5QAT, SP5QWB, SQ5TF, SP7NHS, SP7EXY i SP4FEU. Panel nie dekoduje nikogo, a w promieniu 300 km nikt nie nadaje FT8.
15:17——Włączony przedwzmacniacz. Na 2 m był wyłączony, bo IC‑9700 pamięta go osobno dla każdego pasma. Szum na S‑metrze rośnie z 0 do 33 (surowo).
18:02SP5CWC · KO02+11 / +26Pierwsza łączność zrobiona przez panel: od 18:02:14 do 18:02:58 UTC, czyli w 44 s.
18:03SP5XTF · KO02+14 / +04Druga, od 18:03:44 do 18:04:58 UTC. Obie od razu w QRZ i obie już potwierdzone.

AUTOMAT był włączony od 15:17 UTC. Częstotliwość w logu to 144,1755 MHz: 144,174 MHz w USB plus ton 1500 Hz.

Zakładka HISTORIA

Dziennik z QRZ z potwierdzeniami

Ostatnia prośba pierwszego wieczoru: „zrób też historię połączeń i od razu wskaźnik, czy wysłano do QRZ”. Zakładka łączy mój dziennik z QRZ.com z logiem panelu, więc widać każdą łączność, też te zrobione z gruszki na przemiennikach.

Góra zakładki HISTORIA: liczniki 44 QSO i 26 potwierdzonych, filtry i dwie łączności FT8 z 9 października z SP5XTF i SP5CWC, oznaczone w QRZ i potwierdzone
Góra zakładki HISTORIA, 10.10.2026. 44 łączności, 26 potwierdzonych, 44 w QRZ, nic nie czeka. Na górze dwie łączności FT8 z panelu z 9 października. Liczniki, filtr FT8 / FM, szukanie znaku i przycisk odświeżenia z QRZ.
Kolumna QRZ

Czy wpis dotarł

  • w QRZ: łączność jest w dzienniku QRZ.com;
  • wysłane, czeka, błąd: stan wysyłki z panelu; przy błędzie jest przycisk „Ponów”;
  • dziennik z QRZ panel trzyma 5 minut, a po każdej wysyłce pobiera go od nowa.
Kolumna potwierdzenie

Czy druga strona potwierdziła

  • potwierdzone: druga stacja ma tę łączność u siebie i QRZ ją dopasował;
  • prośba wysłana: QRZ poprosił drugą stronę o potwierdzenie;
  • log panelu i wpis z QRZ łączą się w jeden wiersz, gdy zgadza się znak, pasmo i czas w granicach 30 minut.
Jak powstawał

Moje prośby i co z nich wyszło

Nie było projektu ani listy funkcji. Pisałem do Claude Code po polsku, tak jak do kolegi, a on dopisywał kod, wgrywał go na serwer i sprawdzał. Godziny czasu polskiego, z zapisu rozmowy i dziennika usługi.

Czwartek, 8 października

  1. Pytam, czy IC‑9700 dałoby się oprogramować, żebym miał aplikację w przeglądarce. Godzinę wcześniej próbowaliśmy FT8 przez WSJT‑X: 6 lokalnych stacji w dekodach, ale żadnej łączności.
  2. Decyzja: osobna podstrona na moim serwerze, a na początek „fajna analogowa miarka mocy, SWR”.
  3. Pierwsza wersja była pokazem FT8, a mi chodziło o co innego: ma pokazywać aktualne ustawienia radia, a mierniki mają być mniejsze, bo się nie mieszczą.
  4. Panel na żywo: wyświetlacz, kafle ustawień, trzy mierniki. Wszystko mieści się na ekranie 1280 × 720.
  5. Proszę o strojenie i gruszkę.
  6. Pierwsze nadawanie z przeglądarki, potem dźwięk w obie strony i mikrofon laptopa.
  7. Kanały pamięci: przyciski ◀ ▶ i wybór pasma. Usługa czyta kanały z radia razem z nazwami.
  8. Zakładki RADIO / FT8 i obsługa FT8 bez WSJT‑X.
  9. „Przycisk 100% automat, wszystko robi sam”. Dwie minuty później AUTOMAT jest na stronie.
  10. Zrzut ekranu: FT8 nadaje z mocą 0 W. Przyczyna to menu DATA MOD ustawione na ACC. O 22:16 radio daje już moc.
  11. Historia łączności ze znaczkiem, czy wpis poszedł do QRZ. O 22:23 zakładka HISTORIA jest gotowa.
  12. Tylko 16 W przy FT8. Moc 20% została po FM, więc Start FT8 zapamiętuje teraz moc, a Stop ją przywraca.
  13. „Na dzisiaj koniec, wyłącz radio”. Stop FT8 przywrócił kanał SR5UR, a radio wyłączyło się rozkazem przez sieć.

Piątek, 9 października

  1. „Nikogo nie mogę w FT8 zdekodować”. Nasze CQ słyszy 8 stacji, ale w 300 km nikt nie nadaje, a przedwzmacniacz na 2 m jest wyłączony.
  2. Przedwzmacniacz włączony i przełącznik w dwóch miejscach panelu.
  3. Cztery zgłoszenia z Safari w 7 minut: lista kanałów się nie rozwija, po PTT nic nie działa, spacja przewija stronę, blok PTT rośnie.
  4. AUTOMAT robi pierwszą łączność z SP5CWC, a minutę później z SP5XTF. Obie od razu w QRZ.
  5. „Znowu FT8 nie nadaje, a wszystko włączone”. Dwa błędy: licznik pakietów po 65 535 i nieaktualne DATA MOD. Poprawione o 20:13.
  6. Przycisk Stop nie działa: Safari po restarcie usługi przestało odbierać stan. Strona łączy się teraz sama od nowa.
  7. „Zrób wodospad, to ważne”. Po kilkunastu minutach jest panorama, a na moją prośbę ląduje na samym dole.
  8. Tylko 2 m i 70 cm, „23 cm nie włączaj mi na radiu”.
  9. „Klikam AUTOMAT i nie działa”. Safari gubiło kliknięcia. O 20:45 poprawione.
moja prośbaco zrobił Claude Codewpadka i poprawka
Asystent AI przy radiu

Jak pracował Claude Code

Claude Code działał w terminalu na moim Macu i łączył się z serwerem przez SSH. Obok fragment z prawdziwej sesji: zgłosiłem zrzutem ekranu, że FT8 nadaje z mocą 0 W, a 20 minut później, że jest tylko 16 W.

Podział ról

Pomysł, decyzje i testy przy radiu były moje. Operatorem z licencją jestem ja i to ja odpowiadam za każde nadawanie, również to z AUTOMATU. Claude Code napisał cały kod usługi i strony, wgrywał go na serwer i sprawdzał, czy działa.

Jak sprawdzał

  • przed zmianą ustawienia w radiu czytał je, a po zmianie odczytywał jeszcze raz, żeby potwierdzić;
  • AUTOMAT najpierw przećwiczył na wymyślonych dekodach: cisza, same CQ kierunkowe, dwa zwykłe CQ, a z nich wybrał silniejsze;
  • układ strony mierzył w przeglądarce testowej w kilku rozdzielczościach, np. czy ALC nie wychodzi poza ramkę;
  • usługę restartował w okresie odbioru FT8, żeby nie przerwać nadawania, a przed każdą zmianą robił kopię plików;
  • uczciwie pisał, czego nie sprawdził. Najczęściej było to „w Safari tego nie sprawdzałem”, bo miał tylko Chrome.

Czego nie zrobi

Nie widzi radia ani anteny i nie słyszy pasma. Błędy w Safari znajdowałem ja, klikając, a on szukał przyczyny w kodzie i logach. O tym, że na 2 m prawie nikt nie nadaje FT8, powiedział mu dopiero PSK Reporter.

claude · terminal · 8.10.2026, 22:13–22:31
# 22:12, ja: „tylko dlaczego nadawanie jest 0?” (+ zrzut ekranu)
odczytaj z radia menu źródeł modulacji (1A 05 0110–0116)
0114 LAN MOD Level: 0128 -> 50%
0115 DATA OFF MOD : 02 MIC,ACC
0116 DATA MOD     : 01 ACC
radio: 144174000 USB data True
# FT8 idzie w USB-D, a modulacja danych ma przyjść z gniazda ACC, nie z sieci
Start FT8 przełącza DATA MOD na LAN, Stop przywraca poprzednie
przed: DATA MOD 01 | moc 51 144174000 USB True
po starcie: DATA MOD 05 USB True
22:15:58 CI-V zapis: 1A05011605
22:16:15 FT8 TX: CQ SQ5CBA KO02
odczytów w TX: 48 | max Po surowe 70 = 16% | ALC surowe 80 | SWR surowe 17
# 22:28, ja: „a dlaczego mam tylko 16W skoro mam moc ustawioną na 100”
odczytaj ustawioną moc i zmierz Po przy następnym nadawaniu FT8
ustawiona moc (14 0A): surowe 51 = 20%
w TX (38 odczytów): Po surowe mediana 70 (= 16%)
ustaw moc 100% i zmierz następne nadawanie
ustawiona moc teraz: surowe 255 = 100%
w TX (155 odczytów): Po mediana 213 (= 100 W) | ALC 111/120 | SWR surowe 32
Start FT8 zapamiętuje też moc; restart usługi między okresami, AUTOMAT z powrotem
zapamietane: {'f': 439300000, 'tryb_bazowy': 'FM', 'dup': 'DUP−', 'sql': 67,
  'kanal': {'nazwa': 'SR5UR Ursus'}, 'data_mod': '01', 'moc': 51}
# 22:31, ja: „na dzisiaj koniec wyłącz radio”
Stop FT8 i sprawdź, czy radio wróciło do ustawień sprzed FT8
po Stop FT8: 439300000 FM DUP− 7600000 TONE 127.3 | moc 51 sql 67 | DATA MOD 01 | kanał ['SR5UR Ursus'] | TX False

W terminalu są opisy poleceń, które Claude Code wydawał, i ich prawdziwe wyniki. Długie skrypty pominąłem. Komentarze z „#” są moje.

Na czym się potknęliśmy

Dziesięć pułapek z dwóch wieczorów

Mniej więcej połowa dotyczyła radia, połowa przeglądarki. Każdą zgłaszałem jednym zdaniem w stylu „klikam AUTOMAT i nie działa”, a Claude Code szukał przyczyny w logach usługi i w kodzie.

  1. FT8 nadaje z mocą 0 W

    Radio przechodziło na nadawanie, a mocy nie było. W menu DATA MOD (źródło modulacji dla emisji cyfrowych) stało ACC zamiast LAN, więc dźwięk z sieci nie trafiał do modulatora.

    → Start FT8 zawsze ustawia DATA MOD = LAN, a Stop przywraca poprzednie
  2. Moc z FM przechodzi do FT8

    Na przemienniku mam 20% mocy i FT8 tej mocy nie zmieniało. Wyszło 16 W, a w terminalu potem 100 W przy ALC 111 ze 120.

    → Start FT8 zapamiętuje moc, a Stop ją przywraca
  3. Dekoder milczy

    IC‑9700 pamięta przedwzmacniacz osobno dla każdego pasma: na 70 cm był włączony, a na 2 m nie. Do tego w okolicy prawie nikt nie nadaje FT8, więc nie było czego dekodować.

    → przełącznik przedwzmacniacza w zakładkach RADIO i FT8
  4. Sesja pada po kilku godzinach

    Numer pakietu CI‑V ma 16 bitów. Po 65 535 pakietach program nie umiał zapisać kolejnego numeru i zrywał sesję, a panel dalej pokazywał „połączono” ze starym stanem.

    → numer liczony od zera po 65 535
  5. Szum zamiast dźwięku

    Próbki dźwięku z radia mają bajty w kolejności little‑endian. Odczytane odwrotnie dają czysty szum.

    → sprawdzenie obu kolejności na prawdziwym sygnale
  6. Lista kanałów się nie rozwija

    Panel odświeża się ok. 20 razy na sekundę i za każdym razem ustawiał wybraną pozycję listy. Safari zamykało przez to rozwiniętą listę.

    → po kliknięciu w listę panel nie rusza jej przez 10 s
  7. Po PTT cała strona martwa

    Przycisk PTT „przytrzymywał” mysz na sobie i Safari nie zawsze tę blokadę zdejmowało. Każde kolejne kliknięcie trafiało w PTT.

    → nadawanie kończy puszczenie myszy w dowolnym miejscu strony
  8. Safari gubi kliknięcia

    Napis na przycisku AUTOMAT był nadpisywany 20 razy na sekundę tym samym tekstem. WebKit traktował go jak nowy element i kasował kliknięcie, gdy podmiana wypadła między wciśnięciem a puszczeniem myszy.

    → identyczny tekst nie jest zapisywany ponownie
  9. Przycisk robi odwrotnie

    Po restarcie usługi Safari na stałe zamykało strumień stanu. Strona pokazywała stary stan i AUTOMAT wysyłał „włącz” zamiast „wyłącz”.

    → ponowne łączenie i strażnik: 15 s bez danych = nowe połączenie
  10. Radio zajęte

    IC‑9700 przyjmuje przez sieć jedną sesję. Przy otwartym panelu wfview i WSJT‑X na Macu się nie połączą.

    → przycisk „Zwolnij radio” i rozłączenie 20 s po zamknięciu karty
Źródła

Na czym to stoi

  1. wfview: otwarty program do sterowania radiami Icom przez sieć, strona projektu · wfview.org
  2. wfview: kod źródłowy, w tym opis radia rigs/IC-9700.rig (rozkazy CI‑V i kalibracja mierników) · gitlab.com
  3. K. Goba, ft8_lib: biblioteka FT8 w C (dekoder decode_ft8 i generator gen_ft8), licencja MIT · github.com
  4. Icom IC‑9700: strona produktu, instrukcja i opis rozkazów CI‑V (CI‑V Reference Guide) · www.icomjapan.com
  5. QRZ.com: Logbook API · www.qrz.com
  6. PSK Reporter: odbiory sygnału SQ5CBA z 9.10.2026 · pskreporter.info
  7. Claude Code: dokumentacja Anthropic · code.claude.com
  8. Dane własne: zapis rozmowy z Claude Code z 8 i 9.10.2026, dziennik usługi panelu, log ADIF panelu i zrzuty ekranu z 10.10.2026

Kodu panelu nie publikuję: zawiera dane dostępowe do radia i do mojego dziennika QRZ. Zrzuty ekranu są z prawdziwego panelu, a w stopce ukryłem tylko jego adres.

Następny krok

Masz radio z LAN? Zacznij od wfview

Najpierw sprawdź radio w wfview: jeśli się połączy, to przez sieć można z nim zrobić prawie wszystko. Własny panel to już kwestia cierpliwości, swojej albo asystenta AI. Jeśli usłyszysz mnie na FT8 na 144,174, daj znać w księdze gości.