ISG web per Skript auslesen

Zuerst einmal mein Eindruck nachdem ich nun seit einigen Wochen das ISG web habe. Was wird einem für 500 EUR geboten? Antwort: beschämend wenig. Wenn ich das Gerät nicht für meine PV benötigen würde, wäre es definitiv herausgeschmissenes Geld. Natürlich bekommt man eine schöne Oberfläche die einfacher zu bedienen ist als das normale WPMW, aber wie oft muss man da ran?

Was man bei einer Heizung einstellen kann habe ich im letzten Artikel beschrieben. Viel ist es nicht was man optimieren kann, dafür reicht das WPMW.

Was bietet es neben einer hübscheren Oberfläche für die Konfiguration noch? Statistik. Dies ist die Stärke als auch die Schwäche des Moduls. Hier ein Bild:

Die einzigen Statistiken die man bekommt sind über Außentemperatur, Heizenergie und Warmwasserenergie.
ABER: Das ISG web speicher nur 7 Tage!!!
Warum? Keine Ahnung, da ein kleiner Webserver auf einer SD-Karte integriert ist sollte es kein Problem sein die Daten in einer Datenbank vorzuhalten.
Ich wermute: Stiebel Eltron will seine Cloud-Anbindung verkaufen. In der günstigsten Version ISG Basis kostet sie 49 EUR im Jahr (Stand 2019).

Die Verbindung muss ich so oder so aufbauen um später das EMI Update für die Anbindung an die Photovoltaik zu bekommen. Der ISG Basis Tarif ist in den ersten 4 Wochen kostenlos zum Testen einrichtbar und wenn man einen Servicevertrag unterschreibt die ersten 2 Jahre kostenlos. Da man nach 2 Jahren kündigen kann habe ich diese Variante gewählt.

Nach dem Ausfüllen und Abschicken des Formulars dauert es ca. 24h bis man den Code für die Cloud bekommt.

Stiebel Eltron Servicewelt

Was erwartet einen dort? Kurzantwort: Nicht viel:

Nach nun ca. 2 Wochen Test sehe ich dort, dass zumindestens einen etwas größeren Verlauf als 7 Tage habe. Den aktuellen und den letzten Monat. Außerdem kann ich die Betriebsart, die Raumtemperatur und Warmwasser bearbeiten. Wow.
Was mir als ITler aufgefallen ist: Man bekommt einen Benutzernamen und Passwort zugeschickt. Das Passwort lässt sich jedoch nicht ändern!

Daher bin ich schnell dazu übergegangen mir zu überlegen: Kann ich mir die Daten aus meinem ISG web nicht selbst auslesen und in einer Datenbank speichern?

Hier mal ein interessanter Link wie man das Modul ausbauen und hacken kann: https://www.loxwiki.eu/pages/viewpage.action?pageId=24840008 Soweit bin ich aber nicht gegangen, da ich keine Garantie verlieren wollte.

ISG web auslesen: Konzept

Folgendes wird benötigt:

  • Eine Fritzbox oder ein Router mit ähnlichen Funktionen
  • Eine Website mit PHP und einer Datenbank (z.B. MySQL)
  • Ein Cronjob (bieten viele Websitehoster an)
  • ISG web Version 10.0.0 ODER ISG web mit EMI Update Version 2.2.0
  • Grundlegende Webentwicklungskenntnisse / PHP Kenntnisse

Folgendermaßen bin ich vorgegangen:
Das ISG web habe ich in der Fritzbox über Fernzugriff frei gegeben. Dabei sollte man beachten, dass man im ISG web unter Profil > Sicherheit einen Passwort geschützten Zugang definiert, ansonsten kann jeder auf die Anlage zugreifen.
Als nächstes muss das Problem gelöst werden wie man eine statisch abrufbare Adresse bekommt, da sich die IP Adresse ja jeden Tag ändert. Dazu gibt es 2 Möglichkeiten:
1. Man legt sich ein MyFritz Konto an. Dort erhält man eine kryptische aber statische Adresse. Die Fritzbox meldet dann täglich die neue IP beim Fritzbox Konto.
2. Man Programmiert sich einen eigenen kleinen DynDNS service mit PHP. Dazu benötigt man nur eine eigene Website auf de man PHP ausführen kann. In der Fritzbox kann man unter Freigaben > DynDNS: DynDNS Anbieter Benutzerdefiniert nun im Feld Update-URL eine URL angeben die täglich die aktuelle IP übergeben bekommt.

