• 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ü

PHP: Probleme mit Sonderzeichen in JpGraph, Niederschlagtagessumme

Begonnen von Wetterfisch, 03.11.2013, 20:27:36

⏪ vorheriges - nächstes ⏩

Wetterfisch

Guten Abend.

Leider habe ich es nicht geschafft, unsere Gemeinde dazu überzeugen, dass sie sich eine eigene Wetterstation anschafft. Deshalb habe ich mir eine eigene Wetterstation angeschafft. Die Gemeinde ist auch an meinen gemessenen Wetterdaten interessiert. Deshalb bin ich gerade dabei eine kleine Website zu erstellen. Weil mir die Grafiken der meisten Auswerteprogramme nicht so gefallen, erstelle ich die Grafiken "on the fly" (auf dem Webserver) mit JpGraph. Das funktioniert auch sehr gut.

Leider gibt es ein Problem: Sonderzeichen in den Achsentiteln, in der Legende, ... werden nicht  korrekt dargestellt (kleines Rechteck). Als kleiner Trost - bei "FONT0, FONT1 und FONT2" wird wenigstens das Gradzeichen richtig dargestellt (andere Sonderzeichen wiederum nicht). Das Problem muss aber an "JpGraph" liegen, da auch bei einer Font wie Arial das Problem weiterhin besteht. Hat jemand vielleicht eine Lösung für das Problem?

Nächstes Problem: ich bevorzuge es, dass die Grafiken nur den Tagesverlauf anzeigen (also nicht von z.B 11:00 Uhr - 11:00 Uhr). Das funktioniert auch bei fast allen Wetterdaten, außer bei der Niederschlagsmenge, denn dort habe ich nur den Gesamtniederschlag seit einem bestimmten Zeitraum, die 1h Niederschlagsmenge (von z.B 12:30 bis 13:30) und die 24h Niederschlagsmenge (alle Werte sind in einer Datenbank im 5min Intervall gespeichert). Nun die Frage, wie bekomme ich aus der 24h Niederschlagsmenge die Niederschlagtagessumme? Ich sitze da gerade irgendwie auf dem Schlauch.

Schonmal vielen Dank für Eure Hilfe!

Einen schönen Sonntag noch!
Manfred

P.S.: Ich bin mir jetzt nicht ganz sicher, ob das hier am richtigen Platz ist, falls es hier fehl' am Platz ist - bitte verschieben!


heimfried

#1
Hallo Manfred,
ich hoffe, ich habe deine Frage richtig verstanden.
Was die Sonderzeichen angeht, z. B. deutsche Umlaute, habe ich auch teilweise Probleme gehabt, aber dann gelöst.
Erstens muss man darauf achten, welche Kodierung der Editor verwendet, in dem man den PHP-Code schreibt.
Meinen habe ich auf UTF-8 eingestellt (den Grund für diese Auswahl weiß ich aber nicht mehr).
Dann muss man dafür sorgen, dass auch der Browser erfährt, welche Kodierung er geliefert bekommt.
Dafür gibt es verschiedene Möglichkeiten, für mich die einfachste war:
zwischen <head> und </head> in die Html-Datei einfügen:
<? php
<meta charset="utf-8">
?>


Zum zweiten Problem (gar nicht so einfach, habe ich gemerkt, nachdem ich schon eine untaugliche Scheinlösung vorschlagen wollte):

Das Problem ist ja, dass die Differenz zwischen einem aktuellen 24h-Summenwert und dem vorhergehenden 24h-Summenwert nicht nur den Niederschlag enthält, der ggf. in den letzten 5 Minuten dazugekommen ist, sondern auch mit negativem Vorzeichen "enthält", was 24 Stunden vorher im entsprechenden 5-Minuten-Intervall aus der Summe herausgefallen ist.

Zum Glück regnets nicht immer! Du gehst also in der Datenbank rückwärts, bis du eine 24-Stunden-Niederschagssumme findest, die gleich Null ist (das muss nach 24 Stunden ohne registrierten Niederschlag ja der Fall sein).

Dann wieder vorwärts in der Datenbank: der erste Wert größer Null (24h-Summe_1) ist dann genau der Niederschlag, der zum entsprechenden 5-Minuten-Intervall gehört (Intervall_1), weil der aus der Summe herausfallende Wert ja gleich Null ist. Die Differenz des dann folgenden Wertes zu seinem Vorgänger ist der Niederschlag des zweiten 5-Minuten-Intervalles (24h-Summe_2 - 24h-Summe_1 = Intervall_2) usw.

Nach 24 mal 12 Intervallen musst du natürlich zu der Differenz der 24-Stunden-Summen den Wert des Intervalls 1 addieren, weil dieser ja in der 24-Stunden-Summe abgezogen wurde
(24h-Summe_289 - 24h-Summe_288 + Intervall_1 = Intervall_289).
Dann: 24h-Summe_290 - 24h-Summe_289 + Intervall_2 = Intervall_290 usw.

Auf diese Weise kannst du ein weiteres Datenbankfeld errechnen, das für jedes 5-Minuten-Intervall den Niederschlag anzeigt. Das kannst du ja mit den Messdaten laufend ergänzen. 

Für deine Auswertung musst du nur ab Tageswechsel 0 Uhr über die Intervalle summieren.

(Ich musste nachbessern.)





Gruß, Günter

Holli

Zitat von: heimfried am 04.11.2013, 22:07:25
Dafür gibt es verschiedene Möglichkeiten, für mich die einfachste war:
zwischen <head> und </head> in die Html-Datei einfügen:
<? php
<meta charset="utf-8">
?>

Das produziert nur eine Fehlermeldung, weil PHP die Anweisung nicht versteht. Wenn man den Header mit PHP setzen will, muß es so aussehen:
<?php  header('Content-Type: text/xml; charset=UTF-8');?>

