FHEM > Codeschnipsel

Nachtspeicheröfen - Gebläsesteuerung

(1/1)

jhohn:
falls es jemand brauchen kann:

Namen der Geräte:
Thermostate:         <raum>_thermostat
Schalter für Heizungsgebläse:   <raum>_hz_schalter
Fenstersensoren:      egal, werden im Aufruf mit angegeben

<raum> ist im Beispiel eg_ez für "Erdgeschoß Esszimmer", kann aber auch HutzelPutzel sein, solange der Raumname für Thermostat und Schalter identisch ist

Aufruf einmal pro Minute:

--- Code: ---
define eg_ez_heizung_an_aus at +*00:01:00 \
{heizung("eg_ez","eg_ez_sensor_fenster","eg_ez_sensor_tuer","eg_ku_sensor_fenster");;}
--- Ende Code ---


Heizung ausschalten wenn Fenster oder Tür geöffnet wird:

--- Code: ---
define eg_ez_sensor_fenster_offen notify eg_ez_sensor_*:open \
set eg_ez_hz_schalter off

--- Ende Code ---


Prüfen ob Heizung eingeschaltet werden soll, wenn Fenster oder Tür geschlossen wird

--- Code: ---
define eg_ez_sensor_fenster_geschlossen notify eg_ez_sensor_*:closed \
{heizung("eg_ez","eg_ez_sensor_fenster","eg_ez_sensor_tuer","eg_ku_sensor_fenster");;}

--- Ende Code ---


in 99_myUtils.pm:

--- Code: ---
######## heizung ####################################################
# What  : Schaltet Heizung an oder aus
# Call  : { heizung($raum,$sensor1,$sensor2,...) }
#

sub heizung($@) {
my $raum = shift(@_);
my @sensors = @_;
my $homestatus = Value("homestatus");
my $Tsoll;
my $Tist = ReadingsVal($raum."_thermostat", "measured-temp","");
my $Tschalter = Value($raum."_hz_schalter");
my $Tsensor = "closed";
my $Tmode = ReadingsVal($raum."_thermostat", "controlMode","");

# Wenn mal wieder jemand rumgespielt hat
if ($Tmode ne "auto") {
setTCsDef($raum."_thermostat");
}
# Wenn jemand zu Hause ist, lies die aktuelle Solltemperatur aus dem Thermostat
if ($homestatus ne "alleweg") {
$Tsoll = ReadingsVal($raum."_thermostat", "desired-temp","");
}
# Wenn niemand zuhause ist, setze Solltemperatur auf Nachttemperatur
else {
$Tsoll = ReadingsVal($raum."_thermostat", "night-temp","");
{fhem("set ".$raum."_thermostat desired-temp ".$Tsoll)};
}


# Wenn Ist-Tempeartur < Soll-Temperatur und die Heizung aus ist, überprüfe Fenstersensoren
if (($Tist < $Tsoll) && ($Tschalter eq "off")) {
# Ueberprueung der Fenstersensoren, wenn Fenster geoefnet oder gekippt setze $Tsensor entsprechend
foreach my $sensor (@sensors) {
{fhem("get $sensor param STATE")};
my $sensorstate = Value($sensor);
if ($sensorstate eq "open") {
$Tsensor = "open";
}
# Wird evtl. später mal genutzt um desired-temp runterzuregeln wenn Fenster gekippt
elsif ($sensorstate eq "tilted" && $Tsensor eq "closed") {
$Tsensor = "tilted";
}
}
# Wenn alle Fenster geschlossen sind, schalte Heizung ein
if ($Tsensor eq "closed") {
{fhem("set ".$raum."_hz_schalter on")};
}
}
# Wenn Ist-Temperatur größer Soll-Temeratur und Heizung an ist, schalte Heizung aus
elsif (($Tist > $Tsoll) && ($Tschalter eq "on")) {
{fhem("set ".$raum."_hz_schalter off")};
}
}


######## setTCsDef  ####################################################
# What  : Default Verhalten der Thermostate einstellen
# Call  : { setTCsDef($thermostat) }
#
sub setTCsDef($) {
        my $tc2set = shift(@_);
        { fhem ("set " .$tc2set. " controlMode auto") };
        { fhem ("set " .$tc2set. " displayMode temp-only") };
        { fhem ("set " .$tc2set. " displayTemp actual") };
        { fhem ("set " .$tc2set. " displayTempUnit celsius") };
        { fhem ("set " .$tc2set. " decalcDay Sat") };
}

--- Ende Code ---


Wenn jemand nen Verbesserungsvorschlag hat, immer her damit.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln