394 lines
13 KiB
Bash
Executable File
394 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# list: local or discovery
|
|
# --use-local-speaker-list, -l
|
|
# Use the local speaker list instead of SoCo discovery
|
|
# --refresh-local-speaker-list, -r
|
|
# Refresh the local speaker list
|
|
list="local"
|
|
if [ "$list" = "discovery" ]; then
|
|
loc=""
|
|
else
|
|
loc=" -l"
|
|
fi
|
|
|
|
clear
|
|
|
|
about() {
|
|
clear
|
|
echo ""
|
|
echo -e "\033[1mAbout:\033[0m"
|
|
echo ""
|
|
echo " ##### ##### #### #### ## ";
|
|
echo " ## ## ## ## ## ## ";
|
|
echo " ##### ## ## #### ## ## #### ## ## ### ## ## ## ### ";
|
|
echo " ## ## ## ## ## ## ## ###### ## ## ## ## ## ## ## ## ## ";
|
|
echo " ##### ## ## ## ## ## ## ## # ## ## ## ## ## ## ";
|
|
echo " ## ## ## ## ## ## ## ## ## ## ## ## ##### ## ## ## ";
|
|
echo " ###### ##### #### ##### #### ####### #### ## ###### #### ";
|
|
echo " ##### ";
|
|
echo ""
|
|
echo "Just a GUI for the wonderful tool SoCo-Cli"
|
|
echo ""
|
|
echo "https://github.com/avantrec/soco-cli"
|
|
echo ""
|
|
echo "<Press Enter to quit>"
|
|
}
|
|
|
|
help() {
|
|
echo ""
|
|
echo -e "\033[1mHelp:\033[0m"
|
|
echo ""
|
|
echo "<Press Enter to quit>"
|
|
}
|
|
|
|
inform() {
|
|
device="$1"
|
|
info=$(sonos $loc $device info)
|
|
model_name=$(echo "$info" | grep "model_name" | awk -F"=" '{print $2}')
|
|
model_number=$(echo "$info" | grep "model_number" | awk -F"=" '{print $2}')
|
|
player_name=$(echo "$info" | grep "player_name" | awk -F"=" '{print $2}')
|
|
zone_name=$(echo "$info" | grep "zone_name" | awk -F"=" '{print $2}')
|
|
mac_address=$(echo "$info" | grep "mac_address" | awk -F"=" '{print $2}')
|
|
ip_address=$(echo "$info" | grep "ip_address" | awk -F"=" '{print $2}')
|
|
display_version=$(echo "$info" | grep "display_version" | awk -F"=" '{print $2}')
|
|
hardware_version=$(echo "$info" | grep "hardware_version" | awk -F"=" '{print $2}')
|
|
software_version=$(echo "$info" | grep "software_version" | awk -F"=" '{print $2}')
|
|
|
|
echo ""
|
|
printf "\e[1m| %-20s | %-20s |\e[0m\n" "$model_name" "$player_name"
|
|
printf "| %-20s | %-20s |\n" "Model name" "$model_name"
|
|
printf "| %-20s | %-20s |\n" "Model number" "$model_number"
|
|
printf "| %-20s | %-20s |\n" "Player name" "$player_name"
|
|
printf "| %-20s | %-20s |\n" "Zone name" "$zone_name"
|
|
printf "| %-20s | %-20s |\n" "mac adress" "$mac_address"
|
|
printf "| %-20s | %-20s |\n" "IP address" "$ip_address"
|
|
printf "| %-20s | %-20s |\n" "Display version" "$display_version"
|
|
printf "| %-20s | %-20s |\n" "Hardware version" "$hardware_version"
|
|
printf "| %-20s | %-20s |\n" "Software version" "$software_version"
|
|
echo ""
|
|
echo "< Press Enter>"
|
|
}
|
|
|
|
soco_infos() {
|
|
clear
|
|
device="$1"
|
|
|
|
while true
|
|
do
|
|
clear
|
|
echo ""
|
|
echo -e "\033[1m 🔊 Sonos infos $device \033[0m"
|
|
echo ""
|
|
PS3="Select an option: "
|
|
options=(
|
|
"(A)larms"
|
|
"(G)roups"
|
|
"(I)nfo"
|
|
"(S)hares"
|
|
"S(y)sinfo"
|
|
"(R)eturn"
|
|
)
|
|
select opt2 in "${options[@]}"
|
|
do
|
|
case "$REPLY" in
|
|
1|a|A)
|
|
echo -e "\n\033[1m Alarms... \033[0m"
|
|
a=$(sonos $device alarms)
|
|
echo -e "\n $a \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
2|g|G)
|
|
echo -e "\n\033[1m Groups... \033[0m"
|
|
g=$(sonos $device groups)
|
|
echo -e "\n $g \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
3|i|I)
|
|
echo -e "\n\033[1m Info... \033[0m"
|
|
#sonos $device info
|
|
inform $device
|
|
read -p ""
|
|
break
|
|
;;
|
|
4|s|S)
|
|
echo -e "\n\033[1m Shares... \033[0m"
|
|
s=$(sonos $device shares)
|
|
echo -e "\n $s \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
5|y|Y)
|
|
echo -e "\n\033[1m Sysinfo... \033[0m"
|
|
y=$(sonos $device sysinfo)
|
|
echo -e "\n $y \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
6|r|R)
|
|
exec "$0"
|
|
;;
|
|
*) echo -e "\n\033[1;31m invalid option \033[0m";;
|
|
esac
|
|
done
|
|
done
|
|
}
|
|
|
|
soco_lists() {
|
|
clear
|
|
device="$1"
|
|
|
|
while true
|
|
do
|
|
clear
|
|
echo ""
|
|
echo -e "\033[1m 🔊 Sonos lists $device \033[0m"
|
|
echo ""
|
|
PS3="Select an option: "
|
|
options=(
|
|
"Favourite radio (s)tations"
|
|
"(F)avourites"
|
|
"(Q)ueue"
|
|
"List (a)rtists"
|
|
"List al(b)ums"
|
|
"(R)eturn"
|
|
)
|
|
select opt2 in "${options[@]}"
|
|
do
|
|
case "$REPLY" in
|
|
1|s|S)
|
|
echo -e "\n\033[1m Favourite radio stations... \033[0m"
|
|
s=$(sonos $device favourite_radio_stations)
|
|
echo -e "\n $s \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
2|f|F)
|
|
echo -e "\n\033[1m Favourites... \033[0m"
|
|
f=$(sonos $device list_favs)
|
|
echo -e "\n $f \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
3|q|Q)
|
|
echo -e "\n\033[1m Queue... \033[0m"
|
|
q=$(sonos $device list_queue)
|
|
echo -e "\n $q \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
4|a|A)
|
|
echo -e "\n\033[1m List artists... \033[0m"
|
|
a=$(sonos $device list_artists | more)
|
|
echo -e "\n $a \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
5|b|B)
|
|
echo -e "\n\033[1m List albums... \033[0m"
|
|
b=$(sonos $device list_albums | more)
|
|
echo -e "\n $b \n"
|
|
read -p "< Press Enter>"
|
|
break
|
|
;;
|
|
6|r|R)
|
|
exec "$0"
|
|
;;
|
|
*) echo -e "\n\033[1;31m invalid option \033[0m";;
|
|
esac
|
|
done
|
|
done
|
|
}
|
|
|
|
soco() {
|
|
clear
|
|
device="$1"
|
|
|
|
while true
|
|
do
|
|
clear
|
|
echo ""
|
|
echo -e "\033[1m 🔊 Sonos $device \033[0m"
|
|
echo ""
|
|
PS3="Select an option: "
|
|
options=(
|
|
"France In(f)o"
|
|
"France In(t)er"
|
|
"(K)6 FM"
|
|
"Rires et (C)hansons"
|
|
"(R)TL"
|
|
"(D)eezer Flow"
|
|
"(P)laylist list_favs"
|
|
"-(s)tart $device"
|
|
"-s(t)op $device"
|
|
"-(i)nfos on $device"
|
|
"-volume (11)"
|
|
"-(m)ute ON"
|
|
"-volume (13)"
|
|
"-m(u)te OFF"
|
|
"-volume (15)"
|
|
"-status light O(N)"
|
|
"-status light (O)FF"
|
|
"Sha(z)aaaam"
|
|
"➔ (I)nfos"
|
|
"➔ (L)ists"
|
|
"Menu Princip(a)l"
|
|
)
|
|
select opt2 in "${options[@]}"
|
|
do
|
|
case "$REPLY" in
|
|
1|f|F)
|
|
echo -e "\n\033[1m Playing France Info... \033[0m"
|
|
sonos $loc $device play_fav 'franceinfo' && sleep 2
|
|
break
|
|
;;
|
|
2|t|T)
|
|
echo -e "\n\033[1m Playing France Inter... \033[0m"
|
|
sonos $loc $device play_fav 'france inter' && sleep 2
|
|
break
|
|
;;
|
|
3|k|K)
|
|
echo -e "\n\033[1m Playing K6 FM... \033[0m"
|
|
sonos $loc $device play_fav 'K6 FM' && sleep 2
|
|
break
|
|
;;
|
|
4|c|C)
|
|
echo -e "\n\033[1m Playing Rires et Chansons... \033[0m"
|
|
sonos $loc $device play_fav 'Rire et Chansons' && sleep 2
|
|
break
|
|
;;
|
|
5|r|R)
|
|
echo -e "\n\033[1m Playing RTL... \033[0m"
|
|
sonos $loc $device play_fav 'RTL' && sleep 2
|
|
break
|
|
;;
|
|
6|d|D)
|
|
echo -e "\n\033[1m Playing Deezer Flow... \033[0m"
|
|
sonos $loc $device play_fav 'Flow'
|
|
break
|
|
;;
|
|
7|p|P)
|
|
echo -e "\n\033[1m Display playlist list_favs... \033[0m"
|
|
sonos $loc $device list_favs
|
|
read -p ""
|
|
break
|
|
;;
|
|
8|s|S)
|
|
echo -e "\n\033[1m Start $device... \033[0m"
|
|
sonos $loc $device start && sleep 2
|
|
break
|
|
;;
|
|
9|t|T)
|
|
echo -e "\n\033[1m Stop $device... \033[0m"
|
|
sonos $loc $device stop && sleep 2
|
|
break
|
|
;;
|
|
10)
|
|
echo -e "\n\033[1m Infos on $device... \033[0m"
|
|
inform $device
|
|
read -p ""
|
|
break
|
|
;;
|
|
11)
|
|
echo -e "\n\033[1m Set volume to level 11... \033[0m"
|
|
sonos $loc $device volume 11 && sleep 2
|
|
break
|
|
;;
|
|
12|m|M)
|
|
echo -e "\n\033[1m Mute ON... \033[0m"
|
|
sonos $loc $device mute on && sleep 2
|
|
break
|
|
;;
|
|
13)
|
|
echo -e "\n\033[1m Set volume to level 13... \033[0m"
|
|
sonos $loc $device volume 13 && sleep 2
|
|
break
|
|
;;
|
|
14|u|U)
|
|
echo -e "\n\033[1m Mute OFF... \033[0m"
|
|
sonos $loc $device mute off && sleep 2
|
|
break
|
|
;;
|
|
15)
|
|
echo -e "\n\033[1m Set volume to level 15... \033[0m"
|
|
sonos $loc $device volume 15 && sleep 2
|
|
break
|
|
;;
|
|
16|n|N)
|
|
echo -e "\n\033[1m Status light ON... \033[0m"
|
|
sonos $loc $device status_light on && sleep 2
|
|
break
|
|
;;
|
|
17|o|O)
|
|
echo -e "\n\033[1m Status light OFF... \033[0m"
|
|
sonos $loc $device status_light off && sleep 2
|
|
break
|
|
;;
|
|
18|z|Z)
|
|
echo -e "\n\033[1m Shazaaaam... \033[0m"
|
|
sonos $loc $device track && sleep 5
|
|
break
|
|
;;
|
|
18|i|I)
|
|
echo -e "\n\033[1m Infos... \033[0m"
|
|
soco_infos $device
|
|
#break
|
|
;;
|
|
19|l|L)
|
|
echo -e "\n\033[1m Lists... \033[0m"
|
|
soco_lists $device
|
|
#break
|
|
;;
|
|
20|a|A)
|
|
exec "$0"
|
|
;;
|
|
*) echo -e "\n\033[1;31m invalid option \033[0m";;
|
|
esac
|
|
done
|
|
done
|
|
}
|
|
|
|
|
|
while true
|
|
do
|
|
clear
|
|
|
|
echo -e ""
|
|
echo -e "\033[1m 🔈 SoCo-Cli GUI\033[0m"
|
|
echo -e ""
|
|
|
|
PS3='Select an option: '
|
|
options=("(A)bout" "(H)elp" "➔ (C)hambre" "➔ (S)alon" "(Q)uit")
|
|
|
|
select opt in "${options[@]}"
|
|
do
|
|
case "$REPLY" in
|
|
1|a|A)
|
|
about
|
|
read -p ""
|
|
break
|
|
;;
|
|
2|h|H)
|
|
help
|
|
read -p ""
|
|
break
|
|
;;
|
|
3|c|C)
|
|
soco "Chambre"
|
|
;;
|
|
4|s|S)
|
|
soco "Salon"
|
|
;;
|
|
5|q|Q)
|
|
exit
|
|
;;
|
|
*) echo "invalid option"
|
|
;;
|
|
esac
|
|
done
|
|
done
|
|
|
|
|