diff --git a/README.md b/README.md index 97d5231..13c0021 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,24 @@ # wled.sh -Simple shell script to turn predefined wled instances on/off, change brightness -and switch presets. - -Requires *curl* version 7.82.0 or newer. +Turn WLED installations in the C4 hackspace on/off, change brightness or switch +between presets. ## Usage Switch on/off: -`wled f(nordcenter)|w(ohnzimmer) on|off` +`$ wled -f(nordcenter)|-w(wohnzimmer) on|off` Switch between presets 1 to 17 or list available presets: -`wled f(nordcenter)|w(ohnzimmer) 1-17|l(ist)` +`$ wled -f|-w 1-17|l` Change brightness: -`wled f(nordcenter)|w(ohnzimmer) b(rightness) 1-255` +`$ wled -f|-w -b 1-255` + +## Requirements + +*curl* version 7.82.0 or newer. +You have to be connected to the local network. diff --git a/wled b/wled index 946d282..49aff8e 100755 --- a/wled +++ b/wled @@ -1,28 +1,54 @@ #!/bin/sh # -# Simpel command line tool to turn predefined wled instances on/off or switch -# presets. +# Turn WLED installations in the C4 hackspace on/off, change brightness or +# switch between presets. # # Author: Shy # License: CC0 -CURL_FLAGS="--silent --show-error --fail --ipv4 --max-filesize 64K" +NAME="wled.sh" +COMMAND="wled" +VERSION="0.0.1" print_usage() { - echo "Usage: $0 f(nordcenter)|w(ohnzimmer) on|off|1-17|list" - echo " $0 f(nordcenter)|w(ohnzimmer) b(rightness) [1-255]" + echo "\ +Usage: $COMMAND -f(norcenter)|-w(wohnzimmer) [on|off] + $COMMAND -f|-w [1-17|list] + $COMMAND -f|-w -b [1-255]" +} + +print_help() { + print_usage + echo " +host selection: + -f,--fnordcenter select fnordcenter + -w,--wohnzimmer select wohnzimmer + +commands: + on|off switch on/off + [1-17] switch preset + l, list list presets + -b,--brightness [1-255] set brightness" +} + +curl_cmd() { + curl --silent --show-error --fail --ipv4 --max-filesize 32K "$@" } # Parse host argument. case "$1" in - ""|-h|--h) # Missing host parameter. - print_usage + ""|-h|--help) # Missing host parameter. + print_help exit 0 ;; - f|fnordcenter) + -v|--version) + echo "$NAME version $VERSION" + exit 0 + ;; + -f|--fnordcenter) wled_host='wled-fnordcenter.local' ;; - w|wohnzimmer) + -w|--wohnzimmer) wled_host='wled-wohnzimmer.local' ;; *) # Unknown host parameter. @@ -35,12 +61,12 @@ esac # Parse and execute command argument. case "$2" in on) # Switch on. - api_resp=$(curl $CURL_FLAGS --json '{"on":true}' "http://$wled_host/json") + api_resp=$(curl_cmd --json '{"on":true}' "http://$wled_host/json") ;; off) # Switch off. - api_resp=$(curl $CURL_FLAGS --json '{"on":false}' "http://$wled_host/json") + api_resp=$(curl_cmd --json '{"on":false}' "http://$wled_host/json") ;; - b|brightness) # Set brightness. + -b|--brightness) # Set brightness. if test -z "$3"; then echo "Error: missing parameter for brightness." >&2 exit 1 @@ -54,22 +80,24 @@ case "$2" in echo "Error: parameter for brightness is out of range." >&2 exit 1 fi - api_resp=$(curl $CURL_FLAGS --json "{'bri':$bright}" "http://$wled_host/json") + api_resp=$(curl_cmd --json "{'bri':$bright}" "http://$wled_host/json") ;; [1-9]|1[0-7]) # Switch to preset. - api_resp=$(curl $CURL_FLAGS --json "{'on':true,'ps':$2}" "http://$wled_host/json") + api_resp=$(curl_cmd --json "{'ps':$2}" "http://$wled_host/json") ;; l|list) # List presets. - echo "Presets on $wled_host:" - curl $CURL_FLAGS "http://$wled_host/presets.json" | \ + printf "loading ...\r" + curl_cmd "http://$wled_host/presets.json" | \ # Split into lines - one line per preset. Append final newline. - sed --sandbox 's/"\(1\?[0-9]\)"/\n"\1"/g; $a\' | \ - # Extract number and name of every preset. - sed --sandbox -n 's/^"\(1\?[0-9]\)":.*"n":"\([[:print:]]*\)".*$/\1: \2/p' + sed --sandbox 's/"\(1\?[0-9]\)"[[:space:]]*:/\n&/g; $a\ ' | \ + # Extract number and name of every preset. Prepend description. + sed --sandbox -n \ + -e 's/^"\(1\?[0-9]\)"[[:space:]]*:.*"n"[[:space:]]*:[[:space:]]*"\([[:print:]]*\)".*$/\1: \2/p' \ + -e "1i\\Presets on $wled_host:" exit $? ;; dump) # Dump JSON response from API. - curl $CURL_FLAGS -w '\n' "http://$wled_host/json" + curl_cmd -w '\n' "http://$wled_host/json" exit 0 ;; "") # Missing command. @@ -84,14 +112,15 @@ case "$2" in ;; esac +# Check curl exit status curl_exit=$? if test $curl_exit -ne 0; then echo "Error: curl exited with exit code $curl_exit." >&2 exit 1 fi -# Check API responce. Should be {"success":true}. -if test "$(echo -n "$api_resp"|tr -c -d '[:alpha:]')" != 'successtrue'; then +# Check API responce. +if echo "$api_resp" | grep -qv '{\s*"success"\s*:\s*true\s*}'; then echo "Error: unexpected responce from WLED API." >&2 exit 1 fi