bugfix
[svn42.git] / raspberry-kiosk / kiosk.js
index 1553712..52d84da 100644 (file)
@@ -30,7 +30,7 @@ function writeGooglePlusEvents(data, elem)
             noteimgs.push(attach[a].thumbnails[t].image.url);
           }
         }
-        else if ( attach[a].objectType == "photo")
+        else if ( attach[a].objectType == "photo" || attach[a].objectType == "video")
         {
           noteimgs.push(attach[a].image.url);
         }
@@ -44,7 +44,7 @@ function writeGooglePlusEvents(data, elem)
     ghtml += '<img class="gplusactor" src="'+item.actor.image.url+'"/><p class="gplustimestamp">'+item.updated.substring(0,16).replace("T"," ")+'</p>';
     ghtml += '<p class="gplustxt">'+notetxt+'</p>';
     if (noteimgs.length>0)
-    { 
+    {
       var bigimglimit;
       ghtml += '<table class="gplusimg" cellspacing="0"><tr>';
       if (noteimgs.length > 3)
@@ -107,47 +107,55 @@ function weekday2str(dow)
         return "";
 }
 
-function calendarItemIterator(data)
+function calendarItemEnhancer(data)
 {
     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;
       }
-      var itm = data[s];
-         itm.when = when;
-         yield itm;
+      data[s].when = when
     }
+    return data
 }
 
 function loadCalendarKiosk()
 {
-  var calcontainer=document.getElementById("grical_upcoming");
+  var calcontainer=document.getElementById("grical_upcoming_kiosk");
   $.getJSON('/shmcache/grical_realraum.json', function(data){
     var calhtml = "";
-    for (var itm in calendarItemIterator(data)) {
-      calhtml += '<li class="level1">'+when+' - <span class="r3red">'+data[s].title+'</span></li>'+"\n";
-    }
+    $.each(calendarItemEnhancer(data), function(index, itm) {
+      calhtml += '<li class="level1">'+itm.when+' - <span class="r3red">'+itm.title+'</span></li>'+"\n";
+    });
     calcontainer.innerHTML='<ul>'+calhtml+'</ul>';
   });
 }
@@ -158,13 +166,63 @@ function loadCalendarMainPage()
   var calcontainer=document.getElementById("grical_upcoming");
   $.getJSON('/shmcache/grical_realraum.json', function(data){
     var calhtml = "";
-    for (var itm in calendarItemIterator(data)) {
-      calhtml += '<li class="level1"><div class="li">'+when+' - <a href="'+data[s].url+'" class="urlextern" title="'+data[s].title+'"  rel="nofollow">'+data[s].title+'</a></div></li>'+"\n";
-    }
+    $.each(calendarItemEnhancer(data), function(index, itm) {
+      calhtml += '<li class="level1"><div class="li">'+itm.when+' - <a href="'+itm.url+'" class="urlextern" title="'+itm.title+'"  rel="nofollow">'+itm.title+'</a></div></li>'+"\n";
+    });
     calcontainer.innerHTML='<ul>'+calhtml+'</ul>';
   });
 }
 
+var gauges = {}
+function drawGauge(targetelem, label, temp, options) {
+    // Create and draw the visualization.
+    if (targetelem)
+    {
+        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);
+    }
+}
+
+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', 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:"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 writeAnwesenheitStatus(data)
 {
@@ -181,30 +239,40 @@ function writeAnwesenheitStatus(data)
    iconuri=data.icon.closed;
    statuscolor="red";
   }
