Aufzeichnung von Sensordaten und grafische Auswertung mit Highcharts

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • So, habe auf Highchart.com was zu meinem Zeitproblem gefunden.
      Habe mich jetzt nicht komplett reingelesen, scheint aber im Standard immer auf UTC zu sein.
      Habe eine Option gefunden, UTC als Standard zu deaktivieren
      Siehe dazu folgende Links und den Screenshot:
      useUTC: Boolean
      Beispiel

      Damit bekoome ich nun die richtige Zeit angezeigt in meinen Charts.

      Wann kommt Deine neue Version :D ;)
      Dateien
      • timeoffset2.PNG

        (7,03 kB, 27 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von mastadook ()

    • Kurios. Mit Highcharts hatte ich da keine Probleme, die Option useUTC habe ich erst gesetzt, als ich zu Highstock gewechselt bin. Deshalb hab ich daran gar nicht gedacht.

      mastadook schrieb:

      Wann kommt Deine neue Version
      Nur Geduld ;)
      Ich arbeite dran. Auf dem Screenshot hier sieht man oben rechts zwei Eingabefelder, um einen Zeitraum auszuwählen. Dort muss man das Datum im richtigen Format eintragen. Das wollte ich aber etwas schicker und komfortabler und bin deshalb gerade dabei, dass dort ein kleiner Kalender aufpoppt, wenn man in das Feld klickt und man einfach das Datum auswählen kann.
      Das benötigt noch eine zusätzliche Bibliothek, jquery-ui, die zwar eigentlich (wie auch jquery) schon im SHC vorhanden ist, die ich aber momentan noch manuell separat installiert habe.
      Sobald das alles funktioniert, werde ich die aktuellen Dateien hier einstellen :)
    • So, hier mal die aktuelle Version mit Highstock. Unterhalb des Ordners "sensors" liegt der Ordner "jquery-ui", in dem die aktuelle Version von jquery-ui liegt.
      Auch liegt in dem Verzeichnis die Datei "datepicker-de.js" die man sich hier herunterladen kann. Und in meinem Fall liegt in diesem Verzeichnis noch ein Verzeichnis namens "themes" in dem (natürlich) die Themes liegen, die man hier findet. Die "datatemphumi.php" gibt die Daten jetzt in einem neuen Format aus und die Werte der Spannung sind auf zwei Kommastellen gerundet, weil meine ESP8266 bis zu 4 Nachkommastellen ausgeben. Auch sonst gibt es noch ein paar Optimierungen und Anpassungen. Zum Beispiel muss die Seite beim Skalieren des Fensters nicht neu geladen werden, um die min- und max-Werte neu zu schreiben, sondern es wird jetzt ein event-handler von Highstock verwendet. Und wie angekündigt kann die Zeitspanne der Anzeige komfortabel über einen Kalender gewählt werden.

      So sieht's dann aus:

      chart.png


      Und hier sind die Scripte: scripte_highstock.zip
    • Hallo zusammen,

      erst mal Danke an groovy fürs Mühe machen!
      Hab das Projekt auch gestartet und bin weit gekommen, hab aber trotzdem so meine Probleme und bräuchte Hilfe. Mach da schon seit Tagen rum und komm nicht weiter.

      1. Es wird bei mir, wenn ich datatemphumi.php im Browser öffne, "nur" [{"name":"Temperatur"},{"name":"Luftfeuchte"},{"name":"Spannung"},{"name":"Zeit"}] angezeigt, also keine Werte.
      Hier das Script:

      PHP-Quellcode: datatemphumi.php

      1. <?php
      2. $conn = mysqli_connect("localhost","root", "", "sensoren");
      3. if (!$conn) {
      4. die('Kann nicht verbinden: ' . mysql_error());
      5. }
      6. $sth = $conn->query("SELECT Temperatur FROM Büro_DHT22");
      7. $rows = array();
      8. $rows['name'] = 'Temperatur';
      9. while($r = mysqli_fetch_array($sth)) {
      10. $rows['data'][] = $r['Temperatur'];
      11. }
      12. $sth = $conn->query("SELECT Luftfeuchte FROM Büro_DHT22");
      13. $rows2 = array();
      14. $rows2['name'] = 'Luftfeuchte';
      15. while($rrrr = mysqli_fetch_array($sth)) {
      16. $rows2['data'][] = $rrrr['Luftfeuchte'];
      17. }
      18. $sth = $conn->query("SELECT Spannung FROM Büro_DHT22");
      19. $rows1 = array();
      20. $rows1['name'] = 'Spannung';
      21. while($rr = mysqli_fetch_array($sth)) {
      22. $rows1['data'][] = $rr['Spannung'];
      23. }
      24. $sth = $conn->query("SELECT Zeit FROM Büro_DHT22");
      25. $rows3 = array();
      26. $rows3['name'] = 'Zeit';
      27. while($rrr = mysqli_fetch_array($sth)) {
      28. $rows3['data'][] = strtotime($rrr['Zeit'])*1000;
      29. }
      30. $result = array();
      31. array_push($result,$rows);
      32. array_push($result,$rows2);
      33. array_push($result,$rows1);
      34. array_push($result,$rows3);
      35. print json_encode($result, JSON_NUMERIC_CHECK);
      36. mysqli_close($conn);
      37. ?>
      Alles anzeigen
      Der lighttpd-log zeigt hierzu:

      2016-12-19 15:56:28: (mod_fastcgi.c.2702) FastCGI-stderr: PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/sensoren/datatemphumi.php on line 12
      2016-12-19 15:56:28: (mod_fastcgi.c.2702) FastCGI-stderr: PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/sensoren/datatemphumi.php on line 29
      2016-12-19 15:56:28: (mod_fastcgi.c.2702) FastCGI-stderr: PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/sensoren/datatemphumi.php on line 26
      2016-12-19 15:56:28: (mod_fastcgi.c.2702) FastCGI-stderr: PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/sensoren/datatemphumi.php on line 33
      also immer bei der while-Schleife.

      Werte bekomm ich in die Datenbank geschrieben.
      Mit dem hier:

      Shell-Script: senddht22data.sh

      1. #!/bin/bash
      2. mySQLserver="localhost"
      3. mySQLport="3306"
      4. mySQLuser="root"
      5. mySQLpass=""
      6. mySQLdatabase="sensoren"
      7. mySQLtable="Büro_DHT22"
      8. # Werte von DHT22 erhalten
      9. WERTE=$(sudo /var/www/shc/shc/lib/external/python/dht.py 22 23)
      10. TEMP=$(echo $WERTE | cut -d ";" -f 1)
      11. LUFT=$(echo $WERTE | cut -d ";" -f 2)
      12. # WERTE in Datenbank eintragen
      13. INSERT="INSERT INTO $mySQLdatabase.$mySQLtable (Temperatur,Luftfeuchte,Zeit) VALUES (\"$TEMP\",\"$LUFT\",\"$(date +%Y-%m-%d_%H:%M:%S)\");"
      14. echo $INSERT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser -p"$mySQLpass" $mySQLdatabase
      15. exit 0
      Alles anzeigen
      PS: danke an mastadook


      2. Die weiße Seite bei ip/sensoren/temphumi.php bekomm ich auch angezeigt. 127.0.0.1 bzw. localhost ist bei mir aber eingetragen. Keine Ahnung was ich falsch mache.
      Und das mit der jquery.min.js ist bei mir auch so, dass sie nicht vorhanden ist, bzw. hab ich ne jquery-1.11.3.min.js. Die hab ich so mit Pfadangabe in themphumi.php geschrieben.

      HTML-Quellcode: themphumi.php

      1. <script type="text/javascript" src="/var/www/sensoren/charts/api/js/jquery-1.11.3.min.js"></script>
      Habs auch schon mit der jQueri 3.1.1 versucht, bekomm aber nichts auf ip/sensoren/temphumi.php angezeigt.

      Die drei Scripte von groovy hab ich auch in sensoren und Highcharts darunter in charts gespeichert.

      Hoffentlich seht Ihr da durch und könnt mir dabei helfen. Auf jeden Fall Danke schon mal!!

      Weihnachtliche Grüße
      Karsten
      Was will ich? Und was muss ich dafür tun?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Karsiacar ()

    • Hallo Karsiacar

      Bin gerade auch über das gleiche Problem gestolpert und lese schon 2h deswegen den Blog hoch und runter und habe auch schon einiges ausprobiert...

      Mich hat nur das Logfile des Browsers auf die richtige Spur geführt und dann habe ich nach dem Begriff "Charts" per STRG F auf allen 4 Seiten gesucht ...

      Du must auf der ersten und zweiten Seite des Blogs den Eintrag von mastadook vom 12. September 2016 lesen.
      Da wird geschrieben, dass groovy vergessen hatte dieses File mit anzugeben und in den Ordner /charts zu legen.

      @ groovy. Kannst Du vielleicht in Deiner How To Übersicht noch den chart Ordner mit aufnehmen und dessen kompletten Inhalt und Struktur wie bei Deinen anderen Ordner per Download-Link einbinden. Das gibt dann die 1 Plus mit Sternchen. Momentan hast Du schon die 1 mit noch einem ganz kleinen Minus ;)

      Für die Zwischenzeit:


      Die diversen Files die noch fehlen findet man wenn man den angegeben Links zu Highstock von groovy folgt.
      highstock

      In diesem Zip findet man alle Files, die nur noch in die folgende Struktur gebracht werden müssen:
      Unterhalb des Ordners charts muss der Ordner js sein.

      Dieser muss dann das
      jquery.min.js und
      highstock.js und den Ordner
      modules enthalten.

      In modules muss noch exporting.js rein.

      Das jquery.min.js hat in den Zip Files gefehlt. Statt dessen war nur jquery-1.11.3.min.js vorhanden.
      Ich habe das File auf jquery.min.js umbenannt in der Hoffnung, dass es sich bei jquery-1.11.3.min.js nur um eine aktuellere Version handelt.
      Ich bin mir aber nicht sicher ob das so richtig war.
      Vielleicht kann dazu ja groovy nochmal kurz was erleutern...



      Bei mir öffnet sich jetzt zumindest eine Grafik. Ich habe zwar noch keine Daten, aber es kommen keine Fehler mehr in den Logs.
      Ich hoffe, dass ich etwas weiter helfen konnte... und drücke mir jetzt selbst die Daumen, dass in Kürze auch die Daten aus meiner mysql angezeigt werden...

      An dieser Stelle zeigt sich bei mir das gleiche Phaenomen wie bei Karsiacar.
      Wenn man datatemphumi.php im Browser öffnet, erscheint "nur" [{"name":"Temperatur"},{"name":"Luftfeuchte"},{"name":"Spannung"},{"name":"Zeit"}] angezeigt, also keine Werte.
      Kann das auch am Zeitformat liegen ???
      Habe es einmal mit
      TYP datetime im Format: 2016-12-28 23:27:07 und einmal mit anderer Tabelle
      TYP timestamp im Format: 2016-12-28 21:25:16 probiert.


      Gruss
      Atlantis-.-

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Atlantis ()

    • Hallo Atlantis,

      Denke das Umbenennen hilft nichts. Die neueste Version von jquery ist 3.1.1. Selbst wenn du im temphumi.php das oder auch das 1.11.3 einträgst geht es nicht.

      Vielen dank für die Hilfe! Hab mir aber inzwischen ein anderes Tutorial gesucht und auch gefunden. Funktioniert super mit 1wire und DHT.
      War völlig unkompliziert zu installieren und Funktionierte auch sofort.
      GitHub - meigrafd/HighCharts: Use Highcharts with MySQL to display Sensor Data
      Für DHTs muss man noch ein Script, was meigrafd verfasst hat, anlegen. Wenn du das brauchst, sag Bescheid.

      Beste Grüße und ein Guten Rutsch in neue Jahr
      Karsiacar
      Was will ich? Und was muss ich dafür tun?
    • Hallo Karsiacar

      Danke für Deinen Link. Ich werde weiter versuchen, die Lösung von groovy zum Laufen zu bringen, da gefällt mir das Look & Feel deutlich besser.
      Ausserdem habe ich bereits die Daten in der mysql dB verfügbar und brauche nur den Weg von der dB zur Grafik.
      (Ich arbeite eigentlich mit Arduinos, die mir die Daten in die dB schreiben ... Derzeit nur Temp und Feuchte, später auch Füllstände, Zählerstände uvm.)

      An der Lösung von meigrafd ist es schwierig, es auf andere dB und Tabellen abzuändern, da die Infos für die Tabellen und Spaltennamen für den Abruf aus der dB sehr versteut in den php´s liegen und leider die Beispiel- Tabelle dummerweise nichtssagend "data" heist, so dass dieser Tabellenname sich mit vorhandenen Variablen gleichen Namens nicht unterscheiden lassen...

      Ich vermute, dass bei groovy´s Lösung unser Problem nicht die jquery.mini.js war sondern irgendetwas beim vorher stattfindenden Datenabruf innerhalb datatemphumi.php.

      Ich hoffe noch auf einen kleinen Hinweis von groovy... :thumbsup:
    • Hallo groovy, hallo Karsiacar, hallo PHP Wissende...

      Erstmal Danke Groovy, dass Du meinem priv.mail-Hilfeschrei nachgekommen bist und Dich hier gemeldet hast. :thumbup:
      Das Problem hat an dieser Stelle auch gar nichts mit SHC zu tun sondern liegt im Bereich PHP <> MYSQL...
      Deswegen hatte ich auch die Hoffnung, dass Du das vielleicht noch spontan beantworten kannst. :saint:

      Könnte die Ursache beim Problem mit den fehlenden Daten sein, dass wir beide mySQL nutzen und Dein datatemphumi- Datenabruf
      für mySQL Light geschrieben wurde? Für mich sind die PHP FIles leider ein Buch mit 7 Siegeln...

      Im datatemphumi erfolgt der Abruf der Daten per: $conn = mysqli_connect("localhost","....). Das i stimmt mich da nachdenklich...

      Meine Daten lese ich z.B. per mysql_query($sql) in die dB ein. Das funktioniert blendend.
      An den eigentlichen Select- Statements beim Abrufen kann es nicht liegen, die Laufen bei direkter Eingabe in phpMyAdmin der Maria dB prima.

      Den Timestamp schliese ich aktuell aus, denn selbst wenn nur Messwerte ohne Zeitstamp abgerufen werden bekomme ich auch nur die leere Hülse:
      [{"name":"FUELLHOEHE"}]


      Danke vorab!


      Atlantis
    • Problem gelöst ...

      Mahlzeit zusammen!

      Genug der Spekulationen... Problem gelöst ! :thumbup:

      Für alle, die die Lösung von Groovy nachklimpern wollen noch anbei die Lösung zu den letzten aufgetauchten Fragen:
      Sollte bei jemand wie bei KARSIACAR oder bei mir nach dem Aufruf von datatemphumi.php nur
      [{"name":"Temperatur"},{"name":"Luftfeuchte"},{"name":"Spannung"},{"name":"Zeit"}]
      angezeigt werden, bedeutet das, dass Ihr zwar die dB kontaktiert und auch das Passwort i.O. ist.
      In meinem Fall haben Zugriffsrechte für den angegebenen Users gefehlt für "Select" ;(
      (In meinen ersten Tests sollte der User nur Daten in die dB schreiben, also hatte der USER nur für insert die Rechte...
      So schnell stellt man sich selbst ein Bein :P
      Also bei diesem Fehlerbild lieber nochmal bei Euch testen ob der in der inc eingesetzte USER insert und select Rechte hat...

      Nachtrag: Wenn ein Spaltenname falsch in der datatemphumi.php geschrieben wurde erscheint ebenfalls das gleiche Fehlerbild:
      [{"name":"Temperatur"},{"name":"Luftfeuchte"},{"name":"Spannung"},{"name":"Zeit"}]


      Nachdem dann Berechtigung da ist und die Tabellen richtig geschrieben sind (Achtung GRoß und Kleinschreibung !!) sprudeln jetzt mit datatemphumi.php munter die Daten. Das sieht dann im Browser Fenster so aus:
      [{"name":"Temperatur","data":[[14,1],[14,8], ... usw.


      Und dann läuft auch die Grafik mit temphumi.php supi :thumbsup: .

      Damit die Grafik funzt muss man nach der letzten Anleitung von Groovy suchen.
      Diese wie angegeben in die richtigen WEB Ordner kopieren und dann den vergessenen Ordner charts wie folgt in die vorhandene Struktur einbinden:
      Die dafür noch fehlenden Files kann man hier runter laden: highstock

      In diesem Zip findet man alle Files, die nur noch in die folgende Struktur gebracht werden müssen:
      1. Im Ordner sensors den Ordner charts erstellen:
      2. Unterhalb des Ordners charts muss der Ordner js (im Bild markiert)sein.

      Dieser muss dann das
      jquery.min.js und
      highstock.js und den Ordner
      modules enthalten.

      In modules muss noch exporting.js rein.

      Das jquery.min.js hat in den Zip Files gefehlt. Statt dessen war nur jquery-1.11.3.min.js vorhanden.
      Ich habe einfach das File auf jquery.min.js umbenannt (gehe davon aus dass 1.11.3 die Versionsnummer ist).
      Bei mir spielt das ganze jetzt...

      Anbei noch meine aktuelle Ordnerstruktur...:
      Unbenannt.png
      Hoffe das spart den nachfolgenden Tüftlern ein paar Stunden...

      Auf jeden Fall noch einmal großen Dank an den Vater des Projektes Groovy für die tolle Lösung!!! :rolleyes:

      Gruss
      Atlantis

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Atlantis ()

    • ilkaskim schrieb:

      groovy schrieb:

      ilkaskim schrieb:

      Kab 1 Woche sind bei fast jedem Wert hinterm Komma 6-12 stellig.
      Vermutlich ein Problem mit der internen Rundung in Highstock.
      Schau mal hier, da gibt's ein paar Lösungsvorschläge.


      Ich finde einfach nicht wo ich die Min / Max werte unten definieren kann. Alles andere habe ich soweit hinbekommen.



      Gesendet von meinem SM-N930F mit Tapatalk


      Erledigt.

      Gesendet von meinem SM-N930F mit Tapatalk