Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Povestea montării acestui nod RoLink este scrisă dintr-o perspectivă cumva… diferită. Asta deoarece, eu nu am participat efectiv și deci este văzută prin prisma a ceea ce mi-a relatat Cătălin – YO7GQZ.

Este de fapt îndeplinirea proiectului instalării unui nod RoLink pe vârful Teasc aflat desupra localității Borsec.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

La altitudinea celor aproape 1400 m este Releul de Televiziune, vegheat de peste treizeci de ani de către Nelu – YO6FCD.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Istoria acestui nod RoLink s-a născut din excursia mea alături de Cătălin, hoinărind prin țară în vara acestui an. La invitația dumnealui de a-l vizita la înălțime, adică în locul atât de drag lui, ne-a împărtășit dorința de a instala un nod RoLink acolo.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

În singurătatea muntelui, dar printre posturile de radio si televiziune pe care le monitorizează în permanență, cu siguranță ar fi fost altceva, dacă ar asculta și ar vorbi cu radioamatorii din rețea.

Bucuria a fost reciprocă deoarece ne făcea plăcere să îl putem ajuta în acest sens, iar eu i-am propus și montarea unei camere web cu vedere spre zări.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

În răstimpul acesta, noi cei din echipa fanilor RoLink, ne-am mobilizat, așa încât până la venirea frigului și a unei eventuale zăpezi, nodul și camera să fie funcționale în locația de pe Vf. Teasc.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Conform zicalei „dar din dar se face Rai”, Răzvan – YO6NAM ne-a dat o stație ICOM IC-F110 programată pentru frecvența 145.3375 MHz, Bogdan –  YO3IXW avea pregătit un Orange PI, iar Cătălin – YO7GQZ antena, cablul, sursa, cutia pentru ele și desigur… camera web.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Nod RoLink Vf. Teasc – Borsec

După ce toate au fost pregătite, Cătălin a stabilit un sfârșit de săptămână în care eu eram ocupată cu serviciul și alături de Bogdan și Mirel – YO4OMG s-au găsit într-un trio ce vroia să mute munții.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

La ora 7.30 AM, Cătălin a pornit din Pitești pe drumul spre Brașov, iar Bogdan și cu Mirel au plecat din București, cu punct intermediar de întâlnire la Dâmbul Morii. Echipa odată întrunită a făcut un popas la QTH-ul lui Răzvan, după care s-au pus în mișcare pentru că, nu-i așa? Aveau în față un traseu destul de lung, spre Sfântu Gheorghe, Miercurea Ciuc, Ghiorghieni, Toplița, Borsec și în final cei zece kilometri de drum forestier ce urcă prin pădure și gol alpin, până la poarta Releului de TV de pe Vf. Teasc.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

În jurul orelor 18, Nelu – YO6FCD i-a așteptat cu inima deschisă, dornic de a se afla în compania unor oameni buni, cu gânduri mari și plan de acțiune bine pus la punct.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO6FCD, YO4OMG, YO7GQZ, YO3IXW

În timp ce Nelu făcea cunoștință cu Bogdan și Mirel, deoarece se vedeau pentru prima dată, portbagajul de la Duster se golea încet – încet. Cutiile cu diverse unelte, aparate și cabluri, inclusiv suport pentru antenă de care, până la urmă  nu a fost nevoie, se mutau în clădirea releului.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO3IXW, YO6FCD, YO4OMG

Mirel deja s-a apucat de treabă și a pus mufa la cablul de antenă, iar după ce au stabilit planul de bătaie pentru a doua zi, Nelu le-a pregătit cina celor osteniți după atâtea ore de drum.

Dimineața zilei de sâmbătă promitea să țină cu RoLink, așa că soarele a urcat binișor temperatura din aer, în timp ce în vale ceața lăsa o atmosferă tristă și rece.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Mirel n-a mai avut răbdare, dornic să vadă antena și camera web montate pe pilonul de lângă clădirea releului.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO4OMG

Cu alte cuvinte s-a urcat pe scara din interiorul pilonului până la înălțimea de douăzeci de metri, după care, printre celelalte antene de radio și televiziune, a făcut loc și pentru antena nodului RoLink. Și camera web a fost prinsă de pilon și orientată spre Toplița.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO6FCD, YO4OMG

După orele prânzului au început primele teste radio și… primele imagini cu zările. Era oarecum de așteptat ca semnalul să fie înecat de radiofrecvența celorlalte antene ale releului, iar colegii mei s-au gândit la soluții pentru remedierea acestei probleme.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Partea cea mai grea, aceea de testare a nodului, a fost destul de neplăcută, deoarece de la Pitești, îi dădeam lui Cătălin controale zgomotoase de Q3 datorită radiofrecvenței. Testele efectuate în banda VHF nu s-au ridicat la înălțimea așteptărilor, așa că într-un final, a rămas ca Nelu să schimbe poziția antenei pe pilon.