Die fertigen Skripte befinden sich unten im Download, eine detailierte Anleitung dazu habe ich hier gefunden: https://www.just4it.de/dyndns-mit-php.html

Nachdem man nun eine URL hat ist benötigt man noch zwei weitere Skripte:

Eines welches täglich auf die ISG Web Seite geht, die Werte aus dem Quelltext ausliest (eine Schnittstelle konnte ich nirgends finden) und diese in die Datenbank schreibt. Dies geht recht einfach mit dem PHP Befehl curl. Alle Daten der Seite Info > Wärmepumpe http://127.0.0.1/?s=1,1 können so sehr einfach ausgelesen werden. Etwas komplizierter wird es mit den Daten aus den Grafiken der Startseite. Die stehen in einem JavaScript Array. Aber auch das konnte ich (etwas dirty und sehr statisch) auslesen. Dieses Skript ruft man dann täglich über einen Cronjob auf.

Mit einem zweiten Skript zeigt man die Daten aus der Datenbank dann an. Dies kann man sehr einfach mit Hilfe von Google Charts machen oder auch jedem anderen Bibliothek zur Chart Anzeige.

Fertig ist die eigene ISG web Cloud 🙂 Und so sieht meine Seite aus (ja, ich bin Entwickler, kein Designer, es ist eher pragmatisch dargestellt):

Die fertigen Skripte findet ihr hier:
DOWNLOAD: ISG web auslese Skript –> Siehe neue Version unten
Eine ausführliche Readme befindet sich hier: README.txt

Wichtig damit das Skript funktioniert: Es sollte die gleiche Software Version sein, da mit einer Layout Änderung auch das Skript nicht mehr funktionieren würde.
Das ISG web hat bei mir die Version 10.0.0 gehabt.
Mit dem neuen EMI Update zeigt er mir nun die Version 2.2.0 an.

Andere (neuere / ältere ) Versionen können funktionieren, müssen aber nicht.

UPDATE:
Ich habe die Skripte um neue Funktionen erweitert:

  • Layout
  • Es wird die Seite Sommerbetrieb ausgelesen und der Wert für die Umschaltung auf Sommerbetrieb in der Temperaturgrafik angezeigt
  • Ein komplett neues Skipt welches regelmäßig (bei mir alle 15 Minuten) von der Startseite die Warmwassertemperatur liest und in die DB logged. Außerdem ein zweites Skript zum Anzeigen der Werte. So kann besser nachvollzogen werden warum die Luftwärmepumpe angesprungen ist.

UPDATE
Das Skript, welches alle 15 Minuten die Warmwassertemperatur ausliest wurde erweitert. Nun werden auch die Heizungstemperaturen ausgelesen.

UPDATE 11.03.2020

Nachdem es seitens Stiebel Eltron ein Update für das ISGweb auf die Version 10.2.0 gegeben hat musste auch mein Skript angepasst werden.

Zum einen wurden anscheinend leichte Änderungen an der HTML Struktur vorgenommen, so dass die Ausleselogik nicht mehr griff. Zum anderen hat sich der Link für die Wärmepumpen Infos von /?s=1,1 auf /?s=1,2 geändert.

UPDATE 19.05.2020 – Security Update

Das neue Skript findet ihr hier:
DOWNLOAD v1.3: ISG web auslese Skript
Eine ausführliche Readme befindet sich hier: README.txt

You can leave a response, or trackback from your own site.

