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