FHEM > Codeschnipsel

FHT-Boost - erweiterte Version

(1/4) > >>

broadway:
Hallo zusammen,

inspiriert durch den FHT-Boost aus diesem Beitrag von samuelengelking@me.com habe ich die Funktionalität erweitert. Leider öffnen die FHT Ventile selbst bei kalten Innentemperaturen max. 80% wodurch die Aufheizzeit unnötig lange dauert. Durch Vorgabe von 30° Solltemperatur kann man dies verbessern.

Bei meiner Version wird der eingestellte Sollwert im dummy "Target" zwischengespeichert, so dass nach dem Boost nicht statisch 21° eingestellt wird. Somit ist durch Einstellen eines neuen Sollwerts auch ein Abbruch möglich.

Der Status Boost aktiv ja/nein ist im dummy "State" sichtbar. Ein minütlicher at Befehl prüft die Soll/Isttemperatur und deaktiviert sich bei Ende des Boosts.


--- Code: ---define Bd.Boost.State dummy
define Bd.Boost.Target dummy

define Bd.Boost.Notify notify Bd.FHT.Thermostat:desired-temp:.* {\
     my $soll=ReadingsVal("Bd.FHT.Thermostat", "desired-temp", 0);;\
     if($soll lt 30.0){\
            fhem "set Bd.Boost.Target $soll";;\
            if(Value("Bd.Boost.State") eq "off"){\
                my $ist=ReadingsVal("Bd.FHT.Thermostat", "measured-temp", 0);;\
                if(($soll-$ist) gt 1.5){\
                   fhem "set Bd.FHT.Thermostat desired-temp 30.0";;\
                   fhem "set Bd.Boost.State on";;\
                   fhem "attr Bd.Boost.Check disable 0";;\
                }\
            }\
    }\
}

define Bd.Boost.Check at +*00:01:00 {\
 if(Value("Bd.Boost.State") eq "on"){\
          if((Value("Bd.Boost.Target") - ReadingsVal("Bd.FHT.Thermostat", "measured-temp", 0)) lt 1){\
                my $daytemp=Value("Bd.Boost.Target");;\
                fhem "set Bd.FHT.Thermostat desired-temp $daytemp";;\
                fhem "set Bd.Boost.State off";;\
                fhem "attr Bd.Boost.Check disable 1";;\
          }\
     }\
 else {\
          fhem "set Bd.Boost.State off";;\
          fhem "attr Bd.Boost.Check disable 1";;\
 }\
}
attr Bd.Boost.Check disable 1

--- Ende Code ---

Jumbo:
hmm

irgendwie hab ich was verpasst....

hab's mal ausprobiert bei mir , soll temperatur auf 30 grad gesetzt, und ich habe trotzdem beim

Bd.Boost.Check
disabled

und

Bd.Boost.State
???
Bd.Boost.Target
27.0

keine ahnung wieso 27.

der actuator ist auf 96%

müsste er dann nicht auch auf 100% gehen sobald ich 27 grad z,b. mache ?

broadway:
Bd.Boost.State muss einmalig auf "off" gesetzt werden. Fehlt oben, sorry.

Die Soll-Temperatur 30° ist für den Boost selbst "reserviert". Wer will es wirklich so warm haben?

Wenn Target auf 27 steht, hat der FHT dies so an FHEM gemeldet.

broadway:
Hier die korrigierte Version. "State" muss nicht von Hand gesetzt werden, da auf "not equal" abgefragt wird.


--- Code: ---define Bd.Boost.State dummy
define Bd.Boost.Target dummy

define Bd.Boost.Notify notify Bd.FHT.Thermostat:desired-temp:.* {\
     my $soll=ReadingsVal("Bd.FHT.Thermostat", "desired-temp", 0);;\
     if($soll lt 30.0){\
            fhem "set Bd.Boost.Target $soll";;\
            if(Value("Bd.Boost.State") ne "on"){\
                my $ist=ReadingsVal("Bd.FHT.Thermostat", "measured-temp", 0);;\
                if(($soll-$ist) gt 1.5){\
                   fhem "set Bd.FHT.Thermostat desired-temp 30.0";;\
                   fhem "set Bd.Boost.State on";;\
                   fhem "attr Bd.Boost.Check disable 0";;\
                }\
            }\
    }\
}

define Bd.Boost.Check at +*00:01:00 {\
 if(Value("Bd.Boost.State") eq "on"){\
          if((Value("Bd.Boost.Target") - ReadingsVal("Bd.FHT.Thermostat", "measured-temp", 0)) lt 1){\
                my $daytemp=Value("Bd.Boost.Target");;\
                fhem "set Bd.FHT.Thermostat desired-temp $daytemp";;\
                fhem "set Bd.Boost.State off";;\
                fhem "attr Bd.Boost.Check disable 1";;\
          }\
     }\
 else {\
          fhem "set Bd.Boost.State off";;\
          fhem "attr Bd.Boost.Check disable 1";;\
 }\
}
attr Bd.Boost.Check disable 1
--- Ende Code ---

maeb3:
Wichtiger Hinweis:
damit die oben vorgestellte Lösung korrekt funktioniert, darf man nicht gleichzeitig die Funktion "addlog" verwenden, um die desired-temp in regelmäßigen Abständen ins Logfile zu schreiben.

In einem anderen Beitrag wird "addLog" empfohlen, damit im Temperatur-Plot die desired-temp keine Lücken aufweist (z.B. vom Tagesbeginn bis zur ersten Änderung des Tages bzw. von der letzten Änderung bis zum aktuellen Zeitpunkt).

  define desiredTemp_writer at +*00:30 {addLog("Thermostat_19","desired-temp")}

Wenn man diese Funktion nutzt, übernimmt das Boost-Konstrukt die 30 C nach einem addLog-Eintrag als tatsächliche Zieltemperatur. Wer das nicht berücksichtigt, heizt sich ordentlich ein (hatte gestern schon 26 C in der Wohnung als ich nach Hause kam ;-).

Nach Abschalten von addLog funktioniert Boost bei mir aber prima.

Grüße,
 Matthias

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln