VOX com Timeout-Timer

Novo desafio - conseguir aproveitar um rádio antigo para comunicações digitais e que não dispõe de Rig Control para PTT, no meu caso o ASTRO B da Cubic Communications…

O som vem de uma placa USB com o IC CM108, simulado pelo gerador de 1KHz e o botão de pressão que estão ali apenas para testar o projecto.

Desenhei o circuito com ajuda da APP iCircuit para Mac OS X e depois montei tudo numa breadboard e funcionou conforme o esperado.

O circuito é composto por um OP-AMP pré-amplificador onde depois o sinal é retificado para fazer o sistema VOX. Em seguida o sinal é invertido e controlado por um temporizador com o 555 que desliga a PTT caso o sinal seja contínuo e por mais de cerca de 3 minutos.

O segundo OP-AMP serve de buffer pois a ligação "Radio Mic" vai ao microfone evitando assim accionar o sistema VOX.

Incluí alguns potenciómetros para controlar os níveis e penso agora utilizar este rádio para comunicações digitais em HF - packet, Ardop e VARA, com apenas um raspberry pi e uma placa de som!

Download do projecto para o iCircuit.

Referências:
https://eindhoven.space/radio-experiments/packet-radio/vara-ardop/raspberry-pi4-trifecta-tnc-bank-image-companion-documentation/

Como atribuir nomes a devices HidRaw (parte 3)

Este artigo conclui o tema sobre a atribuição de nomes a devices, referidos na parte 1 e parte 2, quando os fabricantes não atribuiem um número de série e 2 ou mais dispositivos parecem-nos iguais e impossíveis de identificar…
Os dispositivos HidRaw permitem aceder a interfaces USB e bluetooth sem alteração de dados ou protocolo. Significa em inglês original - Raw Access to USB and Bluetooth Human Interface Devices.

Por vezes os nossos projectos necessitam de chamar estes devices para comunicarem… dou como exemplo a utilização do controlo de PTT pelas placas de som CM108 e CM119, descrito no artigo packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 2), onde o direwolf usa o pino 13 do GPIO para pôr o rádio em transmissão, através do comando "PTT CM108 3 /dev/hidraw3".

Como consegue imaginar, ao reiniciar o sistema operativo, estes devices mudam a ordem à medida que o kernel as lê e lhes atribui um número… este é o problema que aqui resolvo, a atribuição de um nome ou symlink a um device hidraw para que, independentemente da ordem atribuída pelo kernel, saibamos sempre como comunicar com ele!
Note, este procedimento só é válido (à semelhança dos procedimentos descritos nos artigos anteriores) se e só se o nosso device USB se encontrar sempre ligado à mesma porta USB, seja directamente à board ou através de um HUB USB!

Identificar o device

Antes de ligar o seu dispositivo USB, execute o comando,

e obtém, por exemplo

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2

Agora ligue o seu dispositivo e execute o comando novamente… apareceu um novo device. Este é o nosso device, aquele que vamos configurar,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3

Agora que sabemos que ao nosso device lhe foi atribuido o número 3, como /dev/hidraw3, fazemos

de modo a obtermos toda a informação deste device,

De onde retiramos algumas das variáveis que nos permitem agora identificar o nosso dispositivo, uma vez mais, sempre que este se encontre ligado à mesma porta USB.

Criar o nome ou symlink

Escrevemos ACTION=="add", pois só queremos adicionar este dispositivo quando ele é ligado.
Apenas queremos identificar dispositivos hidraw, então escrevemos SUBSYSTEM=="hidraw", ver linha 9.
Se tiver vários dispositivos iguais repare na linha 32 que identifica pelo kernel a porta USB a que este dispositivo está ligado como, KERNELS=="1-1.2.1.1"
Comum aos nossos vários dispositivos, se existirem 2 ou mais, é o id do fabricante e o id do producto, respectivamente verificados nas linhas 38, ATTRS{idVendor}=="0d8c" e 57, ATTRS{idProduct}=="0012"
Agora é só atribuir-lhe um nome alternativo, com a instrução SYMLINK+="", que no meu caso se trata de uma placa de som CM108 que pretendo, como disse, controlar o PTT através do GPIO…

Construímos a linha a colocar no nosso ficheiro udev rules descrito nos artigos anteriores em /etc/udev/rules.d/99-hamlib.rules, na continuação das instruções que já escrevi…

Na janela terminal escreva, como sudo ou root,

Avance até à última linha, substitua as variáveis ao seu dispositivo e escreva, neste meu exemplo, e para cada uma das suas placas de som onde pretende controlar o PTT,

ACTION=="add", SUBSYSTEM=="hidraw", KERNELS=="1-1.2.1.1", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0012", SYMLINK+="hidHFpacket"

Cada vez que escreve no ficheiro rules aplique as configurações, com sudo ou root, o comando,

Agora, no direwolf o comando passará a ser,

PTT CM108 3 /dev/hidHFpacket

