snowgum

huaweidata.sh

Sep 21st, 2021
1,045
143 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/sh
  2.  
  3. ROOTER=/usr/lib/rooter
  4.  
  5. log() {
  6.     logger -t "Huawei Data" "$@"
  7. }
  8.  
  9. CURRMODEM=$1
  10. COMMPORT=$2
  11.  
  12. fix_data() {
  13.     O=$($ROOTER/common/processat.sh "$OY")
  14. }
  15.  
  16. process_csq() {
  17.     CSQ=$(echo "$O" | awk -F[,\ ] '/^\+CSQ:/ {print $2}')
  18.     [ "x$CSQ" = "x" ] && CSQ=-1
  19.     if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
  20.         CSQ_PER=$(($CSQ * 100/31))
  21.         CSQ_RSSI=$((2 * CSQ - 113))
  22.         CSQX=$CSQ_RSSI
  23.         [ $CSQ -eq 0 ] && CSQ_RSSI="<= "$CSQ_RSSI
  24.         [ $CSQ -eq 31 ] && CSQ_RSSI=">= "$CSQ_RSSI
  25.         CSQ_PER=$CSQ_PER"%"
  26.         CSQ_RSSI=$CSQ_RSSI" dBm"
  27.     else
  28.         CSQ="-"
  29.         CSQ_PER="-"
  30.         CSQ_RSSI="-"
  31.     fi
  32. }
  33.  
  34. process_huawei() {
  35.     CSNR=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $2}')
  36.     if [ "x$CSNR" != "x" ]; then
  37.         RSCP=$CSNR
  38.         CSNR=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $3}')
  39.         if [ "x$CSNR" != "x" ]; then
  40.             ECIO=$CSNR
  41.         else
  42.             ECIO=`expr $RSCP - $CSQX`
  43.         fi
  44.     else
  45.         EC=$(echo "$O" | awk -F[,\ ] '/^\+CSQ:/ {print $4}')
  46.         if [ "x$EC" != "x" ]; then
  47.             ECIO=$EC
  48.             EX=$(printf %.0f $ECIO)
  49.             RSCP=`expr $CSQX + $EX`
  50.         fi
  51.     fi
  52.  
  53.     HCSQ=$(echo "$O" | grep -o "\^HCSQ:[ ]*\"LTE\",[^,]*,[^,]*,[0-9]\{1,3\}")
  54.     if [ -n "$HCSQ" ]; then
  55.         SINR=$(echo $HCSQ | cut -d, -f4)
  56.         if [ $SINR -lt 255 ]; then
  57.             SINR=$((($SINR / 5) - 20))
  58.         else
  59.             SINR="-"
  60.         fi
  61.     fi
  62.  
  63.     LTERSRP=$(echo "$O" | awk -F[,\ ] '/^\^LTERSRP:/ {print $2}')
  64.     if [ "x$LTERSRP" != "x" ]; then
  65.         RSCP=$LTERSRP
  66.         LTERSRP=$(echo "$O" | awk -F[,\ ] '/^\^LTERSRP:/ {print $3}')
  67.         if [ "x$LTERSRP" != "x" ]; then
  68.             ECIO=$LTERSRP
  69.         else
  70.             ECIO=`expr $RSCP - $CSQX`
  71.         fi
  72.     fi
  73.     LBANDS=$(echo $O | grep -o "\^HFREQINFO:[0-9,]\+")
  74.     LBAND=""
  75.     CHANNEL=""
  76.     printf '%s\n' "$LBANDS" | while read LBANDL; do
  77.         CHANN=$(echo $LBANDL | cut -d, -f4 | grep -o "[0-9]\{2,6\}")
  78.         if [ -z "$CHANN" ]; then
  79.             LBAND=""
  80.             CHANNEL=""
  81.         else
  82.             BWU=$(($(echo $LBANDL | cut -d, -f9) / 1000))
  83.             BWD=$(($(echo $LBANDL | cut -d, -f6) / 1000))
  84.             LBANDL=$(echo $LBANDL | cut -d, -f3)
  85.             if [ -z "$LBANDL" ]; then
  86.                 LBAND=""
  87.             else
  88.                 if [ -n "$LBAND" ]; then
  89.                     LBAND=$LBAND" aggregated with:<br />"
  90.                 fi
  91.                 LBAND=$LBAND"B"$LBANDL" (Bandwidth $BWD MHz Down | $BWU MHz Up)"
  92.             fi
  93.             if [ -n "$CHANN" ]; then
  94.                 if [ -n "$CHANNEL" ]; then
  95.                     CHANNEL=$CHANNEL", "$CHANN
  96.                 else
  97.                     CHANNEL=$CHANN
  98.                 fi
  99.             fi
  100.  
  101.         fi
  102.         {
  103.             echo "$LBAND"
  104.             echo "$CHANNEL"
  105.         } > /tmp/lbandvar$CURRMODEM
  106.     done
  107.     if [ -e /tmp/lbandvar$CURRMODEM ]; then
  108.         {
  109.             read LBAND
  110.             read CHANNEL
  111.         } < /tmp/lbandvar$CURRMODEM
  112.         rm /tmp/lbandvar$CURRMODEM
  113.     fi
  114.     if [ -z "$LBAND" ]; then
  115.         LBAND="-"
  116.     fi
  117.     if [ -z "$CHANNEL" ]; then
  118.         CHANNEL="-"
  119.     fi
  120.  
  121.     NETMODE="0"
  122.     SYSCFG=$(echo "$O" | awk -F[,\"] '/^\^SYSCFGEX:/ {print $2}')
  123.     if [ "x$SYSCFG" != "x" ]; then
  124.         MODTYPE="3"
  125.         case $SYSCFG in
  126.         "00" )
  127.             NETMODE="1"
  128.             ;;
  129.         "01" )
  130.             NETMODE="3"
  131.             ;;
  132.         "02" )
  133.             NETMODE="5"
  134.             ;;
  135.         "03" )
  136.             NETMODE="7"
  137.             ;;
  138.         * )
  139.             ACQ=${SYSCFG:0:2}
  140.             case $ACQ in
  141.             "01" )
  142.                 NETMODE="2"
  143.                 ;;
  144.             "02" )
  145.                 NETMODE="4"
  146.                 ;;
  147.             "03" )
  148.                 NETMODE="6"
  149.                 ;;
  150.             esac
  151.             ;;
  152.         esac
  153.     else
  154.         SYSCFG=$(echo "$O" | awk -F[,\ ] '/^\^SYSCFG:/ {print $2}')
  155.         if [ "x$SYSCFG" != "x" ]; then
  156.             MODTYPE="4"
  157.             case $SYSCFG in
  158.             "7" )
  159.                 NETMODE="1"
  160.                 ;;
  161.             "13" )
  162.                 NETMODE="3"
  163.                 ;;
  164.             "14" )
  165.                 NETMODE="5"
  166.                 ;;
  167.             * )
  168.                 SYSCFG=$(echo "$O" | awk -F[,\ ] '/^\^SYSCFG:/ {print $3}')
  169.                 case $SYSCFG in
  170.                 "0" )
  171.                     NETMODE="1"
  172.                     ;;
  173.                 "1" )
  174.                     NETMODE="2"
  175.                     ;;
  176.                 "2" )
  177.                     NETMODE="4"
  178.                     ;;
  179.                 esac
  180.                 ;;
  181.             esac
  182.         fi
  183.     fi
  184.  
  185.     NETMODEx=$(uci get modem.modem$CURRMODEM.netmode)
  186.     if [ "$NETMODE" != "$NETMODEx" ]; then
  187.         uci set modem.modem$CURRMODEM.netmode="$NETMODE"
  188.         uci commit modem
  189.     fi
  190.  
  191.     MODE="-"
  192.     TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFOEX:/ {print $9}' | sed 's/"//g')
  193.     if [ "x$TECH" != "x" ]; then
  194.         MODE="$TECH"
  195.     fi
  196.  
  197.     if [ "x$MODE" = "x-" ]; then
  198.         TECH=$(echo "$O" | awk -F[,\ ] '/^\^SYSINFO:/ {print $8}')
  199.         if [ "x$TECH" != "x" ]; then
  200.             case $TECH in
  201.                 17*) MODE="HSPA+ (64QAM)";;
  202.                 18*) MODE="HSPA+ (MIMO)";;
  203.                 1*) MODE="GSM";;
  204.                 2*) MODE="GPRS";;
  205.                 3*) MODE="EDGE";;
  206.                 4*) MODE="WCDMA";;
  207.                 5*) MODE="HSDPA";;
  208.                 6*) MODE="HSUPA";;
  209.                 7*) MODE="HSPA";;
  210.                 9*) MODE="HSPA+";;
  211.                  *) MODE=$TECH;;
  212.             esac
  213.         fi
  214.     fi
  215.  
  216.     TEMP=$(echo "$O" | awk -F[,] '/^\^CHIPTEMP:/ {print $2}')
  217.     if [ "x$TEMP" != "x" ]; then
  218.         TEMP=$((TEMP / 10))$(printf "\xc2\xb0")"C"
  219.     else
  220.         TEMP="unknown"
  221.     fi
  222.  
  223.     CMODE=$(uci get modem.modem$CURRMODEM.cmode)
  224.     if [ $CMODE = 0 ]; then
  225.         NETMODE="10"
  226.     fi
  227. }
  228.  
  229. CSQ="-"
  230. CSQ_PER="-"
  231. CSQ_RSSI="-"
  232. ECIO="-"
  233. RSCP="-"
  234. ECIO1=" "
  235. RSCP1=" "
  236. MODE="-"
  237. CHANNEL="-"
  238. LBAND="-"
  239. MODETYPE="-"
  240. NETMODE="-"
  241. TEMP="-"
  242. PCI="-"
  243. SINR="-"
  244.  
  245. OY=$($ROOTER/gcom/gcom-locked "$COMMPORT" "huaweiinfo.gcom" "$CURRMODEM")
  246.  
  247. fix_data
  248. process_csq
  249. process_huawei
  250.  
  251. {
  252.     echo 'CSQ="'"$CSQ"'"'
  253.     echo 'CSQ_PER="'"$CSQ_PER"'"'
  254.     echo 'CSQ_RSSI="'"$CSQ_RSSI"'"'
  255.     echo 'ECIO="'"$ECIO"'"'
  256.     echo 'RSCP="'"$RSCP"'"'
  257.     echo 'ECIO1="'"$ECIO1"'"'
  258.     echo 'RSCP1="'"$RSCP1"'"'
  259.     echo 'MODE="'"$MODE"'"'
  260.     echo 'MODTYPE="'"$MODTYPE"'"'
  261.     echo 'NETMODE="'"$NETMODE"'"'
  262.     echo 'CHANNEL="'"$CHANNEL"'"'
  263.     echo 'LBAND="'"$LBAND"'"'
  264.     echo 'PCI="'"$PCI"'"'
  265.     echo 'TEMP="'"$TEMP"'"'
  266.     echo 'SINR="'"$SINR"'"'
  267. } > /tmp/signal$CURRMODEM.file
  268.  
  269. CONNECT=$(uci get modem.modem$CURRMODEM.connected)
  270. if [ $CONNECT -eq 0 ]; then
  271.     exit 0
  272. fi
  273.  
  274. if [ $CSQ = "-" ]; then
  275.     log "$OY"
  276. fi
  277.  
  278. ENB="0"
  279. if [ -e /etc/config/failover ]; then
  280.     ENB=$(uci get failover.enabled.enabled)
  281. fi
  282. if [ $ENB = "1" ]; then
  283.     exit 0
  284. fi
  285.  
  286. WWANX=$(uci get modem.modem$CURRMODEM.interface)
  287. OPER=$(cat /sys/class/net/$WWANX/operstate 2>/dev/null)
  288.  
  289. if [ ! $OPER ]; then
  290.     exit 0
  291. fi
  292. if echo $OPER | grep -q "unknown"; then
  293.     exit 0
  294. fi
  295.  
  296. if echo $OPER | grep -q "down"; then
  297.     echo "1" > "/tmp/connstat"$CURRMODEM
  298. fi
  299.  
RAW Paste Data