> alle 2 Minuten ein- und auszuschalten (da der W�rmewert ja ein tr�ges
> System ist), habe ich eine Pr�fung alle 30 Minuten, die dann den
> actuator-Wert pr�ft und bei actuator <50% die Heizung f�r eine Stunde
> aussschaltet.
Auch eine nette Idee. Bringt das so viel?
Meine Idee war, die "low temp"-Warnung zum Einschalten zu nutzen, zum
wieder-ausschalten im Fr�hling habe ich noch keinen richtigen Ansatz.
Nur den Actuator wollte ich nicht pr�fen, ich denke an ein vergessenes
offenes Fenster im Winter... ;)
Wie schaltest Du eigentlich den Brenner? Bei meinem scheint das ohne
Eingriff mit L�tkolben nicht machbar. :(
Gruss
Torsten
> Aber wenn jemand zu Hause ist der das Fenster öffnet, macht ein
> Absenkbetrieb auch keinen Sinn.
Das hast Du glaub' ich genau falschrum verstanden. ;)
Es geht mir darum, wenn jemand zu Hause ist und das Fenster VERGISST,
dann sorgt ja die eingestellte "Fenster-offen-Temperatur" dafuer, dass
bei unterschreiten von 12° *trotzdem* das Ventil oeffnet.
Mir is aber soeben aufgefallen, dass ich einen Denkfehler hatte: Ich
ging davon aus, dass bei offenem Fenster und abgeschaltetem Brenner der
Raum total auskuehlen wuerde, dem ist aber ja nicht so, weil unter der
Minimaltemperatur ja der Actuator hochgedreht wird...
Gruss,
Torsten
>>> actuator-Wert pr ft und bei actuator<50% die Heizung f r eine Stunde
>>> aussschaltet.
>> Auch eine nette Idee. Bringt das so viel?
> Weniger Funkverkehr :-)
Da waere ich mir hier bei mir nicht so sicher. ;)
In einigen Raeumen geht das Ventil selten mal ueber 30% auf. Wenn ich da
den Brenner abschaltete und erst wieder jenseits der 50% anmache, hab'
ich in 10 Minuten eine Sauna. =8)
> Ich nutze den FHT nur, wenn ich auf Dienstreise bin - der bekommt dann
ok, ich nutze NUR den, kein Raumthermostat vorhanden. Nur eine
Wolf-Therme im Keller mit dem daemlichen Aussenfuehler...
Mit dem Tag/Nachtprogramm pro Tag bin ich ganz zufrieden; bei laengerer
Abwesenheit wuerde ich mir mal die Sache mit den "Holiday"-Settings
anschauen. Aber so weit bin ich noch lange nicht...
> Wenn ein offenes Fenster ein Thema ist, wäre doch gerade der actuator-
> Wert gut, natürlich mit kürzeren Schaltzyklen als in meinem Beispiel
habe meinen Denkfehler vorhin schon bemerkt, ja. %-)
Der Actuator-Wert ist vor allem sicherer. Letzte Nacht z.B. hat der FHT
mal wieder das Senden eingestellt - von 21 bis ca. 4 Uhr! Der Watchdog
hat zwar mehrfach zugeschlagen, aber es erfolgten trotzdem keine
regelmaessigen Sendungen mit der aktuellen Temperatur, nur
"desired-temp" und "actuator". >:(
> Lowtemp - hab ich mir im FHT noch gar nicht angeschaut, kann man
> sicher nutzen.
Das war halt mein Gedanke, wenn man den Brenner nicht häufig schalten
will. Wenn es allmaehlich kuehl wird, muss man sich ein paar
Tage etwas dicker anziehen, aber irgendwann triggert ein "low temp" bei
einem beliebigen FHT.
> Frühling - vielleicht kannst Du nen Feiertag als Auslöser verwenden,
> z.B. Ostern?
Nee, das wollte ich ja nicht an einem Termin festmachen, sondern daran,
dass keine Waermezufuhr mehr noetig ist. Also lande ich da wohl auch
wieder beim Actuator, denke ich...
>> Wie schaltest Du eigentlich den Brenner? Bei meinem scheint das ohne
>> Eingriff mit L tkolben nicht machbar. :(
> Ich hab ne ältere Vaillant Etagenheizung (VCW 240).
Bei meiner Wolf "GU-1E-18" konnte ich nichts weiter finden - nur dass
die drauf bestehen, nur Original-Zubehoer zuzulassen. :-P Da gibt es
auch Raumthermostaten und so, aber die erfuellen hier nicht ihren Zweck.
> was er will, der Brenner bleibt aus. In der Standardauslieferung ist
> dort einfach eine Kabelbrücke verbaut, die habe ich durch einen FS20-
> WS1 ersetzt (WS1 ist bistabil und daher gut auch für wochen-/
ja, so hatte ich mir das auch vorgestellt. Nur trau' ich mich da so
nicht ran.
Danke,
Torsten
define n_Winterbetrieb_on notify .*Thermostat:.*actuator.* { \
my $FHT = "%";; \
my $FS20_State=$fs20_c2b{ReadingsVal("Winterbetrieb","state","off")};; \
my $FS20_LastActionTime=time()-time_str2num($defs{Winterbetrieb}{READINGS}{state}{TIME});; \
$FHT = (substr($FHT, 9, (length($FHT)-10)));; \
if ($FHT > 50) { \
if($FS20_LastActionTime < 30*60) {\
Log(3,"Brennerschaltung max. alle 30 Minuten!") \
} else { \
if ($FS20_State == 00) { \
fhem("set Winterbetrieb on") \
} else { \
Log(4,"Brenner ist bereits an!") \
} \
} \
} \
}
> Warum wollt ihr den Brenner/Therme abschalten, wenn das Ventil mehr
> als X offen ist?
Andersrum - der Brenner soll AN, wenn ein Ventil mehr als X offen ist
(offensichtlich zu kalt). Und andersrum soll er wieder aus, sobald der
Waermebadarf nicht mehr da ist.
Gruss
Torsten
Macht doch nix.
Aber zwischenzeitlich habe ich mir noch mehr Beispiele aus dem WIKI
angeschaut (waere doch schade, wenn so viele sich Arbeit machen und
keiner liest es, gell?).
Die Actuator-Meldungen als Trigger zu benutzen ist zwar definitiv
zuverlaessiger als auf ein "Low Temp" zu warten, erzeugt aber auch eine
gewisse Last. Immerhin kommen die normalerweise alle 2 Minuten!
Also habe ich mir nun doch einen halbstündigen Trigger-Event mittels AT
gemacht, und dieses notify-Makro dazu:
define n_Brenner notify n_Brenner { \
my $mussheizen=0;; \
my $imleerlauf=0;; \
my
$brennerstatus=$fs20_c2b{ReadingsVal("Winterbetrieb","state","off")};; \
my @@fhts=devspec2array("TYPE=FHT");; \
foreach(@@fhts) { \
my $actuator=ReadingsVal($_, "actuator", "101%");; \
$actuator=(substr($actuator, 0, (length($actuator)-1)));; \
if ($actuator > 50) {\
$mussheizen=1 \
} \
if ($actuator < 20) { \
$imleerlauf++ \
} \
} \
if ($mussheizen != 0) { \
Log(4,"Es muss geheizt werden. Voriger Brennerstatus: " .
$brennerstatus);; \
fhem("set Winterbetrieb on") if ($brennerstatus == 00) \
} else { \
if ($imleerlauf == @@fhts) { \
Log(4,"Kein Wärmebedarf (mehr). Voriger Brennerstatus: " .
$brennerstatus);; \
fhem("set Winterbetrieb off") if ($brennerstatus == 11) \
} else { \
Log(4,"Wärmebedarf: " . $imleerlauf . " von " . @@fhts . " im
Leerlauf.") \
} \
} \
}
Auch hierzu ein paar Anmerkungen:
- wenn irgendein Ventil zu mehr als 50% auf ist, muss der Brenner an. Da
wird nicht diskutiert. ;) Eventuell waere es eleganter, diese Konstante
(die ja momentan sowieso rein experimenteller/theoretischer Natur ist)
per Web setzen zu koennen - wenn ja, wie?
- Ventilstellungen unter 20% sehe ich als "so gut wie aus" an. Auch hier
gilt, das koennte sich als unrealistisch erweisen und waere bestimmt
schicker per Web gesetzt...
- sofern ALLE FHTs unter diesem Schwellwert liegen (und nur dann), kann
der Brenner abgeschaltet werden. Andernfalls wird nichts geaendert.
- die Schaltvorgaenge erfolgen nur wenn erforderlich. ;)
Was haltet ihr davon? Verbesserungs-/Optimierungsvorschlaege?
Gruss
Torsten
Ich wuerde laengere Sachen als Funktion in 99_MyUtils.pm einbauen. Diese kann
man notfalls auch in FHEMWEB unter "Edit Files" bearbeiten, und sie aus einem
notify aufrufen. Vorteil: man muss kein @ % ; und Zeilenende schuetzen.
ok, das habe ich jetzt mal versucht:
99_MyUtils.pm
----------------------
package main;
use strict;
use warnings;
use POSIX;
sub HeizTest($$) {
my($obergrenze, $untergrenze) = @_;
# 1. Param = Schwellwert, ab dem der Brenner IMMER eingeschaltet wird (50)
# 2. Param = Schwellwert, unter dem der Brenner aus könnte (20)
my $mussheizen=0;
my $imleerlauf=0;
my $brennerstatus=$fs20_c2b{ReadingsVal("Winterbetrieb","state","off")};
my @fhts=devspec2array("TYPE=FHT");
foreach(@fhts) {
my $actuator=ReadingsVal($_, "actuator", "101%");
$actuator=(substr($actuator, 0, (length($actuator)-1)));
if ($actuator > $obergrenze) {
$mussheizen=1;
}
if ($actuator < $untergrenze) {
$imleerlauf++;
}
}
if ($mussheizen != 0) {
Log(4,"Es muss geheizt werden. Voriger Brennerstatus: " .
$brennerstatus);
fhem("set Winterbetrieb on") if ($brennerstatus == 00);
} else {
if ($imleerlauf == @fhts) {
Log(4,"Kein Wärmebedarf (mehr). Voriger Brennerstatus: " .
$brennerstatus);
fhem("set Winterbetrieb off") if ($brennerstatus == 11);
} else {
Log(4,"Wärmebedarf: " . $imleerlauf . " von " . @fhts . " im
Leerlauf.");
}
}
}
1;
-----------------
wenn ich aber {Heiztest(50,20)} eingebe, bekomme ich:
Undefined subroutine &main::HeizTest called at (eval 20) line 1.
...im Log nachgeschaut sehe ich dort auch noch einen Fehler:
2011.11.01 18:53:53 1: reload: Error:Modul 99_MyUtils deactivated:
Global symbol "%fs20_c2b" requires explicit package name at
/usr/syno/synoman/webman/3rdparty/fhem/FHEM/99_MyUtils.pm line 18, <$fh>
line 6.
jetzt verstehe ich gar nichts mehr. :(
Uebrigens habe ich bei dieser Gelegenheit noch einen Fehler gesehen, der
ist aber schon laenger da:
Use of uninitialized value in concatenation (.) or string at
/usr/syno/synoman/webman/3rdparty/fhem/fhem.pl line 1426, <$fh> line 6.
was ist das?
Gruss,
Torsten
%fs20_c2b wird leider in 10_FS20.pm definiert, aber die 99'er Module werden
vorher geladen. Man koennte es zum Schluss wiederholt laden mit
define LoadMyUtils notify global:INITIALIZED { require "99_MyUtils.pm" }
ist aber nicht so die feine Art.
Andererseits: Wieso hier %fs20_c2b hier verwendet wird, ist mir ein Raetsel.
Ich finde
$brennerstatus eq "off" bzw. $brennerstatus eq "on"
deutlich verstaendlicher als
$brennerstatus == 00 bzw. $brennerstatus == 11
wobei 00 eigentlich 0 ist.
> Uebrigens habe ich bei dieser Gelegenheit noch einen Fehler gesehen,
> der ist aber schon laenger da:
>
> Use of uninitialized value in concatenation (.) or string at
> /usr/syno/synoman/webman/3rdparty/fhem/fhem.pl line 1426, <$fh> line
> 6.
Wenn das ein aktuelles (CVS) fhem.pl ist, dann wird CommandReload ohne
Parameter aufgerufen. Komisch. Das hatten wir auch schon.
Das hatte ich so aus einem Muster uebernommen (ich glaube hier aus der
Gruppe), da schrieb der Autor, dass der on/off-Vergleich aus
unerfindlichen Gruenden nicht geklappt habe!?
Habe ich jetzt mal geaendert, gibt zumindest keine Fehlermeldung mehr -
danke!
Ist das gut genug fuer's WIKI? Wenn ja, wem soll ich die endgueltige
Version senden? ;)
>> Uebrigens habe ich bei dieser Gelegenheit noch einen Fehler gesehen,
> Wenn das ein aktuelles (CVS) fhem.pl ist, dann wird CommandReload ohne
> Parameter aufgerufen. Komisch. Das hatten wir auch schon.
Habe gerade die Aenderung oben eingepflegt und fuer den Test die
Loglevel erhoeht. Laut updatefhem bin ich auf dem neusten Stand.
Um 18:30 habe ich den HeizTest manuell ausgefuehrt (geht jetzt!), dann
noch eben FHEM.CFG angepasst und um 18:36 "rereadcfg" durchgefuehrt. Log:
2011.11.02 18:30:38 3: Kein Wärmebedarf (mehr). Voriger Brennerstatus: off
Use of uninitialized value in concatenation (.) or string at
/usr/syno/synoman/webman/3rdparty/fhem/fhem.pl line 1426, <$fh> line 6.
2011.11.02 18:36:14 2: FHEMWEB port 8083 opened
2011.11.02 18:36:14 2: FHEMWEB port 8084 opened
2011.11.02 18:36:14 2: FHEMWEB port 8085 opened
2011.11.02 18:36:14 3: Opening myCUNO device 192.168.1.123:2323
2011.11.02 18:36:14 3: myCUNO device opened
Use of uninitialized value in concatenation (.) or string at
/usr/syno/synoman/webman/3rdparty/fhem/fhem.pl line 1426, <$fh> line 6.
2011.11.02 18:36:18 2: FHEMWEB port 8083 opened
2011.11.02 18:36:18 2: FHEMWEB port 8084 opened
2011.11.02 18:36:18 2: FHEMWEB port 8085 opened
2011.11.02 18:36:18 3: Opening myCUNO device 192.168.1.123:2323
2011.11.02 18:36:18 3: myCUNO device opened
Gruss
Torsten
Habe Dein Script in meine fhem.cfg eingepflegt. Und freu, freu, es
klappt alles so wie es soll.
Ein Test mit 6 FHT`s ergab, dass die Laufzeit des Brenners mit dem
Script erheblich von den tatsächlichen Brenner-Laufzeiten abweicht.
Das Problem ist nur, dass die Aufbereitung des Brauchwassers mit
Vorrangschaltung so ausser acht gelassen wird. Denn das Abschalten des
Brenners führt ja dazu, das auch kein Brauchwasser mehr erwärmt wird.
Hat hier jemand einen Vorschlag, besser eine Lösung ?
Im Log erfolgt bei mir ebenfalls der Hinweis:
Use of uninitialized value in concatenation (.) or string at /usr/bin/
fhem.pl line 1433, <$fh> line 3.
Gibt es hier schon eine Lösung ?
Gruss
HG
>> 2011.11.02 18:30:38 3: Kein Wärmebedarf (mehr). Voriger Brennerstatus: off
> Das Problem ist nur, dass die Aufbereitung des Brauchwassers mit
> Vorrangschaltung so ausser acht gelassen wird. Denn das Abschalten des
> Brenners führt ja dazu, das auch kein Brauchwasser mehr erwärmt wird.
Dafür war/ist das Script auch nicht wirklich gedacht. ;)
Tatsächlich die Therme / den Brenner zu schalten ist nur sinnvoll, wenn
das Ding wirklich nichts anderes macht, was in den seltensten Fällen
gegeben sein dürfte.
Du solltest nur einen eventuell vorhandenen
Sommer-/Winterbetrieb-Schalter betätigen, der lässt das Brauchwasser
ganz normal an.
Gruss,
Torsten
Am 13.02.2012 18:36, schrieb puschel74:
> if ($brauche_hitze != 0) {\
> Log(3,"Hitze benoetigt. Wasserpumpe EIN");;\
> fhem("set Wasserpumpe on") if ($Wasserpumpe_status eq "off")\
>
> durch
> if ($brauche_hitze != 0) {\
> if ($Wasserpumpe_status eq "off") fhem("set Wasserpumpe on") \
hier fehlt zumindest das abschließende ";;".
> Log(3,"Hitze benoetigt. Wasserpumpe EIN");;\
>
...aber ich glaube, Du willst eigentlich was anderes. Du hast nur die
Reihenfolge vertauscht, aber nichts an der Funktion verändert!
> Das funkioniert auch mit dem ersten Code - nur "müllt" mir dieser das
> Logfile alle 10 Minuten mit Hitze benoetigt. Wasserpumpe EIN voll.
Wenn die Meldung korrekt ist und Dich somit nicht interessiert, dann
nimm halt den Log-Eintrag raus. ;)
Oder setze den Level auf 4, dann wird es in der Standardeinstellung
nicht mehr ins globale Log geschrieben...
Vermutlich bekommst Du die Meldung aber IMMER (auch ohne Wärmebedarf).
Daher würde ich mal diese Variante anraten (unter der Voraussetzung,
dass Deine Status-Abfrage so funktioniert, die kommt mir auch suspekt
vor - ich hoffe, die hast Du getestet!):
if ($brauche_hitze != 0) {\
if ($Wasserpumpe_status eq "off") {\
fhem("set Wasserpumpe on");;\
Log(3,"Hitze benoetigt. Wasserpumpe EIN")\
}
}
Gruss
Torsten