Luxtronik Warmwasser Zirkulation ZIP

Begonnen von westgate, 25 März 2019, 22:34:09

Vorheriges Thema - Nächstes Thema

westgate

Hallo,

ich habe eine Alpha Innotec WZSV92H. Auf dieser läuft der Softwarestand  V3.83.1 (r4366) der Luxtronik.
Hier erkläre ich euch wie ich meine Warmwasser Zirkulation ZIP über FHEM steuere.

Im folgenden Post erkläre ich ein wenig welche Werte man von der Luxtronik auslesen kann.
Dieser Post ist für das weitere Verständnis von Vorteil.
https://forum.fhem.de/index.php/topic,98930.msg922874.html#msg922874


Allgemein

Die Luxtronik Steuerung wird von vielen Herstellern von Wärmepumpen, für viele verschiedene Modell eingesetzt.
Sozusagen ist die Luxtronik das Gehirn vieler Wärmepumpen. Der Rest der Hardware hat keine Intelligenz.
Da die Luxtronik universel für so viele Geräte eingesetzt wird, ist sie eine "Eierlegendewollmilchsau".
Das heißt es existieren unglaublich viele Konfigurationsmöglichkeiten, Eingänge, Ausgänge und vor allem Bezeichnungen.
Es gibt also Parameter und Funktionen die sind für den einen Betreiber interessant aber für den andern vollkommen uninteressant (z.B. Luftwärmepumpe <-> Solewärmepumpe).

Ein direktes Schalten von Ausgängen der Luxtronik ist nicht möglich.
Dies ist kein Bug sondern ein Feature. Die Luxtronik denkt immer mit und hat den Schutz der Anlage im Fokus.
Wäre ein direktes Schalten möglich könnte man z.B. versehentlich die Zusatz Heizstäbe Anschalten aber vergessen die Energie durch Pumpen abzuführen. Dies könnte zu Schäden an der Anlage führen.


Erste Versuche die Warmwasser Zirkulation zu steuern

Zuerst habe ich versucht die Zirkulation mit set hotWaterCircPumpDeaerate on zu steuern. Dieses Kommando wird von Luxtronik FHEM Modul bereit gestellt.
Hier wird der Entlüftungsmodus benutzt, den die Luxtronik bietet, diesen kann man auch am Bedienteil aktivieren.
Leider geht im Entlüftungsmodus nur die Entlüftung. Alle anderen Funktionen der Anlage werden still gesetzt (Schutz der Anlage).
Somit bleibt auch der Kompressor und alles anderen Pumpen stehen und müssen nach dem Entlüften wieder Anlaufen was nicht gut ist.


Zweiter Versuch


Reverse Engineering
Da ich so langsam verstehe wie FHEM aufgebaut ist und jetzt auch vestehe welche Werte die Luxtronik liefert (siehe Link oben), habe ich mich mal an das LUXTRONIK2 FHEM Modul gewagt.
Das Modul ist in Perl geschrieben. Habe vor langer Zeit viel mit Perl gemacht aber eigentlich alles vergessen. Deshalb schaue ich einfach was schon im Modul steht und passe das so gut es geht an.

Das Luxtronik2 Modul befindet sich bei meinem Raspberry Pi unter /opt/fhem/FHEM/23_LUXTRONIK2.pm.
Die Entwickler benutzen ein SVN um die aktuellen Versionen bzw. die Änderungen zu dokumentieren. https://svn.fhem.de/trac/browser/trunk/fhem
Das Luxtronik Modul findet man unter https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/23_LUXTRONIK2.pm

Für mich interessant wurde es so um die Codzeile 310 herum.
Oberhalb findet man den bei den Befeheln set hotWaterCircPumpDeaerate und set heatingSystemCircPumpDeaerate ausgeführten Code.
Unterhalb werden die set Kommandos definiert.

