Hotspot FM Raspberry PI


Poniżej opis jak zbudować hotspot FM na bazie małego komputera Raspberry PI i modułu radiowego SA818.
Moduł radiowy SA818 jest dostępny w 2 wersjach VHF i UHF. Opinie o tym module są różne i najwięcej
uwag jest co do czułości odbiornika. Ale w sytuacji kiedy budujemy hotspot FM do domowych celów
słaba czułość odbiornika może nie przeszkadzać. Być może warto rozważyć zakup taniego BaoFeng UV-3R
i wykorzystać go jako radio do naszego hotspota. Zdjęcie jak pobrać sygnał COS/SQL dla UV-3R znajdziecie
na stronie: https://f5nlg.wordpress.com/2018/01/01/modification-des-tx-ctcss-et-det-squelch/
Innym ciekawym tanim radiem jest BaoFeng BF-T1 (ok 80 zl na Allegro) opis modyfikacji i jak pobrać 
linie COS/SQL znajdziecie na tych stronach: 
https://f5nlg.wordpress.com/2018/01/01/modification-des-tx-ctcss-et-det-squelch/
http://ddfrnrep.ddnss.de/baofeng_bf-t1___bf-9100_modifi.HTM


Instalacja systemu Raspberry PI OS

Upewnij się, że masz dobrą i niezawodną kartę microSD oraz odpowiednie zasilanie.
Obrazy RAW można zapisywać za pomocą programu Etcher  https://www.balena.io/etcher/ 
(dostępny na wszystkie systemy operacyjne).

Pobierz najnowszą wersję systemu Raspberry PI OS w wersji "Raspberry Pi OS Lite" ze strony
https://www.raspberrypi.org/software/operating-systems/
Zrób dekompresje pobranego pliku ZIP.
Wgraj na kartę microSD obraz przy pomocy programu Etcher.
Patrz więcej na: https://github.com/sm0svx/svxlink/wiki/InstallBinRaspbian

Jeśli będziesz chciał się zalogować do swojego RPI bez podłączenia klawiatury i ekranu przed włożeniem microSD do 
Raspberry PI musimy ustawić możliwość zalogowania się via ssh. W tym celu musisz wgrać / utworzyć
pusty plik o nazwie "ssh" /boot. Patrz na opis:
https://mikrokontroler.pl/2020/04/27/jak-skonfigurowac-ssh-w-raspberry-pi-bez-podlaczania-monitora/

Włącz Raspberry PI poprzez kabel sieciowy ethernet do swoje sieci domowej i na routerze domowym który przydziela adresy IP poszukaj 
jaki IP adres dostał Twój Raspberry. Użyj programu PUTTY pod MSWidnows (PUTTY to dostępny darmowy SSH Client) 
aby zalogować się via SSH do Raspberry

Zaloguj się jako: pi Hasło: raspberry

Zmień hasło na swoje nowe pisząc polecenie

    passwd

wprowadź stare hasło i następnie wprowadź nowe.


Przejdz do trybu użytkownika root pisząc polecenie

    sudo -s

Ustawiamy na stałe możliwość zalogowania się poprzez SSH pisząc polecenia:

    systemctl enable ssh
    systemctl start ssh

Możesz ustawić strefę czasową i językowa poprzez konfiguracje:

    raspi-config

Po zapisaniu ustawień następnie blokujemy wewnętrzną kartę dźwiękową RPI i ustawiamy kartę dźwiękową USB na index 0

Zrób edycje pliku alsa.conf

	nano /etc/modprobe.d/alsa.conf

Wpisz poniższą zawartość:

    options snd_usb_audio index=0   
    options snd slots=snd_usb_audio

Zapisz plik i następnie zrób edycje pliku alsa-blacklist.conf

    nano /etc/modprobe.d/alsa-blacklist.conf

Wpisz do pliku:

    blacklist snd_bcm2835

Zapisz plik.

Zrób restart systemu i sprawdź poleceniem, czy jest widziana karta dźwiękowa na USB z indexem 0:
	cat /proc/asound/cards


Zrób aktualizacje systemu:
    sudo apt update
    sudo apt upgrade

Instalacja pakietów do kompilacji SVXLink:
--------------------------------------------

    sudo apt install -y build-essential git
    sudo apt install -y libasound2-dev g++ gcc make cmake groff gzip doxygen tar 
    sudo apt install -y libspeex-dev libspeexdsp-dev libopus-dev
    sudo apt install -y libpopt-dev libsigc++-2.0-dev
    sudo apt install -y libasound2-dev libgcrypt20-dev libgsm1-dev
    sudo apt install -y librtlsdr-dev libjsoncpp-dev
    sudo apt install -y tcl-dev
    sudo apt install -y libcurl4-openssl-dev    
    sudo apt install -y apache2 php libapache2-mod-php php-mbstring php-cgi php-common php-curl node-ws nodejs
    sudo apt install -y lynx gawk curl

Utworzenie konta użytkownika svxlink i dodanie group

    sudo useradd -c "svxlink user" -G audio,dialout,daemon,gpio -d /home/svxlink -m -s /sbin/nologin svxlink

Jeśli komenda useradd nie działa musisz użyć następującej komendy aby dodać użytkownika do systemu

    sudo adduser svxlink

Po załozeniu konta dla svxlink musisz wpisać w pliku /etc/sudoers nastepującą linie:


    svxlink	ALL=(ALL:ALL) NOPASSWD


oraz sprawdzić czy użytkownik svxlink jest dopisany do grup: dialout i audio w pliku /etc/groups.

    audio:x:29:pi,svxlink
    dialout:x:20:pi,svxlink

jeśli jest grupa gpio to svxlink też powinien być dopisany w podobny sposób jak powyżej w aduio i dialout grupach



Kompilacja i instalacja:
    cd /opt
    mkdir src
    cd src
    git clone http://github.com/sm0svx/svxlink.git
    mkdir svxlink/src/build
    cd svxlink/src/build
    cmake -DUSE_QT=NO -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var ..
    make
    make install
    ldconfig


Pobierz przykładową konfiguracją, dashboard oraz pliki dźwiękowe polskie 

Paczka zawiera pliki systemowe z ustawieniami niezbednymi dla działania dashboard
między innymi dla serwera apache2 

Najnowsza wersja jest z dnia 2021-11-19

Uruchom nastepującą komendę aby pobrać cały pakiet:

    bash <(curl -s http://kurpie.hblink.network/svxrdb/install-rpi.sh)

Konfiguracja RX i TX jest przygotowana dla schematu hotspota:
http://kurpie.hblink.network/svxrdb/raspberrypi-hotspot.pdf
http://kurpie.hblink.network/svxrdb/rpi-anyradio.pdf

Zrób edycje pliku svxlink.conf i wprowadź zmiany w [RefLogic] oraz w [SimplexLogic]

	nano /etc/svxlink/svxlink.conf

W części [SimplexLogic] musisz wpisać swój znak w CALLSIGN= zamiast N0CALL 

[SimplexLogic]
TYPE=Simplex
RX=Rx1
TX=Tx1
# Twoj znak
CALLSIGN=N0CALL

oraz jeśli chcesz mieć aktywny EchoLink na swoim hotspot (wymaga rejestracji na echolink.org dla znaku z -L) 
i dopisz ModuleEchoLink do wykazu aktywnych modułów w cześci  [SimplexLogic]

MODULES=ModuleParrot,ModuleMetarInfo,ModuleEchoLink

oraz wpisz swoje dane w /etc/svxlink/svxlink.d/ModuleEchoLink

CALLSIGN=MYCALL-L
PASSWORD=MyPass
SYSOPNAME=MyName
LOCATION=[Svx] MyTown

gdzie w CALLSIGN= zamiast MYCALL-L wpisz swój znak z końcówka w nazwie -L oraz w PASSWORD zamiast MyPass musisz 
wpisać swoje hasło po zarejetrowaniu sie na EchoLink

Pamietaj aby ustawić w pliku /etc/svxlink/svxlink.d/ModuleEchoLink.conf

MUTE_LOGIC_LINKING=1


Musisz się skontaktować z administratorem SVXReflectora aby otrzymać IP adres / port oraz dane dla Twojego konta
Bez tych danych nie podłączysz się do SVXReflectora swoim Hotspotem FM. Otrzymane dane wpisuje się w części 
[ReflectorLogic] w pliku konfiguracyjnym svxlink.conf.

[ReflectorLogic]
TYPE=Reflector
# Dane do logowania do SVXReflectora
# otrzymasz je od admina SVXReflectora
# IP adres, port, haslo dla Twojego znau
HOST=127.0.0.1
PORT=5300
CALLSIGN="N0CALL"
AUTH_KEY="My_PASSWORD"


W części [ReflectorLogic] wpisz w DEFAULT_TG numer domyślnej TalkGroup jak będzie na Twoim radio oraz jakie inne dostępne 
TalkGroup, które hotspot będzie monitorował, wpisz w  MONITOR_TGS

# Domyslna Talk Grupa na której nadajesz lub ustaw 0 brak domyślnej TG
DEFAULT_TG=9
# jakie Talk Group monitorujesz 
MONITOR_TGS=260,2600


Zrob restart system w celu aktywowania ustawień GPIO dla svxlink poleceniem:
    reboot

Po ponownym zalogowaniu się do systemu uruchom pliki startowe svxlink jako root:
	sudo -s
	systemctl enable svxlink_gpio_setup.service
	systemctl enable svxlink.service
	systemctl restart svxlink_gpio_setup
	systemctl restart svxlink
	systemctl enable apache2.service
	systemctl restart apache2.service

Możesz sprawdzić plik /var/log/svxlink gdzie zobaczysz log z uruchomienia svxlink


Programowanie modułu SA818
--------------------------

Moduł SA818 wg użytego schematu jest podłączony do portu o nazwie /dev/ttyAMA0 lub /dev/ttyS0

Domślnie na RPI ttyS0 używany jest przez konsole Linux w tym celu musimy 
wyłączyć to poprzez rekonfiguracje ustawień używając raspi-config

    Uruchom raspi-config poleceniem: 
	    sudo raspi-config
    Wybierz opcje 3 - Interface Options
    Wybierz opcje  P6 - Serial Port
    Na pytanie: Would you like a login shell to be accessible over serial? odpowiedz 'No'
    Na pytanie: Would you like the serial port hardware to be enabled? odpowiedz 'Yes'
    Wyjdź z raspi-config i wykonaj reboot RPi w celu wprowadzenia zmian ustawień

Patrz więcej na strone: https://www.raspberrypi.org/documentation/configuration/uart.md


Instalacja pakietu pyserial wymaganego do programowania SA818
	apt install python-pip
	pip2 install pyserial

Polecam użyć do programowania program o nazwie sa818-rpi, uruchamia się:

	/opt/sa818/sa818-rpi

gdzie przy wyborze modelu należy wybrać MODEL SA818 (opcje 3)

Program po wyborze modelu modułu pyta o parametry ustawień modułu SA818 i na koniec
wyswietla w podsumowaniu ustawienia i po zatwierdzeniu ich wysyła je do modułu SA818

Ustaw poziom "squelch" na 2 a "volume" na 8 oraz "no" dla PreEmphasis, High Pass, Low Pass.
Channel Spacing wybierz "Wide"

Przykładowe ustawienia bez uzywania CTCSS:
------------------------------------------------------
     Channel Spacing: 1 
        Tx Frequency: 433.4750 
        Rx Frequency: 433.4750 
       Tx CTCSS code: 0000
       Rx CTCSS code: 0000
       Squelch Value: 2 
        Volume Value: 8 
 PreEmphasis Enabled: n
   High Pass Enabled: n 
    Low Pass Enabled: n 
------------------------------------------------------

Wybierz QRG godnie z Bandplan 70cm

Instalacja innego oprogramowania do programowania SA818 które pozwala ustawiać indywidulanie
parametry SA818

    apt install python3-pip
    pip3 install sa818

Wykaz dostępnych opcji podczas programowania uruchom polecenie:

    sa818 -h

Patrz na przykłady poniżej i na https://github.com/0x9900/SA818

Ustawienie QRG i poziom blokady szumow
    
    sa818 --port /dev/ttyS2 radio --frequency 433.725 --squelch 4

Ustawienie SA818 poiomu audio z głosnika:

    sa818 --port /dev/ttyS2 volume --level 8

Ustawienia fitrów (disable)

    sa818 --port /dev/ttyS2 filters --emphasis yes --highpass yes --lowpass yes


Ustawienia wstępne karty dźwiękowej. Uruchom program alsamixer: 

	alsamixer 
	
Naciśnij klawisz F5 , aby wyświetlić wszystkie wejścia i wyjścia . 
Używając  TAB ,  strzałka w górę , w dół , w prawo , w lewo do nawigacji oraz
klawisz M lub spacja do włączania / wyłączania. 
Zapisz ustawienia poleceniem:
	alsactl store

W pliku /etc/rc.local z pobranej wcześniej paczki podczas uruchamiania systemu są odczytywane 
ustawienia dla karty dźwiękowej dlatego jeśli wprowadzisz jakieś zmiany w ustawieniach 
zawsze je zapisz komendą:  alsactl store


SVXLink Dashboard
-----------------------

Paczka, którą pobrałeś z przykładową konfiguracją dla Raspberry PI hotspot-fm-rpi.tgz zawiera pierwszą edycje Dashboard dla SVXLink.
Dashboard został napisany w ciągu jednego "weekendu" i może być niedoskonały.

Co zrobić, jeśli znajdziesz usterkę, problemy z dashboard:

- Podjąć samemu analizę problemu i naprawić / zmodyfikować kod dashboard
- Pogodzić się z niedogodnością i zaakceptować ten fakt
- Użyć innych dostępnych dashboardów dla svxlink: https://github.com/kc1awv/SvxLink-Dashboard


Dostęp do dashboard jest pod adresem IP Twojego Raspberry PI http://ip_adres

Musisz zrobić wstępną konfigurację dashboard. Zrób edycje pliku /var/www/html/include/config.php

Zamiast N0CALL wpisz swój znak oraz wybierz dostęp do SVXReflectora API, do którego jesteś podłączony
aby mieć na dashboard wykaz podłączonych nodów. Wykaz dostępnych adresów API znajdziesz w pliku
/var/www/html/include/config.php

Musisz wpisać znak komentarza // na początku lini

 define("URLSVXRAPI", "");

oraz usunąć // przed linią gdzie jest definicja dostępu do Twojego SVXReflectora API


W pliku /etc/svxlink/talkgroup.dat wpisz numery TalkGroup oraz ich nazwy, jakie będą wyświetlane na 
dashboard.

Dashboard pozwala wysłać komendy DTMF do svxlink poprzez podanie pełnego kodu np przełączanie
Talk Group na SVXReflector ma składnie

91xxx#    gdzie zamiast xxx należy podać numer TG np 912603# powoduje że nasz svxlink przechodzi
          na TG 2603, po 30 sekundach braku aktywność na wybranej TG wraca na domyślna TG (DEFAULT_TG)

Mamy też dostępne zdefiniowane klawisze (patrz plik /var/www/html/inclde/config.php):

TG 260 - przejście na FM Talk Group 260 Ogólnopolska

TG 2602 - możesz zdefinowć swoją loklaną TG w config.php

METAR - aktywowanie raportu pogodowego z lotniska którego kod jest zdefiniowany w pliku
        /etc/svxlink/svxlink.d/ModuleMetar.conf  w STARTDEFAULT i zamiast EPBY należy wpisać kod
        innego lotniska. Nazwy kodów znajdziecie w tym pliku.

PARROT ON - włączenie tzw papugi
PARROT OFF - wyłącznie papugi

POWER OFF - wyłącznie komputera w bezpieczny sposób pozwala uniknąć uszkodzenia systemu. Aby klawisz
            zadziałał musisz w pliku /etc/sudoers wpisać linie:

            svxlink ALL=(ALL) NOPASSWD: /usr/sbin/poweroff

W celach testowych możesz użyć podłączonego mikrofonu do karty dźwiękowej aby nadawać.
W config.php jest dostępna opcja SHOWPTT i jeśli ustawisz na wartość TRUE (ważne duże litery) na dashboard
będą dostępne dwa klawisze PTT ON i PTT OFF. Jeśli podłączysz mikrofon do karty dzwiękowej będziesz mógł
tymi klawiszami włączyć odbiór Twojego audio z mikrofonu PTT ON lub wyłączyć PTT OFF. Jeśli nie będziesz
używał już mikrofonu podłączoneg do karty dźwiękowej ustaw w config.php SHOWPTT na FALSE.


Jeśli przestały działać dostępne klawisze w dashboard do przełaczania TG / PTT ON OFF itp 
należy zrobić:

sudo cp /lib/systemd/system/apache2.service /etc/systemd/system/
sudo nano /etc/systemd/system/apache2.service

zmien: PrivateTmp=true

na

PrivateTmp=false

i zrób reboot komputera

====================================================================================

Zasilacz do hotspota

Zwróć szczególną uwagę na zasilacz do Raspberry Pi. Może on powodować że podczas
nadawania Twojej trnasmisji do sieci svxlink, będzie słychać w tle Twojej transmisji
"buczenie", "warczenie" jest to efekt mieszania sie w.cz. z kablem Twojego zasialcza
i w efekcie nanosi sie na odbiornik SA818. Użyj dobrego zasilacza lub zrób 2 lub 3 zwoje na ferrycie
typu zapinanym na klips na kablu zasiląjacym do Raspberry Pi. Poczytaj o tym problemie w tym watku (2 strony):
https://groups.io/g/SHARI/topic/hum_buzz_on_signal/73406860?p=Created%2C%2C%2C20%2C2%2C20%2C0&jump=1



Przykład DASHBOARD HotSpota