Niedawno dostałem na prywatną skrzynkę maila z krótkim pytaniem: „Nie masz może w planach poradnika, jak stworzyć bota?”. Odpisałem, że nie mam, i wyjaśniłem dlaczego. Odpowiedź wyszła na tyle długa, że postanowiłem ją rozwinąć i pokazać ten temat w szerszej perspektywie, bo takie pytanie słyszę nie pierwszy raz.
Wielu z nas pewnie zna to uczucie: masz już swój węzeł, przeczytałeś setki wiadomości na Public, postawiłeś na dachu repeater, a może nawet obserwera. Pisanie i czytanie przestaje wystarczać i… zaczyna świerzbić ręka, żeby dodać do tego coś jeszcze. Jest przecież biblioteka w Pythonie, jest integracja z Home Assistantem, więc pojawia się pomysł na długie, jesienne wieczory. Wystarczy kilkadziesiąt linijek kodu i na kanale pojawia się nowy, pracowity mieszkaniec, który na każde „ping” odpowiada „pong”, podaje liczbę przeskoków i siłę sygnału, a rano wrzuca prognozę pogody.
Od razu zaznaczę: nie chcę w czambuł potępiać ludzi, którzy boty tworzą. To zwykle najbardziej zaangażowani członkowie społeczności, którzy po prostu lubią majsterkować – sam dobrze znam ten ból. Mam jednak sporo zastrzeżeń do tego, co boty robią z siecią. Poniżej wyjaśniam dlaczego.
Kanał to tylko szyfr
Najczęstszy argument w obronie bota brzmi tak: „Przecież mój bot działa tylko na kanale #bot, kto nie chce, ten go nie subskrybuje”. Brzmi niby rozsądnie, tylko że sieć MeshCore działa inaczej.
Kanał w MeshCore to w praktyce klucz szyfrowania. Kto go zna, odczyta wiadomość, a kto nie zna, zobaczy tylko zaszyfrowany pakiet. Sama droga, którą wiadomość pokonuje, jest dla wszystkich kanałów taka sama. W kodzie firmware'u widać to czarno na białym: wiadomość na kanale zawsze wychodzi w trybie flood (ang. „zalewanie”), czyli każdy repeater, który ją usłyszy, nadaje ją dalej. Repeater nawet nie wie, z jakiego kanału pochodzi pakiet, bo nie zna jego klucza. Sprawdza tylko, czy już go nie powtarzał i czy pakiet nie przekroczył limitu przeskoków.
To trochę tak, jakby na sali, w której wszyscy próbują rozmawiać, ktoś głośno prowadził rozmowę w obcym języku. Nie rozumiesz ani słowa, ale własnego rozmówcy przez to też nie słyszysz. Wyciszenie kanału w aplikacji nic tu nie zmienia: Twój telefon przestaje pokazywać wiadomości bota, ale Twój repeater dalej je powtarza.
Pewną ulgę dają regiony, o których pisaliśmy w tekście „Regiony w MeshCore: po co są i jak działają”. Pozwalają ograniczyć obszar, na który rozchodzi się wiadomość. W obrębie regionu zasada się jednak nie zmienia: każdy repeater, który usłyszy wiadomość bota, podaje ją dalej.
Rachunek za jedno „ping”
W felietonie o sporze o SF liczyłem, ile trwa nadanie krótkiej wiadomości na kanale w polskich ustawieniach (SF8, CR8, kanał 62,5 kHz). Pakiet o długości 50 bajtów zajmuje eter na około 0,61 s. Repeater, który trzyma się przepisowego limitu 10% czasu nadawania, zmieści w godzinie około 590 takich pakietów.
Teraz policzmy rozmowę z botem. Pytanie i odpowiedź to dwie wiadomości. Jeśli w zasięgu jest dziesięć repeaterów, każda z nich zostanie nadana jedenaście razy: raz przez nadawcę i po razie przez każdy repeater. Jedno „ping” i jedno „pong” to więc 22 transmisje i łącznie około 13 sekund zajętego eteru. Na odpowiedź, z której zwykle nic nie wynika poza tym, że bot żyje.
A wiadomości potrafią zajść naprawdę daleko. W moim mc-webui jest narzędzie, które pokazuje na mapie trasę każdej usłyszanej wiadomości. Na obrazku w dalszej części tekstu widać zwykłe „cześć” z kanału Public, które dotarło do mnie po 19 przeskokach: z okolic Mielca, przez Ożarów i okolice Kielc, aż pod Kraków. Dziewiętnaście repeaterów po kolei zajęło eter, żeby jedno pozdrowienie przeszło przez trzy województwa. Tak samo daleko lecą odpowiedzi botów.
Eter mamy jeden
Radio LoRa nie potrafi jednocześnie nadawać i odbierać. Kiedy repeater nadaje odpowiedź bota, przez tę chwilę jest głuchy na wszystko inne. Do tego dochodzą kolizje: dwa repeatery, które się nawzajem nie słyszą, potrafią nadać w tej samej chwili do wspólnego sąsiada, a ten nie odbierze wtedy żadnego pakietu.
MeshCore ma na to swoje sposoby, na przykład losowe opóźnienie przed powtórzeniem pakietu. Działają one jednak tym gorzej, im więcej jest ruchu. Każda dodatkowa wiadomość zwiększa szansę, że czyjaś prawdziwa wiadomość do kogoś bliskiego po prostu nie dojdzie. A potem na kanale pojawia się pytanie „czy ktoś mnie słyszy?”, które samo w sobie jest kolejną wiadomością.
Sieć, która i bez botów ma swoje problemy z dostarczaniem wiadomości, średnio potrzebuje dodatkowych obciążeń.
Co mówią liczby
Żeby nie opierać się tylko na wrażeniach, zajrzałem do analizatora sieci, który zbiera to, co słyszą obserwery w całym kraju. Wynik z ostatniej doby (stan na 25 października 2026):
| Kanał | Wiadomości | Udział |
|---|---|---|
| #bot | 1864 | 29% |
| #test | 940 | 15% |
| wszystkie kanały razem | 6336 | 100% |
Prawie co trzecia wiadomość na kanałach w Polsce to rozmowa z maszyną. Do tego dochodzi #test, gdzie też sporo jest „pingowania”, żeby sprawdzić, czy ktoś odpowie. Na liście dwunastu najaktywniejszych nadawców tej doby dziewięciu ma w nazwie słowo „bot”.
Te liczby pewnie nie są doskonałe, bo analizator widzi tylko to, co usłyszały obserwery, i nie zagląda do kanałów prywatnych, których klucza nie zna. Proporcje te jednak mówią same za siebie.
Uczciwie trzeba dodać, że boty nie są jedynym źródłem ruchu. Według tego samego analizatora największą grupą pakietów w sieci są adverty, czyli ogłoszenia, którymi węzły przedstawiają się innym. Z ostatniej doby to około 26% wszystkich pakietów, więcej niż wiadomości na kanałach (około 20%). Adverty są potrzebne, ale nie muszą lecieć tak często. W aktualnym firmware (1.18) nowo skonfigurowany repeater rozsyła swój advert floodem domyślnie co 47 godzin. Aktualizacja nie zmienia jednak ustawień zapisanych już w urządzeniu, więc starsze repeatery mogą to robić znacznie częściej. Jeśli masz repeater, sprawdź jego ustawienie poleceniem get flood.advert.interval, a w aplikacji nie klikaj „Flood advert” bez potrzeby.

