Rotex HPSU Compact

Aus FHEMWiki
Version vom 17. Januar 2022, 23:26 Uhr von Ahermann86 (Diskussion | Beiträge) (Kompatibilität erweitert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Rotex HPSU Compact
Zweck / Funktion
Auslesen und Steuern einer Rotex HPSU mit Rocon BM1
Allgemein
Typ Inoffiziell
Details
Dokumentation siehe Forum
Support (Forum) Heizungssteuerung/Raumklima
Modulname 70_HPSU.pm
Ersteller Axel
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Regelung

Modul zur Anbindung einer ROTEX HPSU compact / DAIKIN Altherma R ECH2O oder ROTEX HPSU compact Ultra / DAIKIN Altherma 3 R ECH2O Wärmepumpe über CAN Bus mit einem einfach und günstig beschaffbaren ELM327.

Clock - Under Construction.svg An dieser Seite wird momentan noch gearbeitet.

Allgemein

  • Auslesen und Setzen aller über die Rocon B1 bzw RoCon+ zur Verfügung stehenden Parameter
  • Keine Zugriffsrechte nötig (Benutzer, Fachmann)
  • Anbindung mittels ELM327 Adapter an die CAN Schnittstelle der RoCon BM1 bzw. BM2C an J13

Voraussetzungen

Hardware

ELM327 OBD2 Adapter

Um die Regeleinheit RoCon "BM1" der HPSU an den FHEM Server anzubinden, wird ein ELM327 (OBD2 Fahrzeug Diagnose Adapter) eingesetzt. Dieser wurde gewählt, da man hier an keine spezielle Hardware gebunden ist. Es reicht eine USB Schnittstelle aus.

Bei der Auswahl des ELM327 ist es wichtig, dass dieser das Protokoll "USER2 CAN (11bit ID, 50 kbaud)" implementiert hat. Wenn das Protokoll fehlt, merkt man das bei der erfolgreichen Initialisierung noch nicht. Man merkt es erst dann, wenn alles richtig angeschlossen ist und einfach keine Antworten kommen.

Einen solchen "Billigadapter" erkennt man an einem schwarz vergossenen Punkt auf der Platine.

Um einen funktionsfähigen Adapter zu finden, hat es sich bewährt, dass man nach "elm327 forscan" in den bekannten Onlineshops sucht. Ein weiteres Erkennungsmerkmal ist der Kippschalter zur "HS" und "MS" CAN Umschaltung sowie der eingesetzte PIC Mikrocontroller. Auch wenn es die ELM V1.5 offiziell nicht gibt, sie funktioniert mit dem Modul und nachfolgenden Adaptern trotzdem.

ELM327 OBD2 Adapter Buchsen

Um den Adapter mit der Anlage verbinden zu können, benötigt man zwei Buchsen. Die müssen für CAN-H an Pin 6 und für CAN-L an Pin 14 angeschlossen werden. Auf dem Bild "Buchse Schritt 3" ist Pin 6 die gelbe und Pin 14 rote angesteckte Ader. An die kann wiederum eine Leitung angeschlossen werden, welche an die Rocon geht. Wenn man keinen solchen Stecker hat, kann man einen solchen auch fertig bestellen.

Leitung zwischen ELM327 Adapter und RoCon

Es kann eine zwei- oder vier-adrige KNX, Telefon, Ethernet (Verlege- oder Patchkabel / CAT egal), ... Leitung verwendet werden. Das grundsätzlich Wichtige dabei ist, dass das benötigte Adernpaar verdrillt ist. Wenn der Server weiter von der RoCon enfernt ist, niemals das USB Kabel verlängern! Immer nur die CAN Leitung, da dieses Signal unempfindlich ist.

Anschluss an die RoCon BM1

Wichtig beim Arbeiten an der RoCon: ALLE Sicherungen ausschalten! Es genügt dabei nicht, die Sicherung von der Steuerung auszuschalten. Es muss auch die vom BackupHeater und der Außeneinheit ausgeschaltet werden!

An den CAN Bus der RoCon BM1 Platine kommt man über den Stecker J13. Der CAN-H muss an den ELM327 Adapter mit Pin 6 und CAN-L mit Pin 14 verbunden werden. Die Schalterstellung ist zunächst nicht wichtig.

Software

Dateien

Quelle

Da dieses Modul "inoffiziell" ist, muss man die benötigten Dateien "70_HPSU.pm" und "commands_hpsu.json" händisch in den FHEM Ordner hinein kopieren. Die aktuellen Dateien sowie der ausführliche Changelog sind über Github verfügbar: Github fhemHPSU

Installation/Update (Linux)
  1. Terminal öffnen
  2. Git-Repository herunterladen: git clone https://github.com/ahermann86/fhemHPSU
  3. "70_HPSU.pm" in den FHEM Ordner kopieren sudo cp fhemHPSU/70_HPSU.pm /opt/fhem/FHEM/
  4. "commands_hpsu.json" in den FHEM Ornder kopieren sudo cp fhemHPSU/commands_hpsu.json /opt/fhem/FHEM/
  5. Aufräumen: sudo rm -r fhemHPSU
  6. FHEM Weboberfläche im Browser öffnen
  7. Über die FHEM Befehlszeile das Modul mit reload 70_HPSU laden.
  8. Nach einem Update: Mit "Connect" eine Initialisierung ausführen und ggf. den Browser aktualisieren.

Wenn man bereits als "admin" über das Terminal eingeloggt ist, wird "sudo" vor den cp/rm-Befehlen nicht benötigt.

Rechte anpassen (Linux/Teminal)

Da das Modul mit einer Hardwareschnittstelle "redet", benötigt der FHEM Benutzer noch die nötigen Rechte dafür. Das wird über das Terminal mit folgenden Befehlen durchgeführt:

sudo usermod -a -G dialout pi
sudo usermod -a -G dialout fhem

Definition

Pfad der Schnittstelle herausfinden

Vor der Definition des Moduls, muss der Pfad der Schnittstelle herausgefunden werden. Das geht am einfachsten, indem man den ELM327 zunächst nicht in die USB Buchse eingesteckt hat. Nun führt man den Befehl ls -l /dev/serial/by-path aus. Dann steckt man den ELM327 ein und führt den Befehl nochmal aus. Nach dem zweiten Ausführen ist eine Zeile hinzu gekommen, welcher der benötigte Pfad ist.

Syntax
define <name> HPSU <device> [comfort|ultra]

Das Argument [comfort|ultra] gibt an, um welche Anlagenart es sich handelt. Wird eine Daikin angebunden, muss für die "Altherma R" "comfort" und für die "Altherma 3R" "ultra" definiert werden.

Beispiel
define myHPSU HPSU /dev/ttyUSB0

oder: (wie es meiner Meinung nach besser ist)

define myHPSU HPSU /dev/serial/by-path/pci-0000:00:13.0-usb-0:2:1.0-port0

Wenn man eine Ultra bzw eine 3R hat, sollte das mit einem weiteren Argument bekannt gemacht werden. Die Definition sieht dann so aus:

define myHPSU HPSU /dev/ttyUSB0 ultra

oder

define myHPSU HPSU /dev/serial/by-path/pci-0000:00:13.0-usb-0:2:1.0-port0 ultra

Optional: attr myHPSU room Heizung

Anwendung

Attribute

Parameter in () sind default.

  • AutoPoll (on),off
Parameter, bei denen in der "commands_hpsu.json" über "FHEMPollTime" eine Pollzeit angegeben ist, zyklisch abfragen und die resultierenden Readings aktualisieren bzw. generieren.
  • AntiMixerSwing on|(off)
Workaround für "Schwingen des Mixers 3UVB1 unterdrücken". Manchmal schwingt der Mixer im ungünstigsten Fall stundenlang hin und her. Das scheint ein FW Bug der RoCon zu sein und passiert nach Abschalten der Außeneinheit wenn die Zieltemperatur im Heizmodus erreicht wurde.
Das Modul greift mit AntiMixerSwing dann ein, wenn das Reading "HPSU.Direkter_Heizkreis_Modus" von active auf inactive wechselt und das ganze 2,5 Minuten so ansteht. Außerdem muss die Soll_Vorlauftemperatur_Waermeerzeuger > 0 sein. Sind diese Bedinungen erfüllt, schaltet das Modul die RoCon in vom "Heizen" in "Bereitschaft" und dann wieder in "Heizen".
  • CheckDHWInterrupted on|(off)
Wenn vor 11:00 Uhr Warmwasser erzeugt wird und das über die Zeit andauert, wird das um die Uhrzeit unterbrochen. Der Kompressor geht dann aus und die Anlage bleibt weiterhin in "Warmwasserbereitung". Das ist der 3-Wege-Umschaltventil Referenzfahrt geschuldet und so ähnlich auch in der Bedienungsanleitung beschrieben. Das Problem dabei ist, dass nach der Zeit "Wartezeit BOH" der Backup Heater eingeschaltet wird obwohl der Kompressor das machen könnte... Dieser Workaround beendet nach der Referenzfahrt dann kurz die "Warmwasserbereitung" und startet sie dann nochmal. Nun startet der Kompressor wieder "ganz normal".
  • AntiContinousHeating on|(off)
Dieser Workaround bewirkt, dass während dem Abtauen nicht das Brauchwasser zum "weiterheizen" verwendet wird. Das hat den positiven Effekt, dass beim Abtauen die WW Temperatur nicht um 3-4K sondern nur noch um 1-2K sinkt.
Um das zu erreichen, schaltet das Modul die Regelung während dem Modus "Heizen" beim Abtauen in den Modus "Sommer". Gleichzeitig wird "T-Frostschutz" temporär ausgeschaltet, falls dieser aktiviert ist. So wird wärend dieser Zeit das 3-Wege-Umschaltventil "3UVB1" auf 100% gestellt und der Heizkreis somit komplett geschlossen. Nach dem Abtauvorgang geht die Anlage wieder in den Heizbetrieb und "T-Frostschutz" wird auf den voherig eingestellten Wert gesetzt.
  • AntiShortCycle 1|1;3;30|(0)
Im idealen Heizbetrieb wird die Heizanforderung von "Außen" an die Regelung übergeben. Das kann ein angeschlossener Raumthermostat sein oder einfach die Betriebsartenumschaltung von Heizen auf Sommer durch das Modul (...). Wenn aber die Heizanforderung ansteht und der Kompressor bereits an der untersten Modulationsgrenze angelangt ist, steigt die Vorlauftemperatur 3°C über die Solltemperatur und der Kompressor schaltet ab. Fällt die Vorlauftemperatur unter den Sollwert, wird der Kompressor wieder eingeschaltet. Ist der Heizkreis bzw. die Abnahme groß genug, liegt zwischen dem Ein-, Aus- und wieder Einschalten eine lange Zeit. Passiert das ganze in kurzen (z.B. 5 Minuten) Zeitabständen, befindet sich die Anlage im unerwünschten und ineffizienten Taktbetrieb.
Mit aktiviertem "AntiShortCycle" kann eine definiert lange Pause, bei Überschreiten der Solltemperatur über eine bestimmte Zeit, erzwungen werden.
Um das "AntiShortCycle" zu aktivieren, kann das Attribut so gesetzt werden:
attr myHPSU AntiShortCycle 1
Damit werden die im Modul hinterlegten Standardparameter verwendet. Diese sind wie folgt festgelegt:
1;3;30 -> [Temperaturüberschreitung];[Zeit der durchgehend anstehenden Temperaturüberschreitung];[Wartezeit bis Wiedereinschalten]
Im Klartext bedeutet das:
Wenn die Vorlauftemperatur die Solltemperatur 3 Minuten lange durchgehend um 1°C überschreitet, wird nach Abschalten des Kompressors 30 Minuten mit der Betriebsart "Sommer" gewartet, bis der wieder mit der zuvor eingestellten Betriebsart (z.B. Heizen) freigegeben wird.
Sollen selbst gewählte Parameter gesetzt werden, kann das, z.B. mit 2°C Temperaturüberschreitung, wie folgt gemacht werden
attr myHPSU AntiShortCycle 2;3;30
  • RememberSetValues on|(off)
Wenn FHEM neu gestartet wird oder ein "Connect" ausgeführt wird, wird die zuletzt über "set" im Modul vorgegebene Betriebsart an der RoCon aktiviert.
Das Modus merkt sie die Vorgabe über das Reading "FHEMSET.Betriebsart".
Beispiel:
Die RoCon ist im Modus "Heizen" weil sie über das FHEM Modul mit "set myHPSU Betriebsart Heizen" auf diesen Modus gesetzt wurde. Nun "stürzt" FHEM während dem Abtauen und aktiviertem "AntiContinousHeating" ab. In diesem Moment ist und bleibt die RoCon im Modus Sommer. Wenn nun FHEM neu gestartet oder die Verbindung wiederhergestellt wird, setzt das Modul die RoCon wieder auf den Modus Heizen.
  • SuppressRetryWarnings (on)|off
Immer wieder treten bei der Kommunikation Timeouts auf, welche normal sind und nicht weiter stören. Wer die Readings "Comm.xxx" auswertet oder das DebugLog an hat, bekommt immer wieder Einträge. Mit diesem Attribut werden die "retries" unterdrükt und "entlasten" das Auswerten bzw. die Logausgabe.
  • DebugLog on|onDHW|(off)
Nur zur Modulentwicklung nötig und daher normalerweise immer off bzw. erst gar nicht als Attribut definiert. Das sollte nur dann aktiviert werden, wenn der Entwickler das benötigt. Wenn das aktiv ist, wird die Datei "70_HPSU_Log.log" im FHEM Ordner erstellt. Achtung: diese wächst theoretisch unendlich groß und sollte dann im Auge behalten werden!

Set

set <name> <parameter>

  • Connect
Adapter (neu) verbinden, Reset durchführen und JSON Datei neu einlesen.
  • Connect_MonitorMode
Adapter mit Monitor (Schnüffelmodus) verbinden.
Das ist ein Modus zur Weiterentwicklung des Moduls und wird im Normalbetrieb nicht gebraucht. Die Nutzung ist dann nötig, wenn z.B. eine neue Steuerungsart hinzu kommt, die die aktuelle "commands_hpsu.json" noch nicht unterstützt.
Ist das Modul mit diesem Modus aktiviert, werden Messages, welche in der "commands_hpsu.json" gefunden werden, regulär decodiert. Kommen unbekannte Messages hinzu, werden Readings mit folgendem Aufbau generiert:
Reading: Name: [AA]_[AA]__[S] Wert: [RequestByte1 (uint)] - [RequestByte2 (uint)] - [Request (float)] - [RequestByte1 (bits)] - [RequestByte2 (bits)]
AA = Adressbytes
S = Status -> 0=Schreiben 1=Lesen 2=Antwort
Beispiel: empfangene RAW Message: 20 0A FA 06 D9 00 01 wird zu Reading mit dem Namen: 06_D9__0_MsgHeader.180 und dem Wert: 0 - 1 - 1 - RAW: 20 0A FA 06 D9 00 01
  • Disconnect
Adapter trennen
  • ForceDHW
Warmwasser vorzeitig nachladen. Das macht im Prinzip das gleiche wie der "1x Hahn", also Position 6 des oberen Wahlschalters an der RoCon. Der Unterschied liegt darin, dass dieses Modul die Solltemperatur auf 69°C hochsetzt, wartet bis die Warmwasserbereitung gestartet ist und dann die Solltemperatur wieder auf den vorher eingestellten Wert setzt. Das hat den Vorteil, dass die Anlage das wie eine "normale" Warmwasserbereitung durchführt. Würde man das mit dem "1x Hahn" über die RoCon machen, passiert es, dass die Warmwasserbereitung nicht der Kompressor sondern der Backupheater durchführt!
  • ForceDHWTemp
Wie ForceDHW aber es kann gleichzeitig eine neue "Zieltemperatur" vorgegeben werden, die nach der Durchführung als Warmwasser Solltemperatur 1 gesetzt bleibt.
Beispiel:
ForceDHW mit der Zieltemperatur 47 °C
set myHPSU ForceDHWTemp 47
  • <HPSU.><Parameter> <Wert>
Einen Wert der RoCon einstellen.
Das Besondere an diesem Modul beim Setzen eines Wertes ist es, dass der bisherige Wert zunächst ausgelesen wird. Erst wenn sich der neue von dem bisherigen unterscheidet, wird der neue übertragen. Danach wird zur Verifizierung der Wert noch einmal von der RoCon zurückgelesen. Mit dem Readings "Comm.SetStatus" wird der Status des Vorgangs angezeigt.
Die Liste der verfügbar und einstellbaren Werte mit den zugehörigen Grenzen, sind in der "commands_hpsu.json" definiert. Es gibt mehrere Möglichkeiten, wie man einen RoCon Wert setzt. Zum Einen über die Weboberfläche mit jeweils einem Slider oder Dropdown Menü. Zum Anderen über die FHEM Befehlszeile. Hierbei ist es offen, ob man die ID oder den NAMEN eines Parameters übergibt. Fängt ein "set" mir "irgendwas." an, wird "irgendwas." ignoriert.
Nachfolgend ein paar Beispiele mit dem Setzen des Betriebsart Parameters (ID: mode_01 Namen: Betriebsart):
"set myHPSU HPSUVal.Betriebsart_[mode_01] Heizen"
"set myHPSU HPSU.Betriebsart_[mode_01] Heizen"
"set myHPSU HPSUVal.Betriebsart Heizen"
"set myHPSU HPSU.Betriebsart Heizen"
"set myHPSU Betriebsart Heizen"
"set myHPSU mode_01 Heizen"

Get

get <name> <parameter>

  • UpdateJson
Die JSON Datei "commands_hpsu.json" neu lesen und parsen. Ggf. muss der Browser danach aktualisiert werden, damit die "HPSU Dropdowns" aktualisiert werden.
  • <HPSU.><Parameter> <Wert>
Einen Wert der RoCon abfragen und als Reading generieren. Hiermit können auch Werte gelesen werden, welche verfügbar sind und nicht automatisch nach einem in der JSON vorgegebenen Zeitraster gelesen werden. Das Bedienen dieser Funktion verhält sich genauso wie mit der "set" Funktion.

Readings

Alle gepollte, manuell angefragten und zu schreibende Wert werden automatisch als Reading angelegt. Ein wichtiger Hinweis dabei ist, dass die Werte nicht nur bei Änderung, sondern nach jedem erfolgreichen Abfragen getriggert werden. So kann man nach der Definition des Moduls selbst entscheiden, wie sich die einzelnen Readings verhalten sollen. Ein Beispiel ist in dem Kapitel "Logfile" beschrieben.

Tip: Falls man Mal "aufräumen" möchte, gibt man in die FHEM Befehlszeile "deletreading myHPSU .*" ein. Damit werden alle Readings gelöscht.

Alles was mit der Kommunikation zu tun hat, fängt mit Comm. an.

Die Werte, die von und zu der HPSU gehen, haben den Präfix: HPSU.<Parametername>

Die Werte mit Präfix Info. sind vom Modul selbst erfasste oder errechnete Werte:

Info.HeatCyclicErr: Dient dazu, dass man takten der Anlage erkennen kann. Dieser wird jedes Mal um eines erhöht, wenn die Kompressorlaufzeit kleiner als 8 Minuten ist. Ist die Laufzeit größer als 20 Minuten, wird der Wert wieder genullt.
Info.LastDefrostDHWShrink: Warmwasserverlust des letzten Abtauvorgangs.
Info.Q: Aktuell abgegebene Energie (Q=m x c x delta t)
Info.x: Nach dem Laden des Moduls sind die Readings nicht verfügbar. Sie werden erst generiert, wenn ein solcher Fall eintritt. (Beispiel: LastDefrostDHWShrink fehlt solange, bis einmal abgetaut wurde...)

Beispiele für Werte der RoCon:

23:42:07 Comm.GetStatus Ok
17:00:07 Comm.ManStatus Ok: Force DHW (820)
22:37:53 Comm.SetStatus Ok: Min_Leistung_Pumpe [min_perf_pump] already set to 45 (998)
23:43:02 HPSU.Aktive_Betriebsart Heizen
23:42:16 HPSU.Betriebsart Heizen
23:42:41 HPSU.Direkter_Heizkreis_Modus active
23:42:54 HPSU.Durchfluss 900 lh
23:40:36 HPSU.Funktion_EHS 1
23:28:45 HPSU.Heizgrenze_Tag 17 °C
23:38:21 HPSU.Heizkurve 0.3
23:42:57 HPSU.Heizung_Ruecklauf 24 °C
23:42:57 HPSU.Kaeltemitteltemperatur 27 °C
22:37:52 HPSU.Max_Leistung_Pumpe 70 %
23:38:21 HPSU.Max_T_Vorlauf 45 °C
23:36:11 HPSU.Max_WW_Ladezeit 240 min
23:36:10 HPSU.Min_T_Vorlauf 25 °C
23:42:58 HPSU.Pos_Vent_3UVB1 15 %
23:42:55 HPSU.Pos_Vent_3UV_DHW 0 %
23:42:58 HPSU.Ruecklauftemperatur 23 °C
23:42:26 HPSU.Soll_T_Raum_1 22 °C
23:42:25 HPSU.Soll_T_Warmwasser 48 °C
17:00:07 HPSU.Soll_T_Warmwasser_1 48 °C
23:42:42 HPSU.Soll_T_direkter_Heizkreis 28.5 °C
23:42:42 HPSU.Soll_Vorlauftemperatur_Waermeerzeuger 28.5 °C
14:23:19 HPSU.Spreizung_Mod_HZ 8 °C
23:42:43 HPSU.TVBH 29.9 °C
23:42:10 HPSU.T_Aussen -1.3 °C
23:42:11 HPSU.T_Aussen_WP -3 °C
23:41:28 HPSU.T_Aussen_gemittelt -0.4 °C
18:25:00 HPSU.T_Vorlauf_Tag 25 °C
23:42:17 HPSU.T_Warmwasser 48.3 °C
23:42:56 HPSU.T_direkter_Heizkreis 29.8 °C
23:42:55 HPSU.UWPumpe 68 %
23:42:56 HPSU.Vorlauftemperatur_Waermeerzeuger 30.3 °C

usw...

Kommando- und Konfigurationsdatei "commands_hpsu.json"

In der Datei sind alle CAN Adressen hinterlegt. Damit kann festgelegt werden, wie sich ein Parameter verhält, welchen Datentyp er hat, ob er schreibbar ist, wie oft er gepollt werden soll und welche besonderen Eigenschaften er besitzt.

Beispiel:

"t_dhw_setpoint1" : { → Name
"name" : "Soll_T_Warmwasser_1", → Readingsname - hier HPSU.Soll_T_Warmwasser_1
"system" : "comfort|ultra", → Gültigkeit Anlagentyp
"command" : "31 00 13 00 00 00 00", → CAN Kommando
"divisor" : "10", → Teiler
"writable" : "true", → Ist über FHEM (RoCon) änderbar
"FHEMControl" : "slider,35,1,70", → FHEM Eigabetyp
"FHEMPollTime" : 0, → Wie oft, pro Sekunde, soll der Parameter gelesen werden
"unit" : "deg", → In FHEM angezeigte Einheit
"type" : "float" → Datentyp
},

Anmerkung: In diesem Beispiel muss "Soll_T_Warmwasser_1" nicht zyklisch gelesen werden, da sich der im Normalfall nie ändert. Beim Ändern über FHEM wird der neue Wert automatisch rückgelesen und das Reading dementsprechend aktualisiert.

Beispiel mit Sonderfunktion(en):

"t_outdoor_ot1" : { → Name
"name" : "T_Aussen", → Readingsname - hier HPSU.Soll_T_Warmwasser_1
"system" : "comfort|ultra", → Gültigkeit Anlagentyp
"command" : "31 00 FA C0 FF", → CAN Kommando
"divisor" : "10", → Teiler
"writable" : "false", → Ist über FHEM (RoCon) nur lesbar
"FHEMPollTime" : 60, → Wie oft, pro Sekunde, soll der Parameter gelesen werden
"statistic" : "h|d", → Am Ende jeder Stunde (h) und jedem Tag (d) wird Min, Max, und Avg als Reading generiert Beispiel: Stat.HPSU.T_Aussen.Day Min: -5.8 Avg: -1.57 Max: 5.6
"unit" : "deg", → In FHEM angezeigte Einheit
"type" : "float" → Datentyp
},


Aufzeichnung

Zum schnellen Einstieg ein Beispiel für das Loggen von Werten und Plotten von Kurven.

Logfile

Triggern der Werte

Um Daten aufzeichnen zu können, müssen die in eine Datei bei Änderung geschrieben werden. Da das Modul nicht nur bei einer Wertänderung die betroffenen Readings triggert, muss man das über das Attribut "event-on-change-reading" und "event-on-update-reading" nachträglich einstellen. Das ist kein Fehler des Moduls sondern ein Designziel - s.o. Definiert man die Attribute nicht, funktioniert das auch. Das Problem dabei wird aber, dass im Sekunden Takt die Werte in die Logdatei geschrieben werden. So wird die sehr schnell sehr groß. Um das auf ein "vernünftiges" Maß einzuschränken, haben sich folgende Attribute für das Modul bewährt:

attr myHPSU event-on-change-reading HPSU.T_direkter_Heizkreis:0.3,HPSU.UWPumpe:3,HPSU.Vorlauftemperatur_Waermeerzeuger:0.5,HPSU.Heizung_Ruecklauf:0.5,HPSU.UWPumpe:5,HPSU.Durchfluss:40,.*
attr myHPSU event-on-update-reading Info.LastDefrostDHWShrink,HPSU.ehs

Definition des Logfiles

Will man alle Werte loggen, kann man das wie folgt definieren (nicht empfohlen!):

define myHPSU_Log FileLog ./log/myHPSU_Log-%Y-%m.log myHPSU:.*

Die etwas "schonendere", vor allem für die Pi Benutzer, welche auf die SD Karte loggen, ist wie folgt zu definieren:

define myHPSU_Log FileLog ./log/myHPSU_Log-%Y-%m.log myHPSU:HPSU.(Aktive_Betriebsart|Betriebsart|Heizung_Ruecklauf|Pos_Vent_3UVB1|Soll_T_direkter_Heizkreis|T_Aussen|T_Aussen_WP|T_Warmwasser|T_direkter_Heizkreis|Vorlauftemperatur_Waermeerzeuger):.*|myHPSU:Info.(LastDefrostDHWShrink|Ts):.*
Optional: attr myHPSU_Log room Heizung

In diesem Beispiel sieht man, dass es sinnvoll ist, die Werte gezielt (einzeln) auszuwählen. Da sind schon nach zwei Tagen ~5000 Zeilen im Logfile eingetragen worden!

Definition des SVG Plots

Das kann man direkt in dem Logfile Modul mit klick auf "Create SVG plot" definieren. Danach ist das SVG Plot Modul im Bearbeitungsmodus offen. Hier kann man die einzelnen Kurven händisch anlegen oder man klickt hinter "GPLOTFILE" auf den Dateinamen "SVG_myHPSU_Log_1". Es öffnet sich der Dateieditor und man kann nachfolgendes einfach hineinkopieren und mit "Save SVG_myHPSU_Log_1.gplot" die Datei abspeichern:

# Created by ah, 2021-01-30 23:45:00
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics 
set y2tics 
set grid ytics
set ylabel "Temperatur"
set y2label "Position Mixer"
set yrange [10:65]
set y2range [0:105]

#myHPSU_Log 4:myHPSU.HPSU.T_Warmwasser\x3a::
#myHPSU_Log 4:myHPSU.HPSU.Vorlauftemperatur_Waermeerzeuger\x3a::
#myHPSU_Log 4:myHPSU.HPSU.Heizung_Ruecklauf\x3a::
#myHPSU_Log 4:myHPSU.HPSU.Soll_T_direkter_Heizkreis\x3a::
#myHPSU_Log 4:myHPSU.HPSU.T_direkter_Heizkreis\x3a::
#myHPSU_Log 4:myHPSU.HPSU.Pos_Vent_3UVB1\x3a::
#myHPSU_Log 4:myHPSU.HPSU.Aktive_Betriebsart\x3a::$fld[3]=~"3|Abtauen"?104:-10
#myHPSU_Log 4:myHPSU.Info.LastDefrostDHWShrink\x3a::$fld[3]*=10

plot "<IN>" using 1:2 axes x1y1 title 'Warmwasser' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Vorlauf Heizkreis' ls l0 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Rücklauf Heizkreis' ls l2 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Vorlauf Heizkreis soll' ls l6 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Vorlauf HK direkt' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '0-B 100-A (3UVB1)' ls l7 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Abtauen' ls l5 lw 12 with horizontalLineFrom,\
     "<IN>" using 1:2 axes x1y2 title 'WW Verlust' ls l4 lw 1 with points
Optional: attr SVG_myHPSU_Log_1 room Heizung

Erweiterungen

COP berechnen

Wenn man ein separates Energiemessgerät wie z.B. SDM72DM für die Wärmepumpe im Einsatz hat, kann man den COP berechnen. Das realisiert man am einfachsten mit einem userReading wie in nachfolgendem Beispiel:

attr myHPSU userReadings uR.COP {my $val = ReadingsNum("SDM72DM_Z1", "Power_Sum__W", 0)/1000.; if($val > 0){return ReadingsNum($name, "Info.Q", 0)/$val}else{return 0};}

Relativ schnell wird man aber feststellen, dass der COP sehr unruhig ist. Um den zu mitteln, nimmt man am einfachsten ein DOIF. Beispiel mit Mittelung über 5 Werte:

define diHPSU_Control DOIF ##
attr diHPSU_Control event_Readings COP_smooth:[myHPSU:uR.COP:avg5]

Um das dann mitzuloggen, muss |diHPSU_Control:COP_smooth:.* noch hinter "myHPSU_Log" Definition.

Heizstab mit mehreren Stufen

Wenn der Heizstab extern mehrstufig (< 3kW) gesteuert werden soll, kann man das mit einer "kleinen" Relaisschaltung realisieren. So kann man den Heizstab "frei" mit den Stufen 3kW, 1,5kW oder 1kW steuern. Wichtig dabei ist es, den Parameter "HPSU.Funktion_EHS" in der Zeit auf 0 zu setzen. Wenn man das nicht tut und die Heizung paralell anfängt zu heizen und den Heizstab anfordert, gibt es durch die Verschaltung einen Kurzschluss. Weiterhin ist die Ansteuerung der Relais noch zusätzlich über das AUX Relais der RoCon über die Klemme J13 geschleift. Das hat den Hintergrund, dass die RoCon im Fehlerfall die Warmwassertemperatur mit dem Parameter "Sonderfkt Schaltk = 1" und "Schaltschwelle TDHW = 65" unabhängig der externen Ansteuerung begrenzen kann.

In meinem Fall steuert FHEM, in Abhängigkeit des PV Überschuss wenn das WW auf 48°C ist, die Relais über einen KNX Aktor an.

Kompatibilität

Name / Typ Innengerät Außengerät Baujahr Raumstation RoCon U1 Besonderheiten
Axel (Modulentwickler)

Rotex HPSU Compact

516 H/C 11 kW - RRLQ011CAW1 06/2017 n.v. Aktivierte Modulfkt.: AntiMixerSwing, CheckDHWInterrupted, AntiContinousHeating

Alles über FHEM: Absenken der WW Temp wenn nachts geheizt wird, Vorzeitige WW Bereitung bei PV Überschuss, WW Bereitung immer um 17 Uhr, damit Abends das Wasser immer warm ist, Sperren der Heizung bevor Sonne (über Wetterbericht)...

Andi2055

Rotex HPSU Compact

516 11kW 2017 n.v. ext. Raumthermostat angeschlossen

Aktivierte Modulfkt.: AntiMixerSwing, CheckDHWInterrupted, AntiContinousHeating

giulup

Rotex HPSU Compact

2013 n.v. Abtaufix mit Relaisschaltung gelöst, Kältekreis wird parallel am Anschluss X10A mittels ESPAltherma und Mqtt miterfasst, Relais steuern den Kühl- und Heizbetrieb
Fuxi

Rotex HPSU Compact

508 8kW 2014 vorhanden Alles per MQTT in Loxone visualisiert
MadMax

DAIKIN Altherma 3 R ECH2O

504 H/C 6 kW -

Altherma 3R 07

2020 n.v.
Maxman83

Rotex HPSU Compact

508 8kW 2017 n.v.
Stephan

Daikin Altherma 3 H HT ECH2O

ETSX16P50D + 2x Mischermodul EHS157068 EPRA14DAW1 14kW 2021 Funkraumthermostat EKRTR Alles wird per MQTT an einen Mosquitto-Server gemeldet und von dort mit OpenHAB abgeholt. Danach durch OpenHAB persistiert in eine InfluxDB und dann mit Grafana ausgewertet. Außerdem werden parallel noch die Werte mittels ESPAltherma auf einem M5StickC getrackt.

Falls weitere Anlagen mit dem Modul laufen - gerne bei mir melden, dann nehme ich weitere über das FHEM Forum oder Github in die oben stehende Tabelle auf.

Der Ursprung

ToDo Allgemein

Weblinks