Skip to content

Feinstaubsensor bauen - Teil 3 Daten sammeln!

Allgemeine Diskussionen
  • Es geht voran 😉

    0ac2b50a-d7b4-4f42-a436-4359da3cf985-grafik.png

  • Heute mal ein wenig weiter dran gebastelt. Die Daten landen jetzt in einer Datenbank. Und das ist im Moment die aktuelle Tabelle.

    2fafe29d-4f13-4de5-a417-d6cbea9d3a69-grafik.png

  • Bedingt durch eine Erkrankung, habe ich ein wenig Zeit über. Da fällt einem ja irgendwann die Decke auf den Kopf, also ablenken....

    61791adf-fc7f-45b2-b7e7-d7bd108da5c3-grafik.png

    Mal die Tabelle hübsch gemacht und noch eine Monatsansicht gebastelt. Das war nicht so ganz einfach, vermutlich habe ich wieder zu kompliziert gedacht 😉 Das Problem war folgendes.

    • jeweils ein Datensatz pro Tag
    • jeweils zu einer fixen Uhrzeit

    Und hier kommt das Problem, für die Datensätze nehmen wir 07:00 Uhr an, die sind aber oft zu einer anderen Zeit gespeichert. Es gibt so Ungenauigkeiten, des Sensors(?), das ich die Datensätze so um

    • 07:00
    • 07:01
    • 07:02

    in der Datenbank stehen habe. Macht es für mich MySQL-Experten 🙂 schon etwas schwierig. Meine PDO-Abfrage sah so aus.

    $statement = $pdo->prepare("SELECT * FROM feinstaub WHERE datum = :date AND time = :time");
    

    Und was nun? Das Datum ist nicht so das Ding, einfach mit

    while($i < 31)
    

    durchlaufen und fertig. Aber was mache ich mit der Zeit 🤔 Ich habe dann nach vielen Versuchen einfach folgendes gemacht. Ich schaue in der Datenbank nach, ob es Einträge für 07:00 gibt, wenn JA setze ich die Zeit 07:00, wenn NEIN suche ich nach Einträgen mit 07:01 usw.

    Beispiel für 07:00

    $b_time = '07:00' ;
    $statement = $pdo->prepare("SELECT * FROM feinstaub WHERE datum = :date AND time = :time");
    $statement->execute(array('date' => $date3, 'time' => $b_time)); 
    
    if($statement->rowCount() > 0) {
       $a_time = '07:00' ;
    } 
    

    Das noch für 07:01 & 07:02 und fertig. Jetzt holt er alle Datensätze aus der DB, und zwar jeweils eine am Tag, den ersten ab 07:00 Uhr.

    Wer eine elegantere Lösung kennt, immer her damit. Ich lerne gerne 🙂

  • Hallo,

    ich will die Daten nach dem Auslesen in die Datenbank (mysql) schreiben. Dies gelingt mir auch zum teil. Die feinstaub-db beinhaltet die Spalten:
    BMP_pressure
    BMP_temperature
    humidity
    SDS_P1
    SDS_P2
    signalqual
    temperature
    timestamp

    Es wird aber nur timestamp, SDS_P1 und 2, temperature mit den Werten gefüllt. Alle anderen werden mit einer "1" aufgefüllt. Rufe ich die data.json direkt auf werden alle Werte einwandfrei aufgezeigt. Anbei das php-script:

    <?php
    
    $json = file_get_contents('http://192.xxx.x.xxx/data.json');
    $json_ergebnis=json_decode($json);
    //$daten = json_decode($json);
    //$sensoren = $daten["sensordatavalues"];
    //$schluessel = array("SDS_P1", "SDS_P2", "temperature", "humidity", "signal");
    $SDS_P1=$json_ergebnis->sensordatavalues[0]->value;
    $SDS_P2=$json_ergebnis->sensordatavalues[1]->value;
    //$BMP_pressure=$json_ergebnis->sensordatavalues[2]>value;
    $temperature=$json_ergebnis->sensordatavalues[2]->value;
    $signalqual=$json_ergebnis->sensordatavalues[3]>value;
    $humidity=$json_ergebnis->sensordatavalues[3]>value;
    $BMP_temperature=$json_ergebnis->sensordatavalues[4]>value;
    $BMP_pressure=$json_ergebnis->sensordatavalues[5]>value;
    
    $servername = "localhost";
    $username = "xx";
    $password = "xxxxxxxx";
    $dbname = "feinstaub";
    
    // Check connection
    
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
    die("Connection failed: " . $connection->connect_error);
    }
    
    $sql = "INSERT INTO werte(SDS_P1, SDS_P2, temperature, humidity, signalqual, BMP_pressure, BMP_temperature) VALUES ($SDS_P1, $SDS_P2, $temperature,  $humidity, $signal>
    
    
    if ($conn->query($sql) === TRUE) {
    echo "Eintrag war erfolgreich";
    } else {
    echo "Error: " . $sql . " " . $conn->error;
    }
    
    $conn->close();
    ?>
    

    Hat jemand eine Ahnung warum die mysql eine 1 schreibt. Habe die Spalten mit den verschiedensten db-Typen getestet. Wie geschrieben nur eine teilweise richtiges Speichern.

    mfg
    JimiBondi

  • @jimibondi Ich habe dein PHP-Script mal schön gemacht. 😉 Einrücken mit 4 Leerzeichen!

    Zum Thema, ich schau da mal rein, wenn ich mal Zeit habe. Hast du mal ein Beispiel deiner data.json?

  • Schau mal hier Mehr Daten kommen doch gar nicht vom Sensor? Bin aber schon lange nicht mehr im Thema...

    Webseite ist nur ein Gerippe 🙂

  • Hallo,

    im Link werden die Werte für Feinstaub, Temp und Luftfeuchte ausgegeben. Bei mir steht die Feuchte in der DB auf "1". Die anderen Werte werden richtig ausgegeben. Für den BMP180. Die .json gibt jedoch mehr Variablen aus. Siehe wie folgt:

    {"software_version": "NRZ-2020-133", "age":"2", "sensordatavalues":[{"value_type":"SDS_P1","value":"2.53"},{"value_type":"SDS_P2","value":"1.30"},{"value_type":"temperature","value":"24.40"},{"value_type":"humidity","value":"47.30"},{"value_type":"BMP_pressure","value":"95201.00"},{"value_type":"BMP_temperature","value":"23.70"},{"value_type":"samples","value":"336095"},{"value_type":"min_micro","value":"28"},{"value_type":"max_micro","value":"5770"},{"value_type":"interval","value":"10000"},{"value_type":"signal","value":"-57"}]}

    Danke für die Hilfe.

    mfg JB

  • Ich bin darauf gestossen, dass nicht DB die "1! anstelle den wahren Wert schreibt, sondern es wird so anscheinend aus dem PHP-Script so geliefert. Siehe die drei rechten Werte u.s. >>(2.08,1.15,26.40,1,1 ,1):

    Fehler: INSERT INTO werte(SDS_P1, SDS_P2, Temperatur, Feuchtigkeit, BMP_Druck, BMP_Temperatur) VALUES (2.08,1.15,26.40,1,1 ,1) Feld 'signalqual' hat keinen Standardwert

    Die "data.json" liefert aber alle realen Werte ohne Ausnahme. Es liegt daher tatsächlich an der Wandlung nach dem Einlesen der .json und der Übergabe an die MySQL.

    Hat da jemand etwas Erfahrung mit .json?

    DAnke.

    mfg
    JB

  • Hallo,

    das Problem hat sich gelöst. Server neu aufgesetzt und siehe da, es funzt. Danke.

    mfg
    JB

  • @jimibondi Danke für's Feedback. Aber schade, das Du nicht die Ursache gefunden hast.

  • MSI B650 Tomahawk WiFi Teil 2

    Allgemeine Diskussionen
    1
    0 Stimmen
    1 Beiträge
    158 Aufrufe
    Niemand hat geantwortet
  • Ne­ben­kos­ten­pri­vi­leg - MagentaTV

    Allgemeine Diskussionen
    1
    0 Stimmen
    1 Beiträge
    139 Aufrufe
    Niemand hat geantwortet
  • MSI B650 Tomahawk WiFi

    Allgemeine Diskussionen
    5
    0 Stimmen
    5 Beiträge
    995 Aufrufe
    FrankMF

    @kiwilog Danke für die Antwort.

    Ich habe mittlerweile ein ASUS Rog Strix B650E-F Gaming Wifi. Auch dieses Board hatte Probleme. Ich habe dann den RAM ausgetauscht und jetzt funktioniert es. Das MSI Board liegt hier aber noch, so das ich deinen Tipp da mal testen kann. Das wartet aber noch auf einen AMD Ryzen 9000 🙂

    Als Fazit, die AM5 Plattform scheint sehr empfindlich zu sein.

  • Frohes Neues 2024

    Allgemeine Diskussionen
    1
    0 Stimmen
    1 Beiträge
    95 Aufrufe
    Niemand hat geantwortet
  • 10 Jahre M$ frei

    Allgemeine Diskussionen
    1
    0 Stimmen
    1 Beiträge
    78 Aufrufe
    Niemand hat geantwortet
  • Give back to open source 2023

    Allgemeine Diskussionen
    1
    0 Stimmen
    1 Beiträge
    104 Aufrufe
    Niemand hat geantwortet
  • Flask - Erste Schritte

    Allgemeine Diskussionen
    3
    0 Stimmen
    3 Beiträge
    210 Aufrufe
    FrankMF

    Mein vorhandenes Projekt war doch etwas größer als ich gedacht hatte. Also musste ich mehr Zeit aufwenden um es nach Flask zu transferieren. Nach einiger Zeit hatte sich eine ganz ansehnliche Zahl von Dateien angesammelt und es kam wie es kommen musste, ich wusste manchmal nicht mehr, welches File ich anfassen musste. Chaos kam auf 🙂

    So fing ich an ein wenig zu recherchieren und kam auf die Funktion Blueprint von Flask. Mich ein wenig eingelesen, ChatGPT mal eben um ein Beispiel gebeten und dann angefangen die Applikation entsprechend umzubauen.

    Auch das hat Zeit gekostet. Aber, jetzt habe ich ein aufgeräumtes Projekt, was es mir wesentlich einfacher macht, daran zu arbeiten.

    5226e90d-aa20-4b20-93af-e50f8f841880-grafik.png

    Wenn ihr also mal vorhabt, so was zu coden, halte ich es für sinnvoll das Projekt von Anfang an zu strukturieren. Und zum Schluss noch ein Screenshot zum Stand des Projektes.

    a7981ffc-0f93-41f4-93e2-c914fdba5e43-grafik.png

    Und weiter geht es, ist nämlich noch nicht fertig 😀

  • Counter-Strike 2 unter Linux?

    Allgemeine Diskussionen
    2
    0 Stimmen
    2 Beiträge
    226 Aufrufe
    FrankMF
    Ergänzungen

    Ich hatte Steam auch auf meinem Haupt-PC installiert, da muss es aber wieder runter. Läuft da nicht vernünftig und am PC wird auch nichts geändert. Dafür habe ich ja den anderen eingerichtet. Also, ran ans Aufräumen 😉

    Installation

    Steam gibt es auch als Flatpak, aber das habe ich nicht getestet. Wenn es läuft, würde ich das empfehlen. Dann bleibt das System sauber.

    Deinstallation

    Das .deb Paket mit der Software Verwaltung öffnen. Auf Deinstallation klicken.

    Danach waren leider alle Daten noch vorhanden, als Handarbeit

    rm -R /home/frank/.local/share/Steam