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

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,

sudo apt-get install expect

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

$ cd /usr/local/bin/linbpq
$ nano lmBBS.sh
(copie e cole as ligas a seguir)

#!/usr/bin/expect -f

spawn telnet [YOUR NODE ADDRESS] 8010
expect "callsign:"
send "[CALLSIGN]\r";
expect "password:"
send "[PASSWORD]\r";

# Wait for a prompt. Adjust as needed to match the expected prompt.
expect "Press ? For list of commands\r"
send "BBS\r";
sleep .1;
send "LM\r";
sleep 1;
send "B\r";

interact

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,

$ chmod 755 lmBBS.sh

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.

http://node.oitaven.pt:9123/WebMail/WMMine?WB09K2721
$ nano bbsnewmsg.sh
(copie e cole as ligas a seguir)

#!/bin/bash

# set variables
nl='
'
# GPIO pin
pin=17
# validation key
key="WB09K2721"
# new messages read command
lmBBS="/usr/local/bin/linbpq/lmBBS.sh"

# filter to identify new unread messages
IFS=$'\n'
var=($($lmBBS | grep " PN " | awk '{ print $0 }'))
#echo "${var}"
msg="${#var[@]}"
echo "Tem $msg mensagens por ler..."

function join { local IFS=$'\n'; shift; echo "$*"; }
body=$(join , ${var[@]})
echo "$nl$body"

unset IFS

# if new messages, send e-mail alert - optional
if [ $msg -gt 0 ]; then
   # on pi-star certain directories are created on virtual disks, for example /var/log, so it is necessary to manually create the exim4 log file
   if ! [[ -f "/var/log/exim4/mainlog" ]]
   then
      sudo mkdir /var/log/exim4/
      sudo touch /var/log/exim4/mainlog
      sudo chown -R Debian-exim. /var/log/exim4/ 
   fi
   echo "Read your messages at http://node.oitaven.pt:9123/WebMail/WMMine?$key$nl$nl$body" | mail -s "You have $msg new messages in packet mailbox" callsign@domain.com
fi
# end e-mail alert

# led turn on in case of have mensages
if [ $msg -ne 0 ]; then
   # turn led on with Rpi GPIO
   #gpio -g mode $pin out
   #gpio -g write $pin 1

   # if blink is running don't call it again
   process=$(pgrep blink.sh)
   if ! [ "${#process}" -gt 0 ] ; then
      /linbpq/blink.sh &
   fi
else
   sudo pkill --signal 1 --exact blink.sh
   # reset $pin and put it in read mode
   gpio -g write $pin 0
   gpio -g mode $pin in
fi
# end led alert

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,

$ nano blink.sh
#!/bin/bash

pin=17
gpio -g mode $pin out

while :
do
   gpio -g write $pin 1
   sleep 1
   gpio -g write $pin 0
   sleep 1
done

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

$ chmod 755 bbsnewmsg.sh
$ chmod 755 blink.sh

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

2 */6 * * * pi-star /usr/local/bin/linbpq/bbsnewmsg.sh

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.

Gerir a performance no Raspberry pi

No Rpi é possível actuar sobre a frequência de clock do processador. Pode ser definida uma frequência mínima e máxima, por omissão no Rpi 4, respectivamente 600MHz e 1500MHz.

No meu caso o sistema operativo vinha configurado em modo “powersave”, isto quer dizer que ao iniciar, o sistema opta pela velocidade máxima definida e minutos depois muda para 600MHz.
No meu caso, interessa-me que maioritariamente o sistema tenha a máxima performance e só entrar em powersave se não lhe estiver a solicitar processamento, por exemplo em portátil alimentado a baterias…

Este é também o método utilizado para fazer overclocking.

O kernel do Linux utiliza um driver para gerir a política de frequência do CPU.
As opções são as seguintes:

performance – usa sempre a frequência máxima do CPU
powersave – usa sempre a frequência mínima
ondemand – altera a frequência dependendo da carga do CPU (apenas muda entre o mínimo e o máximo)
conservative – altera suavemente a frequência da CPU dependendo da carga da CPU
userspace – permite que o utilizador controle a frequência do CPU

Como root ou sudo podemos alterar a configuração na shell em tempo real via sysfs.

Para ler a configuração actual,

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Para alterar para uma das opções descritas, faça por exemplo,

sudo sh -c "echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"

Pode em qualquer momento saber a frequência do seu CPU, escrevendo no terminal,

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

(resposta)
1500000

Para modificar permanentemente esta opção no arranque, deve instalar o software “cpufrequtils”,

sudo apt-get install cpufrequtils

E a seguir editar ou criar o ficheiro /etc/default/cpufrequtils e escrever a linha GOVERNOR=”ondemand”. Este ficheiro vai ser lido pelo script /etc/init.d/cpufrequtils

Outra opção, talvez mais simples é modificar as definições sempre no início do sistema. Edite o ficheiro /etc/rc.local

sudo nano /etc/rc.local

Adiciona esta linha, com o modo desejado, antes de “exit 0”

echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
exit 0

Referências:
http://with-raspberrypi.blogspot.com/2014/03/cpu-frequency.html
https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt
https://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md

Carga fictícia 250W 0-3GHz

Um destes dias o meu amigo Pinto, CT1EDG ofereceu-me uma resistência de 50 ohm – “toma, é para fazeres uma carga fictícia!”

Pensei, nada mais simples, um qualquer dissipador, uma ficha SO-239 e a resistência. O resto é bricolage… Eis como ficou,

Notem que, a furação da resistência coincide com a da SO-239, daí a facilidade e simplicidade desta montagem!

O tamanho do dissipador, material e o interface entre a resistência e este dimensionam a potência dissipada. Para altas frequências, UHF, é importante que a ligação da ficha SO à resistência seja o mais curta possível, tal como neste exemplo.

Podem comprar estas resistências no e-bay por pouco mais de 3€. Pesquisem por “RFP 250N50”.

Passos para adicionar CT1EBQ à sua lista de Nodes/BBS

Modo expert

Adicione esta linha em "BROADCAST NODES" no seu config - MAP CT1EBQ-8 node.oitaven.pt UDP 10093 B

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

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,

$ nano bpq32.cfg

…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-8 node.oitaven.pt UDP 10093 B

onde,

MAP - representa a instrução para iniciar o mapeamento do node
CT1EBQ-8 - o indicativo e SSID do node
node.oitaven.pt - 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)

Como alternativa pode ser adicionado cada node também na secção “ROUTES:” se se pretende definir o factor qualidade, como,

CT1EBQ-8,193,1

onde,

CT1EBQ-8 - 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-8 node.oitaven.pt UDP 10093 B)

BBS callsign: [o seu callsign]-[SSID do node] (ex. CT1EBQ-5, 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