Skip to end of metadata
Go to start of metadata

Die Einbindung von ETA Holzvergasern mittels Modbus ist leider mMn unzureichend dokumentiert - im Internet ist dazu kaum was zu finden, von ETA gibt es auf Anfrage auch nur eine veraltete Beschreibung zur Modbus Anbindung (beides siehe Weblinks) → Mein Loxone-Partner ist gemeinsam mit dem Loxone Support daran gescheitert, von ETA kam nur "es funktioniert anderswo auch".

Mittels Trial & Error habe ich es jetzt geschafft & mMn anfängertauglich dokumentiert - Bitte um Anmerkungen/Ergänzungen etc....

Voraussetzungen

Der ETA Holzvergaser muss im selben LAN eingebunden sein, wie der Loxone Miniserver. Dazu haben die ETA Holzvergaser (zumindest mein SH30) einen LAN-Anschluss, der befindet sich beim SH30 unter der oberen Abdeckplatte - ACHTUNG - bis zum LAN-Anschluss im Gerät sind es noch ca. 80cm, das LAN-Kabel sollte also nicht zu kurz sein.

Keine weitere Hardware nötig. Insbesondere die Loxone Modbus Extension ist nicht nötig. Der Miniserver kann von Haus aus Modbus über LAN, der ETA Holzvergaser auch.

Der ETA Holzvergaser muss eine statische IP-Adresse haben. Das ist leicht am ETA-Touch-Display (bzw. über meinETA oder via VNC) unter den Systemeinstellungen (Icon links unten) einstellbar:

Tip

Ob der ETA Holzvergaser von der Loxone erreichbar ist, kann man leicht in der Loxone mit dem Loxone Ping-Modul testen.

1. ETA-Holzvergaser in Loxone einbinden

In der Loxone-Config unter Peripherie bei Miniserver / Miniserverkommunikation einen neuen Modbusserver anlegen. Als IP-Adresse die Adresse des ETA Holzvergasers mit Port 502 (= Standard-Port für Modbus) eintragen:

2. Aktoren / Sensoren am ETA freigeben

Am ETA Holzvergaser in den Servicemodus gehen. Dazu muss am ETA-Touch-Display unter Systemeinstellungen / Berechtigung die (allseits bekannte) Nummer "135" eingegeben werden. Am Display erscheint unten "Service" und man hat mehr Berechtigungen (z.B. mehr Möglichkeiten unter Systemeinstellungen):

Systemeinstellungen wieder verlassen (wieder klick auf das Icon links unten).

In den einzelnen Funktionsblöcken (FUBs = Karteireitern am ETA-Touch) sieht man im Textmodus (2tes Menü unter dem ETA-Symbol) im Servicemodus dann rechts kleine PC- Icons. Diese weisen darauf hin das hier (oder in einem Sub-Menü) Werte über Modbus gelesen / geschrieben werden können:

Jetzt wählt man in den einzelnen Funktionsblöcken die Werte aus, die man lesen / schreiben möchte.

Viele Werte sind nicht schreibbar, auch wenn es einem logisch erscheinen würde, dass sie schreibbar sein sollten (z.B. Heizkreispumpe oder Zirkulationspumpe) → beim ETA Kundendienst einmelden, vielleicht werden sie in einer zukünftigen Version dann ja schreibbar.


Mit einem Klick auf das PC-Icon des Wertes kommt man in das Modbus-Menü:

Ob ein Wert schreibbar / lesbar oder beides ist, sieht man hier links oben (in diesem Fall = Außentemperatur ist er klarerweise "nur lesbar")

Tip

Zuerst mal mit einfachten (= numerischen), auszulesenden (= Sensoren) anfangen. Schreiben und Umwandeln von z.B. Datum in Zahlen ist komplexer.

Mittels "Register zuweisen" weist man dem Wert das nächsten Register zu (eine Zahl zwischen 1000 und 65000). Dabei werden immer nur gerade Zahlen zugewiesen, da die ETA-Variablen 32bit lang sind und der Modbus dafür 2 Register (zuerst high, dann low) benötigt.

