#!/bin/bash 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 "" } help() { echo "" echo -e "\033[1mHelp:\033[0m" echo "" echo "" } inform() { device="$1" info=$(sonos $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 ;; 7|p|P) echo -e "\n\033[1m List albums... \033[0m" read -p "Enter Album" alb b=$(sonos $device list_albums | more) echo -e "\n $b \n" 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" "(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 $device play_fav 'K6 FM' && sleep 2 break ;; 4|c|C) echo -e "\n\033[1m Playing Rires et Chansons... \033[0m" sonos $device play_fav 'Rire et Chansons' && sleep 2 break ;; 5|r|R) echo -e "\n\033[1m Playing RTL... \033[0m" sonos $device play_fav 'RTL' && sleep 2 break ;; 6|d|D) echo -e "\n\033[1m Playing Deezer Flow... \033[0m" sonos $device play_fav 'Flow' break ;; 7|p|P) echo -e "\n\033[1m Display playlist list_favs... \033[0m" sonos $device list_favs read -p "" break ;; 8|s|S) echo -e "\n\033[1m Start $device... \033[0m" sonos $device start && sleep 2 break ;; 9|t|T) echo -e "\n\033[1m Stop $device... \033[0m" sonos $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 $device volume 11 && sleep 2 break ;; 12|m|M) echo -e "\n\033[1m Mute ON... \033[0m" sonos $device mute on && sleep 2 break ;; 13) echo -e "\n\033[1m Set volume to level 13... \033[0m" sonos $device volume 13 && sleep 2 break ;; 14|u|U) echo -e "\n\033[1m Mute OFF... \033[0m" sonos $device mute off && sleep 2 break ;; 15) echo -e "\n\033[1m Set volume to level 15... \033[0m" sonos $device volume 15 && sleep 2 break ;; 16|n|N) echo -e "\n\033[1m Status light ON... \033[0m" sonos $device status_light on && sleep 2 break ;; 17|o|O) echo -e "\n\033[1m Status light OFF... \033[0m" sonos $device status_light off && sleep 2 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 } # local or discover # --use-local-speaker-list, -l # Use the local speaker list instead of SoCo discovery # --refresh-local-speaker-list, -r # Refresh the local speaker list loc=" -l" 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