mirror of
https://github.com/km4ack/pi-scripts
synced 2026-08-13 17:52:05 -04:00
172 lines
4.9 KiB
Bash
172 lines
4.9 KiB
Bash
#!/bin/bash
|
|
|
|
VERSION=1
|
|
|
|
#############################################################################################
|
|
# VARA running on wine will not release and reopen the ports
|
|
# after a connection is made over a network.
|
|
# This script will monitor vara for ports not reopening correctly.
|
|
# Once a port failure is detected, it will close and re open VARA which
|
|
# is a crude way to reset the ports but the only one that works for now.
|
|
# VARA FM is the default modem but you can use VARA HF by calling
|
|
# it when the script is started. To start FM mode, simply run
|
|
# ./vara_monitor
|
|
# to start HF mode, modify the command and start with
|
|
# ./vara_monitor HF
|
|
#
|
|
# This script is specifically designed to run on the Raspberry Pi
|
|
# and will not work on other versions of Linux.
|
|
#
|
|
# 19NOV2022 KM4ACK
|
|
##############################################################################################
|
|
|
|
# user variables##############################################################################
|
|
WAIT_TIME=240 #seconds to wait so connections can finish before restarting VARA.
|
|
#Note: this time is doubled automatically for HF connections.
|
|
#Increasing this time allows for longer connections but also
|
|
#increases the time between restarts. Change the WAIT_TIME to
|
|
#suit your individual needs. Default is 240 seconds for FM and
|
|
#480 seconds (8 minutes) for HF
|
|
|
|
RIG_CONTROL=YES #YES/NO. If set to YES this script
|
|
#assumes FLRIG is configured for rig control.
|
|
# End user variables #########################################################################
|
|
|
|
#start of main script
|
|
#set modem start and give user feedback if HF
|
|
if [ $1 = "HF" ]; then
|
|
MODEM_START="HF"
|
|
clear;echo;echo
|
|
echo "Doubling connection timeout \"WAIT_TIME\""
|
|
WAIT_TIME=$(echo $(($WAIT_TIME*2)))
|
|
echo "WAIT_TIME is now $WAIT_TIME seconds"
|
|
sleep 5
|
|
else
|
|
MODEM_START="FM"
|
|
fi
|
|
|
|
clear;echo;echo
|
|
if [ "$RIG_CONTROL" = 'YES' ]; then
|
|
#verify FLRIG is running
|
|
FLRIG_RUN=$(pidof flrig)
|
|
while [ -z "$FLRIG_RUN" ]; do
|
|
echo "Please start FLRIG"
|
|
sleep 1
|
|
FLRIG_RUN=$(pidof flrig)
|
|
clear;echo;echo
|
|
done
|
|
|
|
|
|
echo "FLRIG seems to be running...standby"
|
|
#give FLRIG a few of seconds to start
|
|
for i in {03..01}
|
|
do
|
|
tput cup 2 36
|
|
echo -n "$i"
|
|
sleep 1
|
|
done
|
|
fi
|
|
|
|
MAIN(){
|
|
if [ "$RIG_CONTROL" = 'YES' ]; then
|
|
#start rigctld if not running
|
|
if [ -z `pidof rigctld` ]; then
|
|
/usr/local/bin/rigctld -m 4 &
|
|
fi
|
|
fi
|
|
|
|
clear;echo;echo
|
|
#verify vara has been started
|
|
VARA_RUN=$(ps aux | grep wine | grep -i vara | head -1 | awk '{print $2}')
|
|
while [ -z "$VARA_RUN" ]; do
|
|
echo "Configured for VARA $MODEM_START"
|
|
echo "**Modem not running**"
|
|
echo "Please start the modem"
|
|
sleep 1
|
|
VARA_RUN=$(ps aux | grep wine | grep -i vara | head -1 | awk '{print $2}')
|
|
clear;echo;echo
|
|
done
|
|
echo "VARA seems to be running...standby"
|
|
#wait for vara modem to start
|
|
for i in {15..01}
|
|
do
|
|
tput cup 2 35
|
|
echo -n "$i"
|
|
sleep 1
|
|
done
|
|
#setup time variables
|
|
seconds=1
|
|
minutes=0
|
|
hours=0
|
|
#monitor ports which will close after a network connection
|
|
#both ports 8300 & 8301 needed but we only need to check for one of them.
|
|
VARA_CK=$(sudo netstat -tunlp | grep 8300)
|
|
while [ -n "$VARA_CK" ]; do
|
|
clear;echo;echo
|
|
echo "##########################"
|
|
echo "# KM4ACK VARA Monitor v${VERSION} #"
|
|
echo "##########################"
|
|
echo "Monitoring VARA ports"
|
|
echo "press ctrl+c to stop"
|
|
echo "Elasped time - ${hours}:${minutes}:${seconds}"
|
|
VARA_CK=$(sudo netstat -tunlp | grep 8300)
|
|
((seconds++))
|
|
if [ $seconds = 60 ]; then
|
|
((minutes++))
|
|
seconds=0
|
|
fi
|
|
|
|
if [ $minutes = 60 ]; then
|
|
((hours++))
|
|
minutes=0
|
|
seconds=0
|
|
fi
|
|
sleep 1
|
|
done
|
|
clear;echo;echo
|
|
#give connections time to complete before restarting vara
|
|
#this timeout is defined above as WAIT_TIME
|
|
echo "Port closure detected!"
|
|
echo "Starting reset procedure"
|
|
for i in $(eval echo "{$WAIT_TIME..01}")
|
|
do
|
|
tput cup 3 25
|
|
echo -n "$i"
|
|
sleep 1
|
|
done
|
|
#kill current vara session
|
|
clear;echo;echo
|
|
echo "Done waiting, hope the connection was finished"
|
|
echo "If not, increate the WAIT_TIME which is currently $WAIT_TIME seconds"
|
|
echo "killing VARA $MODEM_START"
|
|
#get PID's of VARA & kill
|
|
FIRST=$(ps aux | grep wine | grep -i vara | head -1 | awk '{print $2}')
|
|
SECOND=$(ps aux | grep wine | grep -i vara | tail -1 | awk '{print $2}')
|
|
kill -9 $FIRST > /dev/null 2>&1 &
|
|
kill -9 $SECOND > /dev/null 2>&1 &
|
|
sleep 3
|
|
|
|
clear;echo;echo
|
|
#wait 61 seconds before restarting. This gives the ports time to clear
|
|
#so they are ready for the next run
|
|
echo "restarting VARA $MODEM_START in"
|
|
for i in {61..01}
|
|
do
|
|
tput cup 2 22
|
|
echo -n "$i"
|
|
sleep 1
|
|
done
|
|
|
|
#restart the correct modem
|
|
if [ "$MODEM_START" = 'HF' ]; then
|
|
/usr/local/bin/wine $HOME/.wine/drive_c/VARA/VARA.exe > /dev/null 2>&1 &
|
|
elif [ "$MODEM_START" = 'FM' ]; then
|
|
/usr/local/bin/wine $HOME/.wine/drive_c/VARA\ FM/VARAFM.exe > /dev/null 2>&1 &
|
|
fi
|
|
|
|
}
|
|
|
|
#run this script in a loop
|
|
while true; do
|
|
MAIN
|
|
done
|