Nachtspeicheröfen - Gebläsesteuerung

Begonnen von jhohn, 20 Januar 2013, 17:52:58

Vorheriges Thema - Nächstes Thema

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:

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");;}


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

define eg_ez_sensor_fenster_offen notify eg_ez_sensor_*:open \
set eg_ez_hz_schalter off


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

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");;}


in 99_myUtils.pm:

######## 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") };
}


Wenn jemand nen Verbesserungsvorschlag hat, immer her damit.
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen