diff --git a/README.md b/README.md index 8a13147..a44e363 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Switch between presets 1 to 17 or list available presets: `$ wled -f|-w|-a [1-17|l(ist)]` -Display or change brightness: +Change brightness: `$ wled -f|-w|-a -b [1-255]` diff --git a/wled b/wled index bb15ae2..c99a225 100755 --- a/wled +++ b/wled @@ -10,10 +10,6 @@ NAME="wled.sh" COMMAND="wled" VERSION="0.1.2" -# Make the exit status of command pipelines the status of the last command -# with non-zero exit status - if supported by this shell. -(set -o pipefail 2>/dev/null) && set -o pipefail - print_usage() { echo "\ Usage: $COMMAND -f(norcenter)|-w(wohnzimmer)|-a(ll) [on|off] @@ -33,13 +29,7 @@ commands: on|off switch on/off [1-17] switch preset l, list list presets - -b,--brightness [1-255] get or set brightness - -exit status: - 0 no failure - 1 operating error - 2 child command error - 4 unexpected API response" + -b,--brightness [1-255] set brightness" } curl_fetch() { @@ -61,16 +51,9 @@ active_preset() { sed -n 's/.*"ps"[[:space:]]*:[[:space:]]*\(1\?[0-9]\).*/\1/p' } -current_brightness() { - # Find current brightness. - curl_fetch "http://$1/json" | \ - sed -n 's/.*"state"[[:space:]]*:[[:space:]]*{[^}]*"bri"[[:space:]]*:[[:space:]]*\([0-9]\{1,3\}\).*/\1/p' -} - arg_inst="$1" arg_cmnd="$2" arg_param="$3" -exit_code=0 # Clear positional arguments. set -- @@ -103,39 +86,37 @@ case "$arg_inst" in esac # Parse and execute command argument against given instances. -for wled_host; do +while test $# -gt 0; do case "$arg_cmnd" in on) # Switch on. - api_resp=$(curl_send '{"on":true}' "http://$wled_host/json") + api_resp=$(curl_send '{"on":true}' "http://$1/json") ;; off) # Switch off. - api_resp=$(curl_send '{"on":false}' "http://$wled_host/json") + api_resp=$(curl_send '{"on":false}' "http://$1/json") ;; -b|--brightness) # Set brightness. if test -z "$arg_param"; then - # No parameter given. Print current brightness. - echo "Current brightness of $wled_host:" - current_brightness "$wled_host" - else - # Try to convert 3rd parameter to an integer between 1 an 255. - bright=$(printf '%u' "$arg_param" 2>/dev/null) - if test $? -gt 0; then # Conversion failed. - echo "Error: unable to parse parameter for brightness." >&2 - exit 1 - elif test "$bright" -lt 1 -o "$bright" -gt 255; then - echo "Error: parameter for brightness is out of range." >&2 - exit 1 - fi - api_resp=$(curl_send "{'bri':$bright}" "http://$wled_host/json") + echo "Error: missing parameter for brightness." >&2 + exit 1 fi + # Try to convert 3rd parameter to an integer between 1 an 255. + bright=$(printf '%u' "$arg_param" 2>/dev/null) + if test $? -gt 0; then # Conversion failed. + echo "Error: unable to parse parameter for brightness." >&2 + exit 1 + elif test "$bright" -lt 1 -o "$bright" -gt 255; then + echo "Error: parameter for brightness is out of range." >&2 + exit 1 + fi + api_resp=$(curl_send "{'bri':$bright}" "http://$1/json") ;; [1-9]|1[0-7]) # Switch to preset. - api_resp=$(curl_send "{'ps':$arg_cmnd}" "http://$wled_host/json") + api_resp=$(curl_send "{'ps':$arg_cmnd}" "http://$1/json") ;; l|list) # List presets. printf "loading ...\r" - active_ps=$(active_preset "$wled_host") - curl_fetch "http://$wled_host/presets.json" | \ + active_ps=$(active_preset "$1") + curl_fetch "http://$1/presets.json" | \ # Split into lines - one line per preset. sed --sandbox 's/"1\?[0-9]"[[:space:]]*:/\n&/g' | \ # Extract number and name of every preset. Right-align numbers. @@ -149,9 +130,8 @@ for wled_host; do # Sort. sort -b -n | \ # Prepend description and mark active preset. - sed --sandbox -e "1i\\Presets on $wled_host:" \ + sed --sandbox -e "1i\\Presets on $1:" \ -e "s/^ \?$active_ps:.*/& */" - ;; "") # Missing command. echo "Error: missing command." >&2 @@ -165,19 +145,17 @@ for wled_host; do ;; esac - # Check curl (or maybe sed) exit status - child_exit=$? - if test $child_exit -ne 0; then - echo "Error: curl or sed exited with exit code $child_exit." >&2 - exit_code=$((exit_code|2)) + # Check curl exit status + curl_exit=$? + if test $curl_exit -ne 0; then + echo "Error: curl exited with exit code $curl_exit." >&2 fi - # Check API response. + # Check API responce. if test -n "$api_resp" && echo "$api_resp" | grep -qv '{\s*"success"\s*:\s*true\s*}'; then - echo "Warning: unexpected response from WLED API." >&2 - exit_code=$((exit_code|4)) + echo "Warning: unexpected responce from WLED API." >&2 fi + + shift done -exit $exit_code -