Instalarea nodului RoLink și a camerei web se voiau încununate cu un grătar delicios ca și importanța proiectului, în mirosul de brad accentuat de altitudinea la care ei se aflau.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Cele două patrupede ale lui Nelu, Mura și Lola au stat în permanență cu oaspeții, iar joaca de care aveau chef mai tot timpul, a asigurat atmosfera de bună dispoziție.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Mura, Lola

Altfel, după oboseala zilei de sâmbătă, cu stat afară, urcat de nenumărate ori pe pilon, întins cablurile și toate testele radio făcute până după apus, liniștea nopții s-a lăsat peste toate.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Deși pentru duminică, drumul destul de lung spre casă, anunța plecarea devreme, nu a fost așa, deoarece bagajele erau destule și … de îndesat în mașină.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Gata de drum

În plus, le mai veniseră câteva idei de încercat pentru partea de radio a nodului RoLink. De fapt, nici vremea faină nu-i lăsa să plece. Nelu s-a bucurat enorm pentru tot ceea ce s-a realizat în acest timp relativ scurt și a rămas să încerce diverse metode de a îmbunătăți recepția nodului.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Evident că oaspeții nu puteau pleca așa… cu burta goală, încât Nelu le-a pregătit, urmând o rețetă originală, o delicioasă mâncare de fasole, pe care eu am savurat-o doar cu ochii.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Mmmm

În jurul orei 12 PM, în compania aceluiași soare blând de noiembrie, Cătălin, Bogdan și Mirel au stat frumos la o poză cu Nelu, le-au mângâiat pe Mura și Lola, după care l-au salutat și… au pornit la vale.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO6FCD, YO4OMG, YO7GQZ, YO3IXW

Au urmat același traseu de întoarcere și din nou, au oprit la Dâmbul Morii pentru ca fiecare să pornească pe drumul lui spre casă.

Pe lângă imaginile frumoase pe care camera web le oferă pe blogul meu, a rămas acolo amintirea celor trei zile pline petrecute de patru oameni sufletiști, radioamatori, foarte pasionați și cu mult avânt.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
YO6FCD, YO4OMG

Și nu este prima dată când mă întreb: Ce anume i-a adunat pe acești oameni acolo? Nelu îi vedea efectiv pentru prima dată pe Bogdan și Mirel, chiar dacă se mai auzise cu Bogdan în legături radio, când el se afla prin munții din zonă.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Nelu – YO6FCD

Și totuși, așa cum am mai spus și altă dată, dorința de a realiza acest proiect interesant, de a ajuta comunitatea de radioamatori, a făcut ca acești oameni să se întâlnească, de parcă se știau de o grămadă de ani.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Să fie pasiunea pentru radio mai presus de orice efort fizic sau financiar? Să fie altruismul o parte importantă din acest hobby de lângă care nu putem sta departe? Să fie bucuria de a cunoaște oameni cu atâtea puncte comune pe lista de pasiuni?

Nod RoLink deasupra norilor – Vf. Teasc – Borsec

Eu, nelipsită din toate aventurile care țin de RoLink, mi-a părut foarte rău pentru că de data asta nu am putut să fiu acolo, lângă acei oameni.

Nod RoLink deasupra norilor – Vf. Teasc – Borsec
Până când vom reveni…

Dar invitația lui Nelu pentru a reveni în zona pitorească a Borsecului, a rămas deschisă și de bifat pentru vara anului viitor, deși cu o nostalgie amuzantă, a afirmat că: “Până la anul, mai sunt trei ani!”.

’73

Cristina – YO7JYL

Întâlnire într-o vineri seara, pe calea undelor radio

Întâlnirea de vineri seara, s-a vrut o “masă rotundă” pe calea undelor între radioamatori. A fost un experiment pe care noi l-am pus la cale, în ideea de a constata câti colegi ne putem strânge laolaltă pentru a ne saluta prin intermediul Rețelei RoLink. Pentru întalnirea placută de aseară, ținem să vă mulțumim tuturor pentru prezență, fie că am vorbit cu dumneavoastră, fie că doar ne-ați ascultat. Am avut bucuria de a constata ca sunteți alături de noi, chiar dacă unii dintre dumneavoastră vă aflati în mobil, portabil ori în rutina programului încărcat, ați păstrat în memoria zilei, câteva minute pentru a intra în legătură cu noi.

Dincolo de emoțiile mele, normale unei prime astfel de întâlniri radio, am avut parte de QSO-uri foarte plăcute și interesante cu prieteni din bandă, alături de care am mai schimbat controale de-a lungul timpului. De asemenea, am avut surpriza de a mă saluta cu radioamatori care și-au făcut pentru prima dată apariția în RoLink și pe care îi vom aștepta cu plăcere să revină… aici. Ne-am bucurat pentru că am fost împreună, că rețeaua a funcționat așa cum ne-am așteptat, echipamentele pe care le utilizați fiecare s-au comportat optim așa încât, cu toții ne-am putut recepționa unii pe ceilalți, cu un control de Q4-Q5. Vă mulțumim foarte mult pentru aprecieri, acestea contează enorm pentru noi și ne încurajează să mergem mai departe.
În concluzie, ca și participanți, am avut 28 de indicative distincte, 5 dintre acestea au accesat rețeaua prin noduri portabile, 2 prin echolink, restul prin repetoarele/nodurile fixe.

