diff --git a/command_watcher.sh b/command_watcher.sh index dff81ca..6c46ebc 100755 --- a/command_watcher.sh +++ b/command_watcher.sh @@ -2,6 +2,14 @@ COMMAND_FILE=/tmp/command +corridor_light() { + ./light.sh 0 "$1" +} + +corridor_light_toggle() { + ./light.sh 0 +} + lounge_light() { ./light.sh 1 "$1" } @@ -31,6 +39,12 @@ while true; do fi COLOR_STRING="$(echo "$line " | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" case "$line" in + corridor_light_toggle) + corridor_light_toggle + ;; + corridor_light*) + corridor_light "$COLOR_STRING" + ;; lounge_light_toggle) lounge_light_toggle ;; diff --git a/light.sh b/light.sh index a6eb3b0..a9f03a8 100755 --- a/light.sh +++ b/light.sh @@ -28,6 +28,10 @@ GAMMA_LUT=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 get_room_color_string() { case "$ROOM_NUMBER" in + 0) + COLOR="$(echo "$COLOR" | while read -N2 code; do printf "%03d" $((16#$code)); done)" + echo "$COLOR$COLOR" + ;; 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)" @@ -49,6 +53,38 @@ esac set_room_color() { case "$ROOM_NUMBER" in + 0) + find "$(dirname "$TMPFILE_PID_BASE")" -name "$(basename "${TMPFILE_PID_BASE}_0")" -exec sh -c 'cat {} | xargs kill; rm -f {}' \; + COLOR="$(echo "$STATE" | cut -d";" -f1 | cut -d"|" -f2)" + if [ "${COLOR:0:1}" == "!" ]; then + ( + R1=$(( RANDOM % 256 )); G1=$(( RANDOM % 256 )); B1=$(( RANDOM % 256 )) + R2=$(( RANDOM % 256 )); G2=$(( RANDOM % 256 )); B2=$(( RANDOM % 256 )) + R3=$(( RANDOM % 256 )); G3=$(( RANDOM % 256 )); B3=$(( RANDOM % 256 )) + while true; do + R1_=$(( RANDOM % 256 )); G1_=$(( RANDOM % 256 )); B1_=$(( RANDOM % 256 )) + R2_=$(( RANDOM % 256 )); G2_=$(( RANDOM % 256 )); B2_=$(( RANDOM % 256 )) + R3_=$(( RANDOM % 256 )); G3_=$(( RANDOM % 256 )); B3_=$(( RANDOM % 256 )) + while [ $R1 -ne $R1_ -o $G1 -ne $G1_ -o $B1 -ne $B1_ -o\ + $R2 -ne $R2_ -o $G2 -ne $G2_ -o $B2 -ne $B2_ -o\ + $R3 -ne $R3_ -o $G3 -ne $G3_ -o $B3 -ne $B3_ ]; do + DR1=$(sign $(($R1_-$R1))); DG1=$(sign $(($G1_-$G1))); DB1=$(sign $(($B1_-$B1))) + DR2=$(sign $(($R2_-$R2))); DG2=$(sign $(($G2_-$G2))); DB2=$(sign $(($B2_-$B2))) + DR3=$(sign $(($R3_-$R3))); DG3=$(sign $(($G3_-$G3))); DB3=$(sign $(($B3_-$B3))) + R1=$(($R1+$DR1)); G1=$(($G1+$DG1)); B1=$(($B1+$DB1)) + R2=$(($R2+$DR2)); G2=$(($G2+$DG2)); B2=$(($B2+$DB2)) + R3=$(($R3+$DR3)); G3=$(($G3+$DG3)); B3=$(($B3+$DB3)) + echo "$R1 $G1 $B1 $R1 $G1 $B1 $R2 $G2 $B2 $R2 $G2 $B2 $R3 $G3 $B3 $R3 $G3 $B3" |\ + while read code; do printf "%03d" $code; done > /dev/udp/172.23.92.19/31302 & + sleep .3 + done + done + ) & + echo $! > ${TMPFILE_PID_BASE}_0 + else + for i in {1..5}; do (echo -en "$COLOR" > /dev/udp/172.23.92.19/31302 &); sleep .01; done + fi + ;; 1) find "$(dirname "$TMPFILE_PID_BASE")" -name "$(basename "${TMPFILE_PID_BASE}_1_*")" -exec sh -c 'cat {} | xargs kill; rm -f {}' \; COLOR_A="$(echo "$STATE" | cut -d";" -f1 | cut -d"|" -f1)" @@ -69,7 +105,7 @@ case "$ROOM_NUMBER" in while [ $R1 -ne $R1_ -o $G1 -ne $G1_ -o $B1 -ne $B1_ -o $R2 -ne $R2_ -o $G2 -ne $G2_ -o $B2 -ne $B2_ ]; do DR1=$(sign $(($R1_-$R1))); DG1=$(sign $(($G1_-$G1))); DB1=$(sign $(($B1_-$B1))) DR2=$(sign $(($R2_-$R2))); DG2=$(sign $(($G2_-$G2))); DB2=$(sign $(($B2_-$B2))) - R1=$(($R1+$DR1)); G1=$((G1+$DG1)); B1=$(($B1+$DB1)); R2=$(($R2+$DR2)); G2=$(($G2+$DG2)); B2=$(($B2+$DB2)) + R1=$(($R1+$DR1)); G1=$(($G1+$DG1)); B1=$(($B1+$DB1)); R2=$(($R2+$DR2)); G2=$(($G2+$DG2)); B2=$(($B2+$DB2)) echo "$R1 $G1 $B1 $R2 $G2 $B2" |\ while read code; do printf "%03d" $code; done > /dev/udp/172.23.92.16/31302 & # echo -en "255204017255204017" > /dev/udp/172.23.92.16/31302 & @@ -139,7 +175,7 @@ case "$ROOM_NUMBER" in esac } -if ! [[ "$ROOM_NUMBER" =~ ^[0-9]+$ ]] || ! [ "$ROOM_NUMBER" -gt 0 -a "$ROOM_NUMBER" -le "$ROOM_COUNT" ]; then +if ! [[ "$ROOM_NUMBER" =~ ^[0-9]+$ ]] || ! [ "$ROOM_NUMBER" -ge 0 -a "$ROOM_NUMBER" -le "$ROOM_COUNT" ]; then echo "ERROR: please specify a valid room number" >&1 exit 1 fi diff --git a/shell.sh b/shell.sh index 7cab820..03d9732 100755 --- a/shell.sh +++ b/shell.sh @@ -19,6 +19,18 @@ status() { echo "$STATUS" } +corridor_light() { + COMMAND="corridor_light $1" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + +corridor_light_toggle() { + COMMAND="corridor_light_toggle" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + lounge_light() { COMMAND="lounge_light $1" echo "$COMMAND" >> $COMMAND_FILE @@ -49,6 +61,12 @@ case "$COMMAND" in status) status ;; + corridor_light_toggle) + corridor_light_toggle + ;; + corridor_light\ *) + corridor_light $COLOR_STRING + ;; lounge_light_toggle) lounge_light_toggle ;; @@ -63,7 +81,7 @@ case "$COMMAND" in ;; *) echo "ERROR; available commands:" >&2 - echo "status, lounge_light [string], lounge_light_toggle, e-lab_light [string], e-lab_light_toggle" >&2 + echo "status, corridor_light [string], corridor_light_toggle, lounge_light [string], lounge_light_toggle, e-lab_light [string], e-lab_light_toggle" >&2 exit 1 ;; esac