O nosso dispositivo é agora reconhecido pelo nome "hidHFpacket". Verifique, escrevendo no terminal,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3
lrwxrwxrwx 1 root root       7 Mar 14 22:44 /dev/hidHFpacket -> hidraw3

Quer ver agora todos os symlinks criados nestes artigos? Substitua as palavras de acordo com o nome que atribuiu e escreva,

Referências:
https://docs.kernel.org/hid/hidraw.html
https://github.com/nasa/IDF/wiki/Differentiating-Identical-Devices
http://reactivated.net/writing_udev_rules.html
https://github.com/nasa/IDF/wiki/Device-Permissions

Como atribuir nomes a placas de som em linux (parte 2)

No post anterior tratámos da atribuição de nomes a devices série ttyUSB para identificar a ligação a rádios ou portas série.
Neste post vamos atribuir nomes a devices de audio, muito útil quando queremos configurar devices de som e nos aparecem listas de 30 e mais periféricos de som a configurar no software, por exemplo, para modos digitais como JS8Call, FT8, SSTV, ou direwolf em AX.25 e tudo nos parece uma confusão…

Confusão maior porque de cada vez que reiniciamos o computador ou o raspberry pi estes devices de som arrancam por ordem aleatória!

O método descrito tem uma condição - os devices de som USB têm de estar ligados sempre na mesma porta USB, seja directamente ou através de um HUB USB, isto se utilizarmos devices com o mesmo idVendor, idProduct e número de série.

Pode parecer estranho o porquê deste artigo! Mas neste projecto eu tenho a saída de audio do raspberry para os auscultadores, a saída do monitor, os 2 rádios Icom, um FT-817, e 5 placas de som alsa para AX.25 através do modem por software direwolf ligadas cada uma a seu rádio! De cada vez que reinicio o raspberry é uma trapalhada acertar todos os devices pela ordem com que foram configurados inicialmente! Já faz sentido?

Em linux existem diferentes camadas para a utilização de som: alsa e pulse audio. Há software que utiliza alsa outros que utilizam pulse audio…
Este é um artigo prático, consulte as referências bibliográfica para compreender a teoria por detrás dos devices de som em linux.

Atribuir nomes aos devices Alsa e Pulse Audio

Aqui o objectivo é, conhecer a identificação de cada um dos devices de som dos nossos Icom ou outro equipamento, adicioná-los ao ficheiro anterior /etc/udev/rules.d/99-hamlib.rules com um nome ou symlink que o designará mais facilmente…

Ligue à vez, a ficha USB do IC-7300, siga o procedimento abaixo descrito, desligue esta ficha e ligue agora a USB do IC-9700…

Para saber o id do device de som abra uma janela terminal e escreva,

ou, sem querer causar mais ruído, pode também conhecer o id de cada periférico fazendo, "udevadm monitor --subsystem=sound", desligando e voltando a ligar cada uma das fichas USB…

Bom, o primeiro comando devolverá uma série de linhas, das quais apenas nos interessa identificar algo semelhante a,

(para o IC-7300)
name: <alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo>
sysfs.path = "/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card2"

(para o IC-9700)
name: <alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.2>
sysfs.path = "/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card3"

Agora, no output gerado para o IC-7300, pegamos apenas na expressão,
"/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card"

e construímos o código a escrever no ficheiro 99-hamlib.rules
Note que, este é o resultado do meu exemplo… deverá substituir esta expressão de acordo com o resultado que obteve! Estes valores identificam a porta USB a que o device se encontra ligado e o próprio device.

Na janela terminal escreva como sudo ou root,

e, a seguir às regras da primeira parte do artigo, relativas aos devices ttyUSB adapte e copie o seguinte código,

# ALSA devices
# IC-7300 Sound Card
SUBSYSTEM!="sound", GOTO="ic7300_alsa_naming_end"
ACTION!="add", GOTO="ic7300_alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card?", ATTR{id}="IC-7300"
LABEL="ic7300_alsa_naming_end"

# IC-9700 Sound Card
SUBSYSTEM!="sound", GOTO="ic9700_alsa_naming_end"
ACTION!="add", GOTO="ic9700_alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card?", ATTR{id}="IC-9700"
LABEL="ic9700_alsa_naming_end"

# PulseAudio devices
# IC-7300  pulseaudio device
SUBSYSTEM!="sound", GOTO="ic7300_pa_naming_end"
ACTION!="change", GOTO="ic7300_pa_naming_end"
KERNEL!="card*", GOTO="ic7300_pa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card?", ENV{SOUND_DESCRIPTION}="IC-7300"
LABEL="ic7300_pa_naming_end"

# IC-9700 pulseaudio device
SUBSYSTEM!="sound", GOTO="ic9700_pa_naming_end"
ACTION!="change", GOTO="ic9700_pa_naming_end"
KERNEL!="card*", GOTO="ic9700_pa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card?", ENV{SOUND_DESCRIPTION}="IC-9700"
LABEL="ic9700_pa_naming_end"