# Einstellung->Entlüftung
   elsif( int(@_)==4 &&
          ( $cmd eq 'hotWaterCircPumpDeaerate' || $cmd eq 'heatingSystemCircPumpDeaerate' ) ) {
        Log3 $name, 3, "set $name $cmd $val";
        return "$name Error: Wrong parameter given - use on,off"     if $val !~ /on|off/;
        $hash->{LOCAL} = 1;
        $resultStr = LUXTRONIK2_SetParameter ($hash, $cmd, $val);
        if( $val eq "on"
            || ReadingsVal( $name, "heatingSystemCircPumpDeaerate", "off" ) eq "on"
            || ReadingsVal( $name, "hotWaterCircPumpDeaerate", "off" ) eq "on" ) {   
          $resultStr .= LUXTRONIK2_SetParameter ($hash, "runDeaerate", 1);   
        }
        # only send "0" if no Deaerate checkbox is selected at all.   
        else {
          $resultStr .= LUXTRONIK2_SetParameter ($hash, "runDeaerate", 0);   
        }
        $hash->{LOCAL} = 0;
        return $resultStr;
   }
   
  my $list = "statusRequest:noArg"
          ." activeTariff:0,1,2,3,4,5,6,7,8,9"
          ." boostHotWater"
          ." heatingCurveEndPoint"
          ." heatingCurveOffset"
          ." heatingSystemCircPumpDeaerate:on,off"
          ." heatSourceDefrostAirEnd"
          ." heatSourceDefrostAirThreshold"
          ." hotWaterCircPumpDeaerate:on,off"
          ." hotWaterTemperatureTarget "
          ." resetStatistics:all,statBoilerGradientCoolDownMin,statAmbientTemp...,statElectricity...,statHours...,statHeatQ..."
          ." returnTemperatureHyst "
          ." returnTemperatureSetBack "
          ." opModeHotWater:Auto,Party,Off"
          ." synchronizeClockHeatPump:noArg"
          ." INTERVAL ";


Bei Zeile 1522 findet man dann heraus was eigentlich hinterLUXTRONIK2_SetParameter ($hash, "runDeaerate", 1) steckt.

   elsif ($parameterName eq "runDeaerate") {
     $setParameter = 158;
     $setValue = $realValue;
   }


Es wird der Paramert mit dem Index 158 ($setParamter) mit dem übergebenen Wert ($setValue) belegt.
Im weiteren wird dieser Wert dann auf die Luxtronik geschrieben Zeile 1450 und fort folgende.

Ok jetzt habe ich verstanden wie Variablen auf der Luxtronik geschrieben werden. Will ich dort etwas schreiben und der betreffende Wert exisitert nicht als Set Befehl muss ich selbst im LUXTRONIK2.pm programmieren.

Wie könnte man also Zirkulation realisieren?
Die Luxtronik (Bedienteil) bietet die Möglichkeit unter Warmwasser -> Pflegeprogramm -> Zirkulation feste Zeiten für die Warmwasser Zirkulation einzustellen.
Unter Schaltuhren hat man verschieden Möglichkeiten diese Zirkulationszeiten einzustellen.
Wichtig hierbei man stellt nicht die Zirkulationszeiten, sondern die Sperrzeiten ein.
Das heißt ein Wert von 08:00 - 22:00 sperrt zwischen 8:00 und 22:00 die Zirkulation. Will ich von 8:00 bis 22:00 Zirkulation muss ich es genau anders herum eintragen 22:00 - 8:00.

Hier könnte was gehen ;-)

Ich bin darauf gekommen das der Wert 00:00 - 00:00 die Zirkulation aus schaltet. Den die Sperrzeit geht ja von 0 Uhr bis 0 Uhr. Also nie an.
Stellt man 00:01 - 00:00 ein läuft die Zirkulation den ganzen Tag nur in der Minute zwischen 0 Uhr und 0:01 Uhr nicht.
Diese Zeitwerte in Minuten werden in der Luxtronik in Sekunden umgerechnet. 00:00 = 0s, 00:01 = 60s, 01:00 = 3600, usw.
Diese Werte sind ein String!
Die ersten belegbaren Werte (Warmwasser -> Pflegeprogramm -> Zirkulation -> Schaltuhren -> Woche ->  1) werden in den HeatpumpParameters 507 und 508 abgelegt.
Man kann also durch setzen von HeatpumpParameters 507 = 0 und HeatpumpParameters 508 = 0 die Zirkulation ausschalten und durch setzen von HeatpumpParameters 507 = 60 und HeatpumpParameters 508 = 0 die Zirkulation einschalten (mit der kurzen Pause zwischen 00:00 und 00:01).

ZitatAktualisierte Infos 9.12.2020
Die Luxtronik besitzt 3 Tabellen für die Zirkulationszeiten.
Die aktive Tabelle wird mit dem Parameter ausgewählt
506 Einst_SuZIP_akt

