Forum: PC-Programmierung PHP Chart hinzufügen


von Dirk F (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
mit besten Dank an Peter habe ich ein PHP Script, welches mir die 
aktuellen Werte aus eine Windhager BIOWIN2 Heizung ausliest und als Text 
im Browser darstellt (s.Anlage).
Das läuft aktuell sowohl auf dem PC (Windows 10) als auch auf des 
Synology NAS.
Nach einem Reload der Seite (F5)  werden die Werte aktualisiert, das 
geht auch automatisch alle 10 Sekunden mit einem Browser Addon.
Soweit OK.
Jetzt möchte ich aber zusätzlich die Messwerte in grafischer Form eines 
Charts darstellen.
Also immer wenn ein "Reload" der Seite gemacht wird, kommen ja neue 
Werte, die dann als neuer Datenpunkt im Chart erscheinen sollen.
SO sollen z.B. Jede Minute 1 neuer Datenpunkt  >> 1440 Datenpunkte für 
einen ganzen Tag im Chart dargestellt werden.
Jetzt gibt es ja jedem Menge freier Tools im Internet.
Könnt ihr mir eine Empfehlung geben, welches hierfür geeignet ist ?
Muss einfach sein und ohne Gebühr privat nutzbar sein.

Danke

von N. M. (mani)


Lesenswert?

So wie du das momentan hast, sieht deine Seite immer nur den aktuellen 
Wert.
Wenn du jetzt zukünftig ein Diagramm haben möchtest, muss sich 
irgendjemand die vergangenen Werte speichern.

Sprich, irgendetwas muss 24h am Tag laufen um die Werte abzuspeichern.

Da du sowieso ein NAS hast (das wahrscheinlich immer an ist) würde sich 
das anbieten.

Ich würde auf dem NAS InfluxDB und Grafana installieren (oder einen 
Docker Container verwenden).
Der Loggt dann die Daten mit und stellt dir die Diagramme zur Verfügung.
Die kannst du dann in deine Seite einbinden wenn du möchtest.

von Dirk F (Gast)


Lesenswert?

Hallo Manni,
danke für die Hinweise.
Ja, das auf dem NAS laufen zu lassen macht Sinn !

Ich vermute:
InfluxDB  ist eine Art Datenbank
Grafna  ist eine grafische Anzeige zu Inhalten aus der o.g. Datenbank.

Werde mal versuchen die beiden Teile auf der NAS zu installieren und ans 
laufen zu bekommen.
Gruß Dirk

von Dieter D. (dieter_dosenkohl)


Lesenswert?

Ich würde einfach ein kleines Angular-Projekt (oder VUE oder REACT) 
machen mit irgendeiner Chart Lib. Gibt etliche. So kann die Seite 
regelmäßig automatisch die Werte abrufen und das Chart anzeigen.

Dann brauchst du noch ein kleines Backend. Für das was du vor hast kann 
man ein ganz rudimentäres PHP Skript schreiben das als REST API je nach 
Anfrage den / die Werte aus einer Datenbank (z. B. MariaDB) liefert.

Und ein zweites Skript das die Datenbank füttert. Das dann per Cronjob 
ausführen.

Zeitaufwand 1 Tag wenn du in der Materie steckst. Länger wenn nicht.

Falls du noch einen alten Raspi rumliegen hast könntest du dir ein LCD 
Display dazu besorgen, dann hängst du dir das Ding an die Wand und lässt 
dir einfach permanent die Website anzeigen. Schick, schnell, 
übersichtlich.
Dauert dann auch nochmal einen Tag.

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

Dieter D. schrieb:
>aus einer Datenbank (z. B. MariaDB) liefert.

Hallo Dieter,
also MariaDB version 10 habe ich bereits auf der Synology installiert.
Bisher scheitert es daran, dass ich Werte von der Heizung über ein PHP 
script in die Datenbank schreiben kann.
Ich kann mich nicht mit der Datenbank verbinden, Ursache noch 
unbekannt...

von Dirk F (Gast)


Lesenswert?

Habe mich als Anfänger durch ein PHP Tutorial gearbeitet.
Vielleicht wäre es einfacher, von PHP aus eine .csv Datei zu 
erstellen/öffnen  und dann die neuen Messwerte einfach bei jedem 
page-reload in die Datei hinzufügen.
Den Graph kann ich dann einfach mit Excel über die .csv Datei erzeugen.

von berufsberatung (Gast)


Lesenswert?

Du kannst auch in PHP Bildchen generieren.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Dazu müsste man aber programmieren können und das NAS wird 
wahrscheinlich kein installiertes PHP/MySQL oder vergleichbares haben.

von Reinhard S. (rezz)


Lesenswert?

Ben B. schrieb:
> Dazu müsste man aber programmieren können und das NAS wird
> wahrscheinlich kein installiertes PHP/MySQL oder vergleichbares haben.

Das PHP-Skript läuft ja schon auf dem NAS...

von Zeno (Gast)


Angehängte Dateien:

Lesenswert?

Ich würde rrd-Tool nehmen. rrd-Tool ist eine Datenbank und die kann die 
Daten auch grafisch ausgeben. Dabei ist Minimum/Maximum/Mittel-Wert 
möglich.
Ich habe mal eine Grafik von meiner Wetterstation angehangen. Der 
Bereich zwischen Min/Max ist als Band dargestellt. Die dickere rote 
Linie ist Mittelwert. Im Bild ist der Zeitraum des letzten Jahres 
dargestellt, man kann sich aber beliebige Zeiträume anzeigen lassen.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Wenn PHP/MySQL vorhanden ist, gibt's so viele Tools, die darauf 
basierend Diagramme erstellen können. Ich würde mir sowas selbst 
schreiben und hab daher keine so richtige Ahnung was ich da genau 
empfehlen soll, aber selbst basteln kann halt nicht jeder.

von Dirk F (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
danke für die bisherigen Anregungen.
ich habs jetzt einfach so gelöst:
- PHP Script läuft auf NAS
- Jede Minute werden neue Werte in eine CSV Datei geschrieben
- Über Excel ein Diagramm erstellt (s.Anlage)

Aktuell wird das PHP-Skript (NAS) vom PC aus (Webbrowser mit Reload 1 
Minute) getriggert.
Jetzt suche ich noch eine Möglichkeit, dass die NAS automatisch jede 
Minute das PHP Skript ausführt....

von Dirk F (Gast)


Angehängte Dateien:

Lesenswert?

Frage:
Um das PHP-Skript jede Minute auszuführen, spricht etwas dagegen, es so 
zu machen wie im Anhang zu sehen ?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Du könntest das ganze Script in eine While(1) Schleife packen, am Anfang 
der PHP-Datei ein Set_Time_Limit(0); und ein Sleep(60); am Ende der 
Schleife. Nachteil: Ohne irgendwelche Steuerfunktionen läuft das für 
immer und man bekommt's nur durch Neustart des PHP-Servers weg.

Wenn ich sowas mache, dann lasse ich solche Scripte immer nach einer 
z.B. "kill.me"-Datei suchen. Wenn die vorhanden ist, wird sie gelöscht 
und das Script beendet, dann muß man nicht den Server dafür neustarten.

Alternativ kann man an den Anfang des Codes in der Schleife auch eine 
Zeitvergleichs-Funktion ausführen, die alle sagen wir 0,9 Sekunden 
prüft, ob der Zeitwert (z.B. jede volle Minute) für den nächsten 
Durchlauf erreicht wurde. Damit kriegt man sowas mit der NAS-Zeit 
synchronisiert, mit dem einfachen sleep(60); driftet das durch die 
Scriptlaufzeit irgendwann weg.

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

Ben B. schrieb:
> mit dem einfachen sleep(60); driftet das durch die
> Scriptlaufzeit irgendwann weg

Das macht aber nichts in der Anwendung.
Wird denn die CPU der NAS durch den Sleep Befehl belastet ?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Was ich so auf meinen Servern getestet habe eigentlich nicht. Aber das 
kannste ja testen, machst ein Set_Time_Limit(70); und Sleep(60); und 
schaust dann ob es in der Minute hohe CPU-Last hast.

Edit:
Kann sein, daß das Set_Time_Limit bei Sleep auf manchen Systemen keine 
Wirkung hat bzw. die Sleep-Zeit nicht als Time_Limit mitgerechnet wird. 
Aber wenn Du nur 60 Sekunden wartest sollte das schnuppe sein, 
schlimmstenfalls wird das NAS für 60 Sekunden langsam.

: Bearbeitet durch User
von Dirk F (Gast)


Lesenswert?

Hallo Ben,
danke für die Hinweise.
Wenn ich das so mit der Sleep Funktion mache, ist denn dann ein 
Ausführen eines weiteren PHP Skriptes zur gleichen Zeit noch möglich, 
oder ist der PHP Server dann blockiert ?
Sorry für die vielen Fragen, bin PHP Neuling.
Gruß

von zonk (Gast)


Lesenswert?

Nein der Server kann mehr als eine Anfrage parallel bearbeiten, sleep 
verbraucht auch keine nennenswerte Leistung

von zonk (Gast)


Lesenswert?

Du kannst ganz einfach in deine generierte Html-Seite ein weiteres PHP 
script als Bild einfügen. also ein IMG tag welches auf irgendein 
Chart.php zeigt welches als content-type: image/png oder gif liefert, 
aber wenn Du in php eine Grafikfunktion aufrufst sendet er es 
automatisch als Bild zum Browser

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hm vielleicht sollte man das grundlegend in zwei Prozesse unterscheiden.

Der erste Prozess ist das Abrufen Deiner Daten einmal pro Minute und das 
Wegspeichern in der Datenbank. Ohne das geht's nicht.

Der zweite Prozess ist das Abrufen der Werte aus der Datenbank und die 
Erstellung von Diagrammen daraus. Das kann man mit festen Werten machen 
und z.B. eine graph.png oder wie mas das nennen will einmal pro Minute 
nach dem Abrufen und wegspeichern der neuen Werte updaten, die dann von 
einer HTML/PHP-Seite aufgerufen wird. Oder wenn man dynamische Werte 
will (z.B. zeige mir ein Diagramm über alle Messwerte des letzten Monats 
oder speziell des Monats Dezember 2021), dann macht der erste Prozess 
gar nichts an den Diagrammen, sondern die werden erst bei Anforderung 
erstellt.

Das beides sollte man nicht durcheinanderbingen. Eine saubere Datenbank 
ist die Grundlage für saubere Diagramme.

Ansonsten können heute selbst schwächere CPUs 50..100 PHP-Scripte 
gleichzeitig ausführen, kommt drauf an wieviel Rechenleistung die 
einzelnen Scripte benötigen, wieviel Speicher, wieviel Datenbanklast. 
Aber das bißchen Diagramm erstellen und den ständig laufenden 
Datenerfassungsprozess wird man kaum merken.

Ich verwende zB. als Testserver zuhause einen Celeron N3150, weil das 
Ding kaum Stromkosten erzeugt. Die Mühle hat für reines PHP mehr als 
genug Leistung, man merkt nur wenig Schwächen wenn man "mal schnell" in 
PHP irgendwas berechnet was ein wenig komplexer ist oder bei großen 
Datenbanken, bzw. umfangreichen Operationen auf große Datenbanken. Er 
machts klaglos, aber man merkt, daß er das nicht so richtig mag.

von Sascha W. (sascha-w)


Lesenswert?

Dirk F schrieb:
> Frage:
> Um das PHP-Skript jede Minute auszuführen, spricht etwas dagegen, es so
> zu machen wie im Anhang zu sehen ?
Also du willst jetzt dein Script per Browser aufrufen und damit die 
Endlosschleife starten?
Das ist keine gute Idee, durch die while(1) erhält der Browser vom 
Server ja keine Rückgabe, wird also nach einer Weile ein Fehlermeldung 
anzeigen und die Verbindung zum Webserver trennen. Jeder halbwegs 
normale Webserver wird dann  nach einer gewissen Zeit die "hängende" 
PHP-Session abbrechen.
Dein NAS wird doch wohl irgend eine andere Möglichkeit bieten ein 
Programm ggf. als Hintergrunddienst zu starten. Dein PHP-Script kannst 
du ja auch direkt mit PHP ausführen - nicht nur über den Webserver.

Sascha

von Dirk K. (merciless)


Lesenswert?

Zm Neuladen des Scriptes folgenden Header im HTML einfügen
1
<meta http-equiv="refresh" content="1">
("1" ist die Anzahl der Sekunden nach der der Browser die Seite
automatisch neu lädt).

merciless

von Dirk F. (dirkf)


Lesenswert?

Hallo zusammen,
also Danke für die Anregungen.

Sascha W. schrieb:
> Also du willst jetzt dein Script per Browser aufrufen und damit die
> Endlosschleife starten?

Ja, so mache ich es. Funktioniert gut:


Set_Time_Limit(0);
while (file_exists('run.me')) {
//Daten holen
// In Datei "aktuelles-Datum.csv" hinzufügen
$handle = fopen(date("Y_m_d") . "_data.csv", "a") or die ("File 
operation unsuccessful");
fwrite($handle, $Aussentemperatur . ";");
fclose($handle);
Sleep(60);
}

Zum Starten im Browser das .PHP script aufrufen.
Die Datei "run.me" muss vorhanden sein.
Danach kann der Browser geschlossen werden, das Skript läuft auf der NAS 
weiter.
Jede Minute werden Daten der aktuellen Datei hinzugefügt.
An jedem Tag wird eine neue .csv Datei erzeugt.
Zum Abbrechen des Skripts die Date "run.me" umbenennen.
Die CPU Last der NAS Synology geht nicht hoch.

Gruß Dirk

von quotendepp (Gast)


Lesenswert?

hmm, irgendwie bekomme ich bei solchen verrenkungen bauchschmerzen.

laut https://www.synology-wiki.de/index.php/Cron unterstützen (zumindest 
einige der) synology nas cron. und das wäre eine gscheide methode, um 
die abfrage der daten vom sensor und den eintrag in die db vorzunehmen.
ich würde dann eine webseite erstellen, die die daten periodisch per 
ajax call aus der db abholt und nur den graph aktualisiert.
oder mit influx und grafana herumspielen.

von Dirk F (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
zum Schluß  naocheinam Danke an alle für die Hinweise.
CRON und Ajax bin ich nicht fit drin.
Mit der jetzigen Lösung kann ich aber gut leben.
Als Anlage mal ein Aktueller Chart vom heutigen Tag.

Werde jetzt mal in einem Heizungsforum nachfrgen, ob die Schwankungen 
der Vorlauf-Solltemperatur normal ist.
Gruß

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Na gugg. Die einfachsten Lösungen sind manchmal gar nicht so schlecht, 
schaut ja ziemlich konsistent aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.