Weiters erkennt man hier auch die Skalierung des Wertes. Eine Skalierung von 10 wie im Fall der Außentemperatur bedeutet dass man die Zahl durch 10 dividieren muss um auf den tatsächlichen Wert zu kommen (also ein Wert von 7 entspricht 0,7°C)

Bei schreibbaren Werten erkennt man auch die Minimal-, Maximal-, und Default-Werte des Wertes

Bei Textwerten erkennt man das Mapping vom Integer-Wert auf den Textwert unter "Zuordnung von Wert zu Text (für Textparameter)".

Mit einem Klick auf "Register zuweisen" sind die Werte bereits mittels Loxone auslesbar / schreibbar.

Tip

Eine halbwegs lesbare XML Dokumentation aller gewählten Register (inkl. Nummer, Name, Skalierung, Einheit, Min, Max, Default-Wert) bekommt man, indem man in den Systemeinstellungen auf Export Protokolle geht.

3. Werte aus Loxone auslesen / schreiben

Unter dem bereits im Punkt ETA Holzvergaser#1. ETA-Holzvergaser in Loxone einbinden in der Loxone-Config angelegtem ETA-Holzvergaser werden die Werte unter Sensoren (lesende) oder Aktoren (schreibende) angelegt. Bei den Eigenschaften wird unter IO-Adresse das jeweilige Register der ETA-Variable gewählt, bei den Befehlen wird dann je nachdem ob lesend oder schreibend ein unterschiedlicher Befehl gewählt:

Lesen:

  • "3-Read holding register(4x)" bei schreib/lesbaren und auch bei nur lesbaren Registern
  • Immer 32-bit signed integer
  • Immer 2 Register, alle Register beim ETA belegen 2 Adressen (darum nur gerade Adressen)
  • Registerreihenfolge immer umdrehen (ETA schickt/verlangt HighWord/LowWord, Loxone schickt/holt defaultmäßig LowWord/HighWord)
  • Byte-Reihenfolge belassen

(warning) Zumindest einige nur lesbare Register liefern falsche Werte mit "4-Read input register(3x)" (z.B. Puffertemperaturen, Außentemperatur, Position Heizkreismischer), aber korrekte Werte mit "3-Read holding register(4x)" - es scheint als ob "4-Read input register(3x)" nicht korrekt unterstützt wird.

Der Abfragezyklus sollte je nach zu lesendem Wert eingestellt werden. Erlaubt ist 5 - 4095 Sekunden, was für die Kommunikation mit dem ETA-Heizkessel reicht. Bei den meisten Werten reicht sicher eine Minute also Abfragezyklus = 60 oder größer. Viel länger sollten sie in vielen Fällen nicht gewählt werden, da sich z.B. Pufferniveaus oft schneller ändern als man denkt.

Mittels Korrektur kann man die Skalierung revidieren - z.B. lässt sich mittels folgender Korrektur eine Skalierung von 10 bei Temperaturwerten umsetzen:

Textwerte kommen als Zahlen rüber - diese könnte man in der Loxone Config z.B. mittels Status-Baustein wiederum in Text umwandeln. z.B. bei "Heizkreis" gilt folgendes (ist in der Loxone-Touch bzw. in der XML-Dokumentation nachlesbar, hier nur als Beispiel aufgeführt):

ZahlenwertText
2000Ausgeschaltet
2001Klappe auf
2002Pelletsbehälter auffüllen
2003Füllen gestoppt wegen ...
2004Heizversuch
2005Zünden
2006Heizen
2007Glutabbrand
......


Schreiben:

Tip

