diff --git a/FHEM/10_EnOcean.pm b/FHEM/10_EnOcean.pm index 8cc558af5..764dcd3d5 100755 --- a/FHEM/10_EnOcean.pm +++ b/FHEM/10_EnOcean.pm @@ -200,6 +200,8 @@ my %EnO_subType = ( "A5.10.1D" => "roomSensorControl.1D", "A5.10.1E" => "roomSensorControl.1B", "A5.10.1F" => "roomSensorControl.1F", + "A5.10.20" => "roomSensorControl.20", + "A5.10.21" => "roomSensorControl.20", "A5.11.01" => "lightCtrlState.01", "A5.11.02" => "tempCtrlState.01", "A5.11.03" => "shutterCtrlState.01", @@ -3301,7 +3303,7 @@ EnOcean_Parse($$) # $db[0]_bit_6 ... $db[0]_bit_4 is the fan speed # $db[0]_bit_1 is Occupany enable where 0 = enabled, 1 = disabled # $db[0]_bit_0 is Occupany Button where 0 = pressed, 1 = released - my $humi = $db[3] / 2.5; + my $humi = sprintf "%d", $db[3] / 2.5; my $setpoint = $db[2] / 2.5; my $temp = sprintf "%0.1f", 40 - $db[1] * 40 / 250; my $fanSpeed; @@ -3360,6 +3362,41 @@ EnOcean_Parse($$) push @event, "3:setpointScaled:" . $setpointScaled; } + } elsif ($st eq "roomSensorControl.20") { + # Room Operation Panel (A5-10-20, A5-10-21) + # [untested] + # $db[3] is the setpoint where 0 = 0 ... 255 = 255 + # $db[2] is the humidity setpoint where min 0x00 = 0 %rH, max 0xFA = 10 %rH + # $db[1] is the temperature where 250 = 0 °C ... 0 = 40 °C + # $db[0]_bit_6 ... $db[0]_bit_5 is setpoint mode + # $db[0]_bit_4 is battery state 0 = ok, 1 = low + # $db[0]_bit_0 is user activity where 0 = no, 1 = yes + my $humi = sprintf "%d", $db[2] / 2.5; + my $setpoint = $db[3]; + my $temp = sprintf "%0.1f", 40 - $db[1] * 40 / 250; + my $setpointMode; + if ((($db[0] & 0x60) >> 5) == 3) { + $setpointMode = "reserved"; + } elsif ((($db[0] & 0x60) >> 5) == 2) { + $setpointMode = "auto"; + } elsif ((($db[0] & 0x60) >> 1) == 1){ + $setpointMode = "frostProtection"; + } else { + $setpointMode = "setpoint"; + } + my $battery = ($db[0] & 0x10) ? "low" : "ok"; + push @event, "3:activity:" . (($db[0] & 1) ? "yes" : "no"); + push @event, "3:battery:$battery"; + push @event, "3:humidity:$humi"; + push @event, "3:setpoint:$setpoint"; + push @event, "3:setpointMode:$setpointMode"; + push @event, "3:temperature:$temp"; + push @event, "3:state:T: $temp H: $humi SP: $setpoint B: $battery"; + my $setpointScaled = EnOcean_ReadingScaled($hash, $db[3], 0, 255); + if (defined $setpointScaled) { + push @event, "3:setpointScaled:" . $setpointScaled; + } + } elsif ($st eq "tempHumiSensor.02") { # Temperatur and Humidity Sensor(EEP A5-04-02) # [Eltako FAFT60, FIFT63AP] @@ -7970,6 +8007,29 @@ EnOcean_Undef($$)

+
  • Room Operation Panel (EEP A5-10-20, A5-10-21)
    + [untested]
    +
    + The scaling of the setpoint adjustment is device- and vendor-specific. Set the + attributes scaleMax, scaleMin and + scaleDecimals for the additional scaled reading + setpointScaled. Use attribut userReadings to + adjust the scaling alternatively.
    + The attr subType must be roomSensorControl.20 or roomSensorControl.21. + This is done if the device was created by autocreate. +
  • +

    +
  • Room Control Panels (D2-10-00 - D2-10-02)
    [Kieback & Peter RBW322-FTL]