Temperaturdaten / Chart (interpolieren)

3 views
Skip to first unread message

Tim Ritberg

unread,
May 28, 2021, 4:04:31 PMMay 28
to
Hi!

Ich habe eine Mysql-Datenbank mit Temperaturwerten. Meßzeitpunkt ist
immer eine Temperaturveränderung, also keine festen Intervalle.

Jetzt suche ich eine Möglichkeit einen Tagestemperaturverlauf anzeigen
zu können.

(Mysql 8, PHP 7.4)

Tim

Matthias P. Würfl

unread,
May 29, 2021, 6:52:00 AMMay 29
to
Tim Ritberg schrieb am Freitag, 28. Mai 2021 um 20:04:31 UTC:

> Ich habe eine Mysql-Datenbank mit Temperaturwerten. Meßzeitpunkt ist
> immer eine Temperaturveränderung, also keine festen Intervalle.
>
> Jetzt suche ich eine Möglichkeit einen Tagestemperaturverlauf anzeigen
> zu können.

Das ist ja vergleichweise einfach. Du suchst Dir zu jedem gewünschten Ausgabezeitpunkt (z.B. jede volle Stunde) einfach den letzten vorhandenen Messzeitpunkt. fertig.


// Uhrzeiten als float im key mit den jeweiligen Temperaturen als value
$data = array(
0 => 0, // um 0 Uhr wurde es 0 Grad
3.5 => 1, // um halb 4 wurde es 1 Grad
8.25 => 2, // morgens viertel nach 8 wurde es 2 Grad
11.2 => 3,
14 => 2,
20.15 =>1,
23.5 => 0
);

function chartInterpolieren($chart){
$newchart = array();
for($h = 0; $h <=24 ; $h++){
foreach($chart as $uhrzeit => $temperatur){
if($uhrzeit <= $h){
$newchart[$h]=$temperatur;
}
}
}
return $newchart;
}

Geringfügig komplizierter wird das erst, wenn Du wirklich "interpolieren" willst, wenn Du also nur weißt, dass es morgens um 2 noch 0 Grad war, Mittags um 12 dann aber 10 Grad und Du willst jetzt "dazuerfinden", wie da allmählich der Übergang war.

Tim Ritberg

unread,
May 29, 2021, 7:33:02 AMMay 29
to
Am 29.05.21 um 12:51 schrieb Matthias P. Würfl:
...
>
> Geringfügig komplizierter wird das erst, wenn Du wirklich "interpolieren" willst, wenn Du also nur weißt, dass es morgens um 2 noch 0 Grad war, Mittags um 12 dann aber 10 Grad und Du willst jetzt "dazuerfinden", wie da allmählich der Übergang war.
>

Ich möchte eigentlich einen schönen Temperatur-Graphen. Ich habe nunmal
keine lineare Datensammlung. Zeitsprünge sähe in dem Graphen aber
komisch aus.



Tim

Matthias P. Würfl

unread,
May 29, 2021, 8:45:00 AMMay 29
to
Tim Ritberg schrieb am Samstag, 29. Mai 2021 um 11:33:02 UTC:

> Ich möchte eigentlich einen schönen Temperatur-Graphen.

Dafür gibt's schöne Libraries, die sowas mit JS machen. Die bindet man in eine Website ein und die Rohdaten schickt man per JSON mit. Die Generierung des Graphen findet dann bei der Anzeige im Client statt. Das ist auch sinnvoll, denn so kann man die Interpolation auf die Auflösung des Endgerätes anpassen.

Grüße, Matthias

Tim Ritberg

unread,
May 29, 2021, 9:22:18 AMMay 29
to
Am 29.05.21 um 14:44 schrieb Matthias P. Würfl:

> Dafür gibt's schöne Libraries, die sowas mit JS machen. Die bindet man in eine Website ein und die Rohdaten schickt man per JSON mit.

Darauf wollte ich hinaus, von JS habe ich nur leider keine Ahnung.

Tim

Jan Novak

unread,
May 31, 2021, 3:51:57 AMMay 31
to
Am 29.05.21 um 15:22 schrieb Tim Ritberg:
Ich kann dir hierfür wärmstens

https://www.chartjs.org

empfehlen.Sehr einfach einzubinden und richtig schöne Grafiken ...
Bin auch kein JS Spezialist, aber die Einbindung und erste Ergebnisse
gingen razt-fatz ;-)

Jan


Tim Ritberg

unread,
May 31, 2021, 4:35:08 AMMay 31
to
Am 31.05.21 um 09:51 schrieb Jan Novak:

>
> Ich kann dir hierfür wärmstens
>
> https://www.chartjs.org
>
> empfehlen.Sehr einfach einzubinden und richtig schöne Grafiken ...
> Bin auch kein JS Spezialist, aber die Einbindung und erste Ergebnisse
> gingen razt-fatz ;-)
>
> Jan
>
>
Ich habe mit Google Charts was bauen können, leider nicht interpoliert.

Tim

Arno Welzel

unread,
May 31, 2021, 8:28:09 AMMay 31
to
Tim Ritberg:

> Ich habe eine Mysql-Datenbank mit Temperaturwerten. Meßzeitpunkt ist
> immer eine Temperaturveränderung, also keine festen Intervalle.
>
> Jetzt suche ich eine Möglichkeit einen Tagestemperaturverlauf anzeigen
> zu können.

Baue ein Array auf, was alle theoretischen Werte im Verlauf abdeckt.

Dann nimm' die Werte und verteile Sie in das Raster. Der Meßzeitpunkt
muss natürlich bekannt sein

Angenommen, Du hast die Werte aus der Datenbank in einem Array $values
mit jeweils Stunde und Wert:

<?php
$values =
[
[ 'hour' => 0, 'value' => 2.4 ],
[ 'hour' => 2, 'value' => 4.2 ],
[ 'hour' => 3, 'value' => 7.7 ],
[ 'hour' => 8, 'value' => 12.1 ],
[ 'hour' => 9, 'value' => 12.7 ],
[ 'hour' => 14, 'value' => 18.4 ],
];

$hour = 0;
while ($hour<24) {
$dayValues[$hour] = 0;
$hour++;
}

foreach ($values as $value) {
$dayValues[$value['hour']] = $value['value'];
}

echo "Zeitreihe 0-23 Uhr:\n";
$hour = 0;
while ($hour<24) {
printf("Wert um %d Uhr: %f\n", $hour, $dayValues[$hour]);
$hour++;
}
?>

Wenn Du die "Lücken" in der Zeitreihe auffüllen willst, müsstest Du die
Quelldaten nach der Stunde aufsteigend sortieren und Dir dann beim
übertragen in das Ziel-Array bei jedem Schritt merken, was der letzte
Stundenwert war und ggf. vom letzten bis zum aktuellen Wert
interpolierte Werte eintragen.

--
Arno Welzel
https://arnowelzel.de
Reply all
Reply to author
Forward
0 new messages