🍉 Sync 2026-05-13 08:40:30

This commit is contained in:
github-actions[bot] committed 2026-05-13 08:40:30 +08:00
1 parent 2206a0ea68
commit 6bb23e315c
7 files changed
+93 -410

No files matched your search

+2 -2
View File
@@ -3,8 +3,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=Information dashboard for 3G/LTE dongle
LUCI_DEPENDS:=+modeminfo
PKG_LICENSE:=GPLv3
PKG_VERSION:=0.4.5
PKG_RELEASE:=1
PKG_VERSION:=0.4.6
PKG_RELEASE:=2
include $(TOPDIR)/feeds/luci/luci.mk
@@ -9,7 +9,7 @@
/*
Written by Konstantine Shevlakov at <shevlakov@132lan.ru> 2023
Written by Konstantine Shevlakov at <shevlakov@132lan.ru> 2023 - 2026
Licensed to the GNU General Public License v3.0.
@@ -45,20 +45,44 @@ var callQMIPort = rpc.declare({
}
});
var callCheckQmiinfo = rpc.declare({
object: 'file',
method: 'stat',
params: [ 'path' ],
expect: { '': {} }
});
var maindesc = _('Modeminfo: Configuration');
var mdesc = _('Configuration panel of Modeminfo.');
var qfdesc = _('Get modem data via qmicli (experimental). Require install qmi-utils.');
var qfdesc = _('Get modem data via qmi. Require install qminfo.');
var sdesc = _('Select serial port.');
var qdesc = _('Select qmi port.');
var lacdec = _('Show LAC and CID in decimal.');
var mmdesc = _('Get device hardware name via mmcli utility if aviable.');
var qmidesc = _('Enable qmi-proxy mode.');
var qmidesc = _('Set qmi mode.');
var idesc = _('Short info on Overview page');
var portplace = _('Please select a port');
return view.extend({
render: function(){
load: function() {
return callCheckQmiinfo('/usr/bin/qminfo')
.then(function(stat) {
return (stat && stat.size != null);
})
.catch(function() {
return false;
});
},
render: function(qmiinfoInstalled){
var qfdesc = qmiinfoInstalled
? _('Get modem data via qmi.')
: _('Please install qminfo package.');
var m, s, o;
m = new form.Map('modeminfo', maindesc, mdesc);
s = m.section(form.TypedSection, 'general', _('General option'), null);
@@ -85,6 +109,11 @@ return view.extend({
o = s.option(form.Flag, 'qmi_mode', _('Use QMI'), qfdesc);
o.rmempty = true;
if (!qmiinfoInstalled) {
o.readonly = true;
o.write = function() {};
o.cfgvalue = function() { return '0'; };
}
o = s.option(form.ListValue, 'device', _('Data port'), sdesc);
o.load = function(section_id) {
@@ -117,7 +146,10 @@ return view.extend({
o.rmempty = true;
o.depends('qmi_mode', '0');
o = s.option(form.Flag, 'qmi_proxy', _('QMI proxy'), qmidesc);
o = s.option(form.ListValue, 'qmi_trap', _('QMI mode'), qmidesc);
o.value('',_('Auto'));
o.value('qmi',_('Direct QMI'));
o.value('mbim',_('QMI over MBIM'));
o.rmempty = true;
o.depends('qmi_mode', '1');
+22 -7
View File
@@ -87,8 +87,14 @@ msgstr "Страница конфигурации Modeminfo."
msgid "Use QMI"
msgstr "Использовать QMI"
msgid "Get modem data via qmicli (experimental). Require install qmi-utils."
msgstr "Получать данные модема через qmicli (экспериментально). Требуется установленный qmi-utils."
msgid "Get modem data via qmi. Require install qminfo."
msgstr "Получать данные модема через qmi. Требуется установленный qminfo."
msgid "Get modem data via qmi."
msgstr "Получать данные модема через qmi."
msgid "Please install qminfo package."
msgstr "Установите пакет qminfo."
msgid "Data port"
msgstr "Порт данных"
@@ -111,11 +117,20 @@ msgstr "Если доступно, использовать утилиту mmcli
msgid "Name via mmcli"
msgstr "Имя модема через mmcli"
msgid "QMI proxy"
msgstr "QMI прокси"
msgid "QMI mode"
msgstr "Режим QMI"
msgid "Enable qmi-proxy mode."
msgstr "Задействовать режим прокси."
msgid "Set qmi mode."
msgstr "Задействовать режим QMI."
msgid "Auto"
msgstr "Автоматически"
msgid "Direct QMI"
msgstr "Только QMI"
msgid "QMI over MBIM"
msgstr "QMI через MBIM"
msgid "Index page"
msgstr "На главную"
@@ -145,4 +160,4 @@ msgid "Wait devices information"
msgstr "Ожидание ответа от устройств"
msgid "Error loading information"
msgstr "Получение данных завершилось ошибкой"
msgstr "Получение данных завершилось ошибкой"
+2 -14
View File
@@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=modeminfo
PKG_VERSION:=0.4.5
PKG_RELEASE:=2
PKG_VERSION:=0.4.6
PKG_RELEASE:=3
PKG_MAINTAINER:=Konstantine Shevlakov <shevlakov@132lan.ru>
include $(INCLUDE_DIR)/package.mk
@@ -20,12 +20,6 @@ define Package/$(PKG_NAME)
TITLE:=Signal information for 3G/LTE dongle
endef
define Package/$(PKG_NAME)-qmi
$(call Package/$(PKG_NAME)/Default)
DEPENDS:=+modeminfo +qmi-utils
TITLE:=QMI addon for modeminfo
endef
define Package/$(PKG_NAME)-telegram
$(call Package/$(PKG_NAME)/Default)
DEPENDS:=+modeminfo +telegrambot
@@ -78,11 +72,6 @@ define Package/$(PKG_NAME)/install
$(CP) ./root/etc/config/* $(1)/etc/config
endef
define Package/$(PKG_NAME)-qmi/install
$(INSTALL_DIR) $(1)/usr/share/modeminfo/scripts
$(CP) ./root/usr/share/modeminfo-qmi/* $(1)/usr/share/modeminfo/scripts
endef
define Package/$(PKG_NAME)-telegram/install
$(INSTALL_DIR) $(1)/usr/lib/telegrambot/plugins
$(CP) ./root/usr/lib/telegrambot/plugins/* $(1)/usr/lib/telegrambot/plugins
@@ -105,5 +94,4 @@ $(eval $(call SerialPlugin,dell,+kmod-usb-serial-option,Dell DW5821e,DELL))
#$(eval $(call SerialPlugin,yuge,+kmod-usb-serial-option,Yuge CLM920,YUGE))
#$(eval $(call SerialPlugin,zte,+kmod-usb-serial-option,ZTE MF823/MF823D,ZTE))
$(eval $(call SerialPlugin,thales,+kmod-usb-serial-option,Thales MV31-W T99W175,THALES))
$(eval $(call BuildPackage,$(PKG_NAME)-qmi))
$(eval $(call BuildPackage,$(PKG_NAME)-telegram))
@@ -1,180 +0,0 @@
# qmi addon for luci-app-modeminfo
# require full version libqmi (need build in SDK)
# (c) 2020-2024 written by Konstantine Shevlakov (c) at <shevlakov@132lan.ru>
get_device_info(){
DEVPORT=$(uci -q get modeminfo.@modeminfo[$s].device_qmi)
DEVCTL=$(echo $DEVPORT | awk -F [\/] '{print $NF}')
if [ -x /usr/bin/qmicli ]; then
export QMICTL="qmicli -p -d $DEVPORT"
else
logger -t "luci-app-modeminfo" "qmicli not found!"
exit 1
fi
if [ $DEVPORT ]; then
QPROXY=$(uci -q get modeminfo.@modeminfo[$s].qmi_proxy)
if [ $QPROXY -eq 1 ]; then
export QMICTL="qmicli -p -d $DEVPORT"
else
export QMICTL="qmicli -d $DEVPORT"
fi
else
for qmi in $(ls /dev/cdc-wdm*); do
if [ $qmi ]; then
QMI_DEVICE=$qmi
if [ -n $(which qmicli) ]; then
export QMICTL="qmicli -p -d ${QMI_DEVICE}"
else
logger -t "luci-app-modeminfo" "qmi-utils not found or installed!"
exit 0
fi
else
logger -t "luci-app-modeminfo" "Device is no QMI mode or not found!"
exit 0
fi
done
if [ $qmi ]; then
uci set modeminfo.@modeminfo[0].device_qmi="$qmi"
uci commit modeminfo
break
fi
fi
}
get_hardware_info(){
MANUF=$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../manufacturer)
MODEL="$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../product)"
if [ -n "$(echo "${MODEL}" | grep -Ei "${MANUF}")" ] || [ -n "$(echo "${MANUF}" | grep -Ei QUAL)" ]; then
DEVICE="${MODEL}"
else
DEVICE="${MANUF} ${MODEL}"
fi
IMEI=`$QMICTL --dms-get-ids | awk -F [:] '/IMEI:/{gsub("'\''|\*", ""); print $2}'`
FW=$($QMICTL --dms-get-software-version | awk -F [:] '/version:/{print $2}' )
ICCID=$($QMICTL --dms-uim-get-iccid | awk -F [:] '/ICCID/{gsub("'\''",""); print $2}' )
}
get_lte_bw(){
case $BWDx in
3) BWDL=1 ;;
5) BWDL=2 ;;
10) BWDL=3 ;;
15) BWDL=4 ;;
20) BWDL=5 ;;
esac
}
get_signal_info(){
NETWORK=`$QMICTL --nas-get-home-network | awk -F [:] '/MCC|MNC|Description/{gsub("'\''|^ ", "");print $2}'`
COPS_MCC=$(echo ${NETWORK} |awk '{print $1}')
COPS_MNC_RAW=$(echo ${NETWORK} |awk '{print $2}')
if [ $COPS_MNC_RAW -lt 10 ]; then
COPS_MNC=0${COPS_MNC_RAW}
else
COPS_MNC=$COPS_MNC_RAW
fi
COPS="$(echo "${NETWORK}" |tail -1)"
SIGNAL=$($QMICTL --nas-get-signal-info)
MODE=$(echo "$SIGNAL" | awk 'NR ==2{gsub("\:", ""); print $1}')
STRENGTH=$(echo "$SIGNAL" | awk '/RSSI|RSRQ|RSRP|SNR|ECIO/{gsub("'\''",""); print $2}')
SERVING=$($QMICTL --nas-get-serving-system)
RFBAND=$($QMICTL --nas-get-rf-band-info)
if [ $MODE == "LTE" ]; then
MIMO=$($QMICTL --nas-get-tx-rx-info=lte | grep 'RX Chain' | wc -l)
LACTAC=$(echo "$SERVING" | awk -F [:] '/tracking area code:|3GPP cell ID:/{gsub("'\''",""); print $2}')
LAC_NUM=$(echo $LACTAC | awk '{print $2}')
CID_NUM=$(echo $LACTAC | awk '{print $1}')
CID=$(echo $CID_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
LAC=$(echo $LAC_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CSQ_RSSI=$(echo ${STRENGTH} | awk '{print $1}')
RSRQ=$(echo ${STRENGTH} | awk '{print $2}')
RSRP=$(echo ${STRENGTH} | awk '{print $3}')
SINR=$(echo ${STRENGTH} | awk '{printf "%.0f\n", $4}')
ENBx=$(echo $CID | sed -e 's/..$//')
ENBID=$(printf %d 0x$ENBx)
CELL=$(printf %d 0x${CID: -2})
PCI=$($QMICTL --nas-get-cell-location-info | awk -F [:] '/Serving Cell ID:/{gsub("'\''",""); print $2}')
LTE_O=$($QMICTL --nas-get-lte-cphy-ca-info)
LTE_CA=$(echo "$LTE_O" |grep -i '^secondary cell' | wc -l)
BWDx=$(echo "$LTE_O" | grep -A4 'Primary Cell Info' | awk -F [:] '/DL Bandwidth:/{gsub("'\''| ", ""); print $2}')
get_lte_bw
if [ $LTE_CA -ge 1 ]; then
BWC=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:] '/DL Bandwidth:/{gsub("'\''| ", ""); printf "+"$2}')
BWCA=$(($BWDx$BWC))
BANDCH=$(echo "$LTE_O" | grep -A4 '^Primary Cell' | awk -F [:] '/RX Channel:/{gsub("'\''| ", ""); print $2}')
# Fix qmicli band T77W968 modem
case $DEVICE in
*Dell*|*LN960*) CA=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:-] '/LTE Band:/{gsub("'\''| ", ""); printf " "$NF-1}') ;;
*) CA=$(echo "$LTE_O" | grep -A4 '^Secondary Cell' | awk -F [:-] '/LTE Band:/{gsub("'\''| ", ""); print $NF}') ;;
esac
for cc in $CA; do
SCC=$SCC+$cc
done
else
BANDCH=$(echo "$RFBAND" | awk -F [:] '/Active Channel:/{gsub("'\''",""); print $2}' | head -1)
if [ "x" == "x$BWDx" ]; then
BWDx=$(echo "$RFBAND" | awk -F [:] '/Bandwidth:/{gsub("'\''| ",""); print $2}' | tail -1)
get_lte_bw
fi
fi
EARFCN=$BANDCH
else
MIMO=$($QMICTL --nas-get-tx-rx-info=umts | grep 'RX Chain' | wc -l)
case $MIMO in
0) MIMO=$($QMICTL --nas-get-tx-rx-info=gsm | grep 'RX Chain' | wc -l) ;;
esac
LACTAC=$(echo "$SERVING" | awk -F [:] '/3GPP location area code:|3GPP cell ID:/{gsub("'\''",""); print $2}')
LAC_NUM=$(echo $LACTAC | awk '{print $1}')
CID_NUM=$(echo $LACTAC | awk '{print $2}')
LAC=$(echo $LAC_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CID=$(echo $CID_NUM | awk '{printf "%x\n", $1}' |awk '{print toupper($1)}')
CSQ_RSSI=$(echo ${STRENGTH} | awk '{print $1}')
if [ $(echo ${STRENGTH} | awk '{print$2}') ]; then
SINR=$(echo ${STRENGTH} | awk '{printf "%.0f\n", $2}')
fi
BANDCH=$(echo "$RFBAND" | awk -F [:] '/Active Channel:/{gsub("'\''| ",""); print $2}')
EARFCN=$(echo $BANDCH | awk '{print $2}')
fi
CSQ_PER=$(echo $CSQ_RSSI |awk '{printf "%d\n", (100*(1-(-50 - $1)/(-50 - -120)))}')
[ $CSQ_RSSI -ge -110 ] && CSQ_COL="black"
[ $CSQ_RSSI -ge -105 ] && CSQ_COL="red"
[ $CSQ_RSSI -ge -95 ] && CSQ_COL="orange"
[ $CSQ_RSSI -ge -75 ] && CSQ_COL="green"
if [ $CSQ_PER -gt 100 ]; then
CSQ_PER=100
elif [ $CSQ_PER -lt 0 ]; then
CSQ_PER=0
fi
EARFCN=$BANDCH
DISTANCE=$($QMICTL --nas-get-cell-location-info | awk '/LTE Timing Advance:/{gsub("\047",""); printf "%.2f\n", (299792458*($4*10^-6)/1000)/2}')
REG=$(echo "$SERVING" | awk -F [:] '/Registration state:/{print $2}' | sed "s/'//g" | awk '{print $1}')
case $REG in
registered)
REGST=1
;;
registration-denied)
REGST=3
;;
esac
DECIMAL=$(uci -q get modeminfo.@general[0].decimail)
if [ "x${DECIMAL}" != "x" ]; then
LAC=$(printf %d 0x$LAC_NUM)
CID=$(printf %d 0x$CID_NUM)
fi
}
#get_device
function get_data_in(){
get_hardware_info >/dev/null 2>&1
get_signal_info >/dev/null 2>&1
}
get_hwinfo(){
continue
}
@@ -1,176 +0,0 @@
#!/bin/sh
get_device_info(){
DEVPORT=$(uci -q get modeminfo.@modeminfo[0].device_qmi)
DEVCTL=$(echo $DEVPORT | awk -F [\/] '{print $NF}')
if ! [ -x /sbin/uqmi ]; then
logger -t "luci-app-modeminfo" "uqmi not found!"
exit 1
fi
if [ $DEVPORT ]; then
QPROXY=$(uci -q get modeminfo.@modeminfo[0].qmi_proxy)
if [ "x${QPROXY}" = "x" ]; then
export MBIM=""
else
export MBIM="-m"
fi
else
for qmi in $(ls /dev/cdc-wdm*); do
if [ $qmi ]; then
QMI_DEVICE=$qmi
if ! [ -n $(which uqmi) ]; then
logger -t "luci-app-modeminfo" "uqmi not found or installed!"
exit 0
fi
else
logger -t "luci-app-modeminfo" "Device is no QMI mode or not found!"
exit 0
fi
done
if [ $qmi ]; then
uci set modeminfo.@modeminfo[0].device_qmi="$qmi"
uci commit modeminfo
break
fi
fi
}
get_data(){
case $1 in
hw)
uqmi ${MBIM} -s -d ${DEVPORT} --get-imei
;;
net)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-serving-system
;;
sig)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-signal-info
;;
lte)
uqmi ${MBIM} -d ${DEVPORT} \
--get-lte-cphy-ca-info
;;
base)
uqmi ${MBIM} -s -d ${DEVPORT} \
--get-system-info
;;
mimo)
uqmi ${MBIM} -s -d ${DEVPORT} \
--nas-get-tx-rx-info=$MODE
;;
sta)
uqmi ${MBIM} -d ${DEVPORT} \
--get-cell-location-info
;;
esac
killall -9 uqmi >/dev/null 2>&1
}
get_hardware_info(){
DATA=$(get_data hw)
MANUF=$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../manufacturer)
MODEL="$(cat $(readlink -f /sys/class/usbmisc/${DEVCTL})/../../../product)"
DEVICE="$MANUF $MODEL"
IMEI=$(echo "$DATA" | tail -1 | tr -d '"')
}
get_signal_info(){
DATA=$(get_data net)
eval $(jsonfilter -s "$DATA" -e "COPS=$['plmn_description']" \
-e "COPS_MCC=$['plmn_mcc']" \
-e "COPS_MNC_RAW=$['plmn_mnc']" \
-e "REG=$['registration']" \
-e "ROAM=$['roaming']" )
DATA=$(get_data sig)
eval $(jsonfilter -s "$DATA" -e "MODE=$['type']" \
-e "CSQ_RSSI=$['rssi']" \
-e "RSRP=$['rsrp']" \
-e "RSRQ=$['rsrq']" \
-e "SINR=$['snr']")
DATA=$(get_data base)
eval $(jsonfilter -s "$DATA" -e "TAC_NUM=$['$MODE']['tracking_area_code']" \
-e "CELL=$['$MODE']['cell_id']" \
-e "ENBID=$['$MODE']['enodeb_id']")
DATA=$(get_data sta)
EARFCN=$(echo "$DATA" | awk '/channel/{gsub(",",""); print $2}' | head -1)
PCI=$(echo "$DATA" | awk '/serving_cell_id/{gsub(",",""); print $2}' | head -1)
case $MODE in
LTE)
DATA=$(get_data lte)
eval $(jsonfilter -s "$DATA" -e "BW=$['primary']['bandwidth']")
CA=$(echo "$DATA" | awk -F [:] '/secondary_/{gsub("\"","");print $1}')
LTE_CA=$(echo "$CA" | wc -l)
if [ $LTE_CA -ge 1 ]; then
BWCA=0
for a in $CA; do
eval $(jsonfilter -s "$DATA" -e "SCx=$['$a']['band']" \
-e "BWC=$['$a']['bandwidth']")
SCC="$SCC+$SCx"
BWCA=$(($BWCA+$BWC))
done
BWCA=$(($BW+$BWCA))
fi
;;
esac
MODE=$(echo $MODE | awk '{print toupper($1)}')
if [ "$COPS_MNC_RAW" -lt "10" ]; then
COPS_MNC=0${COPS_MNC_RAW}
else
COPS_MNC=${COPS_MNC_RAW}
fi
if [ "x${COPS}" = "x" ]; then
COPS="${COPS_MCC} ${COPS_MNC}"
fi
SINR=$(echo $SINR | awk '{printf "%.0f\n", $1}')
LAC=$(echo $TAC_NUM | awk '{printf "%x\n", toupper($1)}')
ENBID_h=$(printf %x $ENBID)
CELL_h=$(printf %x $CELL)
if [ "$CELL" -le 15 ]; then
CELL_h="0${CID_h}"
fi
CID="${ENBID_h}${CELL_h}"
CID_NUM=$(printf %d 0x$CID)
case $REG in
not_registered) REGST=0 ;;
registered)
case $ROAM in
true) REGST=5 ;;
*) REGST=1 ;;
esac
;;
searching) REGST=2 ;;
registering_denied) REGST=3 ;;
unknown) REGST=4 ;;
esac
CSQ_PER=$(echo $CSQ_RSSI |awk '{printf "%d\n", (100*(1-(-50 - $1)/(-50 - -120)))}')
[ $CSQ_RSSI -ge -110 ] && CSQ_COL="black"
[ $CSQ_RSSI -ge -105 ] && CSQ_COL="red"
[ $CSQ_RSSI -ge -95 ] && CSQ_COL="orange"
[ $CSQ_RSSI -ge -75 ] && CSQ_COL="green"
if [ $CSQ_PER -gt 100 ]; then
CSQ_PER=100
elif [ $CSQ_PER -lt 0 ]; then
CSQ_PER=0
fi
DECIMAL=$(uci -q get modeminfo.@modeminfo[0].general)
if [ "x${DECIMAL}" != "x" ]; then
LAC=$LAC_NUM
CID=$CID_NUM
fi
}
function get_data_in(){
get_hardware_info >/dev/null 2>&1
get_signal_info >/dev/null 2>&1
}
get_hwinfo(){
continue
}
+30 -26
View File
@@ -4,7 +4,7 @@ trap 'cleanup >/dev/null 2>&1; exit 0' INT TERM
SECTIONS=$(echo $(uci show modeminfo | awk -F [\]\[\@=] '/=modeminfo/{print $3}'))
get_vars(){
for v in device device_qmi qmi_proxy decimail qmi_mode; do
for v in device device_qmi qmi_trap decimail qmi_mode; do
eval $v=$(uci -q get modeminfo.@modeminfo[${s}].${v} 2>/dev/null)
done
}
@@ -62,17 +62,12 @@ function if_null() {
qmi_device(){
if [ $qmi_mode ]; then
SCRIPT=/usr/share/modeminfo/scripts/modeminfo-qmi
else
SCRIPT=/usr/share/modeminfo/scripts/modeminfo
fi
if [ -r $SCRIPT ]; then
[ -n "$qmi_mode" ] || SCRIPT=/usr/share/modeminfo/scripts/modeminfo
[ -r $SCRIPT ] && {
. $SCRIPT
else
} || {
exit 0
fi
}
}
@@ -86,24 +81,33 @@ echo "{ \"modem\" : ["
for s in $SECTIONS; do
m=$((${s} + 1))
if [ "$s" ]; then
get_vars
qmi_device
get_device_info
get_data_in >/dev/null 2>&1
if_null
json_status
fi
if [ "$ARGSLEN" = "${m}" ]; then
echo " }"
get_vars
if [ $qmi_mode ]; then
if [ "$s" ]; then
/usr/bin/qminfo $device_qmi --json --${qmi_trap}
fi
if [ "$ARGSLEN" != "${m}" ]; then
echo ","
fi
else
echo " },"
if [ "$s" ]; then
qmi_device
get_device_info
get_data_in >/dev/null 2>&1
if_null
json_status
fi
if [ "$ARGSLEN" = "${m}" ]; then
echo " }"
else
echo " },"
fi
# flush modem variables
unset BWCA SCC SC BWDx BWPx BWCx BWDL LTE_CA \
DEVICE COPS MODE CSQ_PER LAC CSQ_RSSI \
SINR RSRP IMEI REGST EARFCN CHIPTEMP FW \
ICCID IMSI RSRQ DISTANCE
fi
# flush modem variables
unset BWCA SCC SC BWDx BWPx BWCx BWDL LTE_CA \
DEVICE COPS MODE CSQ_PER LAC CSQ_RSSI \
SINR RSRP IMEI REGST EARFCN CHIPTEMP FW \
ICCID IMSI RSRQ DISTANCE
done
echo "]}"