Woche(Mo-SO)     = 0
5+2(Mo-Fr,Sa-So) = 1
Tage(Mo,Di...)       = 2

Um also die Zeitwerte für die Woche zu nutzen muss beim Einschalten noch gesetzt werden.
506 Einst_SuZIP_akt : 0

Beim Ausschalten werde ich den Wert zukünftig auf die Tabelle Tage (Mo,Di,...) setzen.
Diese Tabelle sollte man dann also in seiner Luxtronik auswählen und dort evtl. gewünschte Taktzeiten eintragen.
506 Einst_SuZIP_akt : 2


Beinflusst wird das ganze noch von der Taktzeit (Warmwasser -> Pflegeprogramm -> Zirkulation -> Taktzeit) hier ist es wichtig das "Zeit aus" auf 0 min steht. Dann bleibt die Zirkulation immer an egal was in "Zeit ein" eingestellt ist.
Diese beiden Werte befinden sich in den HeatpumpParameters 697 und 698.
Mein Vorschlag  HeatpumpParameters 697=1 (Zeit ein 1 Min) HeatpumpParameters 697=0 (Zeit aus 0 Min).

So kann man die Zirkulation steuern  ;D. Jetzt müssen wir das Modul anpassen.

Anpassen des LUXTRONIK2.pm
Jetzt habe ich das Perl Modul angepasst. Im Anhang findet Ihr meine Version 23.LUXTRONIK2_Westgate.pm in die am 25.03.2019 verfügbare Version des SVN eingebaut 23_LUXTRONIK2.pm.

Hinter die Einstellungen->Entlüftung ca. Zeile 310 füge ich folgendes ein (Ergänzungen in Rot):

# Einstellung->Entlüftung
   elsif( int(@_)==4 &&
          ( $cmd eq 'hotWaterCircPumpDeaerate' || $cmd eq 'heatingSystemCircPumpDeaerate' ) ) {
        Log3 $name, 3, "set $name $cmd $val";
        return "$name Error: Wrong parameter given - use on,off"     if $val !~ /on|off/;
        $hash->{LOCAL} = 1;
        $resultStr = LUXTRONIK2_SetParameter ($hash, $cmd, $val);
        if( $val eq "on"
            || ReadingsVal( $name, "heatingSystemCircPumpDeaerate", "off" ) eq "on"
            || ReadingsVal( $name, "hotWaterCircPumpDeaerate", "off" ) eq "on" ) {   
          $resultStr .= LUXTRONIK2_SetParameter ($hash, "runDeaerate", 1);   
        }
        # only send "0" if no Deaerate checkbox is selected at all.   
        else {
          $resultStr = LUXTRONIK2_SetParameter ($hash, "runDeaerate", 0);   
        }
        $hash->{LOCAL} = 0;
        return $resultStr;
   }
# Warmwasser Zirkulation
   elsif( int(@_)==4 && ( $cmd eq 'hotWaterCircPumpRun' ) ) {
        Log3 $name, 3, "set $name $cmd $val";
        $hash->{LOCAL} = 1;
        if( $val eq "on" ) {
                        $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation506", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation507", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation508", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation697", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation698", $val);
        } 
        elsif( $val eq "off" ) {
                        $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation506", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation507", $val);
         $resultStr = LUXTRONIK2_SetParameter ($hash, "zirkulation508", $val);         
        }
      else{
         $resultStr = "$name Error: Wrong parameter given - use on,off";
      }
        $hash->{LOCAL} = 0;
        return $resultStr;
   }

   
  my $list = "statusRequest:noArg"
          ." activeTariff:0,1,2,3,4,5,6,7,8,9"
          ." boostHotWater"
          ." heatingCurveEndPoint"
          ." heatingCurveOffset"
          ." heatingSystemCircPumpDeaerate:on,off"
          ." heatSourceDefrostAirEnd"
          ." heatSourceDefrostAirThreshold"
          ." hotWaterCircPumpDeaerate:on,off"
          ." hotWaterTemperatureTarget "
          ." resetStatistics:all,statBoilerGradientCoolDownMin,statAmbientTemp...,statElectricity...,statHours...,statHeatQ..."
          ." returnTemperatureHyst "
          ." returnTemperatureSetBack "
          ." opModeHotWater:Auto,Party,Off"
          ." synchronizeClockHeatPump:noArg"
          ." INTERVAL "
          ." hotWaterCircPumpRun:on,off";


