* apache2
* libapache2-mod-php | php-cgi | php-fpm
+* libjs-jquery
* php-rrd
* python3-pyaudio
* python3-rrdtool
* Experimental version that return chunked http response.
*
* Pulling the values is no longer needed as the one request will output
- * the updates every 10 seconds.
+ * the updates every second.
*/
require_once('config.php');
+$speed=@(int)$_GET['speed'];
+if ($speed <= 0)
+ $speed=1; // seconds
+
+
header("Content-Type: text/json");
header("Transfer-Encoding: chunked");
flush();
}
while (True) {
+ exec("/usr/bin/rrdtool flushcached --daemon ".RRDSOCK." ".RRDFILE);
+
$info=rrd_lastupdate(RRDFILE);
if ($info === FALSE)
$result=[
else
$result=[
'last_update' => $info['last_update'],
- 'watts' => $info['data'][0]
+ 'watts' => (float)$info['data'][0],
];
send_chunk(json_encode($result));
- sleep(10);
+ sleep($speed);
}
?>
+++ /dev/null
-<!DOCTYPE html>
-<meta charset="UTF-8">
-<script src='/javascript/jquery/jquery.js'></script>
-
-<hr>
-<span id=debugg>
-</span>
-<hr>
-
-Puissance instannée: <span id=currentpower>Unknown</span> watts<br>
-
-<script>
-xhr = new XMLHttpRequest();
-xhr.onreadystatechange = function() {
- document.getElementById('debugg').innerHTML += ""+xhr.readyState+"<br>";
- document.getElementById('debugg').innerHTML += ""+xhr.status+" "+xhr.statusText+"<br>";
- document.getElementById('debugg').innerHTML += ""+xhr.responseText+"<br>";
- this.response = "";
-}
-xhr.open('GET', 'currentjson_chunked.php', true /*async*/);
-xhr.send(null);
-
-//autorefresh_power = 1;
-//function refresh_power() {
-// $.ajax({
-// url : 'currentjson_chunked.php',
-// success : function(result) {
-// document.getElementById('debugg').innerHTML = document.getElementById('debugg').innerHTML + "success<br>";
-// alert(result);
-// document.getElementById('currentpower').innerHTML = result['watts'];
-// },
-// complete : function(textStatus) {
-// document.getElementById('debugg').innerHTML = document.getElementById('debugg').innerHTML + "complete<br>";
-// // if (autorefresh_power)
-// // setTimeout("refresh_power()", 1000);
-// }
-// });
-//}
-//refresh_power();
-</script>
-
-
-<img src="graph.php">
--- /dev/null
+<!DOCTYPE html>
+<meta charset="UTF-8">
+
+<fieldset>
+ <legend>debug messages</legend>
+ <span id=debugg></span>
+</fieldset>
+
+Puissance instannée: <span id=currentpower>Unknown</span> watts<br>
+
+<script>
+function debug(str) {
+ document.getElementById('debugg').innerHTML += "" + str + "<br>";
+}
+xhr = new XMLHttpRequest();
+xhr.onreadystatechange = function() {
+ switch (xhr.readyState) {
+ case 0: /* unsent */
+ case 1: /* opened */
+ case 2: /* header received */
+ return;
+ case 3:
+ switch(xhr.status) {
+ case 200:
+ response = xhr.responseText;
+ //debug("responseText:"+response);
+ new_text = response.substring(xhr.ampy_len);
+ xhr.ampy_len = response.length;
+ //debug("new_text: "+new_text);
+
+ try {
+ data = JSON.parse(new_text);
+ } catch(SyntaxError) {
+ debug("Error decoding json: "+new_text);
+ break;
+ }
+ document.getElementById('currentpower').innerHTML = data.watts.toFixed(1);
+ break;
+ default:
+ debug("XMLHttpRequest.status=="+xhr.status+" ("+xhr.statusText+")");
+ break;
+ }
+ break;
+ case 4: /* done */
+ debug("XMLHttpRequest.readyState==4. Connection was lost.");
+ /* TODO: reconnect */
+ break;
+ }
+}
+xhr.ampy_len=0;
+xhr.open('GET', 'currentjson_chunked.php', true /*async*/);
+xhr.send(null);
+
+</script>
+
+
+<!--img src="graph.php"-->