2017-04-05 1 views
0

Ich verwende Google AnnotatedTimeline als ein Gerät zur Überwachung von Sensoren. Ich verwende mqtt Python-Skripte zum Senden der Daten an MYSQL-Datenbank. Und so bekomme ich meine Zeitdaten aus der Datenbank. Ich habe separate Sensoren Flow-Sensor und Meter-Sensor, ich möchte, dass beide auf der Timeline anzeigen, also verwende ich Datajoin. Das Problem ist, dass einer der Sensoren Timeline beginnen früher oder später, wie folgt aus:Google Annotatedtimeline Daten ist durch Zeitstempel durcheinander

enter image description here

Wie Sie die blaue Linie zu sehen beginnt später als der rote. Als spezifisch, rot ist das Meter und blau ist fließen.

Nun sieht meine Daten wie folgt aus:

function drawChart() 
    { 

     var data = new google.visualization.DataTable(); 
     data.addColumn('datetime', 'Aeg'); 
     data.addColumn('number', 'Vooluandur C200'); 
     data.addColumn('string', 'Nimi'); 
         data.addRows([ 
      [new Date(2017,3,05,14,10,48),10,undefined], 
      [new Date(2017,3,05,14,10,47),9,undefined], 
      [new Date(2017,3,05,14,10,47),10,undefined], 
      [new Date(2017,3,05,14,10,46),10,undefined], 
      [new Date(2017,3,05,14,10,46),9,undefined], 
      [new Date(2017,3,05,14,10,43),11,undefined], 
      [new Date(2017,3,05,14,10,43),10,undefined], 
      [new Date(2017,3,05,14,10,42),9,undefined], 
      [new Date(2017,3,05,14,10,42),11,undefined], 
      [new Date(2017,3,05,14,10,41),8,undefined], 
      [new Date(2017,3,05,14,10,41),9,undefined], 
      [new Date(2017,3,05,14,10,39),10,undefined], 
      [new Date(2017,3,05,14,10,39),8,undefined], 
      [new Date(2017,3,05,14,10,38),11,undefined], 
      [new Date(2017,3,05,14,10,38),10,undefined], 
      [new Date(2017,3,05,14,10,37),10,undefined], 
      [new Date(2017,3,05,14,10,37),11,undefined], 
      [new Date(2017,3,05,14,10,36),9,undefined], 
      [new Date(2017,3,05,14,10,36),10,undefined] 
]); 


     var data2 = new google.visualization.DataTable(); 
     data2.addColumn('datetime', 'Aeg'); 
     data2.addColumn('number', 'Kooder'); 
     data2.addColumn('string', 'Nimi'); 
         data2.addRows([ 
      [new Date(2017,3,05,14,10,48),0,undefined], 
      [new Date(2017,3,05,14,10,48),1,undefined], 
      [new Date(2017,3,05,14,10,48),1,undefined], 
      [new Date(2017,3,05,14,10,48),0,undefined], 
      [new Date(2017,3,05,14,10,47),0,undefined], 
      [new Date(2017,3,05,14,10,47),1,undefined], 
      [new Date(2017,3,05,14,10,47),1,undefined], 
      [new Date(2017,3,05,14,10,47),0,undefined], 
      [new Date(2017,3,05,14,10,45),0,undefined], 
      [new Date(2017,3,05,14,10,45),1,undefined], 
      [new Date(2017,3,05,14,10,45),1,undefined], 
      [new Date(2017,3,05,14,10,45),0,undefined], 
      [new Date(2017,3,05,14,10,43),0,undefined], 
      [new Date(2017,3,05,14,10,43),1,undefined], 
      [new Date(2017,3,05,14,10,43),1,undefined], 
      [new Date(2017,3,05,14,10,43),0,undefined], 
      [new Date(2017,3,05,14,10,42),0,undefined], 
      [new Date(2017,3,05,14,10,42),1,undefined], 
      [new Date(2017,3,05,14,10,42),1,undefined], 
      [new Date(2017,3,05,14,10,42),0,undefined], 
      [new Date(2017,3,05,14,10,40),0,undefined], 
      [new Date(2017,3,05,14,10,40),1,undefined], 
      [new Date(2017,3,05,14,10,40),1,undefined], 
      [new Date(2017,3,05,14,10,40),0,undefined], 
      [new Date(2017,3,05,14,10,38),0,undefined], 
      [new Date(2017,3,05,14,10,38),1,undefined], 
      [new Date(2017,3,05,14,10,38),1,undefined], 
      [new Date(2017,3,05,14,10,38),0,undefined], 
      [new Date(2017,3,05,14,10,37),0,undefined], 
      [new Date(2017,3,05,14,10,37),1,undefined], 
      [new Date(2017,3,05,14,10,37),1,undefined], 
      [new Date(2017,3,05,14,10,37),0,undefined], 
      [new Date(2017,3,05,14,10,35),0,undefined], 
      [new Date(2017,3,05,14,10,35),1,undefined], 
      [new Date(2017,3,05,14,10,35),1,undefined], 
      [new Date(2017,3,05,14,10,35),0,undefined], 
      [new Date(2017,3,05,14,10,33),0,undefined], 
      [new Date(2017,3,05,14,10,33),1,undefined], 
      [new Date(2017,3,05,14,10,33),1,undefined], 
      [new Date(2017,3,05,14,10,33),0,undefined] 
]); 


     var joinedData = google.visualization.data.join(data, data2, 'full', [[0, 0]], [1], [1]);   




     var options = { 
      thickness: 3, displayExactValues:true, displayAnnotations:true 
      }; 

     var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('d3x')); 


     chart.draw(joinedData, options);       
     } 