Das Setzen einer HTTP-Header-Zeile muß zwingend vor jeder anderen Ausgabe erfolgen, sonst ist der Header bereits abgeschickt und kann nicht mehr geändert werden. Der Code-Schnipsel muß also vor der ersten HTML-Ausgabe stehen, nicht im Head.

Was du meinst, ist das HTTP-Äquivalent in HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Das muß im Head stehen. Der Browser stellt den Inhalt dann so dar, als wäre die entsprechende Headerzeile im HTTP-Header gesetzt worden.
Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.

heimfried

Du hast recht, Dietmar, es ist natürlich kein PHP.

Was ich gemeint habe, ist Folgendes:
zwischen <head>    und    </head> in die Html-Datei einfügen:

<meta charset="utf-8">


Ich bin weit davon entfernt, mich als PHP- oder HTML-Kenner zu verstehen.

Aber der genannte Code funktioniert bei mir im Gegensatz zu anderen Varianten, die ich ausprobiert habe. (Und wenn ich die Zeile weglasse, wird Text fehlerhaft ausgegeben. )

Unter welchen Bedingungen das funktioniert, weiß ich nicht.

Gruß, Günter



Gruß, Günter

Wetterfisch

Hallo Günter und Dietmar,

vielen Dank für Eure Vorschläge!
Leider funktioniert das so nicht, denn JpGraph macht nichts anderes, als gaugelt dem Browser vor, dass es sich z.B. bei "temperatur.php" um ein Bild handelt. Wenn ich nun einen anderen Header mit PHP sende, funktioniert JpGraph nicht mehr - ist ja auch logisch.

Für das Niederschlagsmengen-Problem habe ich eine andere Lösung - sehr einfach und irgendwie auch logisch: Mir steht ja die Gesamtniederschlagsmenge seit einem bestimmten Zeitpunkt zur Verfügung. Wir nennen diese jetzt mal "NGes".
Zuerst such ein Script nach NGes von gestern um 23:55. Von der heutigen NGes subtrahiere ich nun NGes von gestern.

Hier ein Beispiel:
NGes_gestern (NGes von gestern um 23:55Uhr) : 546.1mm
NGes_jetzt (NGes von heute um 16:00Uhr) : 556.1mm

Tagesniederschlagssumme = NGes_gestern - NGes_jetzt
Tagesniederschlagssumme = 556.1mm - 546.1mm
Tagesniederschlagssumme = 10mm

Manfred

Holli

Zitat von: Wetterfisch am 05.11.2013, 16:34:55
Leider funktioniert das so nicht, denn JpGraph macht nichts anderes, als gaugelt dem Browser vor, dass es sich z.B. bei "temperatur.php" um ein Bild handelt. Wenn ich nun einen anderen Header mit PHP sende, funktioniert JpGraph nicht mehr - ist ja auch logisch.
Natürlich erfolgt die Ausgabe als Bild. Aber die Erzeugung der Buchstaben und Zahlen im Bild erfolgt mit einem Zeichensatz, und dafür muß JPGraph wissen, mit welcher Codierung die Eingabe erfolgt, sonst werden Sonderzeichen falsch oder gar nicht dargestellt.

Du solltest dir grundsätzlich angewöhnen, das Charset der Webseite anzugeben. Wenn Browser raten müssen, mit welcher Codierung die Sonderzeichen angegeben werden, raten sie oft falsch. Und dieselbe Codierung muß dann auch JPGraph mitgeteilt werden: http://jpgraph.net/download/manuals/chunkhtml/ch08s08.html
Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.

heimfried

Zitat von: Wetterfisch am 05.11.2013, 16:34:55
Für das Niederschlagsmengen-Problem habe ich eine andere Lösung - sehr einfach und irgendwie auch logisch: Mir steht ja die Gesamtniederschlagsmenge seit einem bestimmten Zeitpunkt zur Verfügung.

Ja, das ist viel einfacher. Ich hatte aber in deinem Eröffnungsbeitrag nicht verstanden, was du mit

" ... denn dort habe ich nur den Gesamtniederschlag seit einem bestimmten Zeitraum ..."

gemeint hast.
Gruß, Günter

joergeli

 Hallo zusammen,

evtl. noch eine Idee bzgl. der Sonderzeichen:
Ich verwende für meine Diagramme die amCharts ( Javascript basierend ).
Auch da hatte ich trotz utf-8 Codierung teilweise Probleme mit Sonderzeichen.
Erst durch Ersatz des entspr. Zeichens durch den sog. Unicode-Character
( http://en.m.wikipedia.org/wiki/List_of_Unicode_characters
hatte ich Erfolg.

Beispiel:
2 aufeinanderfolgende Leerzeichen kann man so &nbsp;&nbsp; ,
oder als Unicode auch so \u00A0\u00A0 definieren.

Ich bin kein HTML/PHP-Crack, aber evtl. hilft das hier auch ?

Gruß
Jörg
Wetterstation Heinzenberg / Taunus:
http://www.joergeli.de/
WS 2500-PC (V3.1) mit Superhet-Empfänger HFS 302
2xWS 1000, WS 2000, WS2200, WS2500, WS 3001, WS 3000TV

Arduino-Bastelseite:
http://www.arduino.joergeli.de

Wetterfisch

Danke für Eure Vorschläge!

Leider besteht aber weiterhin das Problem...

Manfred

Holli

Dietmar

Eine Aussage, die durch ein Ausrufezeichen bekräftigt werden muß, ist zumindest zweifelhaft.
Eine Aussage, die durch mehrere Ausrufezeichen bekräftigt wird, ist definitiv falsch.
Der aktuelle Deppensport: Wir töten ein Akkusativ.