• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Tutorial - Diagramme mit Amcharts

Begonnen von Fredy, 04.12.2013, 17:05:38

⏪ vorheriges - nächstes ⏩

Fredy

Hallo

Also ich habe Antwort von amCharts. Das Angebot ist ein wenig dürftig und ich denke kaum, dass dies jemand überzeugen wird sich eine Lizenz zu kaufen. Aber wer sich dafür Interessiert kann mich ja per PN anschreiben. (Möchte da aber noch weiter verhandeln. Also falls jemand noch Ideen hat?)

Grüsse, Fredy
--
www.wetterbinningen.ch

joachimF

Hallo,

mein Arbeits-PC läuft wieder ( Debian SID, einige Anwendungen funktionierten plötzlich nicht).
WsWin wird minütlich ausgelesen und die DB beim Provider wächst mir zu stark an, deshalb habe ich folgendes gemacht : Auf dem WsWin-PC (XP) auch eine DB installiert und dort werden die Minuten-Daten abgespeichert.
In der Provider-DB lasse ich nur die 5- Minuten-Werte abspeichern.



$var= substr($splitTime[1],1);

if($var == "0" || $var == "5")
{
    //das echo (ausgabe)
....
INSERT INTO wettertabelle
....
}

Das funktioniert soweit. Doch nun sind mir Bedenken gekommen.
Der 5 Minuten-Wert ist mit Sicherheit nicht identisch mit dem Wert, den WsWin bei einem 5-Minuten-Intervall ausgäbe.Oder ?
Ich denke da Windboen und Regenmenge.
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de

Fredy

#102
Hallo Joachim

Du müsstest wohl entweder mit einer Abfrage auf die 1 Minuen Tabelle, die 5 Minuten Wind Max und Rain Summe berechnen (ähnlich so), oder dies im PHP lösen.

Eine mögliche Lösung in PHP, etwa so: (roh und ungetestet)


//vor dem "öffen" der Quelle, windgustHigh auf 0 setzen
$windgustHigh = 0;
....
//Jede Zeile abarbeiten
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
....
$var= substr($splitTime[1],1);

//regensumme berechnen
$regensumme = $regensumme + $data[*regenspalte*];
$regensummeGerundet = round($regensumme, 3);

//max windgust finden
if ($data[*windspalte*] > $windgustHigh)
    {
        $windgustHigh = $data[*windspalte*];
    }

//bei minute 0 und 5 ausgeben und....
if($var == "0" || $var == "5")
{
    //das echo (ausgabe)
....
INSERT INTO wettertabelle ... $regensummeGerundet, $windgustHigh
....

//...nach ausgabe die variablen zurücksetzen
$regensumme = 0;
$windgustHigh = 0;
}


(Zumindest theoretisch, müsstest du ja noch mit den (Mittelwerten?) von temp, hum pressure etc. ähnlich verfahren, obwohl die Abweichung evtl. vernachlässigbar ist.)

Grüsse, Fredy

(edit: PHP Beispiel etwas geändert, ist ja keine DB-abfrage, also eher $data[] statt $row[])
--
www.wetterbinningen.ch

joachimF


//vor dem "öffen" der Quelle, windgustHigh auf 0 setzen
$windgustHigh = 0;

DORT habe ich auch  die REGENSUMME auf 0 gesetzt

$regensumme = 0;


//regensumme berechnen
$regensumme = $regensumme + $data[*regenspalte*];
$regensummeGerundet = round($regensumme, 3);

und hier der dann der data[*regenspalte*] den Wert der regensumme zugewiesen

$data[10] = $regensummeGerundet;



dto. bei der windgustHigh Ermittlung

$data[19]=$windgustHigh;
Damit entfällt eine Änderung der
   INSERT INTO wettertabelle ... $regensummeGerundet, $windgustHigh
Zeile. Alles bleibt beim Alten.

Zur Info:
Die ws_newdata.csv enhalt immer 5 Datensätze ( 5 Minuten-WsWin-Intervall) mit folgenden Minuten-Endwerten
1,2,3,4,5  oder 6,7,8,9,0
So entsteht bei 'Mittel- bzw. Max-Wert Berechnung nicht das Problem mit Datensätzen, die über 0 oder 5 hinausgehen. Z.B 8,9,0,1,2 . Hier würde die Lösung nur die 8,9,0 Datensätze berücksichtigen.

Welchen Wert nimmt WsWin beim 5 Min.-Intervall?
Führt es eine interne Berechnung mit den Minutenwerten durch oder wird nur der 5 Min.-Wert genommen?
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de

Fredy

Hallo Joachim

ZitatWelchen Wert nimmt WsWin beim 5 Min.-Intervall?
Führt es eine interne Berechnung mit den Minutenwerten durch oder wird nur der 5 Min.-Wert genommen?