Durch Verwendung von SQL-Abfragen wie folgt aus:

SELECT r.id,r.device_id as device,r.sensor_id as sensor,r.timestamp as aeg2,r.timestamp as aeg,r.value_int as lugem from readings r 
    where r.sensor_id="2" 
    ORDER BY r.id desc limit 10 
SELECT timestamp as aeg,value_int as lugem,value_string as lugem2,r.device_id as device,r.timestamp as aeg2,r.id,r.sensor_id as sensor 
    FROM readings r 
    WHERE r.sensor_id="1" order by r.id desc limit 10 

Und wie ich die Daten mit PHP bearbeiten:

foreach ($result as $row){ 
       $i++; 
       $date = date("Y,m,d,H,i,s", strtotime($row["aeg"])); 
       $mod_date = substr_replace($date, intval(substr($date, 5,2))-1, 5,2) ; 


      if($andur=="1" or $andur=="1, 2"){ 
       $andmed.= "\t\t\t[new Date(" . $mod_date . ")," . $row["lugem"] .",undefined],\n"; 

       if($i > 1 or $i==x) 
       { 
        $andmed.= "\t\t\t[new Date(" . $mod_date . ")," . $eelminelugem . ",undefined],\n"; 
       }  

        $eelminelugem = $row["lugem"]; 

       $tootlikkus+= $row["lugem"]; 
       if ($row["lugem"]<10) $seisuaeg++; 

      } 
      } 

      foreach ($resultt as $roww){ 

       $datee2= date("Y,m,d,H,i,s",strtotime($roww["aeg2"]) +0.9); 
       $datee = date("Y,m,d,H,i,s", strtotime($roww["aeg2"])); 
       // Google Viz bugi, et kuu väärtused algavad 0st mitte 1-st. 
       $mod_date = substr_replace($datee, intval(substr($datee, 5,2))-1, 5,2) ; 
       $uus_date = substr_replace($datee2, intval(substr($datee2, 5,2))-1, 5,2) ; 

      if($andur=="2" or $andur=="1, 2"){ 
       $andmed2.= "\t\t\t[new Date(" . $mod_date . "),0,undefined],\n"; 

       $andmed2.= "\t\t\t[new Date(" . $mod_date . ")," . $roww["lugem"] .",undefined],\n"; 

       $andmed2.= "\t\t\t[new Date(" . $uus_date. ")," . $roww["lugem"] .",undefined],\n"; 

       $andmed2.= "\t\t\t[new Date(" . $uus_date . "),0,undefined],\n"; 

       $tootlikkus+= $roww["lugem"]; 
       if ($roww["lugem"]<10) $seisuaeg++; 

       } 


     } 

Es sollte ein Problem mit meinem Zeitstempel sein, denn wenn ich eine Abfrage auf phpmyadmin ausgeführt habe, gab es immer Sensor-Zeitstempelwerte, die starteten d oder endete früher als erwartet. So .. Gibt es ein Problem mit meiner SQL-Abfrage oder ich mache es nicht richtig mit etwas anderem?

Antwort

0

empfehlen die beiden SQL-Anweisungen in einer Kombination
diese verschiedenen Bereiche der Zeitstempel Rückkehr verhindert

versuchen so etwas wie die folgenden ...

SELECT 
    r.timestamp as aeg, 
    r.id, 
    r.device_id as device, 
    r.sensor_id as sensor, 
    CASE WHEN 
    r.sensor_id = "1" 
    THEN 
    r.value_int 
    ELSE 
    0 
    END as lugem1, 
    CASE WHEN 
    r.sensor_id = "2" 
    THEN 
    r.value_int 
    ELSE 
    0 
    END as lugem2 
FROM 
    readings r 
ORDER BY 
    r.id desc 
LIMIT 10 

oder Sie können aggregieren möchten .. .

SELECT 
    r.timestamp as aeg, 
    r.id, 
    r.device_id as device, 
    r.sensor_id as sensor, 
    SUM (
    CASE WHEN 
     r.sensor_id = "1" 
    THEN 
     r.value_int 
    ELSE 
     0 
    END 
) as lugem1, 
    SUM (
    CASE WHEN 
     r.sensor_id = "2" 
    THEN 
     r.value_int 
    ELSE 
     0 
    END 
) as lugem2 
FROM 
    readings r 
GROUP BY 
    r.timestamp, 
    r.id, 
    r.device_id, 
    r.sensor_id 
ORDER BY 
    r.id desc 
LIMIT 10 
+0

Entschuldigung für die nicht beantworten, das funktionierte, aber es gab noch einige Probleme mit einer aus der Tabelle kombiniert und g Aus dem Diagramm. In meinem Fall löste ich mein Problem, indem ich sql BETWEEN timestamp verwendete – Somepub

Verwandte Themen