ETA Holzvergaser

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:

Falls es Probleme mit der Verbindung gibt, dann vielleicht das Timeout erhöhen...

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 Bearbeiten- 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 Bearbeiten-Icon des Wertes kommt man über ein Parameter-Menü über den Klick auf das Modbus/TCP Icon 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 (= Integer-Werte, die etwas bedeuten) erkennt man leider das Mapping vom Integer-Wert auf den Textwert nicht mehr (war früher unter "Zuordnung von Wert zu Text (für Textparameter)" ersichtlich) - diese Zuordnung muss man sich aus der XML-Dokumentation (siehe unten) holen.

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, Textwert, ...) bekommt man, indem man in den Systemeinstellungen auf "Protokolle exportieren" geht. Diese werden dann auf einen angesteckten USB-Stick geschrieben. Die XML-Dokumentation der Register findet man dort dann im Verzeichnis <ETA-Seriennummer>/<Datum_Uhrzeit>/modbus.

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

(Warnung) 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 XML-Dokumentation der Register (siehe oben) 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