Repetoarele accesate au fost: Tâmpa, Postavarul, Pitești, Preluca Veche, Păltiniș, Ploiești, Toaca, Cozia.

Pe districte, am avut radioamatori din: YO2-1; YO3-5; YO5-2; YO6-7; YO7-8; YO8-2; YO9-2.

În urma acestei întalniri de vineri seara, pe care noi o considerăm ca fiind reușită, datorită în primul rând dumneavoastră, ne propunem să efectuăm un sondaj care se va desfăsura pe pagina de Facebook. De aceea, vă rugăm să ne spuneți dacă vreți ca ea să continue și, în cazul unui răspuns afirmativ, la ce interval de timp: săptămânal, bilunar, lunar sau mai rar de atât.

Mulțumim și celor care ne-au trimis feed-back pozitiv după emisiune, pe adresele de mail și, în special celor încă neautorizați, cărora le urăm succes la sesiunea de examinare și îi așteptăm cât de curând alături de noi.

Vă invit mai jos să ascultați înregistrarea acestei întâlniri, nu înainte să-i mulțumesc pentru ajutor lui Răzvan – YO6NAM:


Nu uitați: RoLink există, pentru că dumneavoastră existați!

Cristina- YO7JYL și echipa fanilor RoLink

Proiect pentru protecţie automată a nodului/reţelei

Dragi colegi,

Prin bunăvoința colegului nostru, Răzvan – YO6NAM, acum avem proiectul unei soluții simple și eficiente, astfel încât fiecare administrator de nod sau repetor RoLink poate să pornească, respectiv să oprească traficul rețetei. Acesta poate să implementeze o soluție simplă de blocare a PTT-urilor, o soluție descentralizată care nu ține de server, ci de doar de nodul sau repetorul respectiv.

Proiectul este foarte util în sensul în care administratorul respectiv sesizează că există o problemă tehnică la alte noduri care creează bruiaje sau deranjamente în întreaga rețea RoLink. Răzvan a intitulat-o: “Protecţie automată a nodului/reţelei împotriva abuzurilor (sau a problemelor tehnice)”, iar mai jos el ne explică modul de funcționare:

Cum funcționează?

Logul generat de către aplicația SVXLink este citit de către rlabp.sh și aplică următoarele :

  • La mai mult de 5 ptt-uri venite dinspre RF într-un interval de 20 de secunde, aplicația se restartează în modul TX Only timp de 30 de minute.
  • Dacă dinspre rețea se primesc mai mult de 10 ptt-uri în interval de 30 de secunde, aplicația oprește traficul dinspre rețea către nod pentru 30 de minute.

După expirarea timpului, se revine la modul RX/TX.

Instalarea se face simplu :

$git clone https://github.com/yo6nam/rlabp  
$cd rlabp  
$./install.sh  

Modificarea fișierului clonă de configurare (svxlinknorx.conf) presupune modificarea liniilor din :

[RxLocal]
...  
SQL_DET=GPIO  
GPIO_SQL_PIN=!gpio20  
...  

în :

[RxLocal]
...  
#SQL_DET=GPIO  
#GPIO_SQL_PIN=!gpio20  
SQL_DET=PTY  
PTY_PATH=/tmp/sql  
...  

După instalare nu este nevoie de alte intervenții, scriptul fiind accesat prin cron la fiecare 15 secunde.

Trigger extern

Logica de comutare în modul ‘TX Only/Operare normală’ poate fi comandată și din surse externe, consolă, cron, etc. Argumentul poate fi 0 (Normal), 1 (TX Only) sau 2 (deblocare trafic nod<->reflector)

$/opt/rolink/scripts/rlabp.sh 0|1|2

Această metodă poate fi folosită dacă se dorește integrarea cu phpKontrol, dar și păstrarea protecției automate.

Mai jos este link-ul către acest proiect și suntem convinși că va stârni interes. De asemenea, cu siguranță va avea un feedback, deoarece este un proiect pe care mulți administratori de nod l-au dorit pentru a fi pus în aplicare.

https://github.com/yo6nam/rlabp

Desigur, așteptăm opiniile voastre, ale tuturor, deoarece rețeaua RoLink există pentru că voi existați și funcționează pentru că fiecare dintre noi contribuim la asta.

Toate bune,

’73

Răzvan – YO6NAM

toaca

Stream live Webcam Vf. Toaca

Ziua bună tuturor,

Prin bunăvoința colegilor noștri, Petru -YO3HPC și Răzvan – YO6NAM, avem posibilitatea de a urmări imaginile de pe Vârful Toaca, printr-un stream live. Astfel, accesând link-urile de mai jos:

