adf1d1914050d24c4b4fed4fb06406c176ab0e40
[svn42.git] / raspberrypi_gpio_relay_licht / mswitch.cgi
1 #!/bin/zsh
2
3 VALID_ONOFF_IDS=(4 17 18 21 22 23)
4 GPIOPATH=/sys/class/gpio/gpio
5 local -A GPIOS
6 for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
7   for VALIDID in $VALID_ONOFF_IDS; do
8     if [ "$QUERY" = "$VALIDID=1" ]; then
9       GPIOS[$VALIDID]=1
10     elif [ "$QUERY" = "$VALIDID=0" ]; then
11       GPIOS[$VALIDID]=0
12     fi
13   done
14   if [ "$QUERY" = "mobile=1" ]; then
15     MOBILE='1'
16     NOFLOAT='1'
17   elif [ "$QUERY" = "nofloat=1" ]; then
18     NOFLOAT='1'
19   fi
20 done
21
22
23 print_gpio_state() {
24   GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
25   if [[ $GPIOVALUE == "0" ]]; then
26     echo -n "true"
27   else
28     echo -n "false"
29   fi
30 }
31
32 gpio_is_on() {
33   GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
34   [ "$GPIOVALUE" = "0" ]
35 }
36
37 echo "Content-type: text/html"
38 echo ""
39
40 local -a GPIOSTATES
41 for CHECKID in $VALID_ONOFF_IDS; do
42   VAL=$GPIOS[$CHECKID]
43   if [[ $VAL == 1 || $VAL == 0 ]]; then
44     [[ $VAL == 1 ]] && VAL=0 || VAL=1
45     echo "$VAL" > "${GPIOPATH}${CHECKID}/value"
46   fi
47   GPIOSTATES+=(\"${CHECKID}\":"$(print_gpio_state $CHECKID)")
48 done
49 JSON_STATE="{${(j:,:)GPIOSTATES}}"
50 print ${(q)JSON_STATE}
51 if ((#GPIOS > 0)); then
52   print "[$(date +%s),\"$REMOTE_ADDR\",${(q)JSON_STATE}]," >> /var/log/licht/mswitch.log
53 fi