diff --git a/command_watcher.sh b/command_watcher.sh index 27874cc..068db1e 100755 --- a/command_watcher.sh +++ b/command_watcher.sh @@ -3,11 +3,11 @@ COMMAND_FILE=/tmp/command lounge_light() { - ./light.sh $1 + ./light.sh 1 "$1" } lounge_light_toggle() { - ./light.sh + ./light.sh 1 } cd "$(dirname $0)" diff --git a/light.sh b/light.sh index 59ffe84..a2e3dbc 100755 --- a/light.sh +++ b/light.sh @@ -1,15 +1,75 @@ #!/bin/bash -TMPFILE=/tmp/light_state -touch $TMPFILE -LIGHT_STATE=$(cat $TMPFILE) +TMPFILE_BASE=/tmp/light_state +ROOM_NUMBER="$1" +COLOR="$2" + +ROOM_COUNT=3 +STATE_0="a\x00\x03\x00\x00\x00|000000000000000000;\ + 000000000000000000;\ + 000000000000000000" +STATE_1="a\x00\x03\xff\xff\xff|255255255255255255;\ + 000000000000000000;\ + 000000000000000000" +STATE_2="n\x00\x02\x01\x00|170000070150000050;\ + 000000000000000000;\ + 000000000000000000" + +get_room_color_string() { +case "$ROOM_NUMBER" in + 1) + COLOR_A="$(echo "$COLOR" | sed "s/\(..\)\(..\)\(..\)/\\\x\2\\\x\1\\\x\3/g")" + COLOR_B="$(echo "$COLOR" | while read -N2 code; do printf "%03d" $((16#$code)); done)" + echo "a\x00\x03$COLOR_A|$COLOR_B$COLOR_B" + ;; + 2) + echo "" + ;; + 3) + echo "" + ;; + *) + echo "ERROR: wrong room number, internal problem detected" >&1 + exit 1 + ;; +esac +} + +set_room_color() { +case "$ROOM_NUMBER" in + 1) + echo -en "$(echo "$STATE" | cut -d";" -f1 | cut -d"|" -f1)" > /dev/udp/172.23.92.15/49152 & + echo -en "$(echo "$STATE" | cut -d";" -f1 | cut -d"|" -f2)" > /dev/udp/172.23.92.16/31302 & + ;; + 2) + # echo -en "$(echo "$STATE" | cut -d";" -f2 | cut -d"|" -f1)" > /dev/null + # echo -en "$(echo "$STATE" | cut -d";" -f2 | cut -d"|" -f2)" > /dev/null + echo "not implemented" >&1 + exit 1 + ;; + 3) + # echo -en "$(echo "$STATE" | cut -d";" -f3 | cut -d"|" -f1)" > /dev/null + # echo -en "$(echo "$STATE" | cut -d";" -f3 | cut -d"|" -f2)" > /dev/null + echo "not implemented" >&1 + exit 1 + ;; + *) + echo "ERROR: wrong room number, internal problem detected" >&1 + exit 1 + ;; +esac +} + +if ! [[ "$ROOM_NUMBER" =~ ^[0-9]+$ ]] || ! [ "$ROOM_NUMBER" -gt 0 -a "$ROOM_NUMBER" -le "$ROOM_COUNT" ]; then + echo "ERROR: please specify a valid room number" >&1 + exit 1 +fi + +touch "${TMPFILE_BASE}_$ROOM_NUMBER" +LIGHT_STATE=$(cat "${TMPFILE_BASE}_$ROOM_NUMBER") [ -z "$LIGHT_STATE" ] && LIGHT_STATE=0 -if [ -z "$1" ]; then - STATE_0="a\x00\x03\x00\x00\x00;000000000000000000" - STATE_1="a\x00\x03\xff\xff\xff;255255255255255255" - STATE_2="n\x00\x02\x01\x00;170000070150000050" - +if [ -z "$COLOR" ]; then LIGHT_STATE=$(( $LIGHT_STATE+1 )) case $LIGHT_STATE in 0) @@ -27,16 +87,12 @@ if [ -z "$1" ]; then ;; esac else - COLOR_A="$(echo $1 | sed "s/\(..\)\(..\)\(..\)/\\\x\2\\\x\1\\\x\3/g")" - COLOR_B="$(echo $1 | while read -N2 code; do printf "%03d" $((16#$code)); done)" - STATE="a\x00\x03$COLOR_A;$COLOR_B$COLOR_B" + STATE="$(get_room_color_string)" fi for i in {1..5}; do - echo -en "$(echo "$STATE" | cut -d";" -f1)" > /dev/udp/172.23.92.15/49152 & - echo -en "$(echo "$STATE" | cut -d";" -f2)" > /dev/udp/172.23.92.16/31302 & - + set_room_color sleep .01 done -echo $LIGHT_STATE > $TMPFILE +echo $LIGHT_STATE > "${TMPFILE_BASE}_$ROOM_NUMBER"