summaryrefslogtreecommitdiff
path: root/datastore-leveldb/public/src/ebus.js
diff options
context:
space:
mode:
authorYves Fischer <yvesf-git@xapek.org>2013-04-17 00:13:33 +0200
committerYves Fischer <yvesf-git@xapek.org>2013-04-17 00:13:33 +0200
commitc83bca9a9de29c155d519ccea2e8a8d07acc5bac (patch)
tree156131ebae5aae008fde4e241e95ae3b70c8dfcc /datastore-leveldb/public/src/ebus.js
parent6f20cda5c3071e03d2a56dc8236a530582cad2b7 (diff)
downloadebus-alt-c83bca9a9de29c155d519ccea2e8a8d07acc5bac.tar.gz
ebus-alt-c83bca9a9de29c155d519ccea2e8a8d07acc5bac.zip
leveldb
Diffstat (limited to 'datastore-leveldb/public/src/ebus.js')
-rw-r--r--datastore-leveldb/public/src/ebus.js231
1 files changed, 231 insertions, 0 deletions
diff --git a/datastore-leveldb/public/src/ebus.js b/datastore-leveldb/public/src/ebus.js
new file mode 100644
index 0000000..27802a9
--- /dev/null
+++ b/datastore-leveldb/public/src/ebus.js
@@ -0,0 +1,231 @@
+// vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4 filetype=javascript
+var d = new Object();
+d.ms = 1;
+d.sec = 1000*d.ms;
+d.min = 60 * d.sec;
+d.hour = 60 * d.min;
+d.day = 24 * d.hour;
+d.week = 7 * d.day;
+d.month = 30.5 * d.day;
+d.now = new Date().getTime();
+
+var timeToUTC = function(d) { return d - new Date().getTimezoneOffset() * 60 * 1000; }
+var timeToLocal = function(d) { return d + new Date().getTimezoneOffset() * 60 * 1000; }
+
+$(document).ready(function(){
+ var from = d.now - 1*d.day;
+ var to = d.now;
+ var fromOverview = d.now - 30*d.day;
+ var toOverview = d.now;
+ var datasetDetail = []
+ var datasetOverview = [];
+ var plotOverview = null;
+ var plotDetail = null;
+ var indexFound = null;
+ var sensorConfigList = [
+ {"sensorname":"heizkreisregler9.solarDaten.tempKollektor",
+ "description":"Kollektortemperatur",
+ "show":true,
+ "color":"#f30000"},
+ {"sensorname":"heizkreisregler10.betriebsdatenRegler1.kesselTemperatur",
+ "description":"Kessel Temperatur",
+ "show":true,
+ "color":"#283074"},
+ {"sensorname":"heizkreisregler9.solarDaten.tempWarmwasserSolar",
+ "description":"Warmwasser Solar",
+ "show":false,
+ "color":"#f0ff4c"},
+ {"sensorname":"feuerungsautomat1.betriebsdatenRegler1.aussenTemperatur",
+ "description":"Aussentemperatur",
+ "show":false,
+ "color":"#84b500"},
+ {"sensorname":"dockstar.load1",
+ "description":"System Load (1m, *10)",
+ "show":false,
+ "color":"blue",
+ "mapFunc":function(d){return [d[0],d[1]*10]}},
+ {"sensorname":"dockstar.load5",
+ "description":"System Load (5m, *10)",
+ "show":false,
+ "color":"blue",
+ "mapFunc":function(d){return [d[0],d[1]*10]}},
+ {"sensorname":"dockstar.diskfree.rootfs",
+ "description":"Rootfs free percent",
+ "show":false,
+ "color":"red"},
+ {"sensorname":"heizkreisregler10.betriebsdatenRegler1.boilerTemperatur",
+ "description":"Boilertemperatur",
+ "show":true,
+ "color":"#48b4ff"},
+ {"sensorname":"feuerungsautomat1.betriebsdatenRegler1.kesselTemperatur",
+ "description":"Kesseltemperatur",
+ "show":false,
+ "color":"blue"},
+ {"sensorname":"de.wettermichel.temperature",
+ "description":"Aussentemperatur",
+ "show":true,
+ "color":"yellow"},
+ {"sensorname":"yves.laserjet.tonerstatus",
+ "description":"Fuellstand Toner %",
+ "show":true,
+ "color":"black"}
+ ];
+
+ var pickSensorConfig = function(sensorname) {
+ var sensorConfigFound;
+ $.each(sensorConfigList, function(i,sensorConfig) {
+ if (sensorConfig.sensorname == sensorname) {
+ sensorConfigFound = sensorConfig;
+ return false;
+ }
+ });
+ return sensorConfigFound;
+ }
+ var replot = function() {
+ plotDetail = $.plot($("#ebusgraph"),
+ datasetDetail,
+ {
+ xaxis: { mode: "time", min: timeToUTC(from), max:timeToUTC(to) },
+ yaxis: { min: -16, max: 100 },
+ legend: { show : true}
+ });
+ };
+ var replotOverview = function() {
+ if (plotOverview == null) {
+ plotOverview = $.plot($("#overview"),
+ datasetOverview,
+ { // options
+ series: {
+ lines: { show: true, lineWidth: 1 },
+ shadowSize: 0
+ },
+ xaxis: { mode: "time", min: timeToUTC(fromOverview), max:timeToUTC(toOverview) },
+ yaxis: { ticks: [], min: -26, max: 100, autoscaleMargin: 0.1 },
+ legend: { show: false },
+ selection: { mode: "x" }
+ });
+ } else {
+ plotOverview.setData(datasetOverview);
+ plotOverview.draw();
+ }
+ plotOverview.setSelection({xaxis: {'from': from, 'to': to}}, true);
+ };
+ var plotSensor = function(sensorConfig) {
+ plotSensorDetail(sensorConfig);
+ plotSensorOverview(sensorConfig);
+ };
+ var unplotSensor = function(sensorname) {
+ unplotSensorDetail(sensorname);
+ unplotSensorOverview(sensorname);
+ };
+ var plotSensorDetail = function(sensorConfig) {
+ $.getJSON("sensor/"+escape(sensorConfig.sensorname)+"/"+timeToLocal(from)+"/"+timeToLocal(to),
+ function(response) {
+ if (!response.error) {
+ response.data = response.data.map(function(d) {
+ return [ timeToUTC(d[0]), d[1] ];
+ });
+ if (sensorConfig.mapFunc) {
+ response.data = response.data.map( sensorConfig.mapFunc )
+ }
+ datasetDetail.push({'data':response['data'],
+ 'userData':sensorConfig.sensorname,
+ 'label':sensorConfig.description,
+ 'color':sensorConfig.color});
+ replot();
+ } else {
+ alert("Fehler: " + response["error"]);
+ }
+ });
+ };
+
+ var unplotSensorDetail = function(sensorname) {
+ $.each(datasetDetail, function(i, sensor) {
+ if (sensor.userData == sensorname) {
+ datasetDetail.splice(i,1);
+ replot();
+ return false;
+ }
+ });
+ };
+
+ var plotSensorOverview = function(sensorConfig) {
+ $.getJSON("avg/"+escape(sensorConfig.sensorname)+"/"+timeToLocal(fromOverview)+"/"+timeToLocal(toOverview),
+ function(response) {
+ if (!response.error) {
+ response.data = response.data.map(function(d) {
+ return [ timeToUTC(d[0]), d[1] ];
+ });
+ if (sensorConfig.mapFunc) {
+ response.data = response.data.map( sensorConfig.mapFunc)
+ }
+ datasetOverview.push({'data':response['data'],
+ 'label':sensorConfig.sensorname,
+ 'color':sensorConfig.color});
+ replotOverview();
+ } else {
+ alert("Overview Fehler: " + response["error"]);
+ }
+ });
+
+ };
+ var unplotSensorOverview = function(sensorname) {
+ $.each(datasetOverview, function(i, sensor) {
+ if (sensor.label == sensorname) {
+ datasetOverview.splice(i,1);
+ replotOverview();
+ return false;
+ }
+ });
+ }
+
+ $("#overview").bind("plotselected", function (event, ranges) {
+ range_from = Math.round(ranges.xaxis.from);
+ range_to = Math.round(ranges.xaxis.to);
+ // max selection range
+ if (range_to - range_from > d.month) {
+ // reset selection
+ plotOverview.setSelection({xaxis: {'from': from, 'to': to}}, true);
+ return;
+ } else {
+ from = timeToLocal( range_from );
+ to = timeToLocal( range_to );
+ }
+ sensors = [];
+ for (elem in datasetOverview) {
+ sensor = datasetDetail[elem]["userData"];
+ sensors.push(sensor);
+ }
+ datasetDetail =[];
+ for (i in sensors) {
+ plotSensorDetail(pickSensorConfig(sensors[i]));
+ }
+ });
+
+ $.each(sensorConfigList, function(i,sensorConfig) {
+ var pickerDiv = $("<div>").attr("id","pick_"+sensorConfig.sensorname.replace(/\./g,"_"))
+ .addClass("picker")
+ .appendTo("#sensorpicker");
+
+ var pickerCheckbox = $("<input>").attr("type","checkbox")
+ .appendTo(pickerDiv);
+ pickerDiv.append($("<span>").text( sensorConfig.description + " (" + sensorConfig.sensorname + ")") );
+ if (sensorConfig.show) {
+ //Plot
+ plotSensor(sensorConfig);
+ $(pickerCheckbox).attr("checked","checked");
+ }
+ });
+ // TODO http://people.iola.dk/olau/flot/examples/annotating.html
+
+
+ $('.picker input').click( function() {
+ var sensorname = $(this).parent().attr("id").replace("pick_","").replace(/_/g,".");
+ if ($(this).is(":checked")) {
+ if (typeof console != "undefined") console.log(sensorname);
+ plotSensor(pickSensorConfig(sensorname));
+ } else {
+ unplotSensor(sensorname);
+ }
+ });
+});