From 4f6e3018ad96034092ea6843fdc8a9257b01fb61 Mon Sep 17 00:00:00 2001 From: orti-otto <> Date: Tue, 27 Dec 2016 22:30:59 +0000 Subject: [PATCH] 98_WeekdayTimer, 98_Heating_Contorl: a new method implemented to check if a device is a heating - the new method is very easy, it checks if a device understand desired-temp ... git-svn-id: https://svn.fhem.de/fhem/trunk@12894 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_WeekdayTimer.pm | 70 ++++++++++++------------------------ 1 file changed, 23 insertions(+), 47 deletions(-) diff --git a/fhem/FHEM/98_WeekdayTimer.pm b/fhem/FHEM/98_WeekdayTimer.pm index 13eab7711..48fd3f074 100644 --- a/fhem/FHEM/98_WeekdayTimer.pm +++ b/fhem/FHEM/98_WeekdayTimer.pm @@ -2,7 +2,7 @@ ############################################################################## # # 98_WeekdayTimer.pm -# written by Dietmar Ortmann +# written by Dietmar Ortmann(Orti) # modified by Tobias Faust # # This file is part of fhem. @@ -710,11 +710,14 @@ sub WeekdayTimer_Update($) { my $now = time(); #my $sollZeit = $myHash->{TIME}; + + my $setModifier = WeekdayTimer_isHeizung($hash); + my $isHeating = $setModifier gt ""; # Schaltparameter ermitteln my $tage = $hash->{profil}{$idx}{TAGE}; my $time = $hash->{profil}{$idx}{TIME}; - my $newParam = WeekdayTimer_evalAndcleanupParam($hash,$time,$hash->{profil}{$idx}{PARA}); + my $newParam = WeekdayTimer_evalAndcleanupParam($hash,$time,$hash->{profil}{$idx}{PARA}, $isHeating ); #Log3 $hash, 3, "[$name] $idx ". $time . " " . $newParam . " " . join("",@$tage); @@ -775,51 +778,22 @@ sub WeekdayTimer_isAnActiveTimer ($$$) { return $ret; } ################################################################################ +# {WeekdayTimer_isHeizung($defs{HeizungKueche_an_wt})} sub WeekdayTimer_isHeizung($) { my ($hash) = @_; - + my $name = $hash->{NAME}; - - my %setmodifiers = - ("FHT" => "desired-temp", - "PID20" => "desired", - "EnOcean" => { "subTypeReading" => "subType", "setModifier" => "desired-temp", - "roomSensorControl.05" => 1, - "hvac.01" => 1 }, - "MAX" => { "subTypeReading" => "type", "setModifier" => "desiredTemperature", - "HeatingThermostatPlus" => 1, - "HeatingThermostat" => 1, - "WallMountedThermostat" => 1 }, - "CUL_HM" => { "subTypeReading" => "model","setModifier" => "desired-temp", - "HM-CC-TC" => 1, - "HM-TC-IT-WM-W-EU" => 1, - "HM-CC-RT-DN" => 1 } ); - my $model = ""; my $dHash = $defs{$hash->{DEVICE}}; - my $dType = $dHash->{TYPE}; - return "" if (!defined($dType)); + my $dName = $dHash->{NAME}; + + my @tempSet = ("desired-temp", "desiredTemperature", "desired", "thermostatSetpointSet"); + my $allSets = getAllSets($dName); - my $setModifier = $setmodifiers{$dType}; - $setModifier = "" if (!defined($setModifier)); - if (ref($setModifier)) { - - my $subTypeReading = $setmodifiers{$dType}{subTypeReading}; - - if ($subTypeReading eq "type" ) { - $model = $dHash->{type}; - } else { - $model = AttrVal($hash->{DEVICE}, $subTypeReading, "nF"); - } - - if (defined($setmodifiers{$dType}{$model})) { - $setModifier = $setmodifiers{$dType}{setModifier} - } else { - $setModifier = ""; - } - } - Log3 $hash, 4, "[$name] device type $dType:$model recognized, setModifier:$setModifier"; - return $setModifier; + foreach my $ts (@tempSet) { + Log3 $hash, 4, "[$name] device type heating recognized, setModifier:$ts"; + return $ts if ($allSets =~ m/$ts/); + } } ################################################################################ # @@ -942,10 +916,13 @@ sub WeekdayTimer_FensterOffen ($$$) { delete $hash->{VERZOEGRUNG_IDX} if defined($hash->{VERZOEGRUNG_IDX}); return 0; } - +# +# delete tsxXXX; define tsxXXX WeekdayTimer tstYYY 17:55|{23} 17:56|{45} 17:57|off 17:58|{43} ; attr tsxXXX room Wohnzimmer; attr tsxXXX verbose 5 +# delete tsxXXX; define tsxXXX WeekdayTimer tstYYY 19:07|{sprintf("%s %s %d","$NAME", "$TIME", 5)} ; attr tsxXXX room Wohnzimmer; attr tsxXXX verbose 5 +# ################################################################################ -sub WeekdayTimer_evalAndcleanupParam($$$) { - my ($hash,$time,$param) = @_; +sub WeekdayTimer_evalAndcleanupParam($$$$) { + my ($hash,$time,$param,$isHeating) = @_; my $name = $hash->{DEVICE} ; my $wdName = $hash->{NAME}; @@ -967,12 +944,11 @@ sub WeekdayTimer_evalAndcleanupParam($$$) { Log3 $hash, 4, "[$wdName] calculating dynamic param after eval: ........ $newParam"; } - }elsif($param =~ m/^\d{1,3}$/){ + }elsif($isHeating && $param =~ m/^\d{1,3}$/){ $newParam = sprintf("%.1f", $param); } return $newParam; } - ################################################################################ sub WeekdayTimer_Device_Schalten($$$) { my ($hash, $newParam, $tage) = @_; @@ -991,7 +967,7 @@ sub WeekdayTimer_Device_Schalten($$$) { my $activeTimer = 1; my $isHeating = $setModifier gt ""; - my $aktParam = WeekdayTimer_evalAndcleanupParam($hash,$dummy,ReadingsVal($hash->{DEVICE}, $setModifier, "")); + my $aktParam = WeekdayTimer_evalAndcleanupParam($hash,$dummy,ReadingsVal($hash->{DEVICE}, $setModifier, ""),$isHeating); # newParam is already processed by evalAndcleanupParam() my $disabled = AttrVal($hash->{NAME}, "disable", 0);