-  html='<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>';
-  document.getElementById('anwesenheit_status').innerHTML=html;
-  
+  var anwesenheit_status_kiosk = document.getElementById('anwesenheit_status_kiosk');
+  var anwesenheit_status_frontpage = document.getElementById('anwesenheit_status');
+  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>';
+  }
+
   if (data.sensors)
   {
     if (data.sensors.temperature)
     {
-      sensorstd+='<td style="background-color:white; height:42px; text-align:center; vertical-align:middle; display:table-cell;"><b>Temperatur</b>';
+      sensorstd+='<td class="sensorstatus"><b>Temperatur</b>';
       $.each( data.sensors.temperature, function(s, sensorobj) {
         sensorstd+='<br/>'+sensorobj.location+': '+sensorobj.value.toFixed(2)+sensorobj.unit;
+               drawGauge(document.getElementById('tempgauge'), "Temp "+sensorobj.location, sensorobj.value, {redFrom: 33, redTo: 40, yellowFrom:29, yellowTo: 33,  minorTicks: 4, min:0, max:40});
       });
       sensorstd+='</td>';
     }
     if (data.sensors.ext_illumination)
     {
-      sensorstd+='<td style="background-color:white; height:42px; text-align:center; vertical-align:middle; display:table-cell;"><b>Licht</b>';
+      sensorstd+='<td class="sensorstatus"><b>Licht</b>';
       $.each( data.sensors.ext_illumination, function(s, sensorobj) {
         sensorstd+='<br/>'+sensorobj.location+': '+sensorobj.value;
+        drawGauge(document.getElementById('lightgauge'), "Licht "+sensorobj.location, sensorobj.value, {redFrom: 950, redTo: 1024,yellowFrom:0, yellowTo: 200,minorTicks: 4, min:0, max:1024});
       });
       sensorstd+='</td>';
     }
     if (data.sensors.door_locked)
     {
-      sensorstd+='<td style="background-color:white; height:42px; text-align:center; vertical-align:middle; display:table-cell;"><b>Eingangstür</b>';
+      sensorstd+='<td class="sensorstatus"><b>Eingangstür</b>';
       $.each( data.sensors.door_locked, function(s, sensorobj)  {
         var lockstatus="Auf";
         if (sensorobj.value) { lockstatus = "Zu"; }
@@ -214,7 +282,7 @@ function writeAnwesenheitStatus(data)
     }
     if (data.sensors.ext_door_ajar)
     {
-      sensorstd+='<td style="background-color:white; height:42px; text-align:center; vertical-align:middle; display:table-cell;"><b>Türkontakt</b>';
+      sensorstd+='<td class="sensorstatus"><b>Türkontakt</b>';
       $.each( data.sensors.ext_door_ajar, function(s, sensorobj)  {
         var lockstatus="Auf";
         if (sensorobj.value) { lockstatus = "Zu"; }
@@ -224,13 +292,13 @@ function writeAnwesenheitStatus(data)
     }
     if (data.sensors.ext_dust)
     {
-      sensorstd+='<td style="background-color:white; height:42px; text-align:center; vertical-align:middle; display:table-cell;"><b>Staub</b>';
+      sensorstd+='<td class="sensorstatus"><b>Staub</b>';
       $.each( data.sensors.ext_dust, function(s, sensorobj) {
         sensorstd+='<br/>'+sensorobj.location+': '+sensorobj.value+sensorobj.unit+'</td>';
       });
       sensorstd+='</td>';
 
-    }    
+    }
     if (sensorstd != "")
     {
       sensorshtml='<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr>'+sensorstd+'</tr></table>';
@@ -268,7 +336,7 @@ function highlightEntry(idx, color, value)
   if(value == 0) {
     if(idx%2 == 0)
       $('#upnext' + idx).css('background-color', 'white');
-    else 
+    else
       $('#upnext' + idx).css('background-color', '#E0E0E0');
   } else {
     $('#upnext' + idx).css('background-color', color);
@@ -342,13 +410,35 @@ function reloadImg(element)
 
 $(document).ready(function()
 {
-  updateDateClock(new Date());
-  setInterval("clock()", 500);
   updateAnwesenheitStatus();
-  loadCalendarKiosk();
-  loadGooglePlusEvents();
   setInterval("updateAnwesenheitStatus()", 10*1000);
-  setInterval("loadCalendarKiosk()", 123*1000);
-  setInterval("updateSensors()",145*1000);
-  setInterval("loadGooglePlusEvents()", 1207*1000);
+  if (document.getElementById("dateclock"))
+  {
+    updateDateClock(new Date());
+    setInterval("clock()", 500);
+  }
+  if (document.getElementById("grical_upcoming_kiosk"))
+  {
+    loadCalendarKiosk();
+    setInterval("loadCalendarKiosk()", 123*1000);
+  }
+  if (document.getElementById("grical_upcoming"))
+  {
+    loadCalendarMainPage();
+    setInterval("loadCalendarMainPage()", 123*1000);
+  }
+//  if (document.getElementById("sensorgraphs"))
+//  {
+//    setInterval("updateSensors()",145*1000);
+//  }
+  if (document.getElementById("tempgooglegraph") || document.getElementById("lightgooglegraph") || document.getElementById("movementgooglegraph"))
+  {
+    loadAndDrawSensorData();
+    setInterval("loadAndDrawSensorData()",145*1000);
+  }
+  if (document.getElementById("gplusevents"))
+  {
+    loadGooglePlusEvents();
+    setInterval("loadGooglePlusEvents()", 1207*1000);
+  }
 });