X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=raspberrypi_gpio_relay_licht%2Fmswitch.cgi;h=d62bce95738112b66aecb1d0bb9cb3310af9d543;hb=cdd9cf8f41352f1f707c53f464cd19be334c5578;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..d62bce9 100755 --- a/raspberrypi_gpio_relay_licht/mswitch.cgi +++ b/raspberrypi_gpio_relay_licht/mswitch.cgi @@ -1,16 +1,29 @@ -#!/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 +SAVESTATE=/var/log/licht/mswitch.state +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,40 +36,48 @@ 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" fi } +print_gpio_state_10() { + GPIO=${IDGPIOMAP[$1]} + GPIOVALUE=$(cat "${GPIOPATH}${GPIO}/value") + if [[ $GPIOVALUE == "0" ]]; then + echo -n "1" + else + echo -n "0" + fi +} + 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)") + URISTATES+=("${CHECKID}=$(print_gpio_state_10 $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 + echo -n "${(j:&:)URISTATES}">$SAVESTATE +fi