https://www.xpander.ro/toaca sau http://www.yo7jyl.ro/webcam-toaca/ , ne putem bucura de priveliștea minunată a munților de la altitudinea celor 1904 metri. În aceste zile oarecum grele, mai ales pentru iubitorii muntelui, chiar dacă nu putem ajunge în măreția înălțimilor pentru a admira fascinantul răsărit de soare de pe Vf. Toaca, vibrația unui apus la capătul cerului, povestea vântului, spectacolul proaspăt al ploii sau jocul fulgilor de nea, cu doar un simplu click, putem simți natura așa cum este ea, dar… mai aproape de noi.
’73

Cristina – YO7JYL

www.439100.ro

Instalare Sistem pentru RoLink

Dragi colegi,

Aici o să scriu pașii necesari pentru o instalare de svxlink pe Orange PI Zero denumit în continuare „opi”.

Pentru ca articolul este destul de stufos, pun aici un fel de cuprins prin care sa accesati rapid sectiunile.

Configurarea modulului SA818/DRA818.

Calibrarea receptorului

Configurare network pentru autoconectare la ethernet/wifi/usb/modem

Administrare online

Reflectorul și un exemplu de configurare

Ca și echipament hardware este necesar un micro-computer OrangePi Zero

Pe partea hardware, poate fi la latitudinea fiecăruia ce alege pentru inter-gate-area cu radioul, însă două proiecte interesante ni le prezintă colegul nostru, Miron – YO3ITI:

http://www.yo3iti.ro/index.php?title=RoLink_OPi_Simplificat

www.439100.ro
Placa radio nod simplificat

http://www.yo3iti.ro/index.php?title=Nod_RoLink_OPi_complex

www.439100.ro
Placa radio nod complex

Detaliile constructive și nu numai, multe alte lucruri interesante, veti gasi urmărind link-urile de mai sus.

Pentru cei ce nu se pot descurca cu ce se prezinta mai jos, am pregatit o imagine gata configurata cu sistemul instalat si care se conecteaza la un reflector de test, pe care se pot face reglajele de modulatie.

Imaginea este disponibila aici: http://bastus.go.ro/imagini/orangepizero_ro.img.gz

Se acceseaza prin ssh pe portul 22, cu userul root si parola 1234. Se recomanda schimbarea parolei. Sistemul este configurat pentru conectare la retea prin cablu ethernet si prin wifi la o retea folosita de obicei de catre hotspoturile facute prin telefoanele mobile Android. Reteaua este cea cu ssid=”AndroidAP” prezenta in exemplul de mai jos. O alta retea se poate adauga urmarind exemplul. ATENTIE! Imaginea este default Read-Only, pentru a fi protejat sd-cardul. Inainte de a se face orice modificare, se va da comanda “rw” (fara ghilimele) . Totodata, imaginea fiind comprimata, se va da apoi comanda:

/usr/lib/armbian/armbian-resize-filesystem start

Se asteapta aprox un minut dupa care se da reboot. Pentru conectarea la retea, se va completa ce este necesar in fisierul /opt/rolink/conf/svxlink.conf, adica credentialele primite la inregistrarea nodului.

Cei ce vor sa puna mana sa isi construiasca sistemul singuri, pot citi in continuare.

Se download-ează armbian de aici.

Imaginea se dezarhivează, rezultă un fișier cu extensia „img”.

Se download-ează de aici Balena Etcher, cu care se scrie fișierul img pe sd-card.

Recomand sd-card minim 4G, maxim 8G. Nu știu dacă se mai gaseste de 4G, dar de 8G este destul de răspandit și ieftin. De asemenea, să luați clasa „10”, deoarece au accesul mai rapid. Scrie pe card „Class 10”. Și să fie produs de o firmă cunoscută. Nu vă zgârciți.

După ce se scrie imaginea, se bagă în opi, se alimentează, se conectează la internet/rețeaua locală prin placa de rețea integrată și în câteva momente ar trebui să vă conectați prin ssh la sistem, pe adresa locală. Adresa o aflați din router, sistemul e configurat să își ia adresa prin dhcp.

Inițial vă conectați ca root, cu parola 1234; sistemul vă va cere să schimbați parola inițială într-una mai complexă și de asemenea, să creați un user cu care vă veți conecta de acum înainte.

Pentru următoarea conectare și rularea comenzilor uzuale, monitorizare etc, veți folosi user-ul respectiv, iar comenzile care necesită drepturi de root vor fi precedate de comanda sudo. Comanda sudo (substitute user do) permite rularea unor comenzi cu privilegiile de acces ale unui alt utilizator, de obicei root.

În materialul de față, pentru simplitatea editării, eu voi rula comenzile direct ca și root. Acest lucru se face prin comanda sudo su – după introducerea parolei, user-ul se va transforma în root, acest lucru se vede și în caracterul din stânga prompterului, care s-a transformat din $ în #. În continuare să dau următoarele comenzi:

apt update 
apt upgrade
apt install g++ cmake make libsigc++-2.0-dev libgsm1-dev libpopt-dev tcl-dev libgcrypt20-dev libspeex-dev libasound2-dev libopus-dev libogg-dev libjsoncpp-dev libcurl4-openssl-dev alsa-utils vorbis-tools curl git-core ca-certificates

