Ich beschäftige mich erst seit ca. 2 Wochen mit fhem und dieser Schnipsel hat mir gleich auf Anhieb mal weitergeholfen. Ich habe den ein bisschen ausgebaut, damit er etwas universeller nutzbar ist.
Meine Perl Kentnisse sind eher rudimentär. Verbesserungsvorschläge herzlich willkommen.
######## heizung ####################################################
# What : Schaltet Heizung an oder aus
# Call : { heizung($raum,$sensor1,$sensor2,...) }
#
sub heizung($@) {
my $raum = shift(@_);
my @sensors = @_;
my $Tist = ReadingsVal($raum."_thermostat", "measured-temp","");
my $Tsoll = ReadingsVal($raum."_thermostat", "desired-temp","");
my $Tschalter = Value($raum."_hz_schalter");
my $Tsensor = "closed";
# Überprüfung der Fenstersensoren, wenn Fenster geöffnet oder gekippt setze $Tsensor entsprechend
foreach my $sensor (@sensors) {
my $sensorstate = Value($sensor);
if ($sensorstate eq "open") {
$Tsensor = "open";
}
elsif ($sensorstate eq "tilted") {
$Tsensor = "tilted";
}
}
Log 1, "Heizungsregelung fuer Raum: $raum, Isttemperatur: $Tist, Solltemperatur: $Tsoll, Heizungsschalter ist $Tschalter";
# Wenn Ist-Tempeartur < Soll-Temperatur, alle Fenstersensoren geschlossen sind und die Heizung aus ist, schalte die Heizung ein
if (($Tist < $Tsoll) && ($Tsensor eq "closed") && ($Tschalter eq "off")) {
{fhem("set ".$raum."_hz_schalter on")};
}
# Wenn Ist-Tempeartur > Soll-Temperatur und die Heizung aus ist, schalte die Heizung ein
elsif (($Tist > $Tsoll) && ($Tschalter eq "on")) {
{fhem("set ".$raum."_hz_schalter off")};
}
}
Gruß
Jörg