2023-04-01 10:00:13 +08:00

242 lines
5.4 KiB
Bash

#!/bin/sh
ROOTER=/usr/lib/rooter
CURRMODEM=$1
COMMPORT=$2
log() {
logger -t "Telit Data" "$@"
}
decode_bw() {
case $BW in
"0")
BW="1.4"
;;
"1")
BW="3"
;;
"2")
BW="5"
;;
"3")
BW="10"
;;
"4")
BW="15"
;;
"5")
BW="20"
;;
*)
BW=""
;;
esac
}
decode_band() {
if [ "$SLBV" -lt 134 ]; then
SLBV=$(($SLBV - 119))
elif [ "$SLBV" -eq 134 ]; then
SLBV="17"
elif [ "$SLBV" -lt 143 ]; then
SLBV=$(($SLBV - 102))
elif [ "$SLBV" -lt 147 ]; then
SLBV=$(($SLBV - 125))
elif [ "$SLBV" -lt 149 ]; then
SLBV=$(($SLBV - 123))
elif [ "$SLBV" -lt 152 ]; then
SLBV=$(($SLBV - 108))
elif [ "$SLBV" -eq 152 ]; then
SLBV="23"
elif [ "$SLBV" -eq 153 ]; then
SLBV="26"
elif [ "$SLBV" -eq 154 ]; then
SLBV="32"
elif [ "$SLBV" -lt 158 ]; then
SLBV=$(($SLBV - 30))
elif [ "$SLBV" -lt 161 ]; then
SLBV=$(($SLBV - 130))
elif [ "$SLBV" -eq 161 ]; then
SLBV="66"
elif [ "$SLBV" -eq 162 ]; then
SLBV="250"
elif [ "$SLBV" -eq 163 ]; then
SLBV="46"
elif [ "$SLBV" -eq 166 ]; then
SLBV="71"
else
SLBV="??"
fi
}
idV=$(uci get modem.modem$CURRMODEM.idV)
idP=$(uci get modem.modem$CURRMODEM.idP)
if [ $idP = 1040 -o $idP = 1041 ]; then
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "telitinfo.gcom" "$CURRMODEM" | tr 'a-z' 'A-Z')
else
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "telitinfoln.gcom" "$CURRMODEM" | tr 'a-z' 'A-Z')
fi
O=$($ROOTER/common/processat.sh "$OX")
O=$(echo $O)
RSRP=""
RSRQ=""
CHANNEL="-"
ECIO="-"
RSCP="-"
ECIO1=" "
RSCP1=" "
MODE="-"
MODTYPE="-"
NETMODE="-"
LBAND="-"
TEMP="-"
PCI="-"
SINR="-"
CSQ=$(echo $O | grep -o "CSQ: [0-9]\+" | grep -o "[0-9]\+")
[ "x$CSQ" = "x" ] && CSQ=-1
if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
CSQ_PER=$(($CSQ * 100/31))
CSQ_RSSI=$((2 * CSQ - 113))
CSQX=$CSQ_RSSI
[ $CSQ -eq 0 ] && CSQ_RSSI="<= "$CSQ_RSSI
[ $CSQ -eq 31 ] && CSQ_RSSI=">= "$CSQ_RSSI
CSQ_PER=$CSQ_PER"%"
CSQ_RSSI=$CSQ_RSSI" dBm"
else
CSQ="-"
CSQ_PER="-"
CSQ_RSSI="-"
fi
TMP=$(echo $O" " | grep -o "#TEMPSENS: .\+ OK " | tr " " ",")
if [ -n "$TMP" ]; then
TEMP=$(echo $TMP | cut -d, -f3)$(printf "\xc2\xb0")"C"
fi
MODE="-"
WS46=$(echo $O | grep -o "+COPS:.\+AT#RFSTS" | grep -o "+COPS: [0-3],[0-3],\"[^\"].\+\",[027]")
TECH=$(echo $WS46 | cut -d, -f4)
if [ -n "$TECH" ]; then
MODE=$TECH
case $MODE in
"7")
MODE="LTE"
CAINFO=$(echo $OX | grep -o "#CAINFO: 1.\+OK")
SGCELL=$(echo $OX | grep -o "[#^]RFSTS: \"[ 0-9]\{5,7\}\",[0-9]\{1,5\},.\+,\"[0-9]\{15\}\",\"[^\"]*\",[0-3],[0-9]\{1,2\}[,0-9]\{0,4\}")
if [ -n "$SGCELL" ]; then
RSCP=$(echo $SGCELL | cut -d, -f3)
ECIO=$(echo $SGCELL | cut -d, -f5)
RSSI=$(echo $SGCELL | cut -d, -f4)
CSQ_RSSI=$(echo "$RSSI dBm")
CHANNEL=$(echo $SGCELL | cut -d, -f2)
if [ $(echo ${SGCELL:0:1}) = "#" ]; then
LBAND="B"$(echo $SGCELL | cut -d, -f16 | grep -o "[0-9]\{1,2\}")
else
LBAND="B"$(echo $SGCELL | cut -d, -f15)
SSINR=$(echo $SGCELL | cut -d, -f16)
if [ -n "$SSINR" ]; then
SINR=$((($(echo $SSINR) / 5) - 20))" dB"
fi
fi
BW=$(echo $CAINFO | cut -d, -f3)
decode_bw
if [ -n "$BW" ];then
LBAND=$LBAND" (Bandwidth $BW MHz)"
fi
if [ -n "$CAINFO" ]; then
SCCLIST=$(echo $CAINFO | grep -o "1[2-6][0-9],[0-9]\{1,5\},[0-5],[0-9]\{1,3\},-[0-9]\+,-[0-9]\+,-[0-9]\+,[0-9]\{1,3\},2,[0-5],")
if [ -n "$SCCLIST" ]; then
SSINR=$(echo $CAINFO | grep -o "#CAINFO: [^,]\+,[^,]\+,[^,]\+,[^,]\+,[^,]\+,[^,]\+,[^,]\+,[0-9]\{1,3\},")
SINR=$((($(echo $SSINR | cut -d, -f8) / 5) - 20))" dB"
printf '%s\n' "$SCCLIST" | while read SCCVAL; do
PCI=$(echo $SCCVAL | cut -d, -f4)
SLBV=$(echo $SCCVAL | cut -d, -f1)
decode_band
LBAND=$LBAND"<br />B"$SLBV
BW=$(echo $SCCVAL | cut -d, -f3)
decode_bw
LBAND=$LBAND" (CA, Bandwidth $BW MHz)"
SCHV=$(echo $SCCVAL | cut -d, -f2)
CHANNEL=$(echo "$CHANNEL", "$SCHV")
{
echo "$LBAND"
echo "$CHANNEL"
} > /tmp/lbandvar$CURRMODEM
done
fi
fi
if [ -e /tmp/lbandvar$CURRMODEM ]; then
{
read LBAND
read CHANNEL
} < /tmp/lbandvar$CURRMODEM
rm /tmp/lbandvar$CURRMODEM
fi
fi
;;
2)
MODE="UMTS"
SGCELL=$(echo $O | grep -o "[#^]RFSTS: \"[ 0-9]\{5,7\}\",[0-9]\{1,5\},.\+,\"[0-9]\{15\}\",")
if [ -n "$SGCELL" ]; then
RSSI=$(echo $SGCELL | cut -d, -f6)
CSQ_RSSI=$(echo "$RSSI dBm")
RSCP=$(echo $SGCELL | cut -d, -f5)
ECIO=$(echo $SGCELL| cut -d, -f4)
CHANNEL=$(echo $SGCELL | cut -d, -f2)
fi
;;
esac
fi
NETMODE="1"
MODTYPE="8"
{
echo 'CSQ="'"$CSQ"'"'
echo 'CSQ_PER="'"$CSQ_PER"'"'
echo 'CSQ_RSSI="'"$CSQ_RSSI"'"'
echo 'ECIO="'"$ECIO"'"'
echo 'RSCP="'"$RSCP"'"'
echo 'ECIO1="'"$ECIO1"'"'
echo 'RSCP1="'"$RSCP1"'"'
echo 'MODE="'"$MODE"'"'
echo 'MODTYPE="'"$MODTYPE"'"'
echo 'NETMODE="'"$NETMODE"'"'
echo 'CHANNEL="'"$CHANNEL"'"'
echo 'LBAND="'"$LBAND"'"'
echo 'PCI="'"$PCI"'"'
echo 'TEMP="'"$TEMP"'"'
echo 'SINR="'"$SINR"'"'
} > /tmp/signal$CURRMODEM.file
CONNECT=$(uci get modem.modem$CURRMODEM.connected)
if [ $CONNECT -eq 0 ]; then
exit 0
fi
if [ "$CSQ" = "-" ]; then
log "$OX"
fi
WWANX=$(uci get modem.modem$CURRMODEM.interface)
OPER=$(cat /sys/class/net/$WWANX/operstate 2>/dev/null)
rm -f "/tmp/connstat"$CURRMODEM
if [ ! $OPER ]; then
exit 0
fi
if echo $OPER | grep -q "unknown"; then
exit 0
fi
if echo $OPER | grep -q "down"; then
echo "1" > "/tmp/connstat"$CURRMODEM
fi