Heizungstemperaturen erfassen und visualisieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Abend!

    Ich bin was den Raspi angeht noch absoluter Anfänger – aber stets bemüht zu lernen [font="Wingdings"]J[/font]

    Ich möchte mit einem Pi 3 und fünf DS18B20 folgendes Projekt verwirklichen:

    • Zwei Sensoren sollen die Vor- und Rücklauftemperaturen einer Fußbodenheizung erfassen (Heizkreis 1).
    • Zwei Sensoren sollen die Vor- und Rücklauftemperaturen von normalen Heizkörpern erfassen (Heizkreis 2).
    • Ein Sensor soll die Außentemperatur erfassen.
    • Die Sensoren sollen alle 5 Minuten die Daten in eine Datenbank schreiben.
    • Aus den Daten sollen zwei Diagramme über eine Webseite abgerufen werden können; ein Diagramm für Heizkreis 1 mit Außentemperatur, ein Diagramm für Heizkreis 2 mit Außentemperatur.
    • Es sollen Diagramme für feste Zeitäume (1, 2, 4, 8, 10, 12, und 24 Stunden) generiert werden können, aber auch für einen bestimmten Monat, ein ganzes Jahr oder für einen frei wählbaren Zeitraum. Statt der eingangs erwähnten festen Zeitäume, würde ich aber auch hier eine freie Auswahl von 1 bis 24 Stunden schön finden.


    Ich bin mit meinen ersten Gehversuchen immerhin schon so weit gekommen, dass ich alle fünf Sensoren abfragen kann. Ich habe auch PHP und MySQL aufgesetzt und eine Datenbank angelegt. Aber nun bin ich mit meinem Latein am Ende.

    Ich hatte schon arge Probleme, die Sensoren abzufragen, denn dies versuchte ich gemäß dieses Videos per:
    [font="Arial"]

    Code
    cat /sys/bus/w1/devices/

    [/font]

    Ich erhielt aber immer den Hinweis:
    [font="Arial"]cat /sys/bus/w1/devices/: ist ein Verzeichnis[/font]
    [font="Arial"] [/font]
    [font="Arial"]Nach langer Suche fand ich dann den Grund – ich musste erst per cd in das Verzeichnis wechseln. Der Code sah also so aus:[/font]
    [font="Arial"]

    Code
    cd /sys/bus/w1/devices/

    [/font]
    [font="Arial"] [/font]
    [font="Arial"]Mit

    Code
    ls

    konnte ich dann die ID des Sensors ermitteln. Die Temperaturabfrage erfolgte dann per:

    Code
    cd %Sensor_ID%

    [/font]
    [font="Arial"] [/font]
    [font="Arial"]Es gibt zwei weitere Videos von ITTV für die Einrichtung von PHP und MySQL und das Schreiben der Temperaturen in eine Datenbank und deren grafische Darstellung. Das habe ich soweit auch alles gemacht, aber ich hänge jetzt beim Schreiben der Daten in die Datenbank.[/font]
    [font="Arial"] [/font]
    [font="Arial"]Laut Video soll der Code zum Schreiben der Daten in die DB per php Datei wie folgt aussehen:[/font]
    [font="Arial"]

    PHP
    $temperatureSensorPath = "/sys/bus/w1/devices/Sensor_ID/w1_slave/[/php][/font][/size][/color][color=#333333][size=12][font="Arial"] [/font][/size][/color][color=#333333][size=12][font="Arial"]Wenn ich dies mit folgendem Befehl teste:[/font][/size][/color][color=#333333][size=12][font="Arial"][code]php –f /home/pi/getTemp-php

    [/font][/size][/color]
    [font="Arial"] [/font]
    [font="Arial"]erhalte ich aber eine Fehlermeldung. Die Meldung ist sehr lang und ich finde leider keine Möglichkeit diese zu kopieren - deswegen nur ein Aus[/font][font="Arial"]zug:[/font]
    [font="Arial"]No such file or directory in /home/pi/getTemp.php on Line 16 und Invalid arguments passed on [font="Arial"]/home/pi/getT[/font][font="Arial"]emp.php on Line 16[/font][/font]

    [font="Arial"][font="Arial"]Da die Abfrage der Temperatur schon nicht wie in den Video beschrieben klappte, stimmt nun sicher auch der PHP-Code nicht. Ich weiß aber nicht, wie ich ihn ändern muss. [/font][/font]

    [font="Arial"][font="Arial"]Ich bin für jede Hilfe dankbar  :danke_ATDE: Jetzt geh ich erstmal ins Bett :sleepy: und hoffe, dass ich mit Eurer Hilfe morgen wieder einen Schritt weiter komme :) [/font][/font]

  • FAQ => Nützliche Links / Linksammlung => HighCharts
    Davon empfehle ich die Python Variante, weil du dann komplett auf apache2 und php verzichten kannst.
    Da findest du auch Scripts zum erfassen der Sensorwerte und speichern in eine Datenbank.

  • Hallo betacarve,

    ich hatte vor einiger Zeit mal eim änliches Projekt zur Temperaturmessung/ -Darstellung per 1-Wire.
    Mein Ansatz war jedoch möglichst auf verfügbare Standardhardware/-software zurück vzugreifen (auch wegen meiner rudimetären Programmierkentnisse :( ).

    Meine Lösung:

    1-Wire Extension über I2C mit RPI2- Hardware und OWFS (1-Wire File System) Software
    z.B. schau mal hier: http://www.nikolaus-lueneburg.de/2013/08/1-wire…n-raspberry-pi/
    oder hier: https://www.fischer-net.de/hausautomation…nux-teil-2.html
    oder ....

    Erfassung und Darstellung der Meßwerte mit Hilfe des Monitoring-Tool: Munin mit eigenen Plugins für Deine Temperarturmessung.
    Munin enhält schon die Datenbank, einen Web-Server, standardmäßig Darstellungen zum Tages-, Wochen-, Monats, Jahresvelauf und eine Zoom-Funktion nach eigenen Parametern.
    hier die offizielle Seite: http://munin-monitoring.org/
    oder hier: http://www.chrisge.org/blog/2012-04-1…iii_munin_fazit
    oder ...


    Gruß
    Hardy

    Einmal editiert, zuletzt von Hardy.4711 (1. Februar 2017 um 18:45)

  • Ist doch ein super Projekt. Der richtige Code zum Auslesen eines Sensors waere aber:

    Code
    cat /sys/bus/w1/devices/10-0008032a3da6/w1_slave


    Dabei muss 10-0008032a3da6 die ID Deines Sensors sein.

    Ob man unbedingt eine Datenbank verwenden muss, ist Geschmacksache. Ich schreibe Die Daten immer in ein einfaches Textfile. Jeden Tag wird ein neues File angelegt. Die grafische Darstellung kann man dann einfach mit gnuplot machen.

    Einmal editiert, zuletzt von wend (1. Februar 2017 um 19:03)

    • Zwei Sensoren sollen die Vor- und Rücklauftemperaturen einer Fußbodenheizung erfassen (Heizkreis 1).
    • Zwei Sensoren sollen die Vor- und Rücklauftemperaturen von normalen Heizkörpern erfassen (Heizkreis 2).
    • Ein Sensor soll die Außentemperatur erfassen.
    • Die Sensoren sollen alle 5 Minuten die Daten in eine Datenbank schreiben.
    • Aus den Daten sollen zwei Diagramme über eine Webseite abgerufen werden können; ein Diagramm für Heizkreis 1 mit Außentemperatur, ein Diagramm für Heizkreis 2 mit Außentemperatur.
    • Es sollen Diagramme für feste Zeitäume (1, 2, 4, 8, 10, 12, und 24 Stunden) generiert werden können, aber auch für einen bestimmten Monat, ein ganzes Jahr oder für einen frei wählbaren Zeitraum. Statt der eingangs erwähnten festen Zeitäume, würde ich aber auch hier eine freie Auswahl von 1 bis 24 Stunden schön finden.

    Ich will es mal so schreiben:

    Eine gute Darstellung von Messdaten in den meisten Fällen das Hauptproblem bei der Realisierung:

    • Die Daten sollen vollständig dargestellt werden, möglichst in "Echtzeit"
    • Ansicht soll einfach und verständlich sein, damit u.U. auch Unerfahrene damit klar kommen (WAF)
    • Ansicht soll ausreichend groß und klar definiert sein, damit wesentliche Daten schnell erkannt werden können
    • Ansicht sollte flexibel sein, damit man sie auch auf anderen Endgeräten als einen PC sichten kann (z.B. Handy, Tablett...)
    • Zeitbereiche sollten einstellbar sein, um zum einen einen Überblick zu bekommen, aber auch um sich ggf. Details genauer anzusehen.


    Die meisten Vorschläge kommen mit "einfachen", gescripteten Webseiten in Verbindung mit normalen Datenbanken oder einer Round-Robin-DB.
    Die Darstellung ist meist recht starr und unflexibel oder benötigt einen erheblichen Programmieraufwand, um einer ausreichende Flexibilität zu erreichen: Die meisten geben sich daher dann mit den "einfachen" Darstellungen zufrieden.

    Ich habe ja selber einiges durchprobiert, letztlich haben mich diese Frameworks nicht sonderlich befriedet...

    Seit ca. 3 Wochen habe ich mich auf etwas neues eingelassen: Grafana in Verbindung mit der "time-based" Datenbank Influx.
    Diese Kombination ist innerhalb weniger Minuten installiert und läuft quasi "von scratch", es müssen "nur" noch die Daten in die DB gepumpt werden:
    Das kann man per bash-Commandozeile (wget/curl) oder auch aus Python oder einer anderen Programmiersprache heraus machen.

    Heraus kommt dann sowas [link], wobei die Darstellung in sehr weiten Grenzen variable ist (ich nutze kaum geschätzte 20-30% der Möglichkeiten)

    Zur Zeit läuft eine Realisierung auf einem "vollwertigem" Ubuntu, ist jedoch auch auf einem RasPi 3 installierbar - performancetechnisch dürfte das für eine Heimanwendung mit 2-4 User vollkommen geschmeidig laufen.

    Wenn benötigt, kann ich dir da auch Support anbieten...

  • Guten Morgen alle miteinander,

    vielen Dank erstmal für Eure Tipps und Anregungen!!!

    Die Lösung von Zentrist gefällt mir sehr gut - wenn es auch optisch etwas arg bunt ist. Aber das ist sicher Einstellungssache ;)

    @ Zentris
    Ich werde bald auf Deinen Vorschlag bzgl. der Unterstützung zurückkommen :D Leider muss ich dieses Projekt jetzt erstmal hinten anstellen, denn der Raspi muss nun erstmal für was wichtigeres herhalten; das Monitoren meines Internetzugangs, denn hier gibt es seit Monaten Probleme und ich möchte/muss dies nun dokumentieren, um Druck auf den Provider ausüben zu können.

    Sobald dieses "Projekt" abgeschlossen ist, werde ich mich wieder dem eigentlichen Thema hier widmen. Bis dahin nochmals vielen Dank für Eure Unterstützung zu diesem Thema hier :danke_ATDE:

  • Die Influx-Dokumentation ist, sag ich's mal so, gewöhnungsbedürftig... :lol:

    MySQL/MariaDB/SQLite (und die meisten anderen "normalen" DBs) sind alles keine Datenbanken, die so ohne weiteres mit Grafana zusammenspielen:

    Grafana benötigt offenbar für die schnelle Darstellung so was wie eine "time based" - DB... also wo die Daten speziell nach den Zeitstempeln indexiert sind und weiteren Auswahlkriterien selektieren/abfragen kann und wo Zeit/Datencluster gebildet werden können.

    Zur Ankopplung einer "normalen" DB benötigt man ein Interface (API), welches die von Grafana angeforderten Daten entsprechend holt und gruppiert.
    Ich wollte ursprünglich eine mySQL-DB nutzen, weil ich die sowieso schon da habe, aber alles, was ich da gefunden hatte (und das war nicht viel) sah eher nach Gefrickel und Beta-Status aus.
    Selber was programmieren wollte ich mir nicht antun :no_sad: , also hab ich dann die Influx-DB verwendet.

    Welche Probleme hast du denn mit der Influx-DB, vielleicht kann ich dir da helfen?

    Ich schiebe meine Daten per HTTP-REST-API über Python in die InfluxDB, von der Performance her ist das ok, max. ca. 300-400 DS/sec krieg ich rein, ist für Massendatenimport also etwas langsam... muss man Zeit mitbringen... geht aber.

  • Da ich die InfluxDB noch nicht nutze wollte ich vorab mal nachfragen.
    Ich nutze momentan eine SQLite Datenbank und meine DS18b20 Sensoren da einzutragen.

    Da ich aber Optisch von Grafana so begeistert bin wollte ich wissen ob es geht die SQLite zu verwenden. Da steht mein Python-Gerüst schon und befüllt auch fleißig.
    Ob die Struktur von meiner DB stimmt oder nicht sei mal dahingestellt ;)

    Dann werde ich mal wohl oder übel einen Blick in die Influx DB werfen müssen.

    Massendaten kommen bei mir auch nicht in Frage.
    Ich habe momentan 8 Sensoren und diese Frage ich jede 15 Min ab.

    Es soll aber jetzt für eine weitere Heizung nochmal ca 10 Stück hinzukommen.
    Von daher sehe ich meine Menge die da zusammen kommt nicht als Problem.

    Auch wenn sich wegen der DB das Intervall verkürzen würde (auf eine Abfrage / Minute) sehe ich auch noch keine wirklichen bedenken.

  • Bei mir liegen zur Zeit ca. 1,2 Mio Messdatensätze von insgesamt 14 Sensoren in jeweils einer MySQL DB... (doppelt aufgesetzt aus Redundanzgründen, weil ich 2 voneinander unabhängige DBs auf verschiedener Hardware laufen habe - das soll sich demnächst noch ändern, dann sollen die beiden DBs gekoppelt (Master/Master) werden).

    Die Datencollektoren, also die RasPis bzw. ESPs, die die Sensoren abfragen, senden ihre Sensordaten jeweils in die beiden MySQL-DBs und zusätzlich in die Influx-DB.
    Weiterhin gibt es ein kleines Programm, welches eine der MySQL-DBs periodisch nach neuen Datensätzen für bestimmte Sensoren abfragt und diese dann auch in die Influx-DB schreibt (Weil diese speziellen Datensätze nicht direkt in die Influx-DB geschrieben werden - da müsste ich nochmal an den Code... - schaff ich gerade nicht...).
     
    SQLite ... :s ich bin da nicht sonderlich von überzeugt... ist mir zu eingeschränkt... und macht Probleme beim gleichzeitigen Schreiben/Lesen...
    Automatisch zusammengefügt:
    ..
    ..
    ..


    Aus http://docs.grafana.org/installation/configuration/

    Code
    ..
    type
    
    
    Either mysql, postgres or sqlite3, it’s your choice.

    Hatte ich auch gesehen, als ich (damals) meine Sensordaten reingepumpt hatte, wurde das Ganze recht "zäh"..., vor allem, wenn neue Daten reingekommen sind und eine Abfrage lief.

    Influx baut im Hintergrund einen recht komplexen Time-based Indexbaum auf, welcher recht flott unterwegs ist...
    (Wer will, kann ja in meiner Grafana-Ansicht mal auf 3 oder 6 Monats-Ansicht schalten (mehr sind in der öffentlich sichtbaren View nicht drin)... da werden dann je nach Dashboard bis zu ca. 250.000 Datensätze (über den Daumen) gefiltert und ausgeliefert.

    Durch meine langsame Internetanbindung (3MBit Upload) erscheint dann die Darstellung allerdings langsamer als sie wirklich ist :lol:

  • Hallo Zusammen,

    momentan bin ich wieder soweit, dass ich meine Daten grafisch Darstellen möchte und habe mich nochmal etwas mit Grafana beschäftigt.

    Ich denke ich muss wie Zentris vor langer Zeit mal geschrieben hat, mit der InfluxDB arbeiten.

    Auch habe ich auf der Grafana Seite nochmal nachgesehen und folgendes bezüglich der Aussage von @Ilutz gelesen:

    Code
    [database]
    Grafana needs a database to store users and dashboards (and other things). By default it is configured to use sqlite3 which is an embedded database (included in the main Grafana binary).

    Daher denke ich ist es nicht möglich SQLite3 zu verwenden.

    Auch über Google findest man relativ wenig bezüglich der "Datenbank" in Bezug auf Grafana.

    Jetzt eine konkrete Frage:

    Da ich verschiedene DS18B20 und auch Daten über eine HTML Seite abfrage und bereits in eine SQLite3 eintrage, würde ich gerne wissen, ob es möglich ist, einen "select" aus der SQLite3 zu machen und in die InfluxDB einzutragen?

    Das ganze soll bei mir auf einem Pi3 laufen. Geschwindigkeit spielt bei mir keine Rolle. Es werden alle 15 Min die Sensoren in die DB eingetragen und die Aufrufe der Grafen halten sich auch in Grenzen.

    Danke

  • Da ich verschiedene DS18B20 und auch Daten über eine HTML Seite abfrage und bereits in eine SQLite3 eintrage, würde ich gerne wissen, ob es möglich ist, einen "select" aus der SQLite3 zu machen und in die InfluxDB einzutragen?

    Warum sollte das nicht gehen?

    Du holst Datensatz für Datensatz aus der SQLite-DB und schreibst den (ggf. nach Umkonvertierung** der Daten per HTTP-REST Interface in die Influx DB.

    **) Es ist zu empfehlen, numerische Werte auch als numerische Werte in die Influx DB zu schreiben (Ich hatte ganz am Anfang da mal nicht drüber nachgedacht und die Werte als String geschrieben - Als Folge lassen sich dann bestimmte Funktionen in Grafana nicht nutzen (Median usw.)).

  • Ich würde die SQLite3 DB zudem nicht abschaffen wollen.

    Habe hier auch einige andere Sachen laufen. Z.b. Abfragen aus der DB und per Telegram verschicken, dass ich die Daten so immer dabei habe.

    Plan wäre es, weiterhin in die SQLite DB einzutragen und im nächsten Schritte hier wieder auszulesen und in die InfluxDB einzutragen.

    Schreib/Lese- Technisch ist es kein Problem, da ich eine HDD dran hängen habe. SD kann dadurch nicht kaputt gehen ;)

    Hast du eigentlich komplett auf InfluxDB umgestellt, oder wie handhabst du das?

    Edit: Bestehende Daten brauche ich nicht in der InfluxDB wenn diese ab dem Zeitpunkt X mit neuen Daten befüllt wird würde mir das vollkommen reichen

  • Hast du eigentlich komplett auf InfluxDB umgestellt, oder wie handhabst du das?

    Meine Systeme (Mikrokontroller aka ESP 8266/ 32 und RasPi) senden die erfassten Daten an zwei verschiedene "Datenkonzentrator"en mit je einer MySQL-DB.

    Weiterhin senden die die Systeme ihre Daten an die Influx-DB.

    Manche der Systeme (RasPi) schreiben ihre Daten auch noch in ein File (csv bzw. FHEM-Format), allerdings nur noch aus historischen Gründen, aktuell brauche ich das eigentlich nicht mehr)

    Wenn also die Influx-DB (aus der die Grafana-Visualisierung gespeist wird) ausfällt, macht das nix.

    Ich habe auch schon mal (damals, als ich die oben angesprochenen Fehlformate hatte) die Daten aus einer csv-Datei in die Influx-DB neu eingespielt... sowas dauert dann aber... das HTTP-REST-IF ist nicht so rasend schnell...

  • Dann werde ich mir jetzt mal die InfluxDB doch genauer ansehen und versuchen über Python die Daten parallel in die SQLite und die InfluxDB zu bringen.

    So kann ich bequem mein bisheriges System weiter nutzen und parallel versuchen die InfluxDB mit Grafana aufzubauen.

    Sollte das System mit der InfluxDB bei mir nicht so funktionieren wie ich mir das vorstelle, dann habe ich keinen Ausfall.

  • Danke für deinen Github Link. Leider verstehe ich dein Script nicht ganz.

    Hätte mir das ganze aber auch etwas leichter vorgestellt. Dachte da eher an ein Insert into wie man es von SQLite usw. kennt.

    Code
    "INSERT INTO temperatur VALUES ((NULL),?,?)", (uhrzeit,temp,);

    Das sollte doch auch bei InfluxDB möglich sein.

    Bin mit Python (noch) nicht so bewandert. Aber fürs erste ist mir das leider doch zuviel.

    Es sollten bei mir eigentlich nur ein paar DS18B20 Sensoren eingetragen werden, damit ich meine Heizung im Blick habe. Das ganze hätte ich mir mit einer Tabelle vorgestellt.

    Aus Grafana wie ich das sehe, kann man ein SELECTeinfach auf die Daten setzen die benötigt werden.

  • Hallo,

    für meine Wetterdaten verwende ich zur Visualisierung auch Grafana.

    Bei uns läuft aber aktuell der Umstieg von InfluxDB zu PostgreSQL mit Timescale.

    Grund, uns fehlten einfach ein paar Funtionen zur Auslesung der Daten.

    Servus,

    hab den Beitrag irgendwie komplett überlesen.

    Kannst du mir eine Funktion sagen, die dir zb. fehlt?

    Ich denke mit meinen "simplen" Heizungsabfrage sollte ich mit InfluxDB keine Probleme bekommen?

    Natürlich muss ich es erstmal zum laufen bekommen ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!