Não se esqueça de ligar as fichas dos rádios sempre nos mesmos portos de ligação USB! Caso contrário este procedimento não servirá para nada!

Placas de som Alsa ligadas ao direwolf

Se for também o seu caso, proceda como anteriormente descrito, e ao meu ficheiro 99-hamlib.rules acrescentei ainda,

# CM108 ALSA devices for direwolf
# DEVPATH can be obtained by looking at `udevadm monitor --subsystem=sound` while pluging in the sound card.
# Do one card at a time, the "?" char on card should stay as it matches any card number that may pop on that USB port.
SUBSYSTEM!="sound", GOTO="alsa_naming_end"
ACTION!="add", GOTO="alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.1/1-1.2.4.1:1.0/sound/card?", ATTR{id}="UHFpacket"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.2/1-1.2.4.2:1.0/sound/card?", ATTR{id}="VHFpacket"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.3/1-1.2.4.3:1.0/sound/card?", ATTR{id}="VHFpacketSat"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.1/1-1.2.1.1:1.0/sound/card?", ATTR{id}="HFpacket"
LABEL="alsa_naming_end"

Desligue e volte a ligar estas placas de som e escreva no terminal, substituindo nomes ou wildcards... exemplo,

Artigo relacionado - Solução de problemas com a placa de som CM108

Outros comando utilizados para melhor compreender este projecto

Continua...

Referências:
https://x8x.net/2019/04/04/icom-ic-9700-and-ic-7300-coexisting-in-linux/
https://gist.github.com/Aishou/f39c2f970c6db20e1845925c5cc0890e
https://www.florian-wolters.de/posts/static-sound-device-names-ic9700-ic7300/
https://blog.habets.se/2021/12/Linux-Sound-devices-are-a-mess.html

Contacto de APRS com Marrocos via ISS

Hoje recebi um e-mail de um colega rádio amador de Marrocos, o CN8MM, que publicou um filme sobre a reparação e programação de um rádio Motorola GM360 e que o utilizou para contactos de packet e APRS via satélite... no final, ao minuto 44 e 43 segundos demonstra o contacto comigo em 145.825 via ISS!

Uma recordação a guardar!
Obrigado amigo Cherkaoui Mustapha, 73.

Actualização automática de programas escritos por John, G8BPQ

Este script para linux implementa algumas melhorias em relação ao post anterior e permite-lhe actualizar diversos programas que se encontrem na sua pasta local e disponíveis para download, por exemplo, na sua versão beta de G8BPQ. Guarda uma cópia das versões anteriores, na pasta versions, caso necessitemos de fazer o restauro e pára o linbpq. Se o linbpq estiver configurado como serviço deverá reiniciar logo após ser parado.

Neste exemplo utilizo um raspberry pi 4, que corre em simultâneo uma versão do pi-star MMDVM modificada e que utilizo como computador para modos digitais e IoT...

Copie e cole o código seguinte na pasta onde tem instalado os diversos programas BPQ. No meu caso em /usr/local/bin/linbpq/

Cole o seguinte código, ou faça o seu download se está a utilizar a página traduzida e leia atentamente as instruções comentadas no início do ficheiro.

Grave e saia. Se editou com o "nano" faça CTRL+s e em seguida CTRL+x, tudo em minúsculas.
Atribua permissões de execução ao ficheiro,

e, execute-o

Adiciona a seguinte linha em /etc/crontab, modificando o user e localização do seu script.

Para melhor compreender este assunto, consulte o meu post anterior...

Referências:
https://packet-radio.net/update-linbpq-with-up2bpq/

SSID packet/APRS

30 anos separam a época actual com aquela em que comecei a fazer rádio packet. Na altura ainda não se ouvia falar de APRS...

Hoje com o APRS a crescer e a ganhar relevância parece que não há entendimento sobre quais os SSID a utilizar num e noutro modo, entrando por vezes em conflito na nossa percepção, os SSID utilizados no packet e em APRS.

Compilei aqui algumas fontes sobre como sugerem a organização de ambos e um pequeno ensaio do que, com base nos SSID de packet e APRS proponho adoptar...

A minha proposta para a utilização de SSID no packet/APRS

-0 (or without SSID) your station/node, network nodes
-1 BBS or personnal mailboxes (usually a TNC-based pBBS)
-2 chat rooms, P2P, conference bridges
-3 gateways and cross-port digipeater
-4 DX cluster network
-5 other networks integration (D-Star, DMR, Fusion...)
-6 special activity, IOTA, SOTA, Satellite, camping or 6 meters…
-7 radio handheld, walkie talkies, HT's or other human portable
-8 boats, sailboats, RV's or second main mobile
-9 mobile phones, tablets and computers
-10 internet links, iGates, echolink, Winlink/RMS, AVRS, APRN…
-11 balloons, aircraft, spacecraft, etc
-12 APRStt, DTMF, RFID, devices, one-way trackers…
-13 weather stations
-14 truckers or generic, additional stations or activities
-15 generic, additional stations or activities

