kiosk current files
[svn42.git] / raspberrypi_gpio_relay_licht / mswitch.cgi
1 #!/bin/zsh
2
3 VALID_ONOFF_IDS=(ceiling1 ceiling2 ceiling3 ceiling4 ceiling5 ceiling6)
4 VALID_GPIO_IDS=(4 23 18 17 22 21)
5 local -A IDGPIOMAP
6 local -A GPIOIDMAP
7 IDGPIOMAP[ceiling1]=4
8 IDGPIOMAP[ceiling2]=23
9 IDGPIOMAP[ceiling3]=18
10 IDGPIOMAP[ceiling4]=17
11 IDGPIOMAP[ceiling5]=22
12 IDGPIOMAP[ceiling6]=21
13 GPIOPATH=/sys/class/gpio/gpio
14 SAVESTATE=/var/log/licht/mswitch.state
15
16 for k v in ${(kv)IDGPIOMAP}; do
17   GPIOIDMAP[$v]=$k
18 done
19
20 local -A GPIOS
21 for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
22   for VALIDID in $VALID_ONOFF_IDS; do
23     if [ "$QUERY" = "$VALIDID=1" ]; then
24       GPIOS[$IDGPIOMAP[$VALIDID]]=1
25     elif [ "$QUERY" = "$VALIDID=0" ]; then
26       GPIOS[$IDGPIOMAP[$VALIDID]]=0
27     fi
28   done
29   if [ "$QUERY" = "mobile=1" ]; then
30     MOBILE='1'
31     NOFLOAT='1'
32   elif [ "$QUERY" = "nofloat=1" ]; then
33     NOFLOAT='1'
34   fi
35 done
36
37
38 print_gpio_state() {
39   GPIO=${IDGPIOMAP[$1]}
40   GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value")
41   if [[ $GPIOVALUE == "0" ]]; then
42     echo -n "true"
43   else
44     echo -n "false"
45   fi
46 }
47
48 print_gpio_state_10() {
49   GPIO=${IDGPIOMAP[$1]}
50   GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value")
51   if [[ $GPIOVALUE == "0" ]]; then
52     echo -n "1"
53   else
54     echo -n "0"
55   fi
56 }
57
58 gpio_is_on() {
59   GPIO=${IDGPIOMAP[$1]}
60   GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value")
61   [ "$GPIOVALUE" = "0" ]
62 }
63
64 echo "Content-type: text/html"
65 echo ""
66
67 local -a GPIOSTATES
68 for CHECKID in $VALID_ONOFF_IDS; do
69   VAL=$GPIOS[$IDGPIOMAP[$CHECKID]]
70   if [[ $VAL == 1 || $VAL == 0 ]]; then
71     [[ $VAL == 1 ]] && VAL=0 || VAL=1
72     echo "$VAL" > "${GPIOPATH}${IDGPIOMAP[$CHECKID]}/value"
73   fi
74   GPIOSTATES+=(\"${CHECKID}\":"$(print_gpio_state $CHECKID)")
75   URISTATES+=("${CHECKID}=$(print_gpio_state_10 $CHECKID)")
76 done
77 JSON_STATE="{${(j:,:)GPIOSTATES}}"
78 print ${(q)JSON_STATE}
79 if ((#GPIOS > 0)); then
80   print "[$(date +%s),\"$REMOTE_ADDR\",${(q)JSON_STATE}]," >> /var/log/licht/mswitch.log
81   echo -n "${(j:&:)URISTATES}">$SAVESTATE
82 fi
83