FHEM > Codeschnipsel
FHT-Boost - erweiterte Version
Jumbo:
hi Mathias,
kannst du deinen Code bitte mal ganz posten ?
danke dir
broadway:
--- Zitat von: maeb3 schrieb am Di, 22 Januar 2013 18:05 ---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
--- Ende Zitat ---
Hallo Matthias,
Ich verwende die Funktion nicht. Aber das Verhalten wundert mich insofern, da mit
--- Code: ---if($soll lt 30.0){\
fhem "set Bd.Boost.Target $soll";;\
--- Ende Code ---
(also "Sollwert kleiner 30 -> aktualisiere Target") verhindert wird, dass die "reservierte" Boost Temperatur von 30° als Target gesetzt wird. Da müsste ja addLog() schon schreibend auf die desired-temp zugreifen?
sengelking:
Also theoretisch müsste für Ventilöffnung 100% die desired-temp auf 30.5 gestellt werden, so geht der FHT dann auf "on" bei 30 geht er nur auf 30 und öffnet die Ventile nicht bis auf 100%. Zumindest war das meine Erfahrung, daher habe ich meinen boost damals auch auf 30.5 gestellt...
broadway:
--- Zitat von: sengelking schrieb am Mi, 23 Januar 2013 19:54 ---Also theoretisch müsste für Ventilöffnung 100% die desired-temp auf 30.5 gestellt werden, so geht der FHT dann auf "on" bei 30 geht er nur auf 30 und öffnet die Ventile nicht bis auf 100%. Zumindest war das meine Erfahrung, daher habe ich meinen boost damals auch auf 30.5 gestellt...
--- Ende Zitat ---
Diese klitzekleine Optimierung kann man natürlich schnell selbst einfügen. Mein Ventil öffnet mit 30° auf 97%.
maeb3:
Hallo,
Meine fhem.cfg sah folgendermaßen aus:
--- Zitat ---
define TC_boost_State dummy
define TC_boost_Target dummy
define TC_boost_Notify notify Thermostat_19E4EA:desired-temp:.* {\
my $soll=ReadingsVal("Thermostat_19E4EA", "desired-temp", 0);;\
if($soll lt 30.0){\
fhem "set TC_boost_Target $soll";;\
if(Value("TC_boost_State") ne "on"){\
my $ist=ReadingsVal("Thermostat_19E4EA", "measured-temp", 0);;\
if(($soll-$ist) gt 1.5){\
fhem "set Thermostat_19E4EA desired-temp 30.0";;\
fhem "set TC_boost_State on";;\
fhem "attr TC_boost_Check disable 0";;\
}\
}\
}\
}
define TC_boost_Check at *00:02:00 {\
if(Value("TC_boost_State") eq "on"){\
if((Value("TC_boost_Target") - ReadingsVal("Thermostat_19E4EA", "measured-temp", 0)) lt 1){\
my $daytemp=Value("TC_boost_Target");;\
fhem "set Thermostat_19E4EA desired-temp $daytemp";;\
fhem "set TC_boost_State off";;\
fhem "attr TC_boost_Check disable 1";;\
}\
}\
else {\
fhem "set TC_boost_State off";;\
fhem "attr TC_boost_Check disable 1";;\
}\
}
attr TC_boost_Check disable 1
--- Ende Zitat ---
Dies habe ich mehr oder weniger direkt von oben übernommen.
Außerdem habe ich noch:
--- Zitat ---
define Thermostat_19E4EA CUL_HM 19E4EA
attr Thermostat_19E4EA actCycle 000:10
attr Thermostat_19E4EA actStatus unknown
attr Thermostat_19E4EA alias Thermostat
...
define FileLog_Thermostat_19E4EA FileLog ./log/%Y-%m-Thermostat_19E4EA.log Thermostat_19E4EA
attr FileLog_Thermostat_19E4EA logtype text
attr FileLog_Thermostat_19E4EA room Logfiles
...
define desiredTemp_writer at +*00:30 {addLog("Thermostat_19E4EA","desired-temp")}
--- Ende Zitat ---
Durch die letzte Zeile (desiredTemp_writer) wird im Logfile alle 30 Minuten die aktuelle desired-temp geschrieben, selbst wenn diese sich nicht geändert hat.
Nach meinem Verständnis passiert folgendes:
- Mit jedem Update der desired-temp schlägt TC_boost_notify an (z.B. desired-temp=20,5)
- Wenn dann das Delta > 1,5 und desired < 30 ist (z.B. measured=18, desired=20,5) wird TC_boost_Target auf 20,5 gesetzt und desired auf 30
- außerdem wird dann TC_boost_State on gesetzt und der TC_boost_check gestartet
- Alle 2 Minuten wird geprüft, ob measured bis auf 1 C an TC_boost_Target rangekommen ist (damit wird dann der Boost beendet)
- Wenn in der Zwischenzeit aber der desiredTemp_writer zuschlägt (alle 30 Minuten), wird die aktuelle desired Temp (30 C) geschrieben
Damit ist beim TC_boost_notify $soll=30 und somit die erste Bedingung nicht erfüllt ( if($soll lt 30.0) ) und dann wird geheizt, bis die 30 erreicht sind.
Oder habe ich was falsch verstanden?
Grüße,
Matthias
P.S.: So sieht meine addlog-Routine aus:
--- Zitat ---
sub
addLog($$) {
my ($logdevice, $reading) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ($reading =~ m,state,i) {
fhem "trigger $logdevice $logentry";
} else {
fhem "trigger $logdevice $reading: $logentry";
}
}
--- Ende Zitat ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln