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
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.
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
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.
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...
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.
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...
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.
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.
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....
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.
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 ?
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.
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ß
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
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.
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
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
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.
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ß