2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

98_WeekdayTimer, 98_Heating_Contorl: a new try to use a new method to check if a device is a heating - the new method is very easy, it checks if a device understand desired-temp ....

The  first version, that was checked in, was causing errors.

git-svn-id: https://svn.fhem.de/fhem/trunk@12932 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
orti-otto 2017-01-02 17:34:43 +00:00
parent f507df634d
commit 5d215af420

View File

@ -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,27 @@ 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 $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;
return "" if (!defined $dHash); # vorzeitiges Ende wenn das device nicht existiert
my $dName = $dHash->{NAME};
my @tempSet = ("desired-temp", "desiredTemperature", "desired", "thermostatSetpointSet");
my $allSets = getAllSets($dName);
foreach my $ts (@tempSet) {
if ($allSets =~ m/$ts/) {
Log3 $hash, 4, "[$name] device type heating recognized, setModifier:$ts";
return $ts
}
}
}
################################################################################
#
@ -942,10 +921,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 +949,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 +972,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);