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