Zuerst mal versuchen das Register alle 5 sec. zu lesen und die Werte am ETA zu ändern. Damit erkennt man welche Werte erwartet werden, ob man auch das richtige Register erwischt hat etc.


  • Immer "16 - Preset multiple registers"
  • üblicherweise "32-bit signed integer", es gibt aber Spezialfälle wo es auch führende Bits gibt (s.u.), dann "32-bit unsigned integer"
  • immer 2 Register für 32-bit, darum sind die ETA Register ja auch alle geradzahlig
  • Registerreihenfolge immer umdrehen (ETA schickt/verlangt HighWord/LowWord, Loxone schickt/holt defaultmäßig LowWord/HighWord)
  • Byte-Reihenfolge belassen


Auch hier kann man mittels der Korrektur der Skalierung entsprechen - z.B. lässt sich mittels folgender Korrektur eine Skalierung von 10 bei Temperaturwerten umsetzen (genau umgekehrt wie beim Lesen):


Das Schreiben funktioniert meiner Erfahrung nach inzwischen zuverlässig - es empfiehlt sich dennoch zu Beginn (durch ein automatisches Lesen und automatische/manuelle Kontrolle) zu überprüfen, ob das Schreiben funktioniert hat.


Spezialfälle / Workarounds / Anwendungsbeispiele

Viele Werte sind nur lesbar, leider auch Werte, die man typischerweise mit einer Haussteuerung steuern möchte. Um sie dennoch zu ändern muss der Umweg über das Setzen anderer Werte gegangen werden. Hier dazu ein paar Workarounds:

  • Zirkulationspumpe ein- / ausschalten: Kann man über ein Setzen der Zirkulationszeiten erreichen: Setzt man die Zirkulationszeiten aller Wochentage (= 7 Register) oder die des aktuellen Wochentags auf 0-24 Uhr, so schaltet sie sich ein, setzt man sie auf 0-0 Uhr, so schaltet sie sich wieder aus. Die Zirkulationszeiten haben ein führendes bit und sind als Anzahl Viertelstunden codiert. Das führende bit setzt man am besten noch vor dem Umdrehen der Registerreihenfolge. Die Formel zum Setzen von Zirkulationszeiten lautet somit:

    (I1*256+I2)*65536+32768

    wobei I1=Startzeit in 15min. Schritten, I2=Endzeit in 15min. Schritten

    Achtung: in diesem Fall nicht "Registerreihenfolge" anhaken und "32bit unsigned int"

    weiterhin 2 Register für 32bit.

  • Heizkreis lesen: Der Wert Heizkreispumpe liefert leider nicht den ein/aus Zustand der Pumpe, sondern die detailiertere Textwerte (Aus, Ein, Verriegelt, Sicherung defekt, Keine Klemme zugewiesen, Keine Antwort des CAN-Knotens). Diese können aber einfach über einen Status-Baustein in Text und 0/1 umgewandelt werden.
  • Weniger priore Räume mit gerinerer Priorität heizen: Weniger priore Räume wie z.B. WC, Windfang, Gang, ... könnte man erst dann heizen, wenn die anderen Räume vollständig aufgeheizt sind (z.B. via Loxone Betriebsmodus "Aufgeheizt", der gesetzt wird, wenn in prioren Räumen die Stellventile nicht mehr voll aufgedreht sind und setzen der Komforttemperatur in weniger prioren Räumen nur bei "Aufgeheizt"). Das führt aber zu einem unangenehmen Temperaturgefälle z.B. nach Urlaub ist das Wohnzimmer schön warm, aber der Gang noch bitterkalt.
    Besser ist es, die weniger prioren Räume schon dann zu heizen, wenn der Heizkreismischer noch Leistungsreserven hat. Das ist erst dann der Fall wenn der Rücklauf aus den prioren Räumen nicht mehr allzu kalt ist. Dazu prüft man, ob die die Position des Heizkreismischers z.B. kleiner als 80% ist und die Heizkreispumpe aufgedreht ist. Mittels Betriebsmodus können dann die weniger prioren Räume auch auf Komforttemperatur gebracht werden.
  • "Textwerte" setzen oder lesen: In vielen Fällen muss man bei ETA 1802 für "aus" und 1803 für "ein" setzen/lesen (z.B. bei Ein/Aus Taste des Kessels oder der Heizung) dafür kann einfach die Korrektur verwenden (z.B. Eingangswert1: 1802, Zielwert 1: 0, Eingangswert2: 1803, Zielwert 2: 1) und erspart sich damit einen Statusbaustein beim Lesen bzw. einen Analogwahlschalter beim Schreiben 

