Pagine

Verifica vocale rete elettrica

Può essere utile conoscere lo stato di alcuni parametri, verifica on/off, in un qualsiasi contesto. In questo caso verificheremo la presenza della rete elettrica, se assente un messaggio vocale ci avvertirà via radio. 

Per utilizzare questo sistema, raspberry e radio devono essere alimentati da una batteria o gruppo di continuità. Potete realizzare un sistema simile a questo (da completare).

Uno script lanciato da crontab ad intervalli di cinque minuti (impostabile) si occuperà di attivare lo script. Nel caso venisse a mancare la rete elettrica, verrà attivato il ptt della radio e avviato un file audio .wav preparato precedentemente.
In parole povere, lo script verifica il livello logico sul GPIO24. Se uguale a zero attiva il ptt e il file audio. Semplice!

È possibile trasmettere l'annuncio, rete elettrica assente, anche verso i nodi svxlink o remotetrx a cui si è collegati. Ho pensato a come realizzarlo, ma non l'ho ancora messo in pratica.

Prima di avviare svxlink, o script che impegnano i pin GPIO, bisogna editare il file /etc/rc.local ed attivare i pin interessati. Questo per renderli disponibili all'accensione del raspberry. In questa pagina trovate le righe da inserire nel file /etc/rc.local.

La scheda audio utilizzata per gli annunci quella integrata nel raspberry.
Per rilevare la presenza della rete uso il GPIO24, vedi schema in basso.
Creiamo una cartella script nella nostra home. Tanto per avere un po d'ordine.
  • mkdir script
Spostiamoci al suo interno
  • cd script
Creiamo il file rete.sh
  • nano rete.sh

Copiamo nel file le seguenti righe:
  • #! /bin/bash
  • #Verifico se il ricevitore sta ricevendo.
  • #No tx annuncio se presente qso in rx radio
  • rxradio=`cat /sys/class/gpio/gpio27/value`
  • #Controllo RX. Valore uguale reitera, diverso prosegue
  • while test "$rxradio" = "1"
  • do
  • sleep 0.3
  • rxradio=`cat /sys/class/gpio/gpio27/value`
  • done
  • sleep 1
  • #Verifico presenza rete, se assente play reteassente wav
  • retee=`cat /sys/class/gpio/gpio24/value`
  • if [ "$retee" = "0" ]; then
  • #attivazione ptt radio
  • echo 1 > /sys/class/gpio/gpio22/value
  • sleep 1
  • #Riproduco reteassente
  • aplay -D default:CARD=ALSA /home/pi/script/audio/reteassente.wav
  • sleep 0.3
  • #Rilascio PTT
  • echo 0 > /sys/class/gpio/gpio22/value
  • fi

La prima verifica, while, ricevitore in ricezione, è necessaria affinché non venga interrotto il qso in ricezione se presente.
Nel caso venga usato svxlink con logica ripetitore (RepeaterLogic), il controllo non è necessario.

Rendiamo eseguibile il file con
  • chmod +x rete.sh
Proviamolo manualmente e verifichiamo se tutto funziona correttamente:
  • sudo ./rete.sh
Adesso inseriamo il comando nel file crontab di root editandolo con:
  • sudo crontab
Aggiungiamo alla fine del file:
  • */5 * * * * /home/pi/script/rete.sh > /dev/null 2>&1


Lo script verrà cosi avviato ogni cinque minuti.
Nel caso la rete elettrica risultasse assente e il ricevitore non stia ricevendo un segnale, verrà avviato il ptt della radio e l'annuncio reteassente.wav.


Potete creare i file audio .wav sul web, su un sito gratuito di sintesi vocale TTS. Per esempio: https://acapela-box.com/AcaBox/index.php

Questo lo schema per interfacciare i 12 volt dell'alimentatore al GPIO24


Con una piccola modifica allo script, aggiungendo un file .wav rete presente, potrete ottenere una risposta anche per la rete elettrica presente, attivabile da tastiera dtmf.

Vediamo come fare.
Qui spiego come attivare la funzionalità dtmf exec script.

Creiamo un altro file con il nome rete1.sh
nano rete1.sh

e copiamo dentro il file le righe seguenti:

#! /bin/bash
#Verifico se il ricevitore sta ricevendo. No tx annuncio se presente qso in rx radio
rxradio=`cat /sys/class/gpio/gpio27/value`
#Controllo RX. Valore uguale reitera, diverso prosegue
while test "$rxradio" = "1"
do
sleep 0.3
rxradio=`cat /sys/class/gpio/gpio27/value`
done
sleep 1
#Verifico presenza rete, se assente play reteassente wav
retee=`cat /sys/class/gpio/gpio24/value`
if [ "$retee" = "0" ]; then
#attivazione ptt radio
echo 1 > /sys/class/gpio/gpio22/value
sleep 1
#Riproduco reteassente
aplay -D default:CARD=ALSA /home/pi/script/audio/reteassente.wav
sleep 0.3
#Rilascio PTT
echo 0 > /sys/class/gpio/gpio22/value
else
#attivazione ptt radio
echo 1 > /sys/class/gpio/gpio22/value
sleep 1
#Riproduco retepresente
aplay -D default:CARD=ALSA /home/pi/script/audio/retepresente.wav
sleep 0.3
#Rilascio PTT
echo 0 > /sys/class/gpio/gpio22/value
fi

Rendetelo eseguibile con
chmod +x rete1.sh

Lo script è uguale al precedente, quello avviato dal crontab root ogni cinque minuti, ma in questo caso otterremo una risposta anche con rete elettrica presente.
Adesso possiamo attivarlo collegandoci via ssh, oppure comodamente dalla nostra radio portatile digitando il codice DTMF preimpostato.

Questa è la sezione da modificare nel file Logic.tcl contenuto nella cartella /usr/share/svxlink/events.d/local

  if {$cmd == "81"} {
    puts "Verifica presenza rete elettrica"
    exec /home/pi/script/rete1.sh &
    playSilence 1000
    playTone 880 60 150;
    playTone 440 60 100;
    return 1

  }

Avviate svxlink, se non avete commesso errori, digitando dalla radio *81# verrà avviato lo script e ascolterete l'audio .wav corrispondente allo stato del GPIO24.
Svxlink deve essere attivo per utilizzare questa funzionalità.


Buon divertimento!

Nessun commento: