for (var s=0; s<data.length; s++)
{
var when = "";
- var dt = Date.parse(data[s].start+'T'+data[s].starttime);
- if (Date.now() > dt)
+ var stime = data[s].starttime;
+ var dt;
+ if (stime) {
+ dt = Date.parse(data[s].start+'T'+data[s].starttime);
+ } else {
+ dt = Date.parse(data[s].start);
+ }
+ if (stime && Date.now() > dt)
{
when = "JETZT";
}
else
{
var weekday = weekday2str((new Date(dt)).getDay());
- var stime = data[s].starttime;
var month = data[s].start.substring(5,7);
if (month[0] == '0')
month = month[1];
var dayofmonth = data[s].start.substring(8,10);
if (dayofmonth[0] == '0')
dayofmonth = dayofmonth[1];
- while (stime.substring(stime.length-3,stime.length) == ":00")
- {
- stime=stime.substring(0,stime.length-3);
+ if (stime) {
+ while (stime.substring(stime.length-3,stime.length) == ":00")
+ {
+ stime=stime.substring(0,stime.length-3);
+ }
+ if (stime.length <= 2) { stime+="h"; }
+ when = weekday + " " + dayofmonth+"."+month +", "+stime;
+ } else {
+ when = weekday + " " + dayofmonth+"."+month;
}
- if (stime.length <= 2) { stime+="h"; }
- when = weekday + " " + dayofmonth+"."+month +", "+stime;
}
data[s].when = when
}
});
}
-
+var gauges = {}
function drawGauge(targetelem, label, temp, options) {
- var data = google.visualization.arrayToDataTable([["Label", "Value"],[label,temp]]);
// Create and draw the visualization.
if (targetelem)
{
- options["width"] = targetelem.getAttribute("width");
- options["height"] = targetelem.getAttribute("height");
- var chart = new google.visualization.Gauge(targetelem);
- chart.draw(data, options);
+ var data = google.visualization.arrayToDataTable([["Label", "Value"],[label,temp]]);
+ if (!gauges.hasOwnProperty(targetelem.id)) {
+ gauges[targetelem.id] = new google.visualization.Gauge(targetelem);
+ }
+ gauges[targetelem.id].draw(data, options);
}
}
-function drawLineGraph(targetelem, dataarray, options) {
- if (dataarray) {
- var data = google.visualization.arrayToDataTable(dataarray);
- // Create and draw the visualization.
- if (targetelem)
- {
- options["width"]= targetelem.getAttribute("width");
- options["height"]=targetelem.getAttribute("height");
- new google.visualization.LineChart(targetelem).draw(data, options);
- }
+var linecharts = {}
+function drawLineGraph(targetelem, dataarray, options, x_is_epochdate) {
+ if (dataarray && targetelem) {
+ var data;
+ if (x_is_epochdate) {
+ data=new google.visualization.DataTable();
+ data.addColumn('datetime',dataarray[0][0]);
+ for (var c=1; c<dataarray[0].length; c++) {
+ data.addColumn('number',dataarray[0][c]);
+ }
+ for (var r=1; r<dataarray.length; r++) {
+ dataarray[r][0] = new Date(dataarray[r][0]*1000);
+ data.addRow(dataarray[r]);
+ }
+ } else {
+ data = google.visualization.arrayToDataTable(dataarray);
+ }
+ // Create and draw the visualization.
+ options["width"]= targetelem.getAttribute("width");
+ options["height"]=targetelem.getAttribute("height");
+ if (!linecharts.hasOwnProperty(targetelem.id)) {
+ linecharts[targetelem.id] = new google.visualization.LineChart(targetelem);
}
+ linecharts[targetelem.id].draw(data, options);
+ }
}
function loadAndDrawSensorData() {
$.getJSON("https://realraum.at/shmcache/r3sensors.json", function(data){
drawLineGraph(document.getElementById('tempgooglegraph'), data["TempSensorUpdate"],
- {curveType: "function", title: 'Temperature Sensors', vAxis: {maxValue: 29, minValue:5}, colors: ['#FF0000','#CC0033','#660000','#CC3333'], chartArea:{left:32,top:20,width:"88%",height:"83%"}, legend: {position: "none"}} );
+ {curveType: "function", title: 'Temperature Sensors', colors: ['#FF0000','#CC0033','#660000','#CC3333'], vAxis:{viewWindow:{min:15,max:26}, viewWindowMode:"explicit"}, chartArea:{left:32,top:20,width:"88%",height:"78%"}, legend: {position: "none"}} ,true);
drawLineGraph(document.getElementById('lightgooglegraph'), data["IlluminationSensorUpdate"],
- {curveType: "none", title: 'Illumination Sensors', vAxis: {maxValue: 1024, minValue:5}, chartArea:{left:32,top:20,width:"88%",height:"83%"}, legend: {position: "none"}} );
+ {curveType: "none", title: 'Illumination Sensors', vAxis: {maxValue: 1024, minValue:5}, chartArea:{left:32,top:20,width:"88%",height:"78%"}, legend: {position: "none"}} ,true);
+ drawLineGraph(document.getElementById('movementgooglegraph'), data["MovementSensorUpdate"],
+ {curveType: "function", title: 'Movement Sensors', vAxis: {maxValue: 10, minValue:0,viewWindowMode:"maximized"}, chartArea:{left:32,top:20,width:"88%",height:"78%"}, legend: {position: "none"}} ,true);
});
}
+function siNumberString(num,unit)
+{
+ var siid=""
+ var sisize=new Array([1e9,"G"],[1e6,"M"],[1e3,"K"]);
+ for (i=0; i<sisize.length; i++)
+ {
+ if (num >= sisize[i][0]) { siid=sisize[i][1]; num=num/sisize[i][0]; break;}
+
+ }
+ return (Math.round(num*10)/10)+siid+unit;
+}
+
function writeAnwesenheitStatus(data)
{
var html="";
}
var anwesenheit_status_kiosk = document.getElementById('anwesenheit_status_kiosk');
var anwesenheit_status_frontpage = document.getElementById('anwesenheit_status');
+ var statusage = parseInt((new Date()).getTime()/1000) - data.lastchange;
+ var statusagestatus = "";
+ if (statusage > 600)
+ {
+ //var statusagestatus = '<tr style="height:5px; overflow:hidden; "><td colspan="2"></td><td style="text-align:right; font-size:5%; background:red;">Status older than ' + siNumberString(statusage,"s") + '</td></tr>';
+ var statusagestatus = '<br/><div style="text-align:right; float:right; margin:0; padding:1px; line-height:105%; font-size:65%; background:red;">Status older than ' + siNumberString(statusage,"s") + '</div>';
+ }
if (anwesenheit_status_kiosk)
{
anwesenheit_status_kiosk.innerHTML='<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100"><tr><td style="width:100px;"><img style="float:left;" src="'+iconuri+'" height="100" width="100"/></td><td style="width:4px;"></td><td class="anwesenheitsstatus" style="background-color:'+statuscolor+'; ">'+data.status+'</td></tr></table>';
}
if (anwesenheit_status_frontpage)
{
- anwesenheit_status_frontpage.innerHTML='<table border="0" cellpadding="0" cellspacing="0" width="100%" height="42"><tr><td style="width:42px;"><img style="float:left;" src="'+iconuri+'" height="42" width="42"/></td><td style="width:4px;"></td><td style="background-color:'+statuscolor+'; height:42px; text-align:center; margin-left:48px; margin-right:auto; font-size:larger; font-weight:bold; vertical-align:middle; display:table-cell;">'+data.status+'</td></tr></table>';
+ //anwesenheit_status_frontpage.innerHTML='<table border="0" cellpadding="0" cellspacing="0" width="100%" height="42"><tr><td style="width:42px;"><img style="float:left;" src="'+iconuri+'" height="42" width="42"/></td><td style="width:4px;"></td><td style="background-color:'+statuscolor+'; height:42px; text-align:center; margin-left:48px; margin-right:auto; font-size:larger; font-weight:bold; vertical-align:middle; display:table-cell;">'+data.status+'</td></tr>'+statusagestatus+'</table>';
+ anwesenheit_status_frontpage.innerHTML='<table border="0" cellpadding="0" cellspacing="0" width="100%" height="42"><tr><td style="width:42px;"><img style="float:left;" src="'+iconuri+'" height="42" width="42"/></td><td style="width:4px;"></td><td style="background-color:'+statuscolor+'; height:42px; text-align:center; margin-left:48px; margin-right:auto; font-size:larger; font-weight:bold; vertical-align:middle; display:table-cell;">'+data.status+statusagestatus+'</td></tr></table>';
}
if (data.sensors)
loadCalendarMainPage();
setInterval("loadCalendarMainPage()", 123*1000);
}
- if (document.getElementById("sensorgraphs"))
- {
- setInterval("updateSensors()",145*1000);
- }
- if (document.getElementById("tempgooglegraph") || document.getElementById("lightgooglegraph"))
+// if (document.getElementById("sensorgraphs"))
+// {
+// setInterval("updateSensors()",145*1000);
+// }
+ if (document.getElementById("tempgooglegraph") || document.getElementById("lightgooglegraph") || document.getElementById("movementgooglegraph"))
{
loadAndDrawSensorData();
setInterval("loadAndDrawSensorData()",145*1000);