Ich habe keine Ahnung  ;) Ich habe hier eine Nexus und wie ich zumindest bisher vermutet habe, liefert diese nur alle 5 Minuten neue Daten. Beim Regen wirds sicher jeweils die Summe der letzten 5 Minuten sein, aber wie es beim Wind und Windböen aussieht  :confused:  Auch bei den anderen Werten bin ich mir nicht sicher, ob einfach nur einmal je 5 Minuten "gemessen" wird, oder ob da irgendwelche Berechnungen stattfinden.

Wurde hier im Forum vermutlich sicher schon erörtert... mal suchen... oder vielleicht kann uns hier einer der Spezialisten direkt aufklären, wie sowas in der Regel gemacht wird? (Obwohl das hier irgendwie OT wird  ;)

Grüsse, Fredy 
--
www.wetterbinningen.ch

joachimF

Bonjour Fredy,

jetzt geht es um Feinheiten, etwas OT. (sollte ein neuer Thread aufgemacht werden?)
Dein 'Tutorial - amcharts / stockcharts - Teil 4. HTML Parameter übermitteln' ist für mich soweit OK,
aber ich wollte nun jquery/datepicker integrieren.
Hauptproblem :
Wie übergebe ich das ausgewählte Datum  an das tagesdiagramm.php script?
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de

Fredy

Hallo Joachim

Ich gehe davon aus das du den datepicker schon integriert hast.

Date: <input type="text" id="datepicker">

gib dem Textfeld noch einen Namen:

Date: <input type="text" id="datepicker" name="datum">


Das ganze Formular sieht dann etwa so aus:

        <form action="tagesdiagramm.php" method="get">
        <input type="text" id="datepicker" name="datum">
        <input type="submit" value="send">
        </form>


In der Datei tagesdiagramm.php, kannst du dann den übermittelten Wert "datum" auslesen:

<?php //GET Parameter "datum" in variable $datum speichern$datum = $_GET["datum"];?>


Das im datepicker ausgewählte Datum, steht nun in der Variable $datum bereit. Es könnte direkt in der SQL Abfrage platziert werden (WHERE):


WHERE DATE(datetime) = '$datum'


Du solltest aber aus Sicherheitsgründen niemals einen so übermittelten Wert direkt einsetzen. Also das $datum vor dem Einsetzen noch irgendwie überprüfen, ob da wirklich ein Datumswert drinsteckt. z.B so:

//GET Parameter "datum" in variable $datum speichern
$datum = $_GET["datum"];

//Inhalt der Variable $datum in ein Timestamp überführen
$datum = strtotime($datum);

//Timestamp in beliebiges Format überführen
$datum = date("Y-m-d",$datum);



Erst jetzt solltest du $datum in der SQL-Abfrage verwenden.

$query = "
SELECT YEAR(datetime) AS dy, MONTH(datetime) -1 AS dm, DAY(datetime) AS dd,
HOUR(datetime) AS th, MINUTE(datetime) AS tm, temp, hum, pressure
FROM wettertabelle
WHERE DATE(datetime) = '$datum'
ORDER BY datetime
";



Hoffe das hilft. Grüsse, Fredy
--
www.wetterbinningen.ch

joachimF

#107
Hat geholfen  :)

Dauerte aber über 1 Stunde, bis ich bemerkte, dass die DB (in der Testumgebung) erst mit Daten ab dem 24.1.2015 gefüttert ist.

Hab diese kleine Ergänzung vorgenommen,

//ausgabe
if ($datum = "1970-01-01")
{ $datum = date("Y-m-d"); }
echo $datum

weil mich der Erst-Aufruf ohne Datumsangabe nervte.

Nachtrag : funktioniert nicht  :confused:

[gelöscht durch Administrator]
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de

Fredy

ZitatDauerte aber über 1 Stunde, bis ich bemerkte, dass die DB (in der Testumgebung) erst mit Daten ab dem 24.1.2015 gefüttert ist.

Kannst das auswählbare Datum auch eingrenzen mit maxDate/minDate:


...
        var pickerOpts = {
maxDate: "+0",
minDate: new Date(2011, 1 - 1, 1),
dateFormat: "yy-mm-dd",
...




ZitatNachtrag : funktioniert nicht

Versuche mal:


$datum = $_GET["datum"];

if ($datum = "")
{ $datum = date("Y-m-d"); }



Als Option kannst du den ausgewählten Wert dann auch im Textfeld "speichern":

  <form action="tagesdiagramm.php" method="get">
        <input type="text" id="datepicker" name="datum" value="
<?php echo $datum ?>
">
        <input type="submit" value="send">
        </form>



Grüsse, Fredy
--
www.wetterbinningen.ch

joachimF

#109
Bonsoir Frady,

bin mit dem 'Tageskalender' soweit fertig  :)

http://www.puttkammer.de/asc/tagesdiagramm-4u.php

if ($datum = "") muss
if ($datum[color=red] ==[/color] "")lauten.

In der Vorschau werden die zwei '=' nicht rot angezeigt (Code).
Gruß
Joachim

--
43° 23" - 6° 10"  - 150 ü NN
https://puttkammer.de