Hinter Zeile 1526 füge ich folgendes ein (Ergänzungen in Rot):

  elsif ($parameterName eq "hotWaterCircPumpDeaerate") { #isVisible(167)
     $setParameter = 684;
     $setValue = $realValue eq "on" ? 1 : 0;
   }
   elsif ($parameterName eq "runDeaerate") {
     $setParameter = 158;
     $setValue = $realValue;
   }
   
   #Zirkulation
   elsif ($parameterName eq "zirkulation506") {
      $setParameter = 506; #Auswahl Zeittabelle bei On Woche, Ansonsten Tage
      $setValue = $realValue eq "on" ? '0' : '2';
   }
   elsif ($parameterName eq "zirkulation507") {
      $setParameter = 507; #Einschaltzeit
      $setValue = $realValue eq "on" ? '60' : '0';
   }
   elsif ($parameterName eq "zirkulation508") {
      $setParameter = 508; #Ausschaltzeit
      $setValue = '0';
   }
   elsif ($parameterName eq "zirkulation697") {
      $setParameter = 697; #Laufzeit Ein
      $setValue = '1';
   }
   elsif ($parameterName eq "zirkulation698") {
      $setParameter = 698; #Laufzeit Aus
      $setValue = '0';
   }


   else {
    return "$name LUXTRONIK2_SetParameter-Error: unknown parameter $parameterName";
  }

############################
# Send new parameter to host
############################


Mit diesen Änderungen habe ich jetzt einen Set Befehl hotWaterCircPumpRun.
Beim Parameter "on" setzt dieser die HeatpumpParameters 506=0, 507=60, 508=0, 697=0, 698=0 und schaltet somit die Zirkulation An.
Beim Parameter "off" setzt dieser die HeatpumpParameters 506=2, 507=0, 508=0, und schaltet somit die Zirkulation Aus und wieder auf die in Luxtronik Tageweise eingestellten Zeiten.

Somit kann ich jetzt die Warmwasser Zirkulation Ein- und Ausschalten ohne den Rest des Systems zu Stören (Alles läuft im Gegensatz zum Entlüftungsmodus weiter) .

Steuerung aus FHEM heraus
Mit diesen Änderungen am LUXTRONIK2.pm ist es möglich die Warmwasser Zirkulation in FHEM ein bzw. aus zu schalten.
set <HeizungName> hotWaterCircPumpRun on oder set <HeizungName> hotWaterCircPumpRun off

