X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=raspberrypi_gpio_relay_licht%2Fmswitch.cgi;h=08d1bcddcee656d45c366fb496530dc8d4c3133a;hb=f509f01b85b420327de12c2e01eb5d9ba61d813e;hp=dbfc79a54336f31878a1c45180571437160a08ab;hpb=2630563d5a886a22c24e39d355a0f60558c996ee;p=svn42.git diff --git a/raspberrypi_gpio_relay_licht/mswitch.cgi b/raspberrypi_gpio_relay_licht/mswitch.cgi index dbfc79a..08d1bcd 100755 --- a/raspberrypi_gpio_relay_licht/mswitch.cgi +++ b/raspberrypi_gpio_relay_licht/mswitch.cgi @@ -1,16 +1,28 @@ -#!/bin/sh +#!/bin/zsh -VALID_ONOFF_IDS="4 17 18 21 22 23" +VALID_ONOFF_IDS=(ceiling1 ceiling2 ceiling3 ceiling4 ceiling5 ceiling6) +VALID_GPIO_IDS=(4 23 18 17 22 21) +local -A IDGPIOMAP +local -A GPIOIDMAP +IDGPIOMAP[ceiling1]=4 +IDGPIOMAP[ceiling2]=23 +IDGPIOMAP[ceiling3]=18 +IDGPIOMAP[ceiling4]=17 +IDGPIOMAP[ceiling5]=22 +IDGPIOMAP[ceiling6]=21 GPIOPATH=/sys/class/gpio/gpio +for k v in ${(kv)IDGPIOMAP}; do + GPIOIDMAP[$v]=$k +done + +local -A GPIOS for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do for VALIDID in $VALID_ONOFF_IDS; do if [ "$QUERY" = "$VALIDID=1" ]; then - eval "GPIO_$VALIDID"=1 + GPIOS[$IDGPIOMAP[$VALIDID]]=1 elif [ "$QUERY" = "$VALIDID=0" ]; then - eval "GPIO_$VALIDID=0" - elif [ "$QUERY" = "$VALIDID=q" ]; then - eval "GPIO_$VALIDID=q" + GPIOS[$IDGPIOMAP[$VALIDID]]=0 fi done if [ "$QUERY" = "mobile=1" ]; then @@ -23,8 +35,9 @@ done print_gpio_state() { - GPIOVALUE=$(cat "${GPIOPATH}${1}/value") - if [ "$GPIOVALUE" = "0" ]; then + GPIO=${IDGPIOMAP[$1]} + GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value") + if [[ $GPIOVALUE == "0" ]]; then echo -n "true" else echo -n "false" @@ -32,31 +45,25 @@ print_gpio_state() { } gpio_is_on() { - GPIOVALUE=$(cat "${GPIOPATH}${1}/value") + GPIO=${IDGPIOMAP[$1]} + GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value") [ "$GPIOVALUE" = "0" ] } echo "Content-type: text/html" echo "" -echo "{" +local -a GPIOSTATES for CHECKID in $VALID_ONOFF_IDS; do - VAL="" - VAL="$(eval echo \$GPIO_$CHECKID)" - [ -z $VAL ] && continue - if [ $VAL = 1 -o $VAL = 0 ]; then - [ $VAL = 1 ] && VAL=0 || VAL=1 - echo "$VAL" > "${GPIOPATH}${CHECKID}/value" + VAL=$GPIOS[$IDGPIOMAP[$CHECKID]] + if [[ $VAL == 1 || $VAL == 0 ]]; then + [[ $VAL == 1 ]] && VAL=0 || VAL=1 + echo "$VAL" > "${GPIOPATH}${IDGPIOMAP[$CHECKID]}/value" fi - echo -n "\"$CHECKID\":" - print_gpio_state $CHECKID - echo "," + GPIOSTATES+=(\"${CHECKID}\":"$(print_gpio_state $CHECKID)") done -echo "\"-1\":false}" -# echo "" -# echo "" -# echo "Realraum Relay Switch" -# echo '' -# echo "" -# exit 0 - +JSON_STATE="{${(j:,:)GPIOSTATES}}" +print ${(q)JSON_STATE} +if ((#GPIOS > 0)); then + print "[$(date +%s),\"$REMOTE_ADDR\",${(q)JSON_STATE}]," >> /var/log/licht/mswitch.log +fi