01dce981f6cdb16c9c0ec04bb8b06984118febdd
[svn42.git] / router_gpio_relay_licht / switch.cgi
1 #!/bin/sh
2
3 for QUERY in `echo $QUERY_STRING | tr '&' ' '`; do
4   for VALUE in `echo $QUERY | tr '=' ' '`; do
5     if [ "$VALUE" == "id" ]; then
6       ID='?'
7     elif [ "$ID" == "?" ]; then
8       ID=$VALUE
9     elif [ "$VALUE" == "power" ]; then
10       POWER='?'
11     elif [ "$POWER" == "?" ]; then
12       POWER=$VALUE
13     elif [ "$VALUE" == "mobile" ]; then
14       MOBILE='1'
15       NOFLOAT='1'
16     elif [ "$VALUE" == "nofloat" ]; then
17       NOFLOAT='1'
18     fi
19     i=$i+1
20   done
21 done
22
23
24 GPIOPATH=/sys/class/gpio/gpio
25 #VALID_ONOFF_IDS="7 18 20 29"
26 VALID_ONOFF_IDS="7 18 20"
27 VALID_SEND_IDS=""
28
29 print_gpio_state() {
30   GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
31   if [ "$GPIOVALUE" = "1" ]; then
32     echo "ON"
33   else
34     echo "Off"
35   fi
36 }
37
38 gpio_is_on() {
39   GPIOVALUE=$(cat "${GPIOPATH}${1}/value")
40   [ "$GPIOVALUE" = "1" ]
41 }
42
43 if [ "$POWER" == "1" -o "$POWER" == "0" ]; then
44   for CHECKID in $VALID_ONOFF_IDS ; do
45     if [ "$CHECKID" == "$ID" ]; then
46       echo "$POWER" > "${GPIOPATH}${ID}/value"
47       echo "Content-type: text/html"
48       echo ""
49       echo "<html>"
50       echo "<head>"
51       echo "<title>Realraum Relay Switch</title>"
52       echo '<script type="text/javascript">window.location="/cgi-bin/switch.cgi";</script>'
53       echo "</head></html>"
54       exit 0
55     fi
56   done
57 fi
58
59 DESC_7="Decke Links Vorne"
60 DESC_20="Decke Rechts Vorne"
61 DESC_18="Decke Rechts Mitte"
62 #DESC_29="GPIO Nicht Belegt"
63
64 echo "Content-type: text/html"
65 echo ""
66 echo "<html>"
67 echo "<head>"
68 echo "<title>Realraum Relay Power</title>"
69 echo '<script type="text/javascript">'
70
71 echo 'function callbackUpdateButtons(req) {
72   if (req.status != 200) {
73     return;
74   }
75   var data = JSON.parse(req.responseText);
76   for (var keyid in data) {
77     on_btn = document.getElementById("onbtn_"+keyid);
78     off_btn = document.getElementById("offbtn_"+keyid);
79     if (on_btn && off_btn)
80     {
81       on_btn.className = "onbutton";
82       off_btn.className = "offbutton";
83       if (data[keyid])
84       { on_btn.className += " enableborder"; }
85       else
86       { off_btn.className += " enableborder"; }
87     }
88   }
89 }'
90
91 echo 'function updateButtons(uri) {
92   var req = new XMLHttpRequest;
93   req.overrideMimeType("application/json");
94   req.open("GET", uri, true);
95   req.onload  = function() {callbackUpdateButtons(req)};
96   req.setRequestHeader("googlechromefix","");
97   req.send(null);
98 }'
99
100 echo 'function sendMultiButton( str ) {
101  url = "/cgi-bin/mswitch.cgi?"+str;
102   updateButtons(url);
103 }'
104
105 echo 'setInterval("updateButtons(\"/cgi-bin/mswitch.cgi\");", 30*1000);'
106
107 echo 'function sendButton( onoff, btn )'
108 echo '{'
109 echo ' var req = new XMLHttpRequest();'
110 echo ' url = "/cgi-bin/switch.cgi?power="+onoff+"&id="+btn;'
111 echo ' req.open("GET", url ,false);'
112 echo ' //google chrome workaround'
113 echo ' req.setRequestHeader("googlechromefix","");'
114 echo ' req.send(null);'
115 echo '}'
116 echo '</script>'
117 echo '<style>'
118 echo 'div.switchbox {'
119 echo '    float:left;'
120 echo '    margin:2px;'
121 #echo '    max-width:236px;'
122 echo '    max-width:300px;'
123 echo '    font-size:10pt;'
124 echo '    border:1px solid black;'
125 #echo '    height: 32px;'
126 echo '    padding:0;'
127 echo '}'
128
129 echo 'div.switchnameleft {'
130 echo '    width:12em; display:inline-block; vertical-align:middle; margin-left:3px;'
131 echo '}'
132
133 echo 'span.alignbuttonsright {'
134 echo '    top:0px; float:right; display:inline-block; text-align:right; padding:0;'
135 echo '}'
136
137 echo 'div.switchnameright {'
138 echo '    width:12em; display:inline-block; vertical-align:middle; float:right; display:inline-block; margin-left:1ex; margin-right:3px; margin-top:3px; margin-bottom:3px;'
139 echo '}'
140
141 echo 'span.alignbuttonsleft {'
142 echo '    float:left; text-align:left; padding:0;'
143 echo '}'
144
145 echo '.onbutton {'
146 echo '    font-size:11pt;'
147 echo '    width: 40px;'
148 echo '    height: 32px;'
149 echo '    background-color: lime;'
150 echo '    margin: 0px;'
151 echo '}'
152
153 echo '.offbutton {'
154 echo '    font-size:11pt;'
155 echo '    width: 40px;'
156 echo '    height: 32px;'
157 echo '    background-color: red;'
158 echo '    margin: 0px;'
159 echo '}'
160
161 echo '.sendbutton {'
162 echo '    font-size:11pt;'
163 echo '    width: 40px;'
164 echo '    height: 32px;'
165 #echo '    background-color: grey;'
166 echo '    margin: 0px;'
167 echo '}'
168
169 echo '.enableborder {
170     font-weight: bold;
171     font-variant: small-caps;
172     border-style: inset;'
173 echo '}'
174 echo '</style>'
175 echo "</head>"
176 echo "<body>"
177 #echo "<h1>Realraum rf433ctl</h1>"
178 #echo "<div style=\"float:left; border:1px solid black;\">"
179 echo "<div style=\"float:left;\">"
180 echo "<div style=\"float:left; border:1px solid black; margin-right:2ex; margin-bottom:2ex;\">"
181 for DISPID in $VALID_ONOFF_IDS; do
182   NAME="$(eval echo -n \$DESC_$DISPID)"
183   [ -z "$NAME" ] && NAME=$DISPID
184
185   echo "<div class=\"switchbox\">"
186   echo "<span class=\"alignbuttonsleft\">"
187   if gpio_is_on $DISPID; then
188   echo " <button id=\"onbtn_$DISPID\" class=\"onbutton enableborder\" onClick='sendMultiButton(\"$DISPID=1\");'>On</button>"
189   echo " <button id=\"offbtn_$DISPID\" class=\"offbutton\" onClick='sendMultiButton(\"$DISPID=0\");'>Off</button>"
190   else
191   echo " <button id=\"onbtn_$DISPID\" class=\"onbutton\" onClick='sendMultiButton(\"$DISPID=1\");'>On</button>"
192   echo " <button id=\"offbtn_$DISPID\" class=\"offbutton enableborder\" onClick='sendMultiButton(\"$DISPID=0\");'>Off</button>"
193   fi
194   echo "</span>"
195   echo -n "<div class=\"switchnameright\">$NAME</div>"
196 #  echo -n "<div class=\"switchnameright\">$NAME ("
197 #  print_gpio_state $DISPID
198 #  echo ")</div>"
199   echo "</div>"
200
201   if [ "$NOFLOAT" == "1" ]; then
202     echo "<br/>"
203   fi
204 done
205
206 echo "<div class=\"switchbox\">"
207 echo "<span class=\"alignbuttonsleft\">"
208 echo -n " <button class=\"onbutton\" onClick='sendMultiButton(\""
209 for DISPID in $VALID_ONOFF_IDS; do echo -n "$DISPID=1&"; done
210 echo "\");'>On</button>"
211 echo -n " <button class=\"offbutton\" onClick='sendMultiButton(\""
212 for DISPID in $VALID_ONOFF_IDS; do echo -n "$DISPID=0&"; done
213 echo "\");'>Off</button>"
214 echo "</span>"
215 echo -n "<div class=\"switchnameright\">Alle</div>"
216 echo "</div>"
217 if [ "$NOFLOAT" == "1" ]; then
218   echo "<br/>"
219 fi
220 echo "</div>"
221
222 if [ "$MOBILE" != "1" -a -n "$VALID_SEND_IDS" ]; then
223
224 echo "<div style=\"float:left; border:1px solid black; margin-right:2ex; margin-bottom:2ex;\">"
225
226 ITEMCOUNT=0
227
228 for DISPID in $VALID_SEND_IDS; do
229   ITEMCOUNT=$((ITEMCOUNT+1))
230   NAME="$(eval echo \$DESC_$DISPID)"
231   [ -z "$NAME" ] && NAME=$DISPID
232
233   echo "<div class=\"switchbox\">"
234   echo "<span class=\"alignbuttonsleft\">"
235   echo " <button class=\"sendbutton\" onClick='sendButton(\"on\",\"$DISPID\");'> </button>"
236   echo "</span>"
237   echo "<div class=\"switchnameright\">$NAME</div>"
238   echo "</div>"
239   if [ "$NOFLOAT" == "1" -a $((ITEMCOUNT % 2 )) -ne 1 ]; then
240     echo "<br/>"
241   fi
242
243 done
244 echo "</div>"
245 fi
246 echo "</div>"
247 echo "</body>"
248 echo "</html>"