30 Responses to “ISG web per Skript auslesen”

  1. Sebastian sagt:

    Hallo,
    hab das hier gerade gefunden. Kann man die Daten auch nur abrufen und auf dem Rechner speichern,um sie dann vielleicht mit einem Tabellenprogramm zu visualisieren?
    Viele Grüße
    Sebastian

    • admin sagt:

      Hallo Sebastian,

      möglich ist alles, die Frage ist was du möchtest. Die Problemstellung für mich war ja die folgende: Wie speichere ich die Daten TÄGLICH ab ohne dass ich meinen PC laufen lassen muss. Daher habe ich die Option gewählt, dass meine Website den Job übernimmt.
      In meiner Lösung schreibe ich die Daten in eine Datenbank, man könnte sie auch per PHP in eine CSV Datei schreiben, damit man es mit Excel auswerten kann. Aber auch hierzu muss man eine Website besitzen die die tägliche Abfrage übernimmt.
      Natürlich könnte man auch Konsolenanwendungen schreiben, die die Daten auslesen und in eine CSV speichert, aber ein solches Programm müsste man ja dann täglich manuell ausführen. Ich bin ITler, ich bin faul 😉

      • Sebastian sagt:

        Hallo,
        mir würde es reichen die Daten in eine CSV Datei zu schreiben (der Rechner ist eh täglich an). Das selbe macht bei mir auch ein Rechner der täglich die Daten der PV Anlage log.

        Ich versuch mal den Weg mit der Fritzbox.

        Viele Grüße
        Sebastian

        • admin sagt:

          Dann würde es ausreichen sich eine Konsolenanwendung zu schreiben die dies erledigt, oder (bei einem Windows PC) ein PowerShell Script. Beides könnte mit dem Windows Scheduler regelmäßig gestartet werden. Eine Fritzbox benötigt man dafür nicht.

          • Sebastian sagt:

            Genau das war mein Gedanke, leider kenn ich mich nicht im schreiben von solchen Scripten aus :/
            Viele Grüße
            Sebastian

          • admin sagt:

            Hallo Sebastian,
            ich beschäftige mich zur Zeit mit dem Thema Raspberry PI als SmartHome Lösung. Dort habe ich den ioBroker installiert (ich habe mich dabei an die Anleitungen von haus-automatisierung.com gehalten, geht alles ganz einfach), für diese Software gibt es bereits ein Modul welches das ISG auslesen kann. Vielleicht wäre das eine Lösung für dich?

  2. Dom sagt:

    Hallo,

    ich sehe deine Lösung als sicherheitstechnisch kritisch:

    > Das ISG web habe ich in der Fritzbox über Fernzugriff frei gegeben. Dabei sollte man beachten, dass man im ISG web unter Profil > Sicherheit einen Passwort geschützten Zugang definiert, ansonsten kann jeder auf die Anlage zugreifen.

    Bitte mach das nicht. Das ISGweb kann nur plain http, kein verschlüsseltes https. D.h. wenn du die Anlage einfach so über die Freigabe in’s Internet stellst und mit deinem PHP Skript darauf zugreifst, übermittelst du den user + passwort deiner Heizung unverschlüsselt im Klartext.

    D.h., dass überall auf der Netzwerkstrecke von deinem Server bis zu deiner Fritzbox die Zugangsdaten einfach ausgelesen werden können und damit Fremde deine Heizung verstellen können.

    Du könntest einen Webserver zwischen Fritzbox und ISG stellen, der dann die SSL-Verschlüsselung übernimmt – aber dann hättest du eh einen kleinen Rechner am laufen mit dem du die Daten auch gleich lokal holen kannst, ohne Umweg über das Internet.

    Abgesehen davon – danke für dein Blog, sind einige Interessante Themen für mich dabei!

    • admin sagt:

      Vielen Dank für diesen Hinweis.
      Beim Thema Sicherheit hast du wohl vollkommen Recht. Das ist der Kompromiss den ich wohl eingehen muss, entweder lokal mit eigenem PC oder mit potentiellem Sicherheitsrisiko.
      Ich werde es aber (aus Bequemlichkeit) wohl erstmal so lassen, da ein Angreifer schon viel Aufwand betreiben muss und bis auf die Heizungseinstellung wenig Nutzen hat. Aber ja, Fremde sollten nicht in mein lokales Netzwerk hinein.

  3. kim sagt:

    Hoi,
    voher hast du die neue Version 10.2.0 ?
    Updater software von stiebel-eltron sagt mir neuste ist 10.1.0

    Danke

    • admin sagt:

      Ich habe noch den 2 Jahres Cloud Vertrag. Das Update wurde automatisch eingespielt, ich habe nichts aktiv getan.

      • kim sagt:

        Hoi, hättest du noch scripts von 10.1.0 ? Ich habe url’s angepasst aber kriege zur zeit :

        Aussentemperatur_max | 2020-06-13 | | C | 2020-06-14 14:30:26 |
        | Aussentemperatur_min | 2020-06-13 | | C | 2020-06-14 14:30:26 |
        | Aussentemperatur_mittel | 2020-06-13 | | C | 2020-06-14 14:30:26 |

        nicht in DB.

        Mit parsing stimmt etwas nicht: INSERT INTO isgweb (Name, Datum, Wert, Einheit)
        VALUES (‚Aussentemperatur_min‘, ‚20200613‘, “, ‚C‘)New record created successfullyPHP Notice: Undefined offset: 2 in /var/www/html/readisg.php on line 179

        Danke

  4. kim sagt:

    Script ist auch super (y). Ich würde erwarten von Stiebel-eltron das Sie etwas mehr anbieten bei isg Anbindung, den gerät ist schon etwas überteuert 😉 . Nochmals vielen Dank für dein Hilfe !

  5. […] gab, habe mich mich mit dem Thema Smart Home beschäftigt. Denn schon länger gab es den Plan mein Script, welches die Daten des ISG web ausliest, lokal laufen zu lassen. Außerdem hörte ich von Shelly, ein Modul, welches es ermöglicht sein […]

  6. Thorsten sagt:

    Moin, super script vielen Dank dafür! Es lief bei mir bis jetzt immer gut allerdings bekomme ich jetzt ein php fehler beim ausführen:
    root@srv002:/var/www/html/isgweb# php readisg.php
    Try to login to http://192.168.178.13
    PHP Fatal error: Uncaught Exception in /var/www/html/isgweb/readisg.php:273
    Stack trace:
    #0 /var/www/html/isgweb/readisg.php(362): loginToServer(‚http://192.168….‘, ‚http://192.168….‘, ‚http://192.168….‘, ‚http://192.168….‘)
    #1 {main}
    thrown in /var/www/html/isgweb/readisg.php on line 273

    Fatal error: Uncaught Exception in /var/www/html/isgweb/readisg.php:273
    Stack trace:
    #0 /var/www/html/isgweb/readisg.php(362): loginToServer(‚http://192.168….‘, ‚http://192.168….‘, ‚http://192.168….‘, ‚http://192.168….‘)
    #1 {main}
    thrown in /var/www/html/isgweb/readisg.php on line 273

    kennt den jemand und kann helfen?

  7. Ben sagt:

    Danke für das Skript!
    Sind bei ISGweb auch Stromverbrauchsdaten auslesbar (kWh) oder nur Wärmeenergie?

    Danke!

    • admin sagt:

      Hallo Ben,
      das Script liest nur die Werte aus, die das ISGweb auch anzeigt.
      Das ISGweb wird bei mir im Sunny SmartHome Manager erkannt und dieser kann dann explizit den Stromverbrauch für dieses Gerät ausweisen. Dazu wird das ISGweb benötigt. Im ISGweb selbst kannst du den Stromverbrauch allerdings nicht ablesen sondern nur Heizungsdaten.

  8. Frank sagt:

    Hi,
    ich persistiere relevanten daten des ISGs via MODBUS-IP per Openhab instanz welche auf Docker in meiner Synology diskstation läuft. Openhab nutze ich hier mit dem InfluxDB persistence layer und visualisiere das ganze mit Grafana. All das läuft auf kleinen Docker instanzen.

    Da über modbus nicht alles abgreifbar ist, was auch auf den ISG Seiten Angezeigt wird (z.B.: Diagnose->Fachmann) nutze ich eine weiter Openhab http Bridge um diese sachen von der ISG webseite zu ziehen.

    Meine Lösung ist komplett cloudless.

    Cheers
    Frank

  9. Markus sagt:

    Hallo

    Vielen Dank für das Skript. Seit zwei Jahren wende ich dieses an. Nun habe ich seit dem 22. Nov. 2022 das Problem, dass die Werten nicht mehr korrekt ausgelesen und zwischen dem Wert und der Einheit getrennt werden können. Es gibt kein Lehrezeichen mehr zwischen dem Wert und der Einheit, das als Trennungszeichen erkannt werden kann.

    ÖLSUMPFTEMPERATUR
    55,7°C

    DRUCK NIEDERDRUCK
    8,39bar

    DRUCK HOCHDRUCK
    19,16bar

    SPANNUNGSEINGANG DIFF DRUCK
    0,00V

    Kann die explode-Funktion mit mehreren Trennzeichen definiert werden?

    Kannst du mir bitte einen Tipp geben, wie ich das anpassen muss.

    Viele Grüsse
    Markus

    • admin sagt:

      Hallo Markus,
      wenn die Werte wirklich ohne Leerzeichen geliefert werden, dann würde ich individuell pro Einheit vorgehen. Mit str_ends_with kannst du das Ende auslesen, z.B.
      if (str_ends_with($string, ‚bar‘)) {
      $wert = substr($string, 0, -3);
      }
      if (str_ends_with($string, ‚°C‘)) {
      $wert = substr($string, 0, -2);
      }
      if (str_ends_with($string, ‚V‘)) {
      $wert = substr($string, 0, -1);
      }

      • Markus sagt:

        Vielen Dank.
        Für die Funktion str_ends_with() muss min. PHP 8.0 installiert und aktiv sein. Bisher hatte ich 7.4 installiert.
        Damit konnte ich die Werte korrekt generieren.
        Aber dann wurden die Werte mit dem Skript show_lwp.php nicht mehr dargestellt.
        Sobald ich wieder auf PHP 7.4 wechsle funktioniert die Darstellung im Skript.
        Das Skript show_temp.php funktioniert bei PHP 7.4 und 8.0.

        • Markus sagt:

          Nachdem ich in der Datei readisg.php die Funktionsdefinition für str_ends_with() eingetragen habe, hat alles auf PHP 7.4 wieder einwandfrei funktioniert.

          if (!function_exists(’str_ends_with‘)) {
          function str_ends_with($str, $end) {
          return (@substr_compare($str, $end, -strlen($end))==0);
          }
          }

  10. Tobi sagt:

    Tipp:Mittlerweile unterstützt das ISG web standardmäßig die Abfrage von Werten per modbus (siehe hierzu https://www.stiebel-eltron.de/de/home/service/smart-home/modbus.html bzw. https://www.tecalor.de/de/produkte/smart-home/gebaeudeleittechnik.html).

    Dadurch lassen sich bspw. per Node-Red sehr einfach Flows zusammenbauen, die die Werte per modbus vom ISG abfragen und bspw. in eine InfluxDB wegschreiben. Ich habe das bei uns über entsprechende Docker Container realisiert, die auf einem lokalen NAS von Synology laufen. So hat man auch kein Einfallstor über das Internet. Gesetzt den Fall, dass man Zugriff über das Internet haben möchte, dann lässt sich das natürlich leicht ergänzen.

Leave a Reply