Solarfocus: Daten per ModBus auslesen

There are 8 replies in this Thread which was already clicked 521 times. The last Post () by GeKa07.

  • Hallo,


    ich würde gerne die Daten meines Solarfocuskessels (Pellet elegance) per Modbus auslesen und in eine Protokolldatei schreiben.

    Das ganze auf einem Linuxsystem.

    Ein Script, welches den Vorgang auslöst, ist kein Problem.

    Das Auslesen selbst, erfolgt durch ein weiteres Script in Python, welches von dem ersten Script aufgerufen wird.

    Gibt es eine Möglichkeit, alle Registerwerte der Steuerung auszulesen?

    Also welche Register sind in der Steuerung hinterlegt und können Abgerufen werden.

    ein PDF-Dokument (ecomanager-touch_Modbus-TCP_Registerdaten_Anleitung) habe ich gefunden.

    Damit habe ich einige Werte abfragen können.

    dennoch bekomme ich nicht alle Werte die in der Anlage vorliegen.


    für Hilfe wäre ich Dankbar

  • Holzpille

    Approved the thread.
  • Hallo GeKa07,


    bist schon weitergekommen mit dem Auslesen der Modbus-Daten vom Solarfocus Pellet elegance ?

    Welche Werte die in der Anlage vorliegen fehlen dir?

    Es gibt im Netz mehrere (unterschiedlich grosse) Versionen vom PDF-Dokument von den Solarfocus Modbus-TCP_Registerdaten.


    Welche Software-Version der Regelung eco Manager ist bei dir im Einsatz?

    Mit welchem linux-systen (Rechner) werden die Modbus-Daten bei dir ausgelesen?


    Arbeiten deine python-scripte mit den Python Modbus Paketen pyModbus und pyModbusTCP ?

    Willst du dein python-sript mit den bisherigen Forschungsergebnissen hier im Forum einstellen ?


    Ich hab auch schon von einigen Geräten mit einem python-script Modbus-Registerdaten ausgelesen.

    Im ersten Schritt habe ich mit einem python-script in einer Schleife alle möglichen Modbus-Register-Adressen ausgelesen.

    Anhand der ausgelesenen Daten und der entsprechenden Return-Codes hat man dann eine Liste mit Rohdaten.


    Gruß

    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo,


    Im Anhang das Pythonscript und die PDF Datei aus der ich die Registerdaten habe

    Die Registeradressen für Solarmodule gehen bei mir gar nicht.

    alle anderen Werte konnte ich mit "Versuch und Irrtum stückweise ermitteln. (die habe ich aus dem Script mal rausgelöscht)

    Es läuft über die py-Modbuspakete.

    Da ganze läuft auf einem Debian

    Der Kessel hat die Softwareversion V 25.020.


    Es geht mir dabei nur um das Auslesen der aktuellen Werte.

    gerade die Solarwerte, die ich nicht bekomme möchte ich Protokollieren

    "Kollektortemperatur1 2100": 2100,

    "KollektorVorlauftemperatur 2102": 2102,

    "KollektorRücklauftemperatur 2103": 2103,

    "Durchfluss WMZ 2104": 2104,

    "aktuelle Leistung in kW 2105": 2105,


    "Ertrag WMZ in Wh 2106": 2106,

    "Tagesertrag in Wh 2108": 2108,


    Einstelldaten senden möchte ich nicht


    Gruß

    Karl

  • Hallo,


    ich konnte nun alle 16 Bit Werte mit dem Script auslesen.

    Die Werte

    "Ertrag WMZ in Wh 2106": 2106,

    "Tagesertrag in Wh 2108": 2108,

    sind 32 Bit Werte und werden (natürlich) falsch ausgelesen.


    Nach einige Versuchen, mit einen Script, das 32 Bit Werte auslesen können sollte, komme ich nicht weiter.


    ich erhalte bei jedem versuchten Verbindungsaufbau eine "Time Out"- Fehler.

    (Das Script für 16 Bit Werte funktioniert)


    Hat Solarfocus da eine Sperre für das Auslesen der 32 Bit Werte?


    Grüße


    KH

  • Hallo Karl,


    super, wenn alle 16-Bit Werte mit einem python-Script auslesen kannst.

    Hast jetzt alle Solar-Werte (Adresse 2100-2177) auslesen und mit Hilfe der Modbus-TCP_Registerdaten Beschreibung zuordnen können?

    Dann fehlt ja jetzt nichts mehr bis auf die in32 Werte ?


    In der Tabelle der Modbus-TCP_Registerdaten Beschreibung steht in Spalte 3 bei den int32 Werten die Anzahl 16-Bit-Register = 2


    Ja gut, wenn dein 32-Bit python-script keine 2 Register zusammen einlesen kann, dann ist das ja nicht weiter tragisch.

    In dem 16-Bit python-script bist ja total flexibel. Dann liest halt z.B. die beiden 16-Bit Register 2106 und 2107 vom Ertrag WMZ einzeln nacheinander ein

    und setzt die beiden Registerwerte manuell wieder zusammen und machst ein int32 Wert draus.


    Gruß

    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hi Jürgen,


    Die Idee ist grundlegend gut. Ich habe es auch direkt probiert.

    Bei den Werten

    "Ertrag WMZ in Wh 2106": 2106,

    "Tagesertrag in Wh 2108": 2108,

    kann ich den ersten 16 Bit-Satz (also Register 2106 und 2108) auslesen

    Die Register 2107 und 2109 lassen sich nicht separat auslesen.


    als 16 bit ausgelesen

    Ertrag WMZ in Wh 2106: 140

    Tagesertrag in Wh 2108: 0

    Ertrag WMZ in Wh 2107: ERROR

    Tagesertrag in Wh 2109: ERROR


    als 2x 16 Bit ausgelesen

    Ertrag WMZ in Wh 2106+2107: ERROR

    Tagesertrag in Wh 2108+2109: ERROR


    ich probiere weiter mit dem Ansatz ...


    Gruß

    Karl

  • Problem ist gelöst

    die Idee von Jürgen brachte die Lösung.


    nun lese ich alle 16 bit Werte aus, und setze bei den Werten die als 2 x 16 bit ausgewiesen sind, den count auf 2 (also: lese hier 2 Werte aus)


    Anschließend folgt die WENN DANN Abfrage

    WENN 2 Werte, DANN kombiniere zwei Register zu einem 32-Bit-Wert


    Hier die Passage der Abfrage aus dem Script

    Die noch nötigen Umrechnungen in die echten Werte (geteilt durch 10 oder geteilt durch 100) sind nur nice to have.


    ich bedanke mich für eure Hilfe.

    Das Thema kann geschlossen werden.


    Gruß

    Karl

  • Hallo Karl,


    super, wenn jetzt alle Werte mit einem python-Script nach deinen Vorstellungen auslesen kannst.

    Hast jetzt alle Solar-Werte (Adresse 2100-2177) auslesen und mit Hilfe der Modbus-TCP_Registerdaten Beschreibung zuordnen können?


    Ich frage deshalb nochmal penetrant nach, weil es von Solarfocus verschiedene Kessel-Typen gibt, die eine ecomanager-touch Regelung verwenden.

    Und da kann es durchaus sein, dass die allgemeine Modbus-TCP_Registerdaten Beschreibung nicht bei allen Kesseln übereinstimmt.


    Willst du dein finales python-sript hier im Forum nochmal einstellen, damit andere User die ähnliches vorhaben

    motivierter rangehen können, wenn es dafür schon eine Lösung gibt.


    Die Daten der Solarfocus ecomanager-touch Regelung sind ja nur ein kleiner Teil einer Smart-Home-Lösung.


    Es gibt von keiner Firma eine perfekte Lösung mit Anschlussmöglichkeiten zur restlichen Haustechnik.

    Es wollen auch nicht alle User eine Cloudlösung mit externer Datenspeicherung haben.

    Es gibt tausend Gründe warum man selber über die hauseigenen Daten verfügen und sie nicht hergeben möchte.


    Gruß

    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo,


    im Großen und Ganzen habe ich alle Werte die für mich relevant sind.

    Das Script im Anhang


    Ich habe mich Stück für Stück herangetastet, um die Register in meinem Fall zu ermitteln.

    Also

    -alle Register abgefragt (alle die in dem PDF "ecomanager-touch_Modbus-TCP_Registerdaten_Anleitung" gefunden habe

    -alle Register gelöscht, die "ERROR" zurück gemeldet haben

    -alle Register gelöscht, die es bei mit nicht gibt

    -Grob die Verbleibenden Werte mit der Anzeige am Kessel verglichen und Vorläufig zugeordnet


    Bei den Temperaturwerten (gerade auch für Solar) bin ich noch nicht ganz sicher, ob bei mir alle Fühler richtig adressiert sind.

    Die Anforderung "32-Bit Werte richtig auslesen" war für mich als Neuling nochmal etwas zeitaufwendig, ist aber jetzt, mit eurer Hilfe gelöst.


    Wenn genug Daten Vorliegen, kann ich eine Plausibilitätsprüfung machen

    Deshalb habe ich bei den Registern die Nummer mit in die Bezeichnung geschrieben, so dass ich diese im Logfile sehe.

    z.B.

    Register im Script

    "Vorlauftemperatur 1100": 1100,

    ergibt im Logfile:

    Vorlauftemperatur 1100: 384 (der Wert ist 10-fach)


    So kann ich bei Bedarf später leichter was ändern.


    Gruß

    Karl

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!