Este ensaio tem como fundamento as duas correntes de ideias a seguir descritas e pretende encontrar um entendimento respeitando o mais possível cada uma delas, assim como as práticas de utilização de SSID no dia a dia, por escuta das radio frequências.

Na perspectiva de APRS

Note, the SSID of zero is dropped by most display applications. So a callsign with no SSID has an SSID of 0.
-0 your primary station usually fixed and message capable
-1 generic additional station, digi, mobile, wx…
-2 generic additional station, digi, mobile, wx…
-3 generic additional station, digi, mobile, wx…
-4 generic additional station, digi, mobile, wx…
-5 other networks (Dstar, Iphones, Androids, Blackberry's etc)
-6 special activity, Satellite ops, camping or 6 meters…
-7 walkie talkies, HT's or other human portable
-8 boats, sailboats, RV's or second main mobile
-9 primary Mobile (usually message capable)
-10 internet links, Igates, echolink, winlink, AVRS, APRN…
-11 balloons, aircraft, spacecraft, etc
-12 APRStt, DTMF, RFID, devices, one-way trackers…
-13 weather stations
-14 truckers or generally full time drivers
-15 generic additional station, HF, digi, mobile, wx…

Referências:
http://www.aprs.org/aprs11/SSIDs.txt

Na perspectiva de packet & net105

none (-0) home stations
-1 home station personnal mailboxes (usually a TNC-based PBBS)
-2 gateways and cross-port digipeater
-3 full-service BBS's (those that forward mail/bulletins)
-4 network nodes (having two or more radio ports that
                  perform routing functions via TCP/IP,
                  NetROM, etc... Can be combined with BBS's that also
                  perform routing)
-5 console/keyboard -or- printer
-6 conference bridges
-7 NetROM/X1J/Knet/BPQ nodes
-8 cross-band digipeaters
-9 mobile / modats
-10 Winlink 2K
-11 - unassigned -
-12 - unassigned -
-13 - unassigned -
-14 - unassigned -
-15 (often used as a downlink address when exiting the far
end of a network connection)

Referências:
https://groups.io/g/network105/topic/welcome_to_all_network_105/11899281
https://wiki.complete.org/PacketRadio
https://wiki.complete.org/PacketRadioOnHF
http://www.mi-drg.org/ssid.shtml
https://www.ea1uro.com/pdf/Paradigma_APRS_IARU.pdf

Beacons e APRS de CT1EBQ

Este serviço de packet rádio e APRS corre num raspberry pi 4, com 4Gb de RAM, projecto descrito nos diversos posts do blog, e tem activas as seguintes portas, frequências e modos em RF.
Estes rádios ligam-se e desligam-se sob determinadas condições, nascer e pôr do Sol, propagação e o AOL/LOS de satélites no locator IM58.

  port 1 – AX.25 UDP
  port 2 – telnet Internet access
  port 3 – UHF 432.500MHz packet 9600baud, 30W J-Pole antenna
  port 4 – VHF 145.800MHz packet 1200baud, 40W J-Pole antenna
  port 5 – VHF 145.825MHz packet 1200baud SatGate, 50W J-Pole antenna (ON only if APRS Sat in the sky)
  port 6 – HF 14.105MHz LSB packet 300baud net105 (ON between 07:42 - 19:09, UTC time), 80W 1/4λ sloper dipole antenna
  port 7 – HF 14.1035MHz ARDOP 2000 (ON between 07:42 - 19:09, UTC time), 80W 1/4λ sloper dipole antenna (experimental)
  port 8 - HF 10.1475MHz USB packet 300baud, 15W terminated folded dipole (problemas em TX, rádio em reparação)
(frequências recomendadas pela IARU)

Todas as portas suportam APRS e estão ligadas ao iGate. Pode ver o que elas estão a escutar...

Os beacons funcionam em cross port digi de acordo com as seguintes regras:

  • todos os beacons escutados em qualquer port são retransmitidos em UHF na porta 3
  • os beacons recebidos no port 3 e 4 são retransmitidos na frequência de APRS Satélite no port 5
  • os beacons de APRS dos satélites ou de estações terrestres retransmitidos pelos satélites são enviados para as redes de VHF, na porta 4 e UHF na porta 3
  • por fim os beacons recebidos em HF são retransmitidos em UHF na porta 3

Existe ainda uma bridge de packet entre HF e VHF na porta 4, apenas num sentido e, entre o VHF satélite e o VHF nacional, porta 4 e o UHF, também apenas neste sentido.

Com excepção dos beacons de identificação e weather, disponibilizados pelo BPQ, é fruto de um trabalho exaustivo de programação em linux shell script e python, que me deram um gozo enorme!

Beacons de presença e identificação da estação

CT1EBQ: !3842.76N925.38W-PHG9130CT1EBQ, Cascais PT IM58gr, Rpi project bit.do/ct1ebq
CT1EBQ: !3842.76N/00925.38W-PHG5330CT1EBQ, Cascais PT IM58gr, Rpi project bit.do/ct1ebq
CT1EBQ-3: !3842.76N/00925.38W&APRS WX/iSatXGate/RMS/BBS/DX Cluster HF/VHF/UHF, bit.do/ct1ebq
CT1EBQ, port 6: !3842.76N\00925.38W-PHG9130CT1EBQ, Cascais PT IM58gr, Rpi project bit.do/ct1ebq

Informação de meteorologia

Port: 3, 4
TX: a cada 20 minutos
Fonte: https://openweathermap.org
Beacon output (CT1EBQ-13):

@184830z3842.76N/00925.38W_220/011g000t014r000h00b10120WX in Cascais, PT - IM58GR

Formato de envio pelo BPQ

Jun 25 2020 14:15
340/022g000t072r000h60b10170

wind Direction/speed,gusts,temperature,rain,humidity,pressure

Telemetria

Port: 3, 4
TX: cada 10 minutos depois da hora
Fonte: origem no hardware local
Objectivo: testar condições do hardware (raspberry pi), dados e comunicações
Beacon output:

T#36.0C,5.084V,514.0mA,2635mW,70.98mV,11x11111111111

a)
get raspberry pi ups values
- temperature: 36,0 ºC - temperatura: 55 < need atention > 60 erro
- Bus Voltage: 5.084 V - tensão < 4,9 erro > need atention > 5V ok
- Bus Current: 514,0 mA - corrente > 750 mA need atention
- Power: 2635 mW - power > 4000 mW need atention
- Shunt voltage: 70,98 mV - shunt voltage > 120 mV need atention

