From ecb659f23a020d1bc91864b2779e28acdc778a12 Mon Sep 17 00:00:00 2001 From: klaus-schauer Date: Thu, 16 Oct 2014 18:55:45 +0000 Subject: [PATCH] 10_EnOcean: teach-in functions changed and extended git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@6772 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_EnOcean.pm | 363 +++++++++++++++++++++------------------- 1 file changed, 195 insertions(+), 168 deletions(-) diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm index b47ac0cfb..0fc3019f8 100755 --- a/fhem/FHEM/10_EnOcean.pm +++ b/fhem/FHEM/10_EnOcean.pm @@ -125,154 +125,153 @@ my %EnO_manuf = ( "7FF" => "Multi user Manufacturer ID", ); -my %EnO_subType = ( - "A5.02.01" => "tempSensor.01", - "A5.02.02" => "tempSensor.02", - "A5.02.03" => "tempSensor.03", - "A5.02.04" => "tempSensor.04", - "A5.02.05" => "tempSensor.05", - "A5.02.06" => "tempSensor.06", - "A5.02.07" => "tempSensor.07", - "A5.02.08" => "tempSensor.08", - "A5.02.09" => "tempSensor.09", - "A5.02.0A" => "tempSensor.0A", - "A5.02.0B" => "tempSensor.0B", - "A5.02.10" => "tempSensor.10", - "A5.02.11" => "tempSensor.11", - "A5.02.12" => "tempSensor.12", - "A5.02.13" => "tempSensor.13", - "A5.02.14" => "tempSensor.14", - "A5.02.15" => "tempSensor.15", - "A5.02.16" => "tempSensor.16", - "A5.02.17" => "tempSensor.17", - "A5.02.18" => "tempSensor.18", - "A5.02.19" => "tempSensor.19", - "A5.02.1A" => "tempSensor.1A", - "A5.02.1B" => "tempSensor.1B", - "A5.02.20" => "tempSensor.20", - "A5.02.30" => "tempSensor.30", - "A5.04.01" => "roomSensorControl.01", - "A5.04.02" => "tempHumiSensor.02", - "A5.04.03" => "tempHumiSensor.03", - "A5.05.01" => "baroSensor.01", - "A5.06.01" => "lightSensor.01", - "A5.06.02" => "lightSensor.02", - "A5.06.03" => "lightSensor.03", - "A5.07.01" => "occupSensor.01", - "A5.07.02" => "occupSensor.02", - "A5.07.03" => "occupSensor.03", - "A5.08.01" => "lightTempOccupSensor.01", - "A5.08.02" => "lightTempOccupSensor.02", - "A5.08.03" => "lightTempOccupSensor.03", - "A5.09.01" => "COSensor.01", - "A5.09.02" => "COSensor.02", - "A5.09.04" => "tempHumiCO2Sensor.01", - "A5.09.05" => "vocSensor.01", - "A5.09.06" => "radonSensor.01", - "A5.09.07" => "particlesSensor.01", - "A5.09.08" => "CO2Sensor.01", - "A5.10.01" => "roomSensorControl.05", - "A5.10.02" => "roomSensorControl.05", - "A5.10.03" => "roomSensorControl.05", - "A5.10.04" => "roomSensorControl.05", - "A5.10.05" => "roomSensorControl.05", - "A5.10.06" => "roomSensorControl.05", - "A5.10.07" => "roomSensorControl.05", - "A5.10.08" => "roomSensorControl.05", - "A5.10.09" => "roomSensorControl.05", - "A5.10.0A" => "roomSensorControl.05", - "A5.10.0B" => "roomSensorControl.05", - "A5.10.0C" => "roomSensorControl.05", - "A5.10.0D" => "roomSensorControl.05", - "A5.10.10" => "roomSensorControl.01", - "A5.10.11" => "roomSensorControl.01", - "A5.10.12" => "roomSensorControl.01", - "A5.10.13" => "roomSensorControl.01", - "A5.10.14" => "roomSensorControl.01", - "A5.10.15" => "roomSensorControl.02", - "A5.10.16" => "roomSensorControl.02", - "A5.10.17" => "roomSensorControl.02", - "A5.10.18" => "roomSensorControl.18", - "A5.10.19" => "roomSensorControl.19", - "A5.10.1A" => "roomSensorControl.1A", - "A5.10.1B" => "roomSensorControl.1B", - "A5.10.1C" => "roomSensorControl.1C", - "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", - "A5.11.04" => "lightCtrlState.02", - "A5.12.00" => "autoMeterReading.00", - "A5.12.01" => "autoMeterReading.01", - "A5.12.02" => "autoMeterReading.02", - "A5.12.03" => "autoMeterReading.03", - "A5.12.04" => "autoMeterReading.04", - "A5.12.05" => "autoMeterReading.05", - "A5.13.01" => "environmentApp", - "A5.13.02" => "environmentApp", - "A5.13.03" => "environmentApp", - "A5.13.04" => "environmentApp", - "A5.13.05" => "environmentApp", - "A5.13.06" => "environmentApp", - "A5.13.10" => "environmentApp", - "A5.14.01" => "multiFuncSensor", - "A5.14.02" => "multiFuncSensor", - "A5.14.03" => "multiFuncSensor", - "A5.14.04" => "multiFuncSensor", - "A5.14.05" => "multiFuncSensor", - "A5.14.06" => "multiFuncSensor", - "A5.20.01" => "hvac.01", - #"A5.20.02" => "hvac.02", - #"A5.20.03" => "hvac.03", - #"A5.20.10" => "hvac.04", - #"A5.20.11" => "hvac.11", - #"A5.20.12" => "hvac.12", - "A5.30.01" => "digitalInput.01", - "A5.30.02" => "digitalInput.02", - "A5.30.03" => "digitalInput.03", - "A5.30.04" => "digitalInput.04", - "A5.38.08" => "gateway", - "A5.3F.7F" => "manufProfile", - "D2.01.00" => "actuator.01", - "D2.01.01" => "actuator.01", - "D2.01.02" => "actuator.01", - "D2.01.03" => "actuator.01", - "D2.01.04" => "actuator.01", - "D2.01.05" => "actuator.01", - "D2.01.06" => "actuator.01", - "D2.01.07" => "actuator.01", - "D2.01.08" => "actuator.01", - "D2.01.09" => "actuator.01", - "D2.01.0A" => "actuator.01", - "D2.01.10" => "actuator.01", - "D2.01.11" => "actuator.01", - "D2.03.00" => "switch.00", - "D2.03.10" => "windowHandle.10", - "D2.10.00" => "roomCtrlPanel.00", - "D2.10.01" => "roomCtrlPanel.00", - "D2.10.02" => "roomCtrlPanel.00", - "D5.00.01" => "contact", - "F6.02.01" => "switch", - "F6.02.02" => "switch", - "F6.02.03" => "switch", - #"F6.02.04" => "switch.04", - "F6.03.01" => "switch", - "F6.03.02" => "switch", - "F6.04.01" => "keycard", - #"F6.04.02" => "keycard.02", - "F6.05.01" => "liquidLeakage", - "F6.10.00" => "windowHandle", - #"F6.10.01" => "windowHandle.01", - "F6.3F.7F" => "switch.7F", - - 1 => "sensor", - 2 => "FRW", - 3 => "PM101", - 4 => "raw", +my %EnO_eepConfig = ( + "A5.02.01" => {attr => {subType => "tempSensor.01"}}, + "A5.02.02" => {attr => {subType => "tempSensor.02"}}, + "A5.02.03" => {attr => {subType => "tempSensor.03"}}, + "A5.02.04" => {attr => {subType => "tempSensor.04"}}, + "A5.02.05" => {attr => {subType => "tempSensor.05"}}, + "A5.02.06" => {attr => {subType => "tempSensor.06"}}, + "A5.02.07" => {attr => {subType => "tempSensor.07"}}, + "A5.02.08" => {attr => {subType => "tempSensor.08"}}, + "A5.02.09" => {attr => {subType => "tempSensor.09"}}, + "A5.02.0A" => {attr => {subType => "tempSensor.0A"}}, + "A5.02.0B" => {attr => {subType => "tempSensor.0B"}}, + "A5.02.10" => {attr => {subType => "tempSensor.10"}}, + "A5.02.11" => {attr => {subType => "tempSensor.11"}}, + "A5.02.12" => {attr => {subType => "tempSensor.12"}}, + "A5.02.13" => {attr => {subType => "tempSensor.13"}}, + "A5.02.14" => {attr => {subType => "tempSensor.14"}}, + "A5.02.15" => {attr => {subType => "tempSensor.15"}}, + "A5.02.16" => {attr => {subType => "tempSensor.16"}}, + "A5.02.17" => {attr => {subType => "tempSensor.17"}}, + "A5.02.18" => {attr => {subType => "tempSensor.18"}}, + "A5.02.19" => {attr => {subType => "tempSensor.19"}}, + "A5.02.1A" => {attr => {subType => "tempSensor.1A"}}, + "A5.02.1B" => {attr => {subType => "tempSensor.1B"}}, + "A5.02.20" => {attr => {subType => "tempSensor.20"}}, + "A5.02.30" => {attr => {subType => "tempSensor.30"}}, + "A5.04.01" => {attr => {subType => "roomSensorControl.01"}}, + "A5.04.02" => {attr => {subType => "tempHumiSensor.02"}}, + "A5.04.03" => {attr => {subType => "tempHumiSensor.03"}}, + "A5.05.01" => {attr => {subType => "baroSensor.01"}}, + "A5.06.01" => {attr => {subType => "lightSensor.01"}}, + "A5.06.02" => {attr => {subType => "lightSensor.02"}}, + "A5.06.03" => {attr => {subType => "lightSensor.03"}}, + "A5.07.01" => {attr => {subType => "occupSensor.01"}}, + "A5.07.02" => {attr => {subType => "occupSensor.02"}}, + "A5.07.03" => {attr => {subType => "occupSensor.03"}}, + "A5.08.01" => {attr => {subType => "lightTempOccupSensor.01"}}, + "A5.08.02" => {attr => {subType => "lightTempOccupSensor.02"}}, + "A5.08.03" => {attr => {subType => "lightTempOccupSensor.03"}}, + "A5.09.01" => {attr => {subType => "COSensor.01"}}, + "A5.09.02" => {attr => {subType => "COSensor.02"}}, + "A5.09.04" => {attr => {subType => "tempHumiCO2Sensor.01"}}, + "A5.09.05" => {attr => {subType => "vocSensor.01"}}, + "A5.09.06" => {attr => {subType => "radonSensor.01"}}, + "A5.09.07" => {attr => {subType => "particlesSensor.01"}}, + "A5.09.08" => {attr => {subType => "CO2Sensor.01"}}, + "A5.10.01" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.02" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.03" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.04" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.05" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.06" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.07" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.08" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.09" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.0A" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.0B" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.0C" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.0D" => {attr => {subType => "roomSensorControl.05"}}, + "A5.10.10" => {attr => {subType => "roomSensorControl.01"}}, + "A5.10.11" => {attr => {subType => "roomSensorControl.01"}}, + "A5.10.12" => {attr => {subType => "roomSensorControl.01"}}, + "A5.10.13" => {attr => {subType => "roomSensorControl.01"}}, + "A5.10.14" => {attr => {subType => "roomSensorControl.01"}}, + "A5.10.15" => {attr => {subType => "roomSensorControl.02"}}, + "A5.10.16" => {attr => {subType => "roomSensorControl.02"}}, + "A5.10.17" => {attr => {subType => "roomSensorControl.02"}}, + "A5.10.18" => {attr => {subType => "roomSensorControl.18"}}, + "A5.10.19" => {attr => {subType => "roomSensorControl.19"}}, + "A5.10.1A" => {attr => {subType => "roomSensorControl.1A"}}, + "A5.10.1B" => {attr => {subType => "roomSensorControl.1B"}}, + "A5.10.1C" => {attr => {subType => "roomSensorControl.1C"}}, + "A5.10.1D" => {attr => {subType => "roomSensorControl.1D"}}, + "A5.10.1E" => {attr => {subType => "roomSensorControl.1B"}}, + "A5.10.1F" => {attr => {subType => "roomSensorControl.1F"}}, + "A5.10.20" => {attr => {subType => "roomSensorControl.20"}}, + "A5.10.21" => {attr => {subType => "roomSensorControl.20"}}, + "A5.11.01" => {attr => {subType => "lightCtrlState.01"}}, + "A5.11.02" => {attr => {subType => "tempCtrlState.01"}}, + "A5.11.03" => {attr => {subType => "shutterCtrlState.01", subDef => "getNextID", subTypeSet => "gateway", gwCmd => "blindCmd"}}, + "A5.11.04" => {attr => {subType => "lightCtrlState.02"}}, + "A5.12.00" => {attr => {subType => "autoMeterReading.00"}}, + "A5.12.01" => {attr => {subType => "autoMeterReading.01"}}, + "A5.12.02" => {attr => {subType => "autoMeterReading.02"}}, + "A5.12.03" => {attr => {subType => "autoMeterReading.03"}}, + "A5.12.04" => {attr => {subType => "autoMeterReading.04"}}, + "A5.12.05" => {attr => {subType => "autoMeterReading.05"}}, + "A5.13.01" => {attr => {subType => "environmentApp"}}, + "A5.13.02" => {attr => {subType => "environmentApp"}}, + "A5.13.03" => {attr => {subType => "environmentApp"}}, + "A5.13.04" => {attr => {subType => "environmentApp"}}, + "A5.13.05" => {attr => {subType => "environmentApp"}}, + "A5.13.06" => {attr => {subType => "environmentApp"}}, + "A5.13.10" => {attr => {subType => "environmentApp"}}, + "A5.14.01" => {attr => {subType => "multiFuncSensor"}}, + "A5.14.02" => {attr => {subType => "multiFuncSensor"}}, + "A5.14.03" => {attr => {subType => "multiFuncSensor"}}, + "A5.14.04" => {attr => {subType => "multiFuncSensor"}}, + "A5.14.05" => {attr => {subType => "multiFuncSensor"}}, + "A5.14.06" => {attr => {subType => "multiFuncSensor"}}, + "A5.20.01" => {attr => {subType => "hvac.01"}}, + #"A5.20.02" => {attr => {subType => "hvac.02"}}, + #"A5.20.03" => {attr => {subType => "hvac.03"}}, + #"A5.20.10" => {attr => {subType => "hvac.04"}}, + #"A5.20.11" => {attr => {subType => "hvac.11"}}, + #"A5.20.12" => {attr => {subType => "hvac.12"}}, + "A5.30.01" => {attr => {subType => "digitalInput.01"}}, + "A5.30.02" => {attr => {subType => "digitalInput.02"}}, + "A5.30.03" => {attr => {subType => "digitalInput.03"}}, + "A5.30.04" => {attr => {subType => "digitalInput.04"}}, + "A5.38.08" => {attr => {subType => "gateway"}}, + "A5.3F.7F" => {attr => {subType => "manufProfile"}}, + "D2.01.00" => {attr => {subType => "actuator.01"}}, + "D2.01.01" => {attr => {subType => "actuator.01"}}, + "D2.01.02" => {attr => {subType => "actuator.01"}}, + "D2.01.03" => {attr => {subType => "actuator.01"}}, + "D2.01.04" => {attr => {subType => "actuator.01"}}, + "D2.01.05" => {attr => {subType => "actuator.01"}}, + "D2.01.06" => {attr => {subType => "actuator.01"}}, + "D2.01.07" => {attr => {subType => "actuator.01"}}, + "D2.01.08" => {attr => {subType => "actuator.01", defaultChannel => 0}}, + "D2.01.09" => {attr => {subType => "actuator.01", defaultChannel => 0}}, + "D2.01.0A" => {attr => {subType => "actuator.01"}}, + "D2.01.10" => {attr => {subType => "actuator.01"}}, + "D2.01.11" => {attr => {subType => "actuator.01"}}, + "D2.03.00" => {attr => {subType => "switch.00"}}, + "D2.03.10" => {attr => {subType => "windowHandle.10"}}, + "D2.10.00" => {attr => {subType => "roomCtrlPanel.00"}}, + "D2.10.01" => {attr => {subType => "roomCtrlPanel.00"}}, + "D2.10.02" => {attr => {subType => "roomCtrlPanel.00"}}, + "D5.00.01" => {attr => {subType => "contact"}}, + "F6.02.01" => {attr => {subType => "switch"}}, + "F6.02.02" => {attr => {subType => "switch"}}, + "F6.02.03" => {attr => {subType => "switch"}}, + #"F6.02.04" => {attr => {subType => "switch.04"}}, + "F6.03.01" => {attr => {subType => "switch"}}, + "F6.03.02" => {attr => {subType => "switch"}}, + "F6.04.01" => {attr => {subType => "keycard"}}, + #"F6.04.02" => {attr => {subType => "keycard.02"}}, + "F6.05.01" => {attr => {subType => "liquidLeakage"}}, + "F6.10.00" => {attr => {subType => "windowHandle"}}, + #"F6.10.01" => {attr => {subType => "windowHandle.01"}}, + "F6.3F.7F" => {attr => {subType => "switch.7F"}}, + 1 => {attr => {subType => "sensor"}}, + 2 => {attr => {subType => "FRW"}}, + 3 => {attr => {subType => "PM101"}}, + 4 => {attr => {subType => "raw"}}, ); my %EnO_getRemoteFunctionCode = ( @@ -306,9 +305,11 @@ EnOcean_Initialize($) { my ($hash) = @_; my %subTypeList; - my $subTypeList = join(",", sort grep { !$subTypeList{$_}++ } values %EnO_subType); - #my %subTypeSetList; - + my @subTypeList; + foreach my $eep (keys %EnO_eepConfig){ + push @subTypeList, $EnO_eepConfig{$eep}{attr}{subType}; + } + my $subTypeList = join(",", sort grep { !$subTypeList{$_}++ } @subTypeList); $hash->{Match} = "^EnOcean:"; $hash->{DefFn} = "EnOcean_Define"; @@ -2883,15 +2884,28 @@ EnOcean_Parse($$) $mf = $EnO_manuf{$mf} if($EnO_manuf{$mf}); my $st = "A5.$fn.$tp"; $attr{$name}{eep} = "A5-$fn-$tp"; - if($EnO_subType{$st}) { - $st = $EnO_subType{$st}; + if($EnO_eepConfig{$st}{attr}) { push @event, "3:teach-in:EEP A5-$fn-$tp Manufacturer: $mf"; Log3 $name, 2, "EnOcean $name teach-in EEP A5-$fn-$tp Manufacturer: $mf"; - $attr{$name}{subType} = $st; + #### + foreach my $attrCntr (keys %{$EnO_eepConfig{$st}{attr}}) { + if ($attrCntr eq "subDef") { + if (!defined AttrVal($name, $attrCntr, undef)) { + #$attr{$name}{$attrCntr} = EnOcean_CheckSenderID($EnO_eepConfig{$st}{attr}{$attrCntr}, $defs{$name}{IODev}{NAME}, "00000000"); + CommandAttr(undef, "$name $attrCntr " . EnOcean_CheckSenderID($EnO_eepConfig{$st}{attr}{$attrCntr}, $defs{$name}{IODev}{NAME}, "00000000")); + } + } else { + #$attr{$name}{$attrCntr} = $EnO_eepConfig{$st}{attr}{$attrCntr}; + CommandAttr(undef, "$name $attrCntr $EnO_eepConfig{$st}{attr}{$attrCntr}"); + } + } + $st = $EnO_eepConfig{$st}{attr}{subType}; + #$attr{$name}{subType} = $st; } else { push @event, "3:teach-in:EEP A5-$fn-$tp Manufacturer: $mf not supported"; Log3 $name, 2, "EnOcean $name teach-in EEP A5-$fn-$tp Manufacturer: $mf not supported"; $attr{$name}{subType} = "raw"; + $st = "raw"; } if ($st eq "hvac.01" || $st eq "MD15") { @@ -2899,9 +2913,11 @@ EnOcean_Parse($$) # bidirectional Teach-In for EEP A5-20-01 $attr{$name}{comMode} = "biDir"; $attr{$name}{destinationID} = "unicast"; - my $subDef = "00000000"; - $subDef = EnOcean_CheckSenderID("getNextID", $defs{$name}{IODev}{NAME}, $subDef); - $attr{$name}{subDef} = $subDef; + my $subDef = AttrVal($name, "subDef", undef); + if (!defined $subDef) { + $subDef = EnOcean_CheckSenderID("getNextID", $defs{$name}{IODev}{NAME}, "00000000"); + $attr{$name}{subDef} = $subDef; + } # teach-in response EnOcean_SndRadio(undef, $hash, $packetType, $rorg, "800FFFF0", $subDef, "00", $hash->{DEF}); EnOcean_hvac_01Cmd($hash, $packetType, 128); # 128 == 20 degree C @@ -4895,10 +4911,13 @@ EnOcean_Parse($$) my $teachInReq = ($db[6] & 0x30) >> 4; if ($teachInReq == 0 || $teachInReq == 2) { # Teach-In Request - if($EnO_subType{$subType}) { + if($EnO_eepConfig{$subType}) { # EEP Teach-In - $subType = $EnO_subType{$subType}; - $attr{$name}{subType} = $subType; + foreach my $attrCntr (keys %{$EnO_eepConfig{$subType}{attr}}) { + $attr{$name}{$attrCntr} = $EnO_eepConfig{$subType}{attr}{$attrCntr}; + } + $subType = $EnO_eepConfig{$subType}{attr}{subType}; + #$attr{$name}{subType} = $subType; $attr{$name}{manufID} = $mid; $attr{$name}{devChannel} = $devChannel; $attr{$name}{comMode} = $comMode; @@ -4909,12 +4928,14 @@ EnOcean_Parse($$) # EEP Teach-In-Response expected # send EEP Teach-In Response message $data = (sprintf "%02X", $db[6] & 0x80 | 0x11) . substr($data, 2, 12); - my $subDef = "00000000"; + my $subDef = AttrVal($name, "subDef", "00000000"); if ($comMode eq "biDir") { - # select a free SenderID - $subDef = EnOcean_CheckSenderID("getNextID", $defs{$name}{IODev}{NAME}, $subDef); + if (!defined AttrVal($name, "subDef", undef)) { + # select a free SenderID + $subDef = EnOcean_CheckSenderID("getNextID", $defs{$name}{IODev}{NAME}, $subDef); + $attr{$name}{subDef} = $subDef; + } } - $attr{$name}{subDef} = $subDef; EnOcean_SndRadio(undef, $hash, $packetType, "D4", $data, $subDef, "00", $id); Log3 $name, 2, "EnOcean $name UTE teach-in response send to $id"; } @@ -5008,7 +5029,7 @@ EnOcean_Parse($$) $mid = $EnO_manuf{$mid} if($EnO_manuf{$mid}); $attr{$name}{eep} = "$rorg-$func-$type"; my $subType = "$rorg.$func.$type"; - $attr{$name}{subType} = $EnO_subType{$subType} if($EnO_manuf{$subType}); + $attr{$name}{subType} = $EnO_eepConfig{$subType}{attr}{subType} if($EnO_manuf{$subType}); if ($hash->{helper}{sysEx}{$seq}{fnNumber} == 0x606) { $hash->{RSSI} = - substr($data, 6, 2); } @@ -5086,7 +5107,7 @@ EnOcean_Parse($$) $manufID = $EnO_manuf{$manufID} if($EnO_manuf{$manufID}); $attr{$name}{eep} = "$rorg-$func-$type"; my $subType = "$rorg.$func.$type"; - $attr{$name}{subType} = $EnO_subType{$subType} if($EnO_manuf{$subType}); + $attr{$name}{subType} = $EnO_eepConfig{$subType}{attr}{subType} if($EnO_manuf{$subType}); if ($fnNumber == 0x606) { $hash->{RSSI} = - substr($data, 6, 2); } @@ -6118,13 +6139,19 @@ sub EnOcean_sec_parseTeachIn($$) { } else { if ($info == 0) { $attr{$name}{eep} = "D2-03-00"; - $attr{$name}{subType} = $EnO_subType{"D2.03.00"}; + foreach my $attrCntr (keys %{$EnO_eepConfig{"D2.03.00"}{attr}}) { + $attr{$name}{$attrCntr} = $EnO_eepConfig{"D2.03.00"}{attr}{$attrCntr}; + } + #$attr{$name}{subType} = $EnO_eepConfig{"D2.03.00"}{attr}{subType}; $attr{$name}{manufID} = "7FF"; readingsSingleUpdate($hash, "teach-in", "EEP D2-03-00 Manufacturer: " . $EnO_manuf{"7FF"}, 1); Log3 $name, 2, "EnOcean $name teach-in EEP D2-03-00 Rocker A Manufacturer: " . $EnO_manuf{"7FF"}; } else { $attr{$name}{eep} = "D2-03-00"; - $attr{$name}{subType} = $EnO_subType{"D2.03.00"}; + foreach my $attrCntr (keys %{$EnO_eepConfig{"D2.03.00"}{attr}}) { + $attr{$name}{$attrCntr} = $EnO_eepConfig{"D2.03.00"}{attr}{$attrCntr}; + } + #$attr{$name}{subType} = $EnO_eepConfig{"D2.03.00"}{attr}{subType}; $attr{$name}{manufID} = "7FF"; readingsSingleUpdate($hash, "teach-in", "EEP D2-03-00 Manufacturer: " . $EnO_manuf{"7FF"}, 1); Log3 $name, 2, "EnOcean $name teach-in EEP D2-03-00 Rocker B Manufacturer: " . $EnO_manuf{"7FF"};