Instalarea de față, după o idee a lui Adrian – YO8RXT, nu va fi una standard, ci se va face în directorul rolink din /opt; aceasta va simplifica configurarea și monitorizarea programului svxlink.

cd /opt
git clone https://github.com/sm0svx/svxlink
cd svxlink
cd src
mkdir build 
cd build  
cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/opt/rolink \
       -DSYSCONF_INSTALL_DIR=/opt/rolink/etc \
       -DSVX_SYSCONF_INSTALL_DIR=/opt/rolink/conf \
       -DSHARE_INSTALL_PREFIX=/opt/rolink/share \
       -DSVX_SHARE_INSTALL_DIR=/opt/rolink/share \
       -DSVX_MODULE_INSTALL_DIR=/opt/rolink/lib/modules \
       -DLOCAL_STATE_DIR=/opt/rolink/var \
       -DCMAKE_BUILD_TYPE=Release \
       -DCMAKE_C_FLAGS="-march=armv7 -mtune=generic-armv7-a" \
       -DCMAKE_CXX_FLAGS="-march=armv7 -mtune=generic-armv7-a" ..
groupadd svxlink
useradd -r -g daemon svxlink
make; make install 

Diferind de instalarea standard, librăriile necesare rulării programului nu se mai găsesc unde trebuie așa că va trebui să îi spunem sistemului unde se află acestea:

touch /etc/ld.so.conf.d/svxlink.libs.conf
echo "/opt/rolink/lib" > /etc/ld.so.conf.d/svxlink.libs.conf
ldconfig -v

ultima comandă ne arată că sistemul le găseste unde trebuie:

/opt/rolink/lib:
libasynccpp.so.1.6 -> libasynccpp.so.1.6.0.99.4
libasyncaudio.so.1.6 -> libasyncaudio.so.1.6.0.99.4
libasynccore.so.1.6 -> libasynccore.so.1.6.0.99.4
libecholib.so.1.3 -> libecholib.so.1.3.3

Dacă nu au apărut erori pe parcurs (și nu trebuie… dacă s-au respectat instrucțiunile) svxlink este instalat în acest moment.

Acum ne ocupăm de placa de sunet.  Ultimul kernel vine cu placa de sunet cu microfinul dezactivat, așa că trebuie să îl activăm:

alsamixer store

se apasă o data TAB ca sa ne pozitionam pe Capture, selectam MIC1 (cu săgețile stânga-dreapta) și, când e selectat, se apasă tasta SPACE.

Trebuie să arate ca în poză:

Urmează să edităm fișierele de configurare. Pentru asta trebuie să ne aflăm în directorul /opt/rolink/conf și să edităm fișierul svxlink.conf.

Acesta ar trebui să arate ca aici

[GLOBAL]
MODULE_PATH=/opt/rolink/lib/modules
LOGICS=SimplexLogic,ReflectorLogic
CFG_DIR=/opt/rolink/conf/svxlink.d
TIMESTAMP_FORMAT="%Y-%m-%d %H:%M:%S"
CARD_SAMPLE_RATE=48000
LINKS=ReflectorUpLink

[ReflectorUpLink]
CONNECT_LOGICS=SimplexLogic:99:R,ReflectorLogic
DEFAULT_ACTIVE=1
TIMEOUT=10
[SimplexLogic]
TYPE=Simplex
RX=LocalVoter
TX=Tx1
CALLSIGN=yo0xxx
SHORT_IDENT_INTERVAL=10
LONG_IDENT_INTERVAL=30
EVENT_HANDLER=/opt/rolink/share/events.tcl
DEFAULT_LANG=en_US
RGR_SOUND_DELAY=0
RGR_SOUND_ALWAYS=1
FX_GAIN_NORMAL=-5
FX_GAIN_LOW=-12

[ReflectorLogic]
TYPE=Reflector
HOST=bastus.go.ro
#HOST=reflector.rolink-net.ro
PORT=5300
CALLSIGN="nod_nou"
AUTH_KEY="qawsed"
JITTER_BUFFER_DELAY=250
DEFAULT_TG=226
MONITOR_TGS=226
TG_SELECT_TIMEOUT=99999
ANNOUNCE_REMOTE_MIN_INTERVAL=10
EVENT_HANDLER=/opt/rolink/share/events.tcl

[LocalVoter]
TYPE=Voter
RECEIVERS=Rx1
VOTING_DELAY=100
BUFFER_LENGTH=100
COMMAND_PTY=/dev/shm/voter_ctrl

[Rx1]
TYPE=Local
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
SQL_DET=GPIO
SQL_START_DELAY=0
SQL_DELAY=250
SQL_HANGTIME=0
SQL_TIMEOUT=180
GPIO_SQL_PIN=gpio10
SIGLEV_SLOPE=1
SIGLEV_OFFSET=0
SIGLEV_OPEN_THRESH=30
SIGLEV_CLOSE_THRESH=10
DEEMPHASIS=0
PEAK_METER=0
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
DTMF_SERIAL=/dev/ttyS0
compression - recomandat activ
RxComp=1
RxCompThreshold=-30
RxCompRatio=0.5
RxCompAttack=50
RxCompDecay=5000