Bits
estado normal: 11x111111111111

Primeiros 2 bits, antes de "x", (bit- descrição)
0- resume leituras de valores analógicos em a)
1- resume condições dos estados dos programas em b)

b)
verifica hardware e programas a correr em caso de falha envia mensagem para sysop (bit- descrição)
0- rádio HF ligado ou desligado de acordo com o cron
1- pi-star modem MMDVM está a correr em modo D-Star
2- linbpq (BPQ32) está a correr
3- direwolf 300 baud HF está a correr
4- direwolf 1k2 baud VHF está a correr
5- direwolf 1k2sg baud VHF (sat gate) está a correr
6- direwolf 9k6 baud UHF está a correr
7- descodificador de WSPR e pen USB RTL-SDR está presente e a correr
8- ficheiros de keplers actualizados (com menos de 5 horas)
9- o disco USB de backup está ligado e existe um backup inferior a 24 horas
10- verifica ligação de HRoT (ham radio of things)
11- aviso de alto nível de radiação beta ou gama

Envio de alerta por e-mail se existir erro, isto é, algum dos bits a zero.

Alerta de aproximação de satélites

Port: 3, 4
TX: sai 10 minutos antes do AOS dos satélites que estão a ser seguidos, no locator IM58
Fonte: predict local
Condições: o beacon só é enviado se a elevação máxima for superior a 8º (antena e topologia do terreno)
Beacon output (exemplo):

;ISS      *193003h3000.00N\01400.00ESAOS19:30 mEl51 Az314 Lat49N Long27W Rg1939Km @IM58 Mode: APRS

ISS - nome do satélite
193003h - hora de AOS (19h30m03s), compatibilidade com APRS
30.0000N - latitude onde o satélite irá fazer o AOS
014.0000E - longitude onde o satélite irá fazer o AOS

Valores para leitura humana,
AOS19:30 - hora local de AOS de ISS
mEl8 - 51º de elevação máxima nesta passagem em IM58
Az314 - azimute de AOS
Lat49N - latitude de AOS
Long27E - longitude de AOS
Rg1939Km - distância no AOS, de IM58
Mode - APRS, XPDR (Transponder - SSB ou CW), FM, CW

Satélites seguidos

Mode: XPDR
AO-7 (OSCAR 7)
FO-29 (JAS 2)
AO-73 (FUNCUBE 1)
XW-2A
XW-2B
XW-2C
XW-2D
XW-2E
XW-2F
NUSAT 1 (FRESCO)
EO-88 (NAYIF)
CAS 4A (ZHUHAI-1 01)
CAS 4B (ZHUHAI-1 02)
JO-97 (JY1SAT)
FO-99 (NEXUS)
CAS-6 (TO-108)
RS-44 (DOSAAF-85)
AO-109 (RADFXSAT-2)
JAISAT 1
TECHSAT 1B (GO-32)
LILACSAT 2
RS-15
Mode: FM
SO-50 (SAUDISAT 1)
AO-91 (FOX-1B)
AO-92 (FOX-1D)
LILACSAT 2
IO-86 (LAPAN A2)
PO-101 (DIWATA 2B)
AO-27 (EYESAT-1)
AO-95
FMN 1
AO-85 (FOX-1A)
UVSQ-SAT
TEVEL 1
TEVEL 2
TEVEL 3
TEVEL 4
TEVEL 5
TEVEL 6
TEVEL 7
TEVEL 8
Mode: APRS
ISS (ZARYA)
CSS (TIANHE-1)
FALCONSAT 3
PCSAT (NO-44)
LAPAN-A2 (IO-86)
AISat 1
PSAT2 (NO-104)
CAPE 3
TSURU (BIRDS-4)
GUARANISAT-1 (BIRDS-4)
Mode: DSTR
ISAT
SPARROW