Da die Zirkulation meist nur einige Minuten laufen muss um überall warmes Wasser bereitszustellen, habe ich nach Möglichkeiten gesucht um die Zirkulation nur für eine definierte Zeit in s an zu schalten.
Leider unterstützen normale Dummys nicht das Kommand on-for-timer  :-[

Jedoch bieten FS20 Geräte diese Möglichkeit. Wir benutzen also ein FS20 Gerät ohne überhaupt eines zu besitzen (Es funktioniet trotzdem und wir haben on-for-timer zur Verfügung).
Zuerst wird dieses Gerät mit dem Name Zirkulation als FS20 Gerät angelegt. Die 7er mit Leerzeichen sind nötig aber jetzt unwichtig (Näheres in der FS20 Doku).
Dann das Geräte zum dummy erklärt (Es will somit nie senden)
Dann die webCmd on und off definiert (Als Schaltflächen stehen on und off zur Verfügung)
Jetzt werden diese als Schaltflächen angezeigten Wert on und off durch eventMap zu den Befehelen on-for-timer 300 und off (hier ändert sich nichts) geändert. (Die Zirkulation läuft also 300s = 5min)
Damit alles funktioniert müssen wir follow-on-for-timer 1 setzen.

defmod Zirkulation FS20 7777 77
attr Zirkulation dummy 1
attr Zirkulation webCmd on:off
attr Zirkulation eventMap /on-for-timer 300:on/off:off/
attr Zirkulation follow-on-for-timer 1


Änderungen am Gerät Zirkulation besser gesagt die durch sein Schalthandlungen ausgelösten Events müssen wir jetzt noch der Luxtronik mitteilen.
Hierfür legen wir einen Notify an.

defmod n_Zirkulation notify Zirkulation:.* set Heizung hotWaterCircPumpRun $EVENT

Fazit
Jetzt können wir die Zirkulation An und Aus schalten.
Reihenfolge ist: Schalter (FS20) -> Notify -> LUXTRONIK2.pm

@tupol gerne kannst du den Quellcode in das FHEM Modul übernehmen. Ich stehe gern für Tests bereit. Wie auch oben schon geschrieben habe ich eine Luxtronik mit Firmware V3.83.1. Habe schon einige sachen erkannt die hier wahrscheinlich ander sind.

Gruß
Westgate

ch.eick

Hallo westgate,

vielen Dank für die Top Erklärung. Ich verwende ebenfalls den Entlüftungsmodus, war mir jedoch nicht der Nebeneffekte bewusst. Der Umweg über die manipulierte Zeitsteuerung leuchtet mir ein, man nutzt ja nur die Möglichkeiten der Steuerung und kann sich in einem Servicefall nichts vorwerfen lassen.

Sobald ich Zeit habe es bei mir einzubauen werde ich es mal testen.

Ich betreibe eine Novelan LD9 mit Luxtronic 2.0 v 2.84

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

tupol

Hallo Westgate,

Dein Ansatz ist sehr interessant. Es gibt allerdings auch Leute, die die Zeitsteuerung der Zirkulationspumpe nutzen. Diese würde dann jedes Mal überschrieben. Ich würde deshalb empfehlen, dass ganze nicht unter "hotWaterCircPumpRun" laufen zu lassen
, sondern es entsprechend seiner tatsächlichen Umsetzung zu benennen, d.h. dem Setzen einzelner Werte der Zeitsteuerung.

Gruß

Tupol

tupol

Noch eine Frage. Funktioniert in der v2.84 oder  V3.83.1 der Party-Modus der Warmwasseraufbereitung?

In der Version 1.81 war er defekt.

ch.eick

Zitat von: tupol am 29 März 2019, 10:18:07
Noch eine Frage. Funktioniert in der v2.84 oder  V3.83.1 der Party-Modus der Warmwasseraufbereitung?

In der Version 1.81 war er defekt.
Ich habe die 2.84 , jedoch habe ich den Partymodus noch nicht verwendet.
Welchen Test soll ich für Dich durchlaufen um ein korrektes Ergebnis zu bekommen?

Ich habe meine Sperrzeiten sehr eng gesetzt und habe um 14:00 Uhr meine einzige WW Bereitung.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#5
Zitat von: tupol am 29 März 2019, 10:13:28
Es gibt allerdings auch Leute, die die Zeitsteuerung der Zirkulationspumpe nutzen. Diese würde dann jedes Mal überschrieben. Ich würde deshalb empfehlen, dass ganze nicht unter "hotWaterCircPumpRun" laufen zu lassen[/font], sondern es entsprechend seiner tatsächlichen Umsetzung zu benennen, d.h. dem Setzen einzelner Werte der Zeitsteuerung.

Ich denke es macht wenig Sinn die Pumpe doppelt anzusteuern. Also entweder FHEM oder Luxtronik Zeitsteuerung.
Im Fall von FHEM wird auch von dort die Zeit getaktet und natürlich auch noch presens und andere tolle Ideen.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

westgate

Hallo,

die Funktion von hotWaterCircPumpRun müsste man halt in der CommandRef vernünftig erklären, auch das dann die Zirkulation nicht in der Luxtronik eingestellt werden sollte.

Dann sollte man die Zirkulation rein aus FHEM steuern.
Mit einem Timer bekommt man dann auch feste Zeiten z.B. 7:00 bis 9:00 hin.

An Präsenzerkennung hatt ich noch nicht gedacht, aber das kann sich dann sicher jeder mit der Funktion des Luxtronik2.pm verknüpfen.

Ich Arbeite gerade an der temperaturgesteuerten Abschaltung bzw. Anschaltung der Zirkulation.
Hierzu will ich einige ungenutzte Eingänge für die Temperatursensoren der Luxtronik nutzen. Zwei konnte ich schon identifizieren und die nötigen NTCs sind auch schon da.
Es soll dann erkannt werden wann Temperatur x am Ende der Zirkulationsleitung ankommt und dann abgeschalten werden, auch wenn mein Timer noch nicht abgelaufen ist.
Außerdem könnte man durch eine Temeraturänderung am Anfang der Zirkulation erkennen wann jemand versucht Warmwasser zu zapfen.
Würde mir dann vorstellen das die Zirkulation dann startet. So könnte man mit z.B. kurzen Hahn auf die Zirkulation anschalten.
Werde euch auf dem laufenden Halten.

Gruß
Westgate

ch.eick

Hallo westgate,

ich finde das auch sehr spannend. Bei meiner Sanitär Installation wurde eine Zirkulationspumpe eingebaut, die nach 14 Tagen selber erkennen sollte, wann in den Tagen vorher warmes Wasser benötigt wurde und wann nicht. Leider hat das nie funktioniert und der Hersteller konnte auch nicht helfen. Jetzt bin ich auf die Zeitsteuerung mit FHEM umgestiegen und habe das dann mit der Präsenzerkennung verfeinert.

Die Temperaturfühler sollten mindestens einen Meter für Speicher entfernt angebracht werden, da ansonsten der Einfluss über die normale Thermik einen zu großen Einfluss auf die Temperaturänderung hat (Auskunft des Pumpenherstellers).

Das mit dem "kurz den Wasserhahn betätigen" wir Dir bei Kindern im Haushalt ziemlich oft die ZIP einschalten. Jedes kleine Händewaschen mit lauwarmem Wasser anstatt mit kaltem führt dann eventuell zum start der ZIP. Da ist der Spareffekt schnell futsch.

Ich denke ein SMART home Taster in der Küche mit 10min Lauftimer (für das Spülwasser) wird sicherlich bessere Dienste leisten :-)

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

