You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
3.7 KiB
Bash
175 lines
3.7 KiB
Bash
1 year ago
|
#!/bin/sh
|
||
|
|
||
|
# get data
|
||
|
get_data(){
|
||
|
DATATYPE=$(uci -q get cellled.@device[0].data_type)
|
||
|
case $DATATYPE in
|
||
|
mm)
|
||
|
PORT=$(uci -q get cellled.@device[0].device_mm)
|
||
|
RSSI=$(mmcli -m ${PORT} -J | jsonfilter -e '@["modem"]["generic"]["signal-quality"]["value"]')
|
||
|
;;
|
||
|
qmi)
|
||
|
PORT=$(uci -q get cellled.@device[0].device_qmi)
|
||
|
QMICTL="qmicli -p -d $PORT"
|
||
|
RSSIDB=$($QMICTL --nas-get-signal-info | awk -F [\'\:\ ] '/RSSI:/{print $4}')
|
||
|
RSSI=$(echo $RSSIDB |awk '{printf "%d\n", (100*(1-(-51 - $1)/(-50 - -113)))}')
|
||
|
;;
|
||
|
uqmi)
|
||
|
PORT=$(uci -q get cellled.@device[0].device_qmi)
|
||
|
RSSIDB=$(uqmi -d ${PORT} --get-signal-info | jsonfilter -e '@["rssi"]')
|
||
|
RSSI=$(echo $RSSIDB |awk '{printf "%d\n", (100*(1-(-51 - $1)/(-51 - -113)))}')
|
||
|
;;
|
||
|
serial)
|
||
|
PORT=$(uci -q get cellled.@device[0].device)
|
||
|
RSSI=$(gcom -d ${PORT} -s /etc/gcom/getstrength.gcom | awk -F [:,] '/CSQ:/{printf "%.0f\n", $2*100/31}')
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
# get rssi levels
|
||
|
get_led_level(){
|
||
|
RSSI_MIN=$(uci -q get cellled.@rssi_led[$n].rssi_min)
|
||
|
RSSI_MAX=$(uci -q get cellled.@rssi_led[$n].rssi_max)
|
||
|
}
|
||
|
|
||
|
# set rgb light
|
||
|
set_led_rgb(){
|
||
|
if [ $RSSI -ge $RSSI_MIN -a $RSSI -le $RSSI_MAX ]; then
|
||
|
LED_ON=$(echo $RSSI_MIN $RSSI_MAX $RSSI | awk '{printf "%.0f\n", (255/($2-$1)*($3-$1))}')
|
||
|
STATE=true
|
||
|
else
|
||
|
LED_ON=0
|
||
|
STATE=false
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# set linear light
|
||
|
set_led_linear(){
|
||
|
if [ $RSSI -ge $RSSI_MIN -a $RSSI -lt $RSSI_MAX ]; then
|
||
|
STATE=true
|
||
|
elif [ $RSSI -ge $RSSI_MAX ]; then
|
||
|
STATE=true
|
||
|
elif [ $RSSI -lt $RSSI_MIN ]; then
|
||
|
STATE=false
|
||
|
else
|
||
|
STATE=false
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# set linear led level
|
||
|
if_linear(){
|
||
|
LED=$(uci -q get cellled.@rssi_led[$n].led)
|
||
|
get_led_level
|
||
|
set_led_linear
|
||
|
if [ $STATE = true -a $LED ]; then
|
||
|
LED_ON=255
|
||
|
echo $LED_ON > /sys/class/leds/$LED/brightness
|
||
|
else
|
||
|
LED_ON=0
|
||
|
echo $LED_ON > /sys/class/leds/$LED/brightness
|
||
|
fi
|
||
|
|
||
|
}
|
||
|
|
||
|
# set grb led level
|
||
|
if_rgb(){
|
||
|
PWM=$(uci -q get cellled.@device[0].pwm_mode)
|
||
|
LED_R=$(uci -q get cellled.@device[0].red_led)
|
||
|
LED_G=$(uci -q get cellled.@device[0].green_led)
|
||
|
LED_B=$(uci -q get cellled.@device[0].blue_led)
|
||
|
case $TYPE in
|
||
|
poor)
|
||
|
get_led_level
|
||
|
set_led_rgb
|
||
|
if [ $STATE = true ]; then
|
||
|
R=255
|
||
|
G=0
|
||
|
if [ "$PWM" = "1" ]; then
|
||
|
B=$((255-$LED_ON))
|
||
|
else
|
||
|
B=255
|
||
|
fi
|
||
|
fi
|
||
|
;;
|
||
|
bad)
|
||
|
get_led_level
|
||
|
set_led_rgb
|
||
|
if [ $STATE = true ]; then
|
||
|
R=255
|
||
|
if [ "$PWM" = "1" ]; then
|
||
|
G=$LED_ON
|
||
|
else
|
||
|
G=0
|
||
|
fi
|
||
|
B=0
|
||
|
fi
|
||
|
;;
|
||
|
fair)
|
||
|
get_led_level
|
||
|
set_led_rgb
|
||
|
if [ $STATE = true ]; then
|
||
|
if [ "$PWM" = "1" ]; then
|
||
|
R=$((255-$LED_ON))
|
||
|
else
|
||
|
R=255
|
||
|
fi
|
||
|
G=255
|
||
|
B=0
|
||
|
fi
|
||
|
;;
|
||
|
good|best|excellend)
|
||
|
get_led_level
|
||
|
set_led_rgb
|
||
|
if [ $STATE = true ]; then
|
||
|
R=0
|
||
|
G=255
|
||
|
B=0
|
||
|
fi
|
||
|
;;
|
||
|
esac
|
||
|
if [ ! $R ]; then R=0; fi
|
||
|
if [ ! $G ]; then G=0; fi
|
||
|
if [ ! $B ]; then B=0; fi
|
||
|
}
|
||
|
|
||
|
# select type led (rgb or linear)
|
||
|
select_led(){
|
||
|
if [ "$RGB_LED" = "1" ]; then
|
||
|
TYPE=$(uci -q get cellled.@rssi_led[$n].type)
|
||
|
if_rgb
|
||
|
else
|
||
|
if_linear
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# get param
|
||
|
get_param(){
|
||
|
RSSI=$RSSI
|
||
|
if [ $RSSI -lt 0 ]; then
|
||
|
RSSI=0
|
||
|
elif [ $RSSI -gt 100 ]; then
|
||
|
RSSI=100
|
||
|
fi
|
||
|
LED_ON=0
|
||
|
RGB_LED=$(uci -q get cellled.@device[0].rgb_led)
|
||
|
SECTIONS=$(uci show cellled | awk -F [\]\[\@=] '/=rssi_led/{print $3}')
|
||
|
TIMEOUT=$(uci -q get cellled.@device[0].timeout)
|
||
|
if [ -z $RSSI ]; then
|
||
|
exit 2
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
get_data
|
||
|
get_param
|
||
|
for n in $SECTIONS; do
|
||
|
select_led
|
||
|
done
|
||
|
if [ "$RGB_LED" = "1" -a $LED_R -a $LED_G -a $LED_B ]; then
|
||
|
#echo "${LED_R}=${R} ${LED_G}=${G} ${LED_B}=${B}"
|
||
|
echo $R > /sys/class/leds/$LED_R/brightness
|
||
|
echo $G > /sys/class/leds/$LED_G/brightness
|
||
|
echo $B > /sys/class/leds/$LED_B/brightness
|
||
|
fi
|
||
|
|
||
|
sleep $TIMEOUT
|