[Tx1]
TYPE=Local
TX_ID=T
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
PTT_TYPE=GPIO
PTT_PIN=gpio7
TIMEOUT=300
TX_DELAY=100
PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15
##compression - recomandat activ pe portabile
TxLimit=1
TxComp=1
TxCompThreshold=-90
TxCompRatio=0.5
TxCompAttack=10
TxCompDecay=5000

Svxlink trebuie pornit automat la pornirea sistemului, așa ca în directorul rolink creăm următorul fișier, numit rolink-cron.d, în care vom pune comenzile de mai jos:

*       *       * * *   root    /opt/rolink/scripts/checkalive.sh
*       *       * * *   root    /opt/rolink/scripts/network.sh
*       *       * * *   root    /opt/rolink/scripts/reflector-test.sh 
17      3       * * *   root    /opt/rolink/scripts/rolink-re-start.sh

Îi vom face link către directorul demonului cron:

ln -v -s /opt/rolink/rolink-cron.d /etc/cron.d/rolink

Scripturile la care se face referire mai sus, va trebui să le creăm, ca tot ansamblul să funcționeze. Așadar:

md scripts
cd scripts
nano checkalive.sh

și aici punem:

#!/bin/bash

if [ "$(pgrep -c svxlink)" != "1" ]; then
   echo "re-start svxlink"
   /opt/rolink/scripts/rolink-start.sh
fi
exit 0

Salvăm, ieșim și creăm urmatorul fișier: rolink-start.sh

#!/bin/sh
. /opt/rolink/scripts/gpio-up.sh
export LD_LIBRARY_PATH="/opt/rolink/lib"
[ "$(pidof svxlink)" != "" ] && killall -v svxlink
/opt/rolink/bin/svxlink --daemon --config=/opt/rolink/conf/svxlink.conf --logfile=/tmp/svxlink.log --runasuser=root --pidfile=/var/run/svxlink.pid
echo heartbeat > /sys/class/leds/orangepi:red:status/trigger
#

gpio-up.sh:

#! /bin/sh
useradd -M -N -G daemon,audio svxlink
GPIO_USER=root
GPIO_GROUP=daemon
GPIO_MODE=664
GPIO_PATH=/sys/class/gpio
function gpio IN pin
gpioin() {
 N=$1
 [ ! -d ${GPIO_PATH}/gpio${N} ] && [ -n "$N" ] && echo ${N} > ${GPIO_PATH}/export
  echo "in" > ${GPIO_PATH}/gpio${N}/direction
  [ -n "$GPIO_USER" ]  && chown "$GPIO_USER"  ${GPIO_PATH}/gpio${N}/value
  [ -n "$GPIO_GROUP" ] && chgrp "$GPIO_GROUP" ${GPIO_PATH}/gpio${N}/value
  [ -n "$GPIO_MODE" ]  && chmod "$GPIO_MODE"  ${GPIO_PATH}/gpio${N}/value
}
function gpio OUT pin state
gpioout() {
  N=$1
  V=$2
  [ ! -d ${GPIO_PATH}/gpio${N} ] && [ -n "$N" ] && echo ${N} > ${GPIO_PATH}/export
  echo "out" > ${GPIO_PATH}/gpio${N}/direction
  [ -n "$V" ] && echo ${V} > ${GPIO_PATH}/gpio${N}/value
  [ -n "$GPIO_USER" ]  && chown "$GPIO_USER"  ${GPIO_PATH}/gpio${N}/value
  [ -n "$GPIO_GROUP" ] && chgrp "$GPIO_GROUP" ${GPIO_PATH}/gpio${N}/value
   [ -n "$GPIO_MODE" ]  && chmod "$GPIO_MODE"  ${GPIO_PATH}/gpio${N}/value
}
echo '### SQL - set PA20|gpio20/gpio26 in'
gpioin 10
echo '### PTT - set PA10|gpio10/gpio19 out high'
gpioout 7 0
gpioout 6 0
ls -1d ${GPIO_PATH}/gpio*
cat /sys/kernel/debug/gpio
#

network.sh:

#!/bin/bash
# RoLink
PAT='-p 526F4C696E6B'
echo 0 > /sys/class/leds/orangepi:red:status/brightness
ping reflector/vpn
ping -q -A -c 3 -W 10 $PAT reflector.rolink-net.ro > /dev/null 2>&1
if [ $? -ne "0" ]; then
  echo heartbeat > /sys/class/leds/orangepi:red:status/trigger
  # ping internet - google-public-dns-b.google.com [8.8.4.4]
  ping -q -A -c 3 -W 10 $PAT google-public-dns-b.google.com > /dev/null 2>&1
  if [ $? -ne "0" ]; then
    systemctl daemon-reload
    sleep 3
    systemctl restart networking
  fi
fi
echo 255 > /sys/class/leds/orangepi:red:status/brightness
exit 0
#