westgate

Diese Pumpe habe ich wahrscheinlich auch  ;)
Funktioniert leider überhaupt nicht.
Hatte auch mit dem Hersteller Kontakt.

Jetzt mach ich das lieber selbst dann funktioniert es auch.

ch.eick

Hallo westgate,

hier kommt dann mal mein Muster...

Es ist entstanden nachdem klar war, dass die Pumpe zu dumm zum lernen war.

PRESENCE mit Fritzbox

defmod Person1 PRESENCE function {checkFritzMACpresent("<Fritzdevice>","<mac_Adresse>")} 180 180
attr Person1 devStateIcon present:10px-kreis-gruen absent:10px-kreis-rot
attr Person1 room FritzBox,Heizung
attr Person1 verbose 0


WeekdayTimer in Kombination mit PRESENCE für zwei Personen

spätes Aufstehen, da wir unterschiedliche Zeiten haben wäre dies für beide

defmod WW_ZIP_Aufstehen WeekdayTimer Heizung de 0123456|08:00|on 0123456|08:15|off 0123456|08:30|on 0123456|08:45|off {if(ReadingsVal("Person1", "state", "") eq "present" || ReadingsVal("Person2", "state", "") eq "present") {fhem("set $NAME hotWaterCircPumpDeaerate $EVENT")}}
attr WW_ZIP_Aufstehen commandTemplate set $NAME  $EVENT
attr WW_ZIP_Aufstehen disable 0
attr WW_ZIP_Aufstehen room Heizung
attr WW_ZIP_Aufstehen stateFormat {sprintf("geplant: %s %s", ReadingsVal("WW_ZIP_Aufstehen","nextUpdate","?"), ReadingsVal("WW_ZIP_Aufstehen","nextValue","?"))}


frühes Aufstehen für Person2

defmod WW_ZIP_Person2 WeekdayTimer Heizung de 23456|05:25|on 23456|05:40|off 23456|05:50|on 23456|06:10|off {if(ReadingsVal("Person2", "state", "") eq "present") {fhem("set $NAME hotWaterCircPumpDeaerate $EVENT")}}
attr WW_ZIP_Person2 commandTemplate set $NAME  $EVENT
attr WW_ZIP_Person2 disable 0
attr WW_ZIP_Person2 room Heizung
attr WW_ZIP_Person2 stateFormat {sprintf("geplant: %s %s", ReadingsVal("WW_ZIP_Person2","nextUpdate","?"), ReadingsVal("WW_ZIP_Person2","nextValue","?"))}


und hier noch der Adend für beide

defmod WW_ZIP_beide WeekdayTimer Heizung de 0123456|18:00|on 0123456|18:15|off 0123456|18:30|on 0123456|18:45|off 0123456|22:30|on 0123456|23:00|off {if(ReadingsVal("Person1", "state", "") eq "present" || ReadingsVal("Person2", "state", "") eq "present") {fhem("set $NAME hotWaterCircPumpDeaerate $EVENT")}}
attr WW_ZIP_beide commandTemplate set $NAME  $EVENT
attr WW_ZIP_beide disable 0
attr WW_ZIP_beide room Heizung
attr WW_ZIP_beide stateFormat {sprintf("geplant: %s %s", ReadingsVal("WW_ZIP_beide","nextUpdate","?"), ReadingsVal("WW_ZIP_beide","nextValue","?"))}