Weblinks

  • No labels

17 Comments

  1. mm

    Hallo Sebastian,

    vielen Dank für diesen sehr hilfreichen Artikel!
    Ich habe das Problem, dass sich meine Modbus Verbindung in unregelmäßigen Zeitabständen aufhängt (6-12 Stunden) und dann nichts mehr abgefragt werden kann. Starte ich den Miniserver neu oder deaktiviere und aktiviere den Modbus beim SH30, funktioniert alles wieder einwandfrei.

    Kennst du das Problem bzw. hast du vielleicht irgendeine Idee was das Problem sein könnte?

    VG

    1. Hi & danke für das Lob!

      Das Problem mit der Modbus Verbindung kenne ich nicht. Verbindung ist bei mir glaube ich noch nie abgerissen, zumindest hab ichs nicht bemerkt. Ideen hab ich dazu leider nicht viele: keine statischen IP-Adressen (ETA & Miniserver), IP-Adresskonflikt, Kabel kaputt bzw. WLAN Abbruch (ich machs übers Kabel)....

      1. mm

        Hallo Sebastian,

        vielen Dank für die Antwort!

        Darf ich mal fragen, welche FW-Version du drauf hast? Ich habe die 2.45.0.

        Hab nun mal den Timeout auf von 200 auf 2000ms erhöht, mal gucken, vielleicht löst es das Problem.

        Zuvor hatte ich das Problem, dass sich das Display ständig aufgehängt hat. Seit ich den ETA nun bei meinETA registriert habe und allgemein Internetzugriff über die Firewall gewährt habe, ist dieses Phänomen verschwunden.
        Hoffe es hat nichts mit der Hardware zu tun. :/


        Vielen Dank!


        Beste Grüße

        1. Ich hab auch die 2.45.0 - davor hat es aber auch schon funktioniert.

          Timeout ist bei mir auch auf 2000ms (war aber meiner Erinnerung nach nie anders) - zeig mal auch die Diagnoseeingänge an.

          lg
          Sebastian

          1. mm

            Ja mal gucken wie es jetzt läuft, ist standardmäßig auf 200 ms.

            Hast du dann eigentlich für jeden Tab ein Modbusgerät unter dem übergeordneten Server angelegt (siehe unten) oder hast du nur ein Modbusgerät und darunter alle Sensoren?

            Beispiel:

            ETA Modbusserver

            Modbusgerät 1:

            |- Kessel

            |-- Sensoren

            |--- Abgastemperatur in Grad


            Modbusgerät 2:

            |- Pufferspeicher

            |-- Sensoren

            |--- Ladezustand in Prozent



            Besten Dank im Voraus!


            Viele Grüße

            1. Das mit dem Statusbaustein hab ich jetzt oben ergänzt. Ich hab nur ein Modbus Gerät (ETA) und darunter mehrere Aktoren und Sensoren. Nur die, die ich auch wirklich brauche (alles andere müllt den Modbus und die Loxone Config nur zu)

              1. mm

                Hi!
                Danke für deine Antwort!
                Ich sehe, dass du oben den Ausgabetext nach dem Statusbaustein noch weitergibst? Hast du da dann nochmal eine Logik dahinter wo der Text verarbeitet wird?

                Besten Dank!

                1. Hi!

                  Dahinter hab ich nur noch eine Logik (Statusbaustein mit Textvergleichen) die mich benachrichtigt, wenn ich Holz nachlegen sollte (wenn das Haus geheizt wird und der ETA nicht heizt und der Puffer nicht mehr genug Reserve hat)

                  lg Sebastian

                  1. mm

                    Alles klar!


                    Vielen Dank Sebastian!!

  2. Hallo Sebastian.

    Ich denke einmal wir sind trotz des seltenen Nachnamens nicht verwandt!

    Bin kompletter Neuling im Forum und bei Loxone. Mache aber alles selber. Von der Hardware bis hin zur Config. Status 90% fertig!

    Da ich einen ETA Hackgutkessel habe hätte ich eine Frage. Wäre es möglich, dass Du mir ein Config File mit den Modbusserver Eta Befehlen zukommen lässt? Ich kenne mich bei Modbus und dessen Verwendung leider gar nicht aus. Benötige ich hardwareseitig auch ein Loxone Modbusinterface?

    Vielen Dank und beste Grüße

    Philipp Dietrich

  3. Hi Philipp!

    @Dietrich - ist gar nicht so selten (zumindest lt. Google) - ich hab meinen Stammbaum bei MyHeritage bei den Dietrichs nur bis ca. 1770 und auch nur die Linie zu meinen engsten Verwandten.

    @ETA - brauchst hardwareseitig nix, der Miniserver kann selbst Modbus. Musst halt nur den ETA im selben LAN haben wie den Miniserver.  Anbei meine ETA-Konfiguration: MB_ETA.xml - musst unter Miniserverkommunikation einbinden...


  4. Hi.

    Meine Vorfahren Väterlicherseits sind leider fast alle im zweiten Weltkrieg gestorben.

    Zurück zum Thema: Danke. Ich spiele morgen die Config das erste mal rauf, und dann kann ich die Datei gleich testen.

    Ciao Philipp

  5. mm

    Hallo Sebastian,

    ich hätte nochmal eine Frage:

    Ich möchte eine Freigabetemperatur über einen Analogaktor setzen.

    Wenn ich das Register 1:1 auslese, bekomme ich den Wert *10 geliefert. z.B. 42 Grad eingestellt liefert beim Auslesen des Sensors den Wert 420.

    Normalerweise müsste ich ja den schreibenden Wert dann auch einfach *10 nehmen, z.B. will ich 52 Grad, dann schicke ich den Wert 520. Liege ich soweit richtig?

    Den Analogaktor habe ich wie folgt eingestellt:



    Leider tut sich aber bei mir auf der Steuerung gar nichts.


    Hast du vielleicht eine Idee was ich falsch mache?


    Besten Dank im Voraus!


    VG


  6. Hi,
    sorry wegen der späten Antwort.

    Der Fehler ist, dass du "Registerreihenfolge umdrehen" nicht angehakt hast. Damit wird nicht 520 sondern 520*65536 geschickt

    lg
    Sebastian

  7. Hallo,

    Kann mir jemand weiterhelfen?

    Analogwerte kann ich auslesen ohne Probleme

    Schwierigkeiten habe ich bei Digitalwerte.

    Wie muss ich das Befehl einstellen?

    1 - Read coil status (0x)

    2 - Read input status(1x)

    3 - Read holding register(4x)

    ???


    Auch bei Aktoren gelingt es mir nicht den Kessel mit Aktor Ein- oder Ausschalten.

    Sollte ich das mittels  5 - Write single coil das Befehl ausführen.

    Wenn jemand ein laufendes Projekt hat bitte um Support

    Danke

    1. Steht eh im Artikel: 3-Read holding register(4x) bzw. 16 - Preset multiple registers

  8. Leider passt bei mir was nicht...

    ich versuche den Status vom Pelletkessel auszulesen, 1x mit Digitalsensor und 1x mit Analogsensor

    Status kann ich nicht auslesen, bzw. es kommen dauernd Fehlermeldungen


    Auch das Schreiben (Ein/Ausschalten Pelletkessel) gelingt mir nicht, Schalter auf Bedienfeld Pelletkessel bleibt immer gleich