Orangepi zero are două led-uri, pe cel verde îl lăsăm în pace, când este aprins ne indică faptul că hardware sistemul este ok, cel roșu e folosit pentru statusul sistemului svxlink. Astfel, când programul este funcțional, led-ul va lumina intermitent, iar când este conectat în Rețeaua RoLink led-ul va fi aprins permanent.

reflector-test.sh

#!/bin/bash
LOG=/tmp/svxlink.log
INF=/tmp/reflector.test
REFOF=$( tail -50 $LOG | grep -ia 'ReflectorLogic: Disconnected from' | tail -1 )
REFON=$( tail -50 $LOG | grep -ia 'ReflectorLogic: Using audio codec' | tail -1 )
REFDEC=$( echo -e "${REFOF}\n${REFON}" | sort -n | tail -1 | grep -ia 'ReflectorLogic: Disconnected from' )
if [ "$REFDEC" != "" ]; then
  echo 'FAIL' > ${INF}
  exit 1
else
  rm -f ${INF}
fi
exit 0

Va trebui să dăm drept de execuție pe fișierele create:

chmod 755 *.sh

și să facem un simlink către rolink-restart.sh

ln -s rolink-start.sh rolink-re-start.sh

În momentul de față sistemul este pregătit de conectare. Cu configurația actuală, se va conecta la un reflector de test configurat în mod papagal, care vă va ajuta la testele de modulație. Pentru conectarea la rețea, în svxlink.conf vor trebui modificate aceste linii (trebuie să arate ca mai jos):

#HOST=bastus.go.ro
HOST=reflector.rolink-net.ro

iar aici:

CALLSIGN="nod_nou"
AUTH_KEY="qawsed" 

va trebui introdus user-ul și parola pe care ar trebui sa le primiți în prealabil de la administratorii Retelei RoLink.

Mai jos urmează configurarea modulului SA818/DRA818.

Modulul comunică pe interfața serială cu sistemul. Interfața este folosită doar pentru programarea acestuia, nu are alt rol în comunicație. De obicei armbian vine cu interfețele de comunicație serială neconfigurate, așa că va trebui să verificăm în /boot/armbianEnv.txt existența următoarei linii, care va trebui să arate ca mai jos (dacă nu, se editează):

overlays=usbhost1 usbhost2 analog-codec uart1 uart2

Va trebui să adaugăm un script care ne va ajuta în programarea modulului. Deci:

nano /opt/rolink/scripts/orangeserial.py
import time
import serial
ser = serial.Serial(
     port='/dev/ttyS1',
     baudrate=9600
 )
ser.isOpen()
print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
input=1
while 1 :
     # get keyboard input
     input = raw_input(">> ")
         # Python 3 users
         # input = input(">> ")
     if input == 'exit':
         ser.close()
         exit()
     else:
         # send the character to the device
         # (note that I happend a \r\n carriage return and line feed to the characters - this is requested by my device)
         ser.write(input + '\r\n')
         out = ''
         # let's wait one second before reading output (let's give device time to answer)
         time.sleep(1)
         while ser.inWaiting() > 0:
             out += ser.read(1)
     if out != '':         print ">>" + out

Scriptul de programare este făcut în Python. Vor trebui date urmatoarele comenzi, că sa meargă:

apt install python-pip
pip install pyserial

Pornim scriptul cu:

python orangeserial.py

după care dăm următoarele comenzi:

AT+DMOCONNECT

Dacă totul este în regulă, modulul va raspunde cu:

+DMOCONNECT:0

Deci, programăm frecvența:

AT+DMOSETGROUP=1,432.5500,432.5500,0013,4,0013

Ultimele 3 grupe reprezintă tonul ctcss la emisie și recepție (13->103.5) și nivelul de squelch (4).

și nivelul audio la ieșire din modul:

AT+DMOSETVOLUME=2

Ieșim scriind: exit

Configurare network pentru autoconectare la ethernet/wifi/usb/modem

By default armbian vine cu network-manager instalat. Îl dezinstalăm:

apt remove --purge network-manager

Mergem în /etc/network/interfaces și punem aceasta:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
wireless-mode Managed
wireless-power off

Salvăm, apoi:

nano /etc/wpa_supplicant/wpa_supplicant.conf

în care punem de exemplu:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
#ap_scan=0
update_config=1
network={
        ssid="AndroidAP"
        psk="123456789"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        auth_alg=OPEN
}
network={
        ssid="acme"
        psk="123456789"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        auth_alg=OPEN
}

Aici avem configurate două rețele, prima e un hotspot din telefon și a doua este retțaua de acasă, de exemplu.

Administrare online

Daca ați observat în svxlink.conf o chestie numită “[LocalVoter]” , aici este cazul să explicăm la ce se folosește. Din documentație, aflăm că svxlink știe să lucreze cu receptoare multiple, nu este cazul aici, însă pentru gestionarea acestora, s-au introdus niște comenzi: Rx(x)Enable/Disable. În configurația cu un singur receptor, acestea nu funcționează, de aceea am recurs la acest artificiu, și anume receptorul introdus prin voter. Asta face ca într-o situație reală și anume paraziși pe recepție, cu o comandă, să putem opri recepția nodului fără a interveni fizic asupra acestuia sau a streamului din rețea, și să-l repornim când este cazul sau după un anumit interval de timp.

