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:
parent
f507df634d
commit
5d215af420
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user