75 lines
1.8 KiB
Bash
Executable file
75 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env dash
|
|
|
|
|
|
print_network_state() {
|
|
case "$1" in
|
|
eth*)
|
|
echo ethernet
|
|
;;
|
|
wlan*)
|
|
echo wireless
|
|
;;
|
|
wlp*)
|
|
echo wireless
|
|
;;
|
|
usb*)
|
|
echo tethering
|
|
;;
|
|
*)
|
|
echo disconnected
|
|
;;
|
|
esac
|
|
}
|
|
|
|
wifi_strength() {
|
|
if [ "$1" -le 20 ]; then echo terrible
|
|
elif [ "$1" -le 40 ]; then echo bad
|
|
elif [ "$1" -le 60 ]; then echo mediocre
|
|
elif [ "$1" -le 80 ]; then echo good
|
|
else echo excellent
|
|
fi
|
|
}
|
|
|
|
print_network_infos() {
|
|
if [ -n "$1" ]; then
|
|
route_line=$(ip route show dev "$1" | awk '($1 == "default") { print }')
|
|
|
|
printf ',"ip":{"local":"%s","gateway":"%s"}' \
|
|
"$(echo "$route_line" | awk '{ print $7 }')" \
|
|
"$(echo "$route_line" | awk '{ print $3 }')"
|
|
|
|
if [ "$state" = wireless ]; then
|
|
signal=$(nmcli -m multiline device wifi | grep '^\s*SIGNAL: ' | xargs | cut -d \ -f 2)
|
|
printf ',"wifi":{"signal":"%s","ssid":"%s"}' \
|
|
"$(wifi_strength "$signal")" \
|
|
"$(nmcli -m multiline device wifi | grep '^\s*SSID: ' | xargs | cut -d \ -f 2)"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
print_network_status() {
|
|
device=$(ip route | awk '($1 == "default") { print $5 }')
|
|
state=$(print_network_state "$device")
|
|
|
|
printf '{"state":"%s"%s}\n' \
|
|
"$state" \
|
|
"$(print_network_infos "$device")"
|
|
}
|
|
|
|
print_bluetooth_status (){
|
|
power=$(bluetoothctl show | grep Powered | awk '{print $2}' | sed 's/yes/on/g; s/no/off/g')
|
|
count=$(bluetoothctl devices Connected | wc -l)
|
|
echo "{\"power\": \"${power}\", \"count\": \"${count}\"}"
|
|
}
|
|
|
|
print_connectivity_info () {
|
|
network="$(print_network_status)"
|
|
bluetooth="$(print_bluetooth_status)"
|
|
|
|
echo "{\"bluetooth\": ${bluetooth}, \"network\": ${network}}"
|
|
}
|
|
|
|
print_connectivity_info
|
|
dbus-monitor --system "interface=org.freedesktop.DBus.ObjectManager" 2> /dev/null | while read -r line; do
|
|
print_connectivity_info
|
|
done
|