Deci: cd /opt/rolink/scripts

și mai adaugăm un fișier de stare:

touch t_rx

și trei scripturi:

rx_on.sh

#!/bin/bash
echo "ENABLE Rx1" > /dev/shm/voter_ctrl
echo -n "1" > /opt/rolink/scripts/t_rx

rx_off.sh

#!/bin/bash
echo "DISABLE Rx1" > /dev/shm/voter_ctrl
echo -n "0" > /opt/rolink/scripts/t_rx

rx.sh

#!/bin/bash
exec=$(</opt/rolink/scripts/t_rx)
if [ "$exec" == "1" ]; then
echo "ENABLE Rx1" > /dev/shm/voter_ctrl
else
echo "DISABLE Rx1" > /dev/shm/voter_ctrl
fi
exit 0

Acesta din urmă se ocupă de verificarea ultimei stări a receptorului, în caz de restart de exemplu. Pentru asta va trebui să-l adaugăm în fișierul rolink-cron.d din directorul rolink.

*       *       * * *   root    /opt/rolink/scripts/rx.sh

Atenție să fie executabile scripturile, deci:

chmod 755 rx*.sh

Următorul lucru este să instalăm soluția client/server oferită de Răzvan – YO6NAM de aici:

https://github.com/yo6nam/phpKontrol

Dacă nu suntem dispuși să instalăm server, instalăm doar clientul și apelăm la bunăvoința lui Răzvan pentru o pagină de administrare de pe binecunoscutul server XPANDER

Configul ‘launcher.conf’ pentru scripturile de mai sus arată asa:

logfile         = '/var/log/phpKontrol'
mqtt_broker     = 'ex_host.ro'          # default: 'localhost'
mqtt_port       = 1883                  # default: 1883
mqtt_clientid   = 'client_789'            # must be unique!
mqtt_username   = 'gigi'
mqtt_password   = 'bestialu'
mqtt_tls        = None                  # default: No TLS

topiclist = {
        "devices/cmd"   :   {
                'client_789_on'   :   [ 'bash', '/opt/rolink/scripts/rx_on.sh' ],
                'client_789_off'  :   [ 'bash', '/opt/rolink/scripts/rx_off.sh' ],
        },
}

Parametrii mqtt îi completăm cu ce primim de la Răzvan.

Interfața de administrare de pe mobil arată asa:

Ce este reflectorul și un exemplu de configurare

Reflectorul, parte a pachetului svxlink de ceva vreme, este un mic program care asigură interconectarea nodurilor. Configurarea sa este simplă și intuitivă și nu are nevoie de multe resurse; poate rula pe același sistem ca și clientul svxlink.

Exemplu de svxreflector.conf:

###################################################################
#
# Configuration file for the SvxReflector SvxLink conference node
#
###################################################################

[GLOBAL]
#CFG_DIR=svxreflector.d
TIMESTAMP_FORMAT="%c"
LISTEN_PORT=5300
#SQL_TIMEOUT=600
#SQL_TIMEOUT_BLOCKTIME=60
#CODECS=OPUS
TG_FOR_V1_CLIENTS=9
#RANDOM_QSY_RANGE=12399:100
HTTP_SRV_PORT=8090

[USERS]
YO7GQZ-1=MyNodes
YO7GQZ-2=MyNodes
PITESTI=MyNodes
CLIENT_NOU=Teste
#SM3XYZ=SM3XYZ

[PASSWORDS]
MyNodes="qweasdf"
Teste="123456"

Acesta este un exemplu de reflector ce funcționează la Pitești. Nodurile sunt cele cu denumirea din secțiunea [ReflectorLogic] a clientului.

Trebuie avut în vedere ca portul 5300 să fie accesibil extern pentru clienții din exterior. Clientul local se poate conecta la localhost.

Scripturile de pornire și verificare:

reflector-start.sh

#!/bin/sh


[ "$(pidof svxreflector)" != "" ] && killall -v svxreflector

/opt/rolink/bin/svxreflector --daemon --config=/opt/rolink/conf/svxreflector.conf --logfile=/tmp/svxreflector.log --runasuser=root --pidfile=/var/run/svxreflector.pid

#

Și mai adaugăm în scriptul checkalive.sh și verificarea de reflector:

if [ "$(pgrep -c svxreflector)" != "1" ]; then
  echo "re-start reflector"
  /opt/rolink/scripts/reflector-start.sh
fi

Atenție! Inaintea liniei “exit 0” se adaugă cele de mai sus.

Va urma:

-legarea mai multor noduri la un reflector și un exemplu de mini-rețea

-configurare modem 3G/4G

-qso recorder

-configurare voce, alta decât cea standard

-anunțuri personalizate

-monitor de propagare

-imagine gata configurată

’73

Cătălin – YO7GQZ