Dlaczego nie napiszę poradnika
Jeden bot to jeszcze nie katastrofa. Ewentualny poradnik „krok po kroku” to jednak przepis na kilkanaście albo kilkadziesiąt nowych botów, a sieć oparta na kilkuset repeaterach LoRa tego zwyczajnie nie udźwignie.
Jest też druga sprawa, moim zdaniem ważniejsza. O uruchomieniu bota decyduje jedna osoba, a koszt ponoszą wszyscy: właściciele repeaterów, którzy pielęgnują swój sprzęt na dachach, drzewach i słupach, i oczywiście każdy, komu wiadomość nie doszła. Nasza sieć nie ma generalnego administratora, który by pilnował porządku i standardów. Działa ona tylko dlatego, że zwykli ludzie dbają o wspólny eter. To jak z pastwiskiem, z którego korzysta cała wieś: jedna dodatkowa krowa nikomu nie zaszkodzi, tyle że każdy myśli wyłącznie o swojej jednej krowie.
Świerzbi Cię ręka? Mam kilka pomysłów
Nie chcę na tym skończyć mojego felietonu, bo chęć zrobienia czegoś więcej z MeshCore'em jest w swoim zamyśle świetna i godna wspierania. Jednakże warto ją skierować tam, gdzie w miarę możliwości nie kosztuje to ani sekundy eteru.
Słuchaj zamiast mówić
Najciekawsze rzeczy w sieci mesh dzieją się w danych, które i tak krążą w eterze. Analizatory pakietów, statystyki ruchu, mapy zasięgu: wszystko to można zbudować wyłącznie na odbiorze. Dobry początek to własny obserwer. Taki węzeł niczego nie wysyła do sieci radiowej, a przekazuje do analizatora wszystko, co słyszy, przez internet. Analizator ma publiczne API, więc na jego danych można budować własne zestawienia, wykresy czy powiadomienia.
Wizualizacje ruchu
Tu pozwolę sobie na odrobinę autopromocji. W mojej aplikacji mc-webui, czyli przeglądarkowym interfejsie do węzła MeshCore, jest między innymi narzędzie Path Analyzer. Wczytuje on wszystkie wiadomości z kanałów z ostatnich 1–7 dni razem z każdą ich kopią, którą usłyszał mój węzeł. Potem pokazuje w wygodnym interfejsie, którymi repeaterami wiadomości szły, które odcinki sieci niosą najwięcej ruchu i jak wygląda trasa wiadomości na mapie i tak dalej. Z niego pochodzi wspomniane „cześć” po 19 przeskokach, o którym pisałem wyżej. Narzędzie nie nadaje przy tym ani jednego pakietu, bo analizuje wyłącznie to, co węzeł już usłyszał. Takich narzędzi przydałoby się więcej i każde z nich bardziej pomoże sieci niż kolejny bot.