A sua elaboração teve por base as referências da AMSAT e da N2YO
Communications Satellites
AMSAT Live OSCAR Satellite Status
Amateur Radio Satellites

Envio de mensagem para satélites de APRS

Port: 5
TX: de 30 em 30 segundos
Fonte: predict local
Condições: apenas durante a passagem de satélites de APRS com elevação superior a 6º (ângulo de take-off da antena e topologia circundante)
Path: CQ NA1SS,ARISS,APRSAT,PSAT
Beacon output (exemplos): posição e mensagens aleatórias

exemplos de CT1EBQ:
:CQ       :73 de ricardo@oitaven.pt IM58gr, join Rpi project ct1ebq.com
!3842.76N/00925.38W`PHG523073 de ricardo@oitaven.pt, Rpi ct1ebq.com

Nota: desde 16 de Abril de 2021 este projecto de APRS corre um bot que, envia beacons de posição, faz CQ a colegas escutados e responde a pedidos de contacto, 24h/dia automaticamente. Se fez algum contacto pode encontrar a sua QSL aqui...

Informação da Propagação

Port: 3, 4
TX: aos 4 minutos depois da hora, a cada 3 horas
Fonte: informações do DX Cluster
Tipo: Boletim
Beacon output:

:BLNP     :Propagation - SFI:73 A:1 K:0 No Storms -> Minor w/G1

Condições de propagação baseadas nos 3 factores:
SFI - Solar Flux Index
A - A Index, depende de K
K - K Index, melhores condições com valores baixos
No Storms -> Minor w/G1 - [situação actual] -> [previsão]

Referências:
DX spider command reference

Previsão das condições de MUF

Port: 3, 4
TX: 3 minutos após a hora
Fonte: informações do DX Cluster
Tipo: Boletim
Beacon output:

:BLNM     :MUF(26DbW)@IM58:PT80mS9,AZ30mS6+,MA40mS7+,EU30mS6+,NA15mS1,SA13mS1,AF13mS2,AS40mS1,OC-

(interpretation example)
MUF Bands and Signals
(26DbW) ~400Watts
@IM58: (QRA locator) previsão desde Cascais, Portugal
Portugal (PT): 80m, Signal: S9
Azores Island (AZ): 30m, Signal: S6+
Madeira Island (MA): 40m, Signal: S7+
Europe (EU): 30m, Signal: S6+
Norte America (NA): 15m, Signal: S1
South America (SA): 13m, Signal: S1
Africa (AF): 13m, Signal: S2
Asia (AS): 40m, Signal: S1
Oceania (OC): no communications

Referências:
DX spider command reference

Notificação da abertura da banda dos 6m

Port: 3, 4
TX: a cada 30 minutos
Fonte: spots de WSPR em 6m enviados por CT1EBQ @IM58
Tipo: Boletim
Condições: sempre que forem escutados beacons de WSPR de ~10mW em 6m emitidos por CT1EBQ e registados em wsprnet.org
Beacon output:

:BLN1PROP6:Good propagation condition on 6m band @IM58 #8 spots

Notificação da ocorrência de Sismos

Port: 3, 4
TX: à hora certa durante as 12h seguintes
Fonte: IPMA
Tipo: Boletim
Condições: na ocorrência de um sismo localizado ou sentido em Portugal com magnitude igual ou superior a 3.0 na escala de Richter
Beacon output:

:BLN1EQUAK:Sismo Mag.3.6 a Golfo de Cadiz @Wed 6 Out 06:08:44GMT 2021

Alerta de radioactividade

Port: 3, 4
TX: sempre que a radioactividade local exceda os 100uSv/h e depois de hora a hora enquanto o risco existir
Fonte: Geiger local
Tipo: Boletim
Condições: caso a radioactividade beta ou gama do radão, raios cósmicos, ou causas externas, excedam os valores naturais
Beacon output:

:BLN1GAMMA:Warning high level of radiation 100uSv/h in IM58gr @Fri 16 Sep 15:18:29 UTC 2022


Se tiveres curiosidade em saber como desenvolvi o código e tens outras ideias, por exemplo para enviar telemetria, ligar à tua estação meteorológica… terei todo o gosto em ajudar-te.

No entanto se algum destes beacons te incomodam, forem excessivos ou simplesmente não tens qualquer interesse em os receber por favor diz-me…

Todo o radio-amador é um experimentalista, logo é possível que estas dados sejam alterados e nem sempre aqui actualizados... última actualização a 06/01/2023.

Actualização automática do linbpq

Requisitos:
- linbpq instalado em qualquer distribuição linux, incluso em raspberry pi
- linbpq a correr como serviço, descrito no final deste post

Encontrei esta ideia em https://packet-radio.net/update-linbpq-with-up2bpq/ mas, falhava sob determinadas circunstâncias e fui melhorando ao longo do tempo…
Por exemplo, o script original não via 2 updates no mesmo dia, por vezes necessário para corrigir problemas detectados pelos utilizadores, no lançamento de uma nova versão beta.

Este script corrige este problema ao utilizar o timestamp, com horas e minutos. Irá guardar também todas as versões actualizadas, caso pretendamos voltar atrás, e fazer um downgrade, por uma qualquer funcionalidade perdida.

Recordo que no meu caso, tenho o linbpq instalado num raspberry pi no directório /usr/local/bin/linbpq/.
Corrija os caminhos do script de acordo com o seu local de instalação.

Para criar o script faça,

Copie e cole este script no seu editor de texto

A seguir dê-lhe permissões de execução

E, corra-o, por exemplo a partir do directório onde se encontra,

De modo a actualizar automaticamente, insira a seguinte linha no crontab, fazendo sudo nano /etc/crontab

Praticamente todos os exemplos neste blog dizem respeito a projectos a correr sob pi-star. Altere o utilizador "pi-star" para "pi" se correr sob raspberry pi ou o seu utilizador de login!
Veja ainda o meu post mais recente sobre este assunto.

Referências:
https://packet-radio.net/update-linbpq-with-up2bpq/

Notificação de novas mensagens na sua BBS

(versão beta)
Só recentemente e a meu pedido o John Wiseman, G8BPQ, introduziu a notificação de mensagens pessoais por APRS.

Com este artigo pretendo ir mais longe...
Quem tinha um TNC2 recorda-se com certeza que, quando recebia novas mensagens na pBBS, no painel frontal piscava um led amarelo, que se apagava quando estas eram lidas.
Essa funcionalidade, fácil de ser implementada num raspberry pi perdeu-se! Talvez por questões de compatibilidade com a versão do BPQ para Microsoft Windows já não é possível...

Se quem como eu substituiu o velhinho TNC2 por um computador ou Rpi sente a falta desta funcionalidade.
Este projecto pretende resolver esta questão e abrir a ideia a outras possíveis aplicações como as que recentemente criei,

  • envio de dados meteo por APRS a partir do projecto Open Weather
  • notificações em APRS de AOS de satélites de APRS/AX.25
  • envio automático de beacons para satélites de APRS
  • telemetria do raspberry pi
  • anúncios de propagação

Neste projecto, os scripts precisam de se ligar ao linbpq e verificar se existem novas mensagens para o seu indicativo, por telnet. Por isso é necessário instalar o software "expect" para linux. Faça,

Depois na directoria onde está instalado o linbpq crie o seguinte ficheiro,

e, copie e cole as ligas a seguir

Substitua o [CALLSIGN], [PASSWORD] e [YOUR NODE ADDRESS] pela sua conta de login no linbpq, sem os parêntesis rectos "[ ]".

Dê permissões de execução ao script,

Se tudo funcionar como planeei execute o script fazendo ./lmBBS.sh e observe a ser feita automaticamente a ligação ao seu node por telnet, a entrada na BBS, a leitura de novas mensagens e, a seguir o fecho da ligação.

Agora vamos criar o script que irá receber e tratar os dados provenientes desta interação com o BPQ.
Para a notificação por e-mail vai ter de instalar e configurar o exim4.

Crie um novo script, supondo que se encontra na directoria de instalação do linbpq e corrija os caminhos e variáveis de acordo com a sua instalação.

Ligue-se à sua BBS pelo seu browser favorito. No menu da consola web, clique em "WebMail" e em seguida "Mine". Retire do endereço URL a variável key. Copie e cole no código abaixo este valor.

Nota: lamento mas esta key que aqui refiro tem prazo de validade, findo o qual será sempre necessário fazer o login! Use apenas para fins experimentais...

http://node.ct1ebq.com:9123/WebMail/WMMine?WB09K2721

Crie o ficheiro,

e, copie e cole o seguinte código,

Substitua o seu endereço de e-mail e o seu endereço URL do linbpq onde acede por webmail.

Ligue o Led ao GPIO, em série com uma resistência de valor entre 100 ohm e 330 ohm, ao raspberry pi, entre um dos pinos GND e o GP17,

Crie o script que irá piscar o led, fazendo,

copie e cole o seguinte conteúdo,

Dê permissões de execução a ambos os scripts,

E, a partir de agora é este o ficheiro que passa a chamar para verificar se tem novas mensagens ./bbsnewmsg.sh

Ao correr o script, este faz a chamada ao script de ligação por telnet e leitura da lista de novas mensagens, se as houver, envia um e-mail de notificação e acende um led ligado à porta 17 do GPIO.

Para correr o script automaticamente de 6 em 6 horas, adicione uma linha no seu crontab em /etc/crontab

Este foi um exemplo de como se podem integrar outros programas com o BPQ de modo simples e não intrusivo.
Este último script tem algumas falhas, por exemplo sempre que é chamado notifica todas as mensagens por ler... A ideia era ser chamado a cada 5 minutos, mas então não deveria enviar múltiplos e-mails de notificação de mensagens anteriores... Fica para próximas versões!

Logo que possível farei actualizações nestes scripts. Teste e crie os seus script com esta ideia. Sinta-se livre de copiar e distribui-los... agradeço menção a CT1EBQ.

Adicionar CT1EBQ à sua lista de Nodes/BBS

Modo expert

Adicione esta linha em "BROADCAST NODES" no seu config: MAP CT1EBQ node.ct1ebq.com UDP 10093 B ; Ricardo Oitavén, EBQNOD in Cascais, Portugal

BBS para transferência de mensagens de packet: EBQBBS ou CT1EBQ-1

node/BBS HA (route path): CT1EBQ.CTLX.PRT.EU

...e, não esqueça - envie-me um e-mail com as suas configurações!

Passo a passo...

As primeiras configurações devem ser feitas no ficheiro bpq32.cfg
Edite este ficheiro, em linux por exemplo, fazendo,

…e acrescente as seguintes linhas, nas secções enunciadas,

Configuração do Node

Adicionar no port de AX25, na secção "BROADCAST NODES" uma entrada tal como,

MAP CT1EBQ node.ct1ebq.com UDP 10093 B

onde,

MAP - representa a instrução para iniciar o mapeamento do node
CT1EBQ - o indicativo + SSID do node
node.ct1ebq.com - endereço ou DDNS (DNS dinâmico)
UDP 10093 B - protocolo e port utilizado na ligação (não esquecer de criar uma regra no seu firewall/router para o endereço IP do BPQ/linbpq com port 10093 em UDP)

Caso o seu node não seja um node BPQ, por questões de compatibilidade, ou se pretender definir factores de qualidade distintos a cada node, adicione uma entrada na secção "ROUTES:", como,

CT1EBQ,193,1

onde,

CT1EBQ - o indicativo e SSID do node
193 - factor de qualidade estabelecido como óptimo  na maioria dos casos
1 - port (é possível definir rotas com diferentes factores de qualidade para cada port)

Estas configurações só são aplicadas quando reiniciar o BPQ!

Configuração da BBS

Supondo que já tem a sua BBS configurada, para partilhar e entregar correio noutras BBS através dos nodes... abra seu o browser preferido, e a partir da página de gestão do sistema, no menu "Mail Mgmt", faça o seguinte:

1. configure um novo utilizador (estação de packet ou BBS) em, "Users".
Escreva o indicativo CT1EBQ na caixa "Add" e prima este botão.

2. em seguida edite CT1EBQ na lista à sua esquerda nesta mesma página.
Preencha as check box: BBS, Expert e, Allow Sending Bulls.

no menu “Forwarding" seleccione CT1EBQ na lista à esquerda e preencha os campos de acordo com,

TO: CT1EBQ
AT: AMSAT; ARL; ARRL; WW; EU; PRT (1 por linha, sem ";")
Connect Script: C 1 EBQBBS (ou, CT1EBQ para entregar pelo port de AX.25, se for o seu caso, o port 1. Adicione regras de acordo com as instruções do BPQ)
BBS HA: CT1EBQ.CTLX.PRT.EU
Enable Forwarding: (check)
Interval: 3600 (Secs)
Request Reverse: (check)
Interval: 3600 (Secs)
Send new messages without waiting for poll timer: (check)
FBB Blocked: (check)
Max Block: 10000
Allow Binary: (check)
Use B1 Protocol: (check)
…e, não se esqueça de fazer "Update"

White Lists

As white lists servem para propagar novos indicativos pelas BBS. Deste modo, e se a informação BBS HA estiver completa em cada utilizador é possível partilhar endereços de hierarquia para que as BBS saibam o caminho e onde cada mensagem deve ser entregue a novos utilizadores.

Configure "WP Params" na página "Configurations"

Send WPUpdates: (check)
Reject WP Bulls: (check)
Type P: (check)
e, em "WP Destinations" adicione uma linha com,
WP@CT1EBQ.CTLX.PRT.EU

A seguir envie-me um e-mail com as suas configurações:

MAP [o seu callsign]-[SSID do node] [o seu endereço] UDP 10093 B (ex. MAP CT1EBQ node.ct1ebq.com UDP 10093 B)

BBS callsign: [o seu callsign]-[SSID do node] (ex. CT1EBQ-1, ou alias EBQBBS)

node/BBS HA (route path) ex. CT1EBQ.CTLX.PRT.EU

Referências
1) factor de qualidade
http://ohiopacket.org/index.php/Calculating_Net/Rom_route_quality
2) configuração do node
http://www.cantab.net/users/john.wiseman/Documents/BPQCFGFile.html
3) configuração da BBS
http://www.cantab.net/users/john.wiseman/Documents/BPQ%20Mail%20and%20Chat%20Server%20Mail%20Forwarding.htm