ETA: Anleitung: Datenaufzeichnung an ETA Heizkessel mit RaspberryPI und Cacti

    Du hast Probleme beim Login? Schreibe uns im Forum "Probleme mit der Registrierung".

      • 1

      • # 166312

      ETA: Anleitung: Datenaufzeichnung an ETA Heizkessel mit RaspberryPI und Cacti

      Hallo zusammen,
      ich habe mir eine Datenaufzeichnung für meinen ETA eHack gebastelt und stell hier mal die Anleitung dazu rein falls es jemand nachbauen möchte.

      Als erstes müssen die Webservices aktiviert werden. Dazu erst auf meineta.at unter Einstellungen > Webservices freischalten und dann am Kessel unter Systemeinstellungen > Internet & Schnittstellen > meinETA Zugang auf Webservices aktivieren.

      Bei mir hat der Kessel die IP-Adresse 192.168.179.100 daher ist überall diese eingetragen. Wenn ihr das nachbauen möchtet bitte entsprechend ändern.

      Bei aktivierten Webservices sind unter dieser Adresse view-source:192.168.179.100:8080/user/menu alle Variablen zu sehen.
      z.B. Puffer Oben hat die Variable /120/10251/0/0/12242

      Dieser Wert kann nun abgefragt werden mit 192.168.179.100:8080/user/var//120/10251/0/0/12242

      Nun geht's an die Installation von Cacti.

      Source Code

      1. sudo apt-get install cacti

      Alle notwendigen Abhängigkeiten sollten automatisch mit installiert werden.

      Bei mir läuft ein Apache-Webserver bereits auf dem PI daher befindet sich Cacti nach der Installation unter /var/www/html/cacti
      Dort werden nun im Ordner /scripts/custom die Abfragescripts angelegt.

      Source Code

      1. cd /var/www/html/cacti/scripts/custom
      2. sudo nano puffer.sh


      Dort wird dann folgender Code eingefügt: (IP-Adresse vom Kessel anpassen!)
      Danke an den User Oliver Modebach vom Haustechnikdialog für das Script.

      Shell-Script

      1. #!/bin/bash
      2. array[1]="/120/10251/0/0/12242"
      3. array[2]="/120/10251/0/0/12522"
      4. array[3]="/120/10251/0/0/12244"
      5. array[4]="/24/10561/0/0/13957"
      6. text[1]="oben"
      7. text[2]="mitte"
      8. text[3]="unten"
      9. text[4]="leistung"
      10. # Werte auslesen
      11. for (( c=1; c<=4; c++ ))
      12. do
      13. wert[$c]=$(wget -q 192.168.179.100:8080/user/var/${array[$c]} -O - | grep ">*<value" | cut -d ' ' -f 5 | cut -d '"' -f 2)
      14. data=$(echo -e -n "${data}${text[$c]}:${wert[$c]} " | sed 's/','/'.'/g')
      15. done
      16. echo $data
      Show All

      Nach dem abspeichern die Datei ausführbar machen mit:

      Source Code

      1. chmod +x puffer.sh

      Nun kann man die Ausgabe bereits testen mit:

      Source Code

      1. ./puffer.sh

      Nun sollte eine ähnliche Ausgabe kommen:

      oben:72 mitte:72 unten:54 leistung:0.0


      Nun gehts ins Cacti-Webinterface.

      Dort bei Data Input Methods eine neue Inputmethode anlegen und die im Script gewählten Textfelder unter Output Fields anlegen:

      dim.PNG


      Danach auf Data Sources und dort auch neu anlegen.

      Das Feld Data Source Path leer lassen, das wird automatisch ausgefüllt.

      Unten Rechts auf New wieder alle Felder die vorher bei Output Fields angelegt wurden neu erstellen.

      ds.PNG

      Nun werden alle Werte schon mal aufgezeichnet und jetzt kann bei Graph Management ein neuer Graph erstellt werden:
      gm.PNG

      Natürlich könnte man in diesem einen Script viel mehr Werte als nur 4 Stück abfragen lassen. Ich persönlich habe allerdings für andere Werte lieber ein neues Script angelegt.

      verbrennung.PNG

      Ich hoffe es hilft dem ein oder anderen der ebenfalls solche Spielereien liebt. ;)Anleitung: Datenaufzeichnung an ETA Heizkessel mit RaspberryPI und Cacti
      • 2

      • # 166347

      ETA: Anleitung: Datenaufzeichnung an ETA Heizkessel mit RaspberryPI und Cacti

      Hallo Schieder,

      sehr schöne Anleitung.

      Wieder etwas dazu gelernt, ich dachte bisher Cacti würde nur bereits gespeicherte Werte grafisch aufarbeiten.

      Danke.

      Gruß
      Alex

      Gesendet von meinem CLT-L09 mit Tapatalk
      • 3

      • # 169724
      Ich häng mich auch mal dran und ergänze die Auswertung über Grafana (Visualisierung), influxDB (Datenbank) oder alternativ auch über ioBroker in influxDB sowie Node-Red (abgreifen und aufbereiten der Daten)

      Node-Red
      • Periodisches abholen der Daten [Zeitabstände individuell einstellbar]
      • Definition welche Daten geholt werden sollen - Das Menü dazu findet ihr unter:

        HTML Source Code

        1. http://<eure.ETA.IP.Adresse>//user/menu

      • Konvertierung vom Format String in XML
      • Finden des reinen Übergabewertes
      • Ausgabe direkt in influxDB oder als Wert in ioBroker
      • Meinen Node unter Verwendung von iobroker findet ihr im Anhang
      ioBroker
      • Hierüber können die aus Node-Red übergebenen zu protokollierenden Objekte aktiviert werden. Hierzu wird der Node-Red- sowie influxDB-Adapter benötigt
      • Dabei kann eingestellt werden ob die Werte nur bei Änderungen und/oder zusätzlich nach einer bestimmten Zeitspanne geloggt werden sollen
      • Eine Alias-ID als Alternativname zum besseren Verständnis, sowie die Storage-Zeit in der Datenbank können hier einfach definiert werden
      influxDB
      • Die Datenbank muss einmalig installiert und eingerichtet werden
      • alle weiteren Definitionen erfolgen dann über ioBroker und den influxDB-Adapter
      Grafana
      • Hierauf gehe ich in diesem Thread nicht weiter ein - die Möglichkeiten an Visualisierungen und Auswertungen sind hier so vielfältig dass dies den Umfang sprengen würde.
      • Alle definierten Variablen können hier verwendet und in Diagrammen und weiteren Auswertungsarten visualisiert werden
      • Im Anhang auch dazu ein Screenshot


      Für Rückfragen stehe ich gerne zur Verfügung, jedoch insbesondere zur Einbindung der Kessel und deren Auswertung. Zu den allgemeinen Themen ioBroker, influxDB, Node-Red und Grafana gibt es im Netz genug gute Tutorials und spezialisierte Foren!
      Files
      • 4

      • # 169744
      Hi!

      Ich habe das ähnlich gelöst mit NodeRed und EmonCMS, allerdings lese ich mittels ModbusTCP aus.
      Nur so als Randkommentar ;)

      Grüße,
      Patrick
      ETA SH-20
      Buderus GB125
      6qm FK-Solarthermie
      1000l Hygienespeicher mit 2x Solar
      1000l Speicher nackt seriell dahinter
      • 5

      • # 169787
      Bedient ihr den Kessel auch über eure Lösung, oder nutzt ihr das nur zum visulalisieren?
      ETA SH30 Touch Automatik
      3300L Pufferspeicher
      600L ADG
      ETA Frischwassermodul
      Fendt 102S
      Rückewagen FK 4200
      Vogesenblitz VP12 mit Seilwinde
      Scheifele STK 700
      Husqvarna 545 & 576XP & kleine Dolmar
      Diversen Kleinkram
      • 6

      • # 169790
      Da ich einen Hackgutkessel habe benutz ich das nur zum Visualisieren. Theoretisch könnte man über die Schnittstelle auch alle Parameter verändern, aber wie gesagt ist mein Kessel einmal eingestellt und ich muss nichts daran verändern.

      Aber anscheinend ist der Bedarf einer Visualisierung da. Schade dass ETA nicht direkt in der Touch Steuerung eine Visualisierung ausgewählter Parameter anbietet. So lässt sich ein abbrand wesentlich besser überwachen.
      • 7

      • # 169801
      Nicht nur theoretisch... es funktioniert wunderbar.
      ETA SH30 Touch Automatik
      3300L Pufferspeicher
      600L ADG
      ETA Frischwassermodul
      Fendt 102S
      Rückewagen FK 4200
      Vogesenblitz VP12 mit Seilwinde
      Scheifele STK 700
      Husqvarna 545 & 576XP & kleine Dolmar
      Diversen Kleinkram
      • 9

      • # 169971
      Hauptsächlich um schnell zwischen Automatikbetrieb und Absenken schalten zu können. Und der Raumfühler wird automatisch deaktiviert, solange der Kachelofen brennt.
      ETA SH30 Touch Automatik
      3300L Pufferspeicher
      600L ADG
      ETA Frischwassermodul
      Fendt 102S
      Rückewagen FK 4200
      Vogesenblitz VP12 mit Seilwinde
      Scheifele STK 700
      Husqvarna 545 & 576XP & kleine Dolmar
      Diversen Kleinkram
      • 11

      • # 171448
      Hey
      Ist ein interessantes Thema. Danke gut beschrieben! Nur eine Frage,
      welches Betriebssystem ist installiert
      wo erhalte ich Apache-Webserver und Cacti,open soure?

      Danke
      • 12

      • # 171455
      Hi,
      als Betriebssystem ist bei mir "Raspbian" installiert und da ich den Raspberry eigentlich mit "pi-hole" als Werbeblocker einsetze hab ich den Apache schon vorinstalliert.


      Ansonsten ist Apache und Cacti natürlich kostenlos erhältlich über

      Source Code

      1. apt-get install apache cacti
      • 13

      • # 171916
      Hallo schieder,
      vielen Dank für Deine tolle Anleitung. Habe mit Hilfe Deiner Anleitung eine Datenaufzeichnung für meine ETA PU15 Pelletheizung erstellt. Musste nur das Script an die etwas andere Datenstruktur anpassen.

      Vielen Dank
      • 15

      • # 173403
      die ganzen Tools sollte man kennen, ich dab das damals alles "manuell" programmiert. :)

      Eigentlich war mein Ziel, das auch noch mit dem Wetterbericht zu kombinieren und der aktuellen Temperatur und dann automatisch auszurechnen, wann er heizen soll. Aber diese aktive Steuerung der Zeiten wurde nie realisiert.

      Falls jemand die Scripts will, gerne, aber so über Cacti sieht es viel einfacher aus...
      • 18

      • # 176481
      Hallo in die Runde,

      ich habe seit kurzem auch einen ETA Pelletsheizung und möchte mir jetzt auch ein paar Daten auslesen und abspeichern.


      ich habe den Screenshot im Beitrag vom vorgänger (andreasploetz) gesehen.
      was für ein Tool ist das? oder bekommt man mit Cacti so eine GUI hin?


      hoffe ich Frage nicht zu blöd, bin da aber eher ein Neuling
      Werte auslesen habe ich schon (Lagerstand, Außentemperatur, ...)
      (http://<IP-address>:8080/user/var//40/10201/0/0/12015) jetzt
      würde ich die einfach in einer GUI, wie du der sie hat, anzeigen lassen.
      kann natürlich auch sein, dass die GUI selber in C# oder VBA gemacht wurde

      ich habe zusätzlich eine Synology NAS, auf der Tomcat installiert ist


      danke
      Andreas
      • 19

      • # 176564
      Hi,
      hat schon jemand die Außentemperatur mit Grafana hinbekommen ?
      Wird nähmlich als string in der Datenbank abgelegt.
      Bei mir will die einfach nicht, ebenfalls der Restsauerstoff, ich denke das es an den Kommazahlen liegt

      grüße Rainer
      • 20

      • # 176758
      Hallo in die Runde,

      ich habe jetzt mal eine PHP script (mit hilfe von Frank aus einem anderem Forum), wo ich den Vorrat auslesen und in eine DB schreiben kann, ohne spezille Programme:
      erweitern kann man das dann jederzeit

      PHP Source Code

      1. <?php
      2. /* *******************************************
      3. Skript: Definition und Auslesen von Werten
      4. aus einer ETA Heizung
      5. ******************************************* */
      6. header('Content-Type: text/html; charset=utf-8');
      7. // Heizungsanlage ETA
      8. $ETAprotocol = 'http';
      9. $ETAserver = '<ip-address>';
      10. $ETAport = '8080';
      11. // Zu lesende Werte
      12. $userVars = [
      13. '/40/10201/0/0/12015'
      14. ];
      15. // Öffne Verbindung zur Heizung
      16. $eta = curl_init();
      17. // Fange Ergebnis in Variable ab
      18. curl_setopt($eta, CURLOPT_RETURNTRANSFER, TRUE);
      19. // Auslesen der Menüstrutkur um die Bezeichnung der URI zu holen
      20. curl_setopt($eta, CURLOPT_URL, $ETAprotocol.'://'.$ETAserver.':'.$ETAport.'/user/menu');
      21. $_output = curl_exec($eta);
      22. $_info = curl_getinfo($eta);
      23. // Speichern der XML Menüstruktur
      24. $menuXml = $_output;
      25. // Erzeugen eines DOM von Menü
      26. $menu = new DOMDocument();
      27. $menu -> loadXML($menuXml);
      28. $menuDom = new DOMXPath($menu);
      29. $menuDom -> registerNamespace('eta', 'http://www.eta.co.at/rest/v1');
      30. foreach($userVars as $userVar) {
      31. // Auslesen jeder einzelenen Variable
      32. curl_setopt($eta, CURLOPT_URL, $ETAprotocol.'://'.$ETAserver.':'.$ETAport.'/user/var'.$userVar);
      33. $_output = curl_exec($eta);
      34. $_info = curl_getinfo($eta);
      35. // Speichern der abgefragten Werte der Benutzervariable
      36. $varXml = $_output;
      37. // Erzeugen eines DOM der Benutzervariable
      38. $var = new DOMDocument();
      39. $var -> loadXML($varXml);
      40. $varDom = new DOMXPath($var);
      41. $varDom -> registerNamespace('eta', 'http://www.eta.co.at/rest/v1');
      42. // Beginne Handling der Abfrage
      43. // Beschreibung aus Menü
      44. $menuDescs = $menuDom->query('//eta:object[@uri="'.$userVar.'"]');
      45. $name = '';
      46. foreach ($menuDescs as $menuDesc)
      47. $name = $menuDesc->getAttribute('name');
      48. echo "<p>$name</p>";
      49. // Wert und Einheit aus den Variablen auslesen ($varDom)
      50. $menuVars = $varDom->query('//eta:value[@uri="/user/var'.$userVar.'"]');
      51. $menge = '';
      52. foreach ($menuVars as $menuVar)
      53. $menge = trim($menuVar->getAttribute('strValue'));
      54. echo "<p>$menge</p>";
      55. // Wert und Einheit aus den Variablen auslesen ($varDom)
      56. $menuVars = $varDom->query('//eta:value[@uri="/user/var'.$userVar.'"]');
      57. $einheit = '';
      58. foreach ($menuVars as $menuVar)
      59. $einheit = trim($menuVar->getAttribute('unit'));
      60. echo "<p>$einheit</p>";
      61. }
      62. // Sende an mySQL...
      63. error_reporting(E_ALL);
      64. ini_set('display_errors', true);
      65. // Zugangsdaten zur Datenbank
      66. $host = "<ip-address>:<port>"; // Host-Adresse
      67. $database = "<DBName>"; // Datenbankname
      68. $user = "<User>"; // Benutzername
      69. $password = "<password>"; // Passwort
      70. $connection = new mysqli($host, $user, $password, $database);
      71. $connection->set_charset("utf8mb4");
      72. if ($connection->connect_error)
      73. {
      74. die("Connection failed: " . $connection->connect_error);
      75. echo "<p>connection failed</p>";
      76. }
      77. $debug = false;
      78. //Grunddaten in Datenbank schreiben
      79. $sqlQuery = "INSERT INTO eta
      80. (NAME, MENGE, EINHEIT)
      81. VALUES ('" . $name . "', '" . $menge . "', '" . $einheit . "')";
      82. echo "<table border='1'>";
      83. if ($connection->query($sqlQuery) === TRUE)
      84. {
      85. echo "<p>Die Übertragung Ihrer Daten war erfolgreich. Folgende Daten wurden gespeichert:</p>";
      86. echo "<tr><td>Name: </td><td><b>".$name."</b></td></tr>";
      87. echo "<tr><td>Menge: </td><td><b>".$menge."</b></td></tr>";
      88. echo "<tr><td>Einheit: </td><td><b>".$einheit."</b></td></tr>";
      89. }
      90. else
      91. {
      92. echo "Error: " . $sqlQuery . "<br>" . $connection->error;
      93. echo "Fehler bei der Bearbeitung... ";
      94. }
      95. echo "</table>";
      96. $connection->close();
      97. // Schliesse Verbindung zur Heizung
      98. curl_close($eta);
      99. ?>
      Show All
      • 21

      • # 177867

      New

      Hallo!

      Ich bin neu hier im Forum. Bin eigentlich nur ein stiller Mitleser gewesen. Möchte mir aber auch mit Cacti meinen SH30 auslesen. Wie hast du das Problem mit Cacti (Apache-Server) und Pi-Hole (Lighttpd) gelöst?

      Grüsse aus Niederösterreich
      Emil





      schieder wrote:

      Hi,
      als Betriebssystem ist bei mir "Raspbian" installiert und da ich den Raspberry eigentlich mit "pi-hole" als Werbeblocker einsetze hab ich den Apache schon vorinstalliert.


      Ansonsten ist Apache und Cacti natürlich kostenlos erhältlich über

      Source Code

      1. apt-get install apache cacti
      • 23

      • # 177932

      New

      Hallo Schieder!

      Danke vorerst, aber ich hab ein Problem mit dem Script.
      Ich bin da nicht so bewandert beim Script programmieren. Ich bekomm, wenn ich das Script austesten will immer einen Syntaxerror in Zeile 13 und Zeile 16. Was mach ich für einen Fehler?

      Mfg Emil
      • 24

      • # 177933

      New

      Hallo @Moser80,

      wenn du das Script aus diesem Beitrag meinst, dann musst du in Zeile 13 deine "echte IP-Adresse" eintragen. Der Text <ip-adress> ist nur ein Platzhalter.

      Beispiel einer IP-Adresse:

      PHP Source Code

      1. $ETAserver = '192.168.0.20';

      Ansonsten solltest du das von dir verwendete Script einmal hier veröffentlichen.

      Viele Grüße von Karlheinz :)
      Seit Juni 2011:
      ETA Twin: SH30/P25 "noTouch" (Füllraum 150 Liter)
      Hopf Pelletaustragung: 6x UniWok-Saugsonden (Lager für 6 to)
      Paradigma Pufferspeicher: 2x Aqua Expresso (1090 + 958 Liter; seriell verbunden)
      Paradigma FrischWasserStation
      Paradigma VR-Solarpanel: 2x CPC21 Star Azzurro (10m²; Aqua-System ohne Glykol)
      • 25

      • # 177935

      New

      Hallo Etaminator!

      Ich hab das obere Script für Cacti genommen.
      Das ist mein Script, IP-Adresse hab ich eh geändert, meine arrays hab ich auch geändert. Meine Hardware ist ein Raspi 4 mit Raspbian Lite und Apache2, Pi-Hole, Cacti.
      Hab das sogar bei ShellCheck durchlaufen lassen.

      Vielleich kann mir bei diesem Problem jemand helfen. DANKE

      Emil aus Niederösterreich


      #!/bin/bash
      array[1]="/120/10251/0/11153/0"
      array[2]="/120/10251/0/11053/0"
      array[3]="/120/10251/0/11155/0"
      array[4]="/48/10391/0/11110/0"
      text[1]="oben"
      text[2]="mitte"
      text[3]="unten"
      text[4]="abgas"
      # Werte auslesen
      for ((c=1; c<=4; c++ ))
      do
      wert[$c]=$(wget -q 10.0.0.15:8080/user/var/${array[$c]} -0 - | grep ">*<v$data=$(echo -e -n) "${data}${text[$c]}:${wert[$c]} " | sed 's/','/'.'/g')
      done
      echo $data
      Files
      • ShellCheck.JPG

        (91.51 kB, downloaded 8 times, last: )

    Webutation