Bot, który tylko słucha
Jeśli koniecznie chcesz mieć bota, niech czyta i milczy. Może śledzić kanał i wysyłać powiadomienie na telefon, na przykład przez aplikację Pushover, gdy ktoś wspomni Twój znak wywoławczy, nick albo nazwę Twojej miejscowości. Może też przenosić wiadomości z kanału do internetu. Tak to działa na serwerze Discord „MeshCore Świętokrzyskie”, gdzie bot wrzuca wpisy z meshcorowego kanału #kielce. Kto chce, czyta je na Discordzie, a sieć radiowa nie dostaje ani jednego dodatkowego pakietu.
A jeśli bot naprawdę musi nadawać
Generalnie zdecydowanie odradzam. Jeśli jednak nie możesz utrzymać ciśnienia lub masz bardzo dobry powód, trzymaj się kilku zasad:
- Absolutne minimum wiadomości. Ustal twardy limit, na przykład kilka wiadomości na dobę, i wpisz go w kod, zanim napiszesz cokolwiek innego.
- Nie odpowiadaj na wiadomości użytkowników. Bot, który odpowiada każdemu, kto do niego napisze, zaprasza do zabawy w ping-ponga, a za nią płaci cała sieć.
- Nigdy nie odpowiadaj innym botom. Dwa boty, które sobie odpowiadają, potrafią same nakręcić ruch.
- Krótko. Czas nadawania rośnie z długością wiadomości, więc emoji i ozdobniki też kosztują.
- Wiadomość prywatna zamiast kanału. Gdy węzły znają już do siebie trasę, wiadomość prywatna idzie wybranymi repeaterami. Nie leci przez wszystkie po kolei, tak jak wiadomość na kanale.
- Wyłącznik pod ręką. Jeśli lokalna społeczność poprosi o wyłączenie bota, zrób to od razu.
Zostawiam temat Wam
Wiem, że nie wszyscy się ze mną zgodzą. Są pewnie miejsca, w których bot komuś realnie pomógł, i takie, gdzie zawalił lokalną sieć. Chętnie poznam Wasze doświadczenia i zdanie. Gdzie Waszym zdaniem jest granica: czy bot pogodowy raz dziennie to już za dużo? Czy społeczność powinna spisać wspólne zasady dla botów, podobnie jak umawiamy się co do presetu? A może ktoś ma pomysł na bota, który sieci pomaga, zamiast ją obciążać?
Zapraszam do dyskusji pod postem z tym tekstem na naszym profilu na Facebooku.