Bei Abwesenheit würde es dann jetzt garnicht mehr zirkulieren.

An dieser Stelle wollte ich dann  noch das YAAHM mit profilen für einzelne Personen und Besucher einsetzen, jedoch fehlte mir die Zeit.

defmod Timer YAAHM
attr Timer room ProfileRoom



Auch ROOMMATE wäre noch zu erroieren.
Zitat
     Mögliche Status und ihre Bedeutung

        Dieses Modul unterscheidet 6 verschiedene Status:

            home - Mitbewohner ist zu Hause und wach
            gotosleep - Mitbewohner ist auf dem Weg ins Bett
            asleep - Mitbewohner schläft
            awoken - Mitbewohner ist gerade aufgewacht
            absent - Mitbewohner ist momentan nicht zu Hause, wird aber bald zurück sein
            gone - Mitbewohner ist für längere Zeit verreist

Viele Grüße
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

tupol

Zitat von: ch.eick am 31 März 2019, 10:53:39
Ich habe die 2.84 , jedoch habe ich den Partymodus noch nicht verwendet.
Welchen Test soll ich für Dich durchlaufen um ein korrektes Ergebnis zu bekommen?

Der Party-Modus erlaubt es in der Sperrzeit die Warmwasseraufbereitung zu starten. In der v1.81 funktioniert das nicht bzw. wird ignoriert. Auch im Webinterface.

ch.eick

#11
Hallo zusammen,

ich habe gerade mal eben den Partymodus direkt an der Luxtronik 2.0 v2.84 ausprobiert.

Auswahl Wasserhahn; Betriebsart; Party

1) Der Pumpenvorlauf wurde für 1Min gestartet
2) Die LWP wurde gestartet
3) FHEM readings
opModeHotWater      Party                         2019-04-05 10:01:56
opStateHeatPump1   Wärmepumpe läuft     2019-04-05 10:01:56
opStateHeatPump2   seit 00:07:29             2019-04-05 10:01:56
opStateHeatPump3   Brauchwasser             2019-04-05 10:01:56
opStateHeating         Normal                     2019-04-05 10:01:56
opStateHotWater      Aufheizen                  2019-04-05 10:01:56

4) Also manuell sieht es gut aus.


Nach einiger Wartezeit habe ich dann

"set Heizung opModeHeating Auto"     abgesetzt, gefolgt mit einiger Verzögerung von
"set Heizung StatusRequest"               und siehe da, es hat tatsächlich funktioniert.

Hiermit kann ich bestätigen, dass die V2.84 jetzt den Party Modus unterstützt und dieser auch über FHEM ansteuerbar ist.

Viele Grüße
      Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

westgate

Hallo Leute,

ich habe meine Modifikation des Luxtronik Moduls nun schon länger im Einsatz.
Das Anfordern von Warmwasser funktioniert sehr gut und komfortabel vom Handy aus.
Und das ohne den Kompressor abzuwürgen durch den Entlüftungsmodu.

@Tupol Wollen wir das nicht doch in das Standardmodul einbauen?

Gruß
westgate

tupol

Hallo westgate,
Du überschreibst mit Deinem Vorgehen die Zeitsteuerung der Zirkulationspumpe. Deine Spezialfunktion "hotWaterCircPumpRun" einfach einzubinden, passt nicht zu dem Konzept, dass die Modul möglichst 1:1 die Funktionialitäten der Geräte abbilden sollten. Man bräuchte erstmal set-Befehle und Readings, die die Zeitsteuerung abbilden und im 2 Schritt könnte man diese Befehle entweder direkt im Sinne Deiner Funktion nutzen (wäre was für die Wiki) oder sie über eine "Spezialfunktion" passend kombiniert ansprechen. Letzters muss man dann in der commandref nochmals erläutern.

Wenn Du das umsetzen möchtest, kann ich es gerne testen und einbinden.

Gruß
Tupol

ch.eick

Hallo zusammen
Ich hätte interesse an einer Erweiterung, da ich auch die Entlüftungsfunktion nutze.

Gruß Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick