From d421c9a20841e33a79c7000f647c6dab2fcd8298 Mon Sep 17 00:00:00 2001 From: "klaus.schauer" <> Date: Thu, 24 Jan 2019 17:13:22 +0000 Subject: [PATCH] 10_EnOcean: profile hvac.06 changed git-svn-id: https://svn.fhem.de/fhem/trunk@18405 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_EnOcean.pm | 59 +++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm index 3b192c27a..df84a6379 100755 --- a/fhem/FHEM/10_EnOcean.pm +++ b/fhem/FHEM/10_EnOcean.pm @@ -301,7 +301,7 @@ my %EnO_eepConfig = ( #"A5.20.02" => {attr => {subType => "hvac.02"}}, #"A5.20.03" => {attr => {subType => "hvac.03"}}, "A5.20.04" => {attr => {subType => "hvac.04", webCmd => "setpointTemp"}, GPLOT => "EnO_A5-20-04:Temp/FeedTemp,EnO_A5-20-04_2:SetpointTemp/Setpoint,EnO_A5-20-04_3:PID,"}, - "A5.20.06" => {attr => {subType => "hvac.06", webCmd => "setpointTemp"}, GPLOT => "EnO_A5-20-06:Temp/SetpointTemp/FeetTemp/RoomTemp/Setpoint,EnO_A5-20-06_2:PID,"}, + "A5.20.06" => {attr => {subType => "hvac.06", webCmd => "setpointTemp"}, GPLOT => "EnO_A5-20-06:Temp/SetpointTemp/FeedTemp/RoomTemp/Setpoint,EnO_A5-20-06_2:PID,"}, "A5.20.10" => {attr => {subType => "hvac.10", comMode => "biDir", destinationID => "unicast", subDef => "getNextID"}, GPLOT => "EnO_A5-20-10:FanSpeed,"}, "A5.20.11" => {attr => {subType => "hvac.11", comMode => "biDir", destinationID => "unicast", subDef => "getNextID"}}, #"A5.20.12" => {attr => {subType => "hvac.12"}}, @@ -705,7 +705,7 @@ EnOcean_Initialize($) "displayContent:default,humidity,off,setpointTemp,tempertureExtern,temperatureIntern,time,no_change " . "displayOrientation:0,90,180,270 " . "eep gpDef gwCmd:" . join(",", sort @EnO_gwCmd) . " humitity humidityRefDev " . - "keyRcv keySnd macAlgo:no,3,4 measurementCtrl:disable,enable " . + "keyRcv keySnd macAlgo:no,3,4 measurementCtrl:disable,enable measurementTypeSelect:feed,room " . "manufID:" . join(",", sort keys %EnO_manuf) . " " . "model:" . join(",", sort keys %EnO_models) . " " . "observe:on,off observeCmdRepetition:1,2,3,4,5 observeErrorAction observeInterval observeLogic:and,or " . @@ -8303,15 +8303,19 @@ sub EnOcean_Parse($$) my $setpointTempSet = ReadingsVal($name, "setpointTempSet", $setpointTemp); my %setpointTempOffset = (0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 0x7B => -5, 0x7C => -4, 0x7D => -3, 0x7E => -2, 0x7F => -1); my $setpointTempLocal = $db[2] & 0x7F; - if ($db[2] & 0x80) { - $setpointTempLocal = $setpointTempLocal / 2; - } else { - $setpointTempLocal = $setpointTempSet + $setpointTempOffset{$setpointTempLocal}; - } - if (AttrVal($name, "blockKey", 'no') eq 'no') { - $setpointTempSet = $setpointTempLocal; - readingsSingleUpdate($hash, 'setpointTempSet', $setpointTempSet, 1); + if ($setpointTempSet == $setpointTemp) { + # setpointTempSet has not been changed by Fhem + if ($db[2] & 0x80) { + $setpointTempLocal = $setpointTempLocal / 2; + } else { + $setpointTempLocal = $setpointTempSet + $setpointTempOffset{$setpointTempLocal}; + } + if (AttrVal($name, "blockKey", 'no') eq 'no') { + $setpointTempSet = $setpointTempLocal; + readingsSingleUpdate($hash, 'setpointTempSet', $setpointTempSet, 1); + } } + my $temperature = ReadingsVal($name, 'temperature', $roomTemp); if (!defined(AttrVal($name, "temperatureRefDev", undef))) { if ($db[0] & 0x80) { @@ -8460,6 +8464,7 @@ sub EnOcean_Parse($$) push @event, "3:setpointTemp:" . sprintf("%0.1f", $setpointTemp); push @event, "3:maintenanceMode:off"; push @event, "3:operationMode:setpointTemp"; + #CommandDeleteReading(undef, "$name setpointTempSet"); CommandDeleteReading(undef, "$name waitingCmds"); $waitingCmds = 0; @@ -8541,17 +8546,17 @@ sub EnOcean_Parse($$) } else { $wakeUpCycle = 0x70; } - my $measurementCtrl = 0; - if (AttrVal($name, "measurementCtrl", "enable") eq 'disable') { - if (AttrVal($name, "pidCtrl", 'on') eq 'on' && defined AttrVal($name, "temperatureRefDev", undef)) { - $measurementCtrl = 2; + my $measurementTypeSelect = 0; + if (AttrVal($name, "measurementTypeSelect", "room") eq 'feed') { + if (AttrVal($name, "pidCtrl", 'on') eq 'on' && defined(AttrVal($name, "temperatureRefDev", undef))) { + $measurementTypeSelect = 2; } elsif (AttrVal($name, "pidCtrl", 'on') eq 'off') { - $measurementCtrl = 2; + $measurementTypeSelect = 2; } } push @event, "3:state:T: " . sprintf("%0.1f", $temperature) . " SPT: " . sprintf("%.1f", $setpointTemp) . " SP: $setpoint"; # sent message to the actuator - $data = sprintf "%02X%02X%02X08", $setpointSet, $db[2], $waitingCmds | $wakeUpCycle | $summerMode | $setpointSelect | $measurementCtrl | $functionSelect; + $data = sprintf "%02X%02X%02X08", $setpointSet, $db[2], $waitingCmds | $wakeUpCycle | $summerMode | $setpointSelect | $measurementTypeSelect | $functionSelect; EnOcean_SndRadio(undef, $hash, $packetType, "A5", $data, $subDef, "00", $hash->{DEF}); } elsif ($st eq "hvac.10") { @@ -13042,6 +13047,13 @@ sub EnOcean_Attr(@) $err = "attribute-value [$attrName] = $attrVal wrong"; } + } elsif ($attrName eq "measurementTypeSelect") { + if (!defined $attrVal){ + + } elsif ($attrVal !~ m/^feed|room$/) { + $err = "attribute-value [$attrName] = $attrVal wrong"; + } + } elsif ($attrName eq "observe") { if (!defined $attrVal){ @@ -13913,11 +13925,11 @@ sub EnOcean_Notify(@) if (defined(AttrVal($name, "temperatureRefDev", undef)) && $devName eq AttrVal($name, "temperatureRefDev", "") && $parts[0] eq "temperature") { - if (AttrVal($name, "subType", "") eq "hvac.01") { + if (AttrVal($name, "subType", "") =~ m/^hvac\.0(1|6)$/) { readingsSingleUpdate($hash, "temperature", $parts[1], 1); #Log3 $name, 2, "EnOcean $name $devName $s"; } - if (AttrVal($name, "subType", "") =~ m/^hvac\.0(4|6)$/ && AttrVal($name, "measurementCtrl", "enable") eq 'disable') { + if (AttrVal($name, "subType", "") eq "hvac.04" && AttrVal($name, "measurementCtrl", "enable") eq 'disable') { readingsSingleUpdate($hash, "temperature", $parts[1], 1); #Log3 $name, 2, "EnOcean $name $devName $s"; } @@ -17848,7 +17860,7 @@ EnOcean_Delete($$) The Heating Radiator Actuating Drive is configured using the following attributes: