mswitch abstract
[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
15 for k v in ${(kv)IDGPIOMAP}; do
16   GPIOIDMAP[$v]=$k
17 done
18
19 local -A GPIOS
20 for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
21   for VALIDID in $VALID_ONOFF_IDS; do
22     if [ "$QUERY" = "$VALIDID=1" ]; then
23       GPIOS[$IDGPIOMAP[$VALIDID]]=1
24     elif [ "$QUERY" = "$VALIDID=0" ]; then
25       GPIOS[$IDGPIOMAP[$VALIDID]]=0
26     fi
27   done
28   if [ "$QUERY" = "mobile=1" ]; then
29     MOBILE='1'
30     NOFLOAT='1'
31   elif [ "$QUERY" = "nofloat=1" ]; then
32     NOFLOAT='1'
33   fi
34 done
35
36
37 print_gpio_state() {
38   GPIO=${IDGPIOMAP[$1]}
39   GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value")
40   if [[ $GPIOVALUE == "0" ]]; then
41     echo -n "true"
42   else
43     echo -n "false"
44   fi
45 }
46
47 gpio_is_on() {
48   GPIO=${IDGPIOMAP[$1]}
49   GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value")
50   [ "$GPIOVALUE" = "0" ]
51 }
52
53 echo "Content-type: text/html"
54 echo ""
55
56 local -a GPIOSTATES
57 for CHECKID in $VALID_ONOFF_IDS; do
58   VAL=$GPIOS[$IDGPIOMAP[$CHECKID]]
59   if [[ $VAL == 1 || $VAL == 0 ]]; then
60     [[ $VAL == 1 ]] && VAL=0 || VAL=1
61     echo "$VAL" > "${GPIOPATH}${IDGPIOMAP[$CHECKID]}/value"
62   fi
63   GPIOSTATES+=(\"${CHECKID}\":"$(print_gpio_state $CHECKID)")
64 done
65 JSON_STATE="{${(j:,:)GPIOSTATES}}"
66 print ${(q)JSON_STATE}
67 if ((#GPIOS > 0)); then
68   print "[$(date +%s),\"$REMOTE_ADDR\",${(q)JSON_STATE}]," >> /var/log/licht/mswitch.log
69 fi