Rotex HPSU Compact: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
(Kompatibilität erweitert)
 
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
|ModForumArea=Heizungssteuerung/Raumklima
|ModForumArea=Heizungssteuerung/Raumklima
|ModTechName=70_HPSU.pm
|ModTechName=70_HPSU.pm
|ModOwner=[https://forum.fhem.de/index.php?action=profile;u=36478 Axel]
|ModOwner={{Link2FU|36478|Axel}}
}}
}}
Modul zur Anbindung einer '''ROTEX HPSU Compact''' Wärmepumpe über CAN Bus mit einem einfach und günstig beschaffbaren ELM327.
 
[[File:HPSU_Testaufbau.jpg|mini|rechts|Regelung]]
 
Modul zur Anbindung einer '''ROTEX HPSU compact / DAIKIN Altherma R ECH<sub>2</sub>O''' oder '''ROTEX HPSU compact Ultra / DAIKIN Altherma 3 R ECH<sub>2</sub>O''' Wärmepumpe über CAN Bus mit einem einfach und günstig beschaffbaren ELM327.
 
{| class="wikitable centered" style="margin: 1em auto;" cellpadding="10"
{| class="wikitable centered" style="margin: 1em auto;" cellpadding="10"
| align="center" | [[Image:Clock - Under Construction.svg|40px]]  
| align="center" | [[Image:Clock - Under Construction.svg|40px]]  
Zeile 15: Zeile 19:


== Allgemein ==
== Allgemein ==
* Auslesen und Setzen aller über die Rocon B1 zur Verfügung stehenden Parameter
* Auslesen und Setzen aller über die Rocon B1 bzw RoCon+ zur Verfügung stehenden Parameter
* Keine Zugriffsrechte nötig (Benutzer, Fachmann)
* Keine Zugriffsrechte nötig (Benutzer, Fachmann)
* Anbindung mittels einem ELM327 Adapter an die CAN Schnittstelle der RoCon BM1 an J13
* Anbindung mittels ELM327 Adapter an die CAN Schnittstelle der RoCon BM1 bzw. BM2C an J13
 
<gallery widths="450" heights="300">
HPSU_Testaufbau_2.jpg|Testaufbau
</gallery>


== Voraussetzungen ==
== Voraussetzungen ==
Zeile 28: Zeile 36:
Einen solchen "Billigadapter" erkennt man an einem schwarz vergossenen Punkt auf der Platine.
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.
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.


<gallery>
<gallery>
Zeile 34: Zeile 42:
70_HPSU_ELM_327_unten.jpg|Funktionsfähiger ELM327 unten
70_HPSU_ELM_327_unten.jpg|Funktionsfähiger ELM327 unten
70_HPSU_ELM_327_oben.jpg|Funktionsfähiger ELM327 oben
70_HPSU_ELM_327_oben.jpg|Funktionsfähiger ELM327 oben
Mein_ELM_327.jpg|Alternativ funktionsfähiger ELM327 oben
</gallery>
</gallery>


==== ELM327 OBD2 Adapter Buchsen ====
==== 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.
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 man wiederrum eine Leitung angeschlossen werden, welche an die Rocon geht. Wenn man keinen solchen Stecker hat, kann man einen solchen auch fertig dazu bestellen.


<gallery>
<gallery>
Zeile 48: Zeile 56:


==== Leitung zwischen ELM327 Adapter und RoCon ====
==== 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.
Es kann eine 2 oder 4 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.


==== Anschluss an die RoCon BM1 ====
==== 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!!
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.  
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.  
Zeile 63: Zeile 70:
==== Dateien ====
==== Dateien ====
===== Quelle =====
===== 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: [https://github.com/ahermann86/fhemHPSU Github fhemHPSU]
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:
 
[https://github.com/ahermann86/fhemHPSU Github fhemHPSU]


===== Installation/Update (Linux) =====
===== Installation/Update (Linux) =====
# Terminal öffnen
# Terminal öffnen
# Git-Repository herunterladen: <code>git clone https://github.com/ahermann86/fhemHPSU</code>
# Git-Repository herunterladen: <code>git clone https://github.com/ahermann86/fhemHPSU</code>
Zeile 83: Zeile 85:


==== Rechte anpassen (Linux/Teminal) ====
==== Rechte anpassen (Linux/Teminal) ====
Da das Modul mit einer Hardwareschnittstelle "redet", benötigt der FHEM Benutzer noch die nötigen Rechte dafür.  
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:
Das wird über das Terminal mit folgenden Befehlen durchgeführt:
Zeile 91: Zeile 92:


==== Definition ====
==== Definition ====
===== Pfad der Schnittstelle herausfinden =====
===== 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
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
Zeile 97: Zeile 97:


===== Syntax =====
===== Syntax =====
:<code>define <name> HPSU <device> [comfort|ultra]</code>


:<code>define <name> HPSU <device></code>
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 =====
===== Beispiel =====
:<code>define myHPSU HPSU /dev/ttyUSB0</code>
:<code>define myHPSU HPSU /dev/ttyUSB0</code>


Zeile 107: Zeile 107:


:<code>define myHPSU HPSU /dev/serial/by-path/pci-0000:00:13.0-usb-0:2:1.0-port0</code>
:<code>define myHPSU HPSU /dev/serial/by-path/pci-0000:00:13.0-usb-0:2:1.0-port0</code>
Wenn man eine Ultra bzw eine 3R hat, sollte das mit einem weiteren Argument bekannt gemacht werden. Die Definition sieht dann so aus:
:<code>define myHPSU HPSU /dev/ttyUSB0 ultra</code>
oder
:<code>define myHPSU HPSU /dev/serial/by-path/pci-0000:00:13.0-usb-0:2:1.0-port0 ultra</code>
Optional: <code>attr myHPSU room Heizung</code>


== Anwendung ==
== Anwendung ==
=== Attribute ===  
=== Attribute ===  
''Parameter in () sind default.''
''Parameter in () sind default.''
Zeile 131: Zeile 138:
</gallery>
</gallery>


* '''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:
:<code>attr myHPSU AntiShortCycle 1</code>
:Damit werden die im Modul hinterlegten Standardparameter verwendet. Diese sind wie folgt festgelegt:
::<code>1;3;30 -> [Temperaturüberschreitung];[Zeit der durchgehend anstehenden Temperaturüberschreitung];[Wartezeit bis Wiedereinschalten]</code><br>
: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
:<code>attr myHPSU AntiShortCycle 2;3;30</code>
<gallery widths="300">
Datei:211209 AntiShortCycle Off Day.png|Ohne AntiShortCycle
Datei:211209 AntiShortCycle Day.png|Mit AntiShortCycle
Datei:211209 AntiShortCycle Day zoom.png|Mit AntiShortCycle gezoomt
Datei:220105_AntiShortCycle_Max_Idle.png|Mit AntiShortCycle - Verhalten im Betrieb (MaxDifOccurred, Idle, On)
</gallery>


* '''RememberSetValues''' on|(off)
* '''RememberSetValues''' on|(off)
Zeile 137: Zeile 166:


:Beispiel:  
:Beispiel:  
:Die RoCon ist im Modus "Heizen". 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.
:Die RoCon ist im Modus "Heizen" weil sie über das FHEM Modul mit <code>"set myHPSU Betriebsart Heizen"</code> 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
* '''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.
: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|onWithMsg|onDHW|(off)
* '''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!
: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===
<code>set <name> <parameter></code>
<code>set <name> <parameter></code>
* '''Connect'''
* '''Connect'''
:Adapter (neu) verbinden / Reset durchführen
:Adapter (neu) verbinden, Reset durchführen und JSON Datei neu einlesen.
* '''Connect_MonitorMode'''
* '''Connect_MonitorMode'''
:Adapter mit Monitor (Schnüffelmodus) verbinden.
:Adapter mit Monitor (Schnüffelmodus) verbinden.
Zeile 155: Zeile 185:
:AA = Adressbytes
:AA = Adressbytes
:S = Status -> 0=Schreiben 1=Lesen 2=Antwort
: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 und dem Wert: 0 - 1 - 1 - 0b00000000 0b00000001
: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'''
* '''Disconnect'''
:Adapter trennen
:Adapter trennen
* '''ForceDHW'''
* '''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 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!
: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
:<code>set myHPSU ForceDHWTemp 47</code><br>
:
:
* '''<HPSU.><Parameter> <Wert>'''
* '''<HPSU.><Parameter> <Wert>'''
:Einen Wert der RoCon einstellen.  
: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.
: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.
<br>
:Nachfolgend ein paar Beispiele mit dem Setzen des Betriebsart Parameters (ID: mode_01 Namen: Betriebsart):
:Nachfolgend ein paar Beispiele mit dem Setzen des Betriebsart Parameters (ID: mode_01 Namen: Betriebsart):
<br>
::<code>"set myHPSU HPSUVal.Betriebsart_[mode_01] Heizen"</code><br>
:<code>"set myHPSU HPSUVal.Betriebsart_[mode_01] Heizen"</code><br>
::<code>"set myHPSU HPSU.Betriebsart_[mode_01] Heizen"</code><br>
:Ab 70_HPSU.pm Version 1.11 (in Arbeit):<br>
::<code>"set myHPSU HPSUVal.Betriebsart Heizen"</code><br>
:<code>"set myHPSU HPSU.Betriebsart_[mode_01] Heizen"</code><br>
::<code>"set myHPSU HPSU.Betriebsart Heizen"</code><br>
:<code>"set myHPSU HPSUVal.Betriebsart Heizen"</code><br>
::<code>"set myHPSU Betriebsart Heizen"</code><br>
:<code>"set myHPSU HPSU.Betriebsart Heizen"</code><br>
::<code>"set myHPSU mode_01 Heizen"</code><br>
:<code>"set myHPSU Betriebsart Heizen"</code><br>
:<code>"set myHPSU mode_01 Heizen"</code><br>


===Get===
===Get===
Zeile 183: Zeile 216:


===Readings===
===Readings===
Alle gepollte, manuell angefragten und zu schreibende Wert werden automatisch als Reading angelegt.<br>
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 <code>Comm.</code> an.
Alles was mit der Kommunikation zu tun hat, fängt mit <code>Comm.</code> an.


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


Die Werte mit Präfix <code>Info.</code> sind vom Modul selbst erfasste oder errechnete Werte:
Die Werte mit Präfix <code>Info.</code> sind vom Modul selbst erfasste oder errechnete Werte:
Zeile 194: Zeile 230:


:Info.Q: Aktuell abgegebene Energie (Q=m x c x delta t)
: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...)
<gallery widths="239" heights="44">
<gallery widths="239" heights="44">
Datei:70 HPSU Aktuelle Leistung.jpg|Aktuell abgegebene Leistung
Datei:70 HPSU Aktuelle Leistung.jpg|Aktuell abgegebene Leistung
Zeile 199: Zeile 237:


Beispiele für Werte der RoCon:
Beispiele für Werte der RoCon:
:<code>23:42:07 Comm.GetStatus Ok</code><br>
:<code>23:42:07 Comm.GetStatus Ok</code><br>
:<code>17:00:07 Comm.ManStatus Ok: Force DHW (820)</code><br>
:<code>17:00:07 Comm.ManStatus Ok: Force DHW (820)</code><br>
Zeile 233: Zeile 270:
:<code>23:42:56 HPSU.T_direkter_Heizkreis 29.8 °C</code><br>
:<code>23:42:56 HPSU.T_direkter_Heizkreis 29.8 °C</code><br>
:<code>23:42:55 HPSU.UWPumpe 68 %</code><br>
:<code>23:42:55 HPSU.UWPumpe 68 %</code><br>
:<code>23:42:56 HPSU.Vorlauftemperatur_Waermeerzeuger 30.3 °C</code><br>
:<code>23:42:56 HPSU.Vorlauftemperatur_Waermeerzeuger 30.3 °C</code>
usw...
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.
<gallery widths="1000" heights="300">
Datei:70_HPSU_Plot_Beispiel_1.png|Beispiel Aufzeichnung
</gallery>
=== 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:
:<code>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,.*</code><br>
:<code>attr myHPSU event-on-update-reading Info.LastDefrostDHWShrink,HPSU.ehs</code><br>
==== Definition des Logfiles ====
Will man alle Werte loggen, kann man das wie folgt definieren (nicht empfohlen!):
:<code>define myHPSU_Log FileLog ./log/myHPSU_Log-%Y-%m.log myHPSU:.*</code>
Die etwas "schonendere", vor allem für die Pi Benutzer, welche auf die SD Karte loggen, ist wie folgt zu definieren:
:<code>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):.*</code><br>
:Optional: <code>attr myHPSU_Log room Heizung</code>
<gallery widths="600" heights="300">
Datei:70_HPSU_Logfile_Beispiel_1.png|Beispiel Logfile Definition
</gallery>
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: <code>attr SVG_myHPSU_Log_1 room Heizung</code>
== Erweiterungen ==
=== COP berechnen ===
Wenn man ein separates Energiemessgerät wie z.B. [https://github.com/ahermann86/fhemModbusSDM72DM 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:
: <code>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};}</code>
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:
: <code>define diHPSU_Control DOIF ##</code>
: <code>attr diHPSU_Control event_Readings COP_smooth:[myHPSU:uR.COP:avg5]</code>
Um das dann mitzuloggen, muss <code>|diHPSU_Control:COP_smooth:.*</code> 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.''
<gallery>
Heizstab_Schaltplan.png|Schaltplan (selbst gezeichnet)
Heizstab_Relais.jpg|Gesamtansicht
Heizstab_Relais_offen.jpg|Detailansicht
</gallery>
== Kompatibilität ==
{| class="wikitable"
|+
!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 ECH<sub>2</sub>O
|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 ==
== Der Ursprung ==
ToDo Allgemein
ToDo Allgemein



Aktuelle Version vom 18. Januar 2022, 00:26 Uhr

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