diff --git a/README b/README index 6243351..b4a058f 100644 --- a/README +++ b/README @@ -1,8 +1,8 @@ Steuerung Stomversorgung im Chaostreff Chemnitz mittels PIFACE 2 -Taster-Codes (k=kurz, l=lang, sl=sehr lang): +Taster-Codes (k=kurz, l=lang): -k l -> diesen Raum an-/ausschalten -k sl -> alle Räume anschalten -sl -> alle Räume ausschalten -k k l -> experimentell (derzeit Licht in der Lounge) +k -> Licht in diesem Raum +l -> alle Räume ausschalten +kk -> diesen Raum an-/ausschalten +kl -> alle Räume anschalten \ No newline at end of file diff --git a/chch-power.py b/chch-power.py index b3d633e..3e411ee 100644 --- a/chch-power.py +++ b/chch-power.py @@ -90,6 +90,8 @@ def exec_chch_button_cmd(event): if count == 1: if event.pin_num == 0: call(["/home/automation/chch-power/light.sh","1"]) + elif event.pin_num == 1: + call(["/home/automation/chch-power/light.sh","2"]) else: sys.stderr.write("No room specific function for room " + str(event.pin_num) + "\n") # '. .' toggle current room diff --git a/command_watcher.sh b/command_watcher.sh index 230f20c..dff81ca 100755 --- a/command_watcher.sh +++ b/command_watcher.sh @@ -10,6 +10,14 @@ lounge_light_toggle() { ./light.sh 1 } +e-lab_light() { + ./light.sh 2 "$1" +} + +e-lab_light_toggle() { + ./light.sh 2 +} + cd "$(dirname $0)" rm -f "$COMMAND_FILE" mkfifo "$COMMAND_FILE" @@ -21,16 +29,23 @@ while true; do echo "ERROR: illegal characters" >&2 continue fi + COLOR_STRING="$(echo "$line " | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" case "$line" in lounge_light_toggle) lounge_light_toggle ;; lounge_light*) - lounge_light "$(echo "$line " | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" + lounge_light "$COLOR_STRING" + ;; + e-lab_light_toggle) + e-lab_light_toggle + ;; + e-lab_light*) + e-lab_light "$COLOR_STRING" ;; *) echo "ERROR; available commands:" >&2 - echo "lounge_light lounge_light_toggle" >&2 + echo "lounge_light lounge_light_toggle e-lab_light e-lab_light_toggle" >&2 ;; esac done < "$COMMAND_FILE" diff --git a/light.sh b/light.sh index c04e19f..c2cae7d 100755 --- a/light.sh +++ b/light.sh @@ -12,17 +12,17 @@ sign() { ROOM_COUNT=3 DFAULT_LIGHT_STATE=0 STATE_0="a\x00\x03\x00\x00\x00|000000000000000000;\ - 000000000000000000;\ - 000000000000000000" +a\x00\x03\x00\x00\x00|000000;\ +000000000000000000" STATE_1="a\x00\x03\xff\xff\xff|255255255255255255;\ - 000000000000000000;\ - 000000000000000000" +a\x00\x03\xff\xff\xff|FFFFFF;\ +000000000000000000" STATE_2="n\x00\x02\x01\x00|!;\ - 000000000000000000;\ - 000000000000000000" +n\x00\x02\x01\x00|FFCC11;\ +000000000000000000" STATE_3="!/usr/bin/python3 /home/automation/fensterbogenbeleuchtung_animations/animations.py|!;\ - 000000000000000000;\ - 000000000000000000" +a\x00\x03\xff\xff\xff|!;\ +000000000000000000" get_room_color_string() { case "$ROOM_NUMBER" in @@ -32,7 +32,8 @@ case "$ROOM_NUMBER" in echo "a\x00\x03$COLOR_A|$COLOR_B$COLOR_B" ;; 2) - echo "" + COLOR_A="$(echo "$COLOR" | sed "s/\(..\)\(..\)\(..\)/\\\x\2\\\x\1\\\x\3/g")" + echo "a\x00\x03$COLOR_A|$COLOR" ;; 3) echo "" @@ -80,14 +81,41 @@ case "$ROOM_NUMBER" in fi ;; 2) + find "$(dirname "$TMPFILE_PID_BASE")" -name "$(basename "${TMPFILE_PID_BASE}_2_*")" -exec sh -c 'cat {} | xargs kill; rm -f {}' \; # COLOR_A="$(echo "$STATE" | cut -d";" -f2 | cut -d"|" -f1)" - # COLOR_B="$(echo "$STATE" | cut -d";" -f2 | cut -d"|" -f2)" - # echo -en "$COLOR_A" > /dev/null - # echo -en "$COLOR_B" > /dev/null - echo "not implemented" >&1 - exit 1 + COLOR_B="$(echo "$STATE" | cut -d";" -f2 | cut -d"|" -f2)" + # if [ "${COLOR_B:0:1}" == "!" ]; then + # + # else + # echo -en "$COLOR_A" > /dev/udp/172.23.92.18/49152 & + # fi + if [ "${COLOR_B:0:1}" == "!" ]; then + ( + R=$(( RANDOM % 256 )); G=$(( RANDOM % 256 )); B=$(( RANDOM % 256 )) + while true; do + R_=$(( RANDOM % 256 )); G_=$(( RANDOM % 256 )); B_=$(( RANDOM % 256 )) + while [ $R -ne $R_ -o $G -ne $G_ -o $B -ne $B_ ]; do + DR=$(sign $(($R_-$R))); DG=$(sign $(($G_-$G))); DB=$(sign $(($B_-$B))) + R=$(($R+$DR)); G=$((G+$DG)); B=$(($B+$DB)) + for i in 5:$R 4:$G 3:$B; do + wget -q -O- http://172.23.92.5/ecmd?channel%20$(echo $i | cut -d: -f1)%20$(echo $i | cut -d: -f2) > /dev/null 2>&1 & + COLOR_B_TMP="$(echo "$COLOR_B_TMP" | cut -c3-)" + done + sleep .1 + done + done + ) & + echo $! > ${TMPFILE_PID_BASE}_2_B + else + COLOR_B_TMP=$COLOR_B + for i in 5 4 3; do + wget -q -O- http://172.23.92.5/ecmd?channel%20$i%20$(printf "%d" "0x${COLOR_B_TMP:0:2}") > /dev/null 2>&1 & + COLOR_B_TMP="$(echo "$COLOR_B_TMP" | cut -c3-)" + done + fi ;; 3) + # find "$(dirname "$TMPFILE_PID_BASE")" -name "$(basename "${TMPFILE_PID_BASE}_3_*")" -exec sh -c 'cat {} | xargs kill; rm -f {}' \; # COLOR_A="$(echo "$STATE" | cut -d";" -f3 | cut -d"|" -f1)" # COLOR_B="$(echo "$STATE" | cut -d";" -f3 | cut -d"|" -f2)" # echo -en "$COLOR_A" > /dev/null diff --git a/shell.sh b/shell.sh index a828f84..7cab820 100755 --- a/shell.sh +++ b/shell.sh @@ -31,7 +31,20 @@ lounge_light_toggle() { echo "OK $COMMAND" } +e-lab_light() { + COMMAND="e-lab_light $1" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + +e-lab_light_toggle() { + COMMAND="e-lab_light_toggle" + echo "$COMMAND" >> $COMMAND_FILE + echo "OK $COMMAND" +} + read COMMAND +COLOR_STRING="$(echo "$COMMAND " | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" case "$COMMAND" in status) status @@ -40,11 +53,17 @@ case "$COMMAND" in lounge_light_toggle ;; lounge_light\ *) - lounge_light "$(echo "$COMMAND " | cut -d" " -f2 | grep -oe "[a-z]\?[0-9a-fA-F]*" | head -n1)" + lounge_light $COLOR_STRING + ;; + e-lab_light_toggle) + e-lab_light_toggle + ;; + e-lab_light\ *) + e-lab_light $COLOR_STRING ;; *) echo "ERROR; available commands:" >&2 - echo "status, lounge_light [string], lounge_light_toggle" >&2 + echo "status, lounge_light [string], lounge_light_toggle, e-lab_light [string], e-lab_light_toggle" >&2 exit 1 ;; esac