Feinstaubsensor bauen - Teil 3 Daten sammeln!
-
Bedingt durch eine Erkrankung, habe ich ein wenig Zeit über. Da fällt einem ja irgendwann die Decke auf den Kopf, also ablenken....
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
timestampEs 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 -
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