Add comprehensive channel management features to mc-webui:
- Create new channels with auto-generated encryption keys
- Share channels via QR code or copy-to-clipboard
- Join existing channels with name and key
- Switch between channels in chat interface
- Filter messages by channel
- Persistent channel selection (localStorage)
Backend changes:
- Add CLI wrapper functions: get_channels, add_channel, set_channel, remove_channel
- Modify send_message() to support channel targeting
- Parametrize parser channel filtering (channel_idx parameter)
- Add QR code generation with qrcode + Pillow libraries
API endpoints:
- GET /api/channels - List all channels
- POST /api/channels - Create new channel
- POST /api/channels/join - Join existing channel (auto-detect free slot)
- DELETE /api/channels/<index> - Remove channel
- GET /api/channels/<index>/qr - Generate QR code (JSON or PNG)
- Modified GET /api/messages - Add channel_idx filtering
- Modified POST /api/messages - Add channel_idx targeting
Frontend changes:
- Add channel selector dropdown in navbar
- Add Channels Management modal (create, join, list)
- Add Share Channel modal (QR code, copy key)
- Implement JavaScript channel management logic
- Add event handlers for channel switching
- Persist selected channel in localStorage
QR code format:
{"type":"meshcore_channel","name":"...","key":"..."}
Protection:
- Block deletion of Public channel (index 0)
- Validate channel names (alphanumeric, _, - only)
- Validate encryption keys (32 hex chars)
- Auto-detect free channel slots (1-7)
Backward compatibility:
- Default channel_idx=0 (Public) in all functions
- Existing Public-only code continues to work
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.7 KiB
Pytanie do Gemini:
Jak działają kanały meshcore? Załóżmy, że dodam nowy kanał:
$ meshcli -s /dev/serial/by-id/usb-Espressif_Systems_heltec_wifi_lora_32_v4__16_MB_FLASH__2_MB_PSRAM__90706984A000-if00 add_channel Malopolska
INFO:meshcore:Serial Connection started
INFO:meshcore:Connected to MarWoj running on a v1.11.0-6d32193 fw.
INFO:meshcore:Executing device init script : /home/marek/.config/meshcore/MarWoj.init
Potem widzę ten kanał za pomocą komenendy get_channels:
$ meshcli -s /dev/serial/by-id/usb-Espressif_Systems_heltec_wifi_lora_32_v4__16_MB_FLASH__2_MB_PSRAM__90706984A000-if00 get_channels
INFO:meshcore:Serial Connection started
INFO:meshcore:Connected to MarWoj running on a v1.11.0-6d32193 fw.
INFO:meshcore:Executing device init script : /home/marek/.config/meshcore/MarWoj.init
0: Public [8b3387e9c5cdea6ac9e5edbaa115cd72]
1: Malopolska [485af7e164459d280d8818d9c99fb30d]
W jaki sposób mogę użyć kanału? Jak zaprosić do niego innych użytkowników?
Odpowiedź
To, co zrobiłeś, to stworzenie prywatnego, szyfrowanego "pokoju". W świecie MeshCore (i ogólnie LoRa) kanały nie działają jak grupy na Facebooku czy Discordzie, gdzie klikasz "zaproś". Tutaj kluczem do wspólnej rozmowy jest wspólny klucz kryptograficzny.
Oto instrukcja, jak korzystać z nowego kanału i jak "wpuścić" do niego znajomych, oparta na dokumentacji meshcore-cli.
1. Jak używać kanału? (Wysyłanie wiadomości)
Masz teraz dwa kanały:
- 0: Public (Otwarty dla wszystkich).
- 1: Malopolska (Twój prywatny, szyfrowany).
Aby napisać wiadomość na nowym kanale, masz dwie metody:
Metoda A: Tryb interaktywny (Zalecana)
Będąc w trybie czatu (mc chat lub po prostu uruchomieniu bez argumentów), musisz przełączyć się na ten kanał komendą to.
to Malopolska
(lub to 1, jeśli nazwa nie zadziała).
Od teraz wszystko, co wpiszesz i zatwierdzisz Enterem, poleci na kanał "Malopolska". Aby wrócić na ogólny, wpisz to Public lub to 0.
Metoda B: "Z zewnątrz" (One-Liner)
Jeśli chcesz wysłać szybką wiadomość bez wchodzenia w tryb czatu, użyj komendy chan z numerem kanału:
meshcli chan 1 "Cześć, to test kanału Malopolska"
2. Jak zaprosić innych użytkowników?
To najważniejszy punkt. Ponieważ MeshCore jest siecią zdecentralizowaną, nie ma serwera, który wyśle zaproszenie. Musisz ręcznie przekazać klucz swojemu rozmówcy inną drogą (np. SMSem, na Signal, czy podając kartkę z kodem).
Klucz Twojego kanału to ten ciąg znaków w nawiasie kwadratowym, który pokazał Ci się w logu:
485af7e164459d280d8818d9c99fb30d
Instrukcja dla Twojego znajomego:
Twój kolega musi skonfigurować swój kanał nr 1 (lub inny wolny slot) tak, aby miał identyczną nazwę i identyczny klucz. Jeśli użyje samej komendy add_channel, jego radio wygeneruje losowy klucz i nie będziecie się słyszeć (zobaczy tylko "krzaki" lub nic).
Musi użyć komendy set_channel, która przyjmuje format: set_channel <numer> <nazwa> <klucz>.
Niech Twój znajomy wpisze u siebie:
set_channel 1 Malopolska 485af7e164459d280d8818d9c99fb30d
Podsumowanie techniczne
- Szyfrowanie: Tylko radia posiadające ten konkretny klucz (
485af...) będą w stanie odszyfrować treść wiadomości. Dla wszystkich innych użytkowników sieci pakiety te będą wyglądać jak cyfrowy szum i zostaną zignorowane. - Numer slotu: Nie ma znaczenia, czy Ty masz ten kanał na pozycji
1, a kolega na pozycji2. Ważne, aby nazwa i klucz były identyczne. - Zasięg: Kanały prywatne nadal korzystają z "floodingu", więc wiadomości będą przenoszone przez repeatery, ale repeatery nie będą w stanie podejrzeć ich treści.