2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-22 08:11:44 +00:00

some register adds motion detector and SFA, minor bug fixes

git-svn-id: https://svn.fhem.de/fhem/trunk@2525 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2013-01-17 19:21:57 +00:00
parent 8bfc6554a5
commit 897dcf24e0

View File

@ -1,6 +1,30 @@
############################################## ##############################################
# CUL HomeMatic handler # CUL HomeMatic handler
# $Id$ # $Id$
#HM-SEC-SFA-SM:
#- power,sabotage and batterie error evaluated for all channels, mapped to the device only
#
#motion detector:
#- next-value should be readable
#- change minInterval values
#
#virtual actor: change state @ longpress only once, not per message
#
#reglist
#- no min/max for literal
#- fractional values for min-value display
#
#virtual command
#- avoid 'undefined error'
#
#press command
#- avoid 'undefined error'
#
#devicepair command
#- allow only single for motion detector
#
#dump messages
#- all sensor trigger decoding
package main; package main;
@ -177,27 +201,40 @@ my %culHmModel=(
"006C" => {name=>"HM-LC-SW1-BA-PCB" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",}, "006C" => {name=>"HM-LC-SW1-BA-PCB" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
"006D" => {name=>"HM-OU-LED16" ,cyc=>'' ,rxt=>'' ,lst=>'' ,chn=>"Led:1:16",}, "006D" => {name=>"HM-OU-LED16" ,cyc=>'' ,rxt=>'' ,lst=>'' ,chn=>"Led:1:16",},
"0075" => {name=>"HM-OU-CFM-PL" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Led:1:1,Mp3:2:2",}, "0075" => {name=>"HM-OU-CFM-PL" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Led:1:1,Mp3:2:2",},
"0078" => {name=>"HM-Dis-TD-T" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",}, "0078" => {name=>"HM-Dis-TD-T" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",}, #
"0079" => {name=>"ROTO_ZEL-STG-RM-FWT" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, "0079" => {name=>"ROTO_ZEL-STG-RM-FWT" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, #
"0x7A" => {name=>"ROTO_ZEL-STG-RM-FSA" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, "0x7A" => {name=>"ROTO_ZEL-STG-RM-FSA" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #
"007B" => {name=>"ROTO_ZEL-STG-RM-FEP-230V",cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, "007B" => {name=>"ROTO_ZEL-STG-RM-FEP-230V",cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #
"007D" => {name=>"ROTO_ZEL-STG-RM-WT-2" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, "007D" => {name=>"ROTO_ZEL-STG-RM-WT-2" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM Push Button 2 Roto
"007E" => {name=>"ROTO_ZEL-STG-RM-DWT-10" ,cyc=>'00:10' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, "007E" => {name=>"ROTO_ZEL-STG-RM-DWT-10" ,cyc=>'00:10' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, #
"007F" => {name=>"ROTO_ZEL-STG-RM-FST-UP4" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, "007F" => {name=>"ROTO_ZEL-STG-RM-FST-UP4" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Push Button Interface Roto
"0080" => {name=>"ROTO_ZEL-STG-RM-HS-4" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, "0080" => {name=>"ROTO_ZEL-STG-RM-HS-4" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Remote 4 buttons Roto
"0081" => {name=>"ROTO_ZEL-STG-RM-FDK" ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, "0081" => {name=>"ROTO_ZEL-STG-RM-FDK" ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM Rotary Handle Sensor Roto
"0082" => {name=>"Roto_ZEL-STG-RM-FFK" ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, "0082" => {name=>"Roto_ZEL-STG-RM-FFK" ,cyc=>'28:00' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM Shutter Contact Roto
"0083" => {name=>"Roto_ZEL-STG-RM-FSS-UP3" ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, "0083" => {name=>"Roto_ZEL-STG-RM-FSS-UP3" ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches Roto
"0084" => {name=>"Schueco_263-160" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, "0084" => {name=>"Schueco_263-160" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,4' ,chn=>"",}, # HM SENSOR_FOR_CARBON_DIOXIDE Schueco
"0086" => {name=>"Schueco_263-146" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, "0086" => {name=>"Schueco_263-146" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount) Schueco
"008D" => {name=>"Schueco_263-1350" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, "008D" => {name=>"Schueco_263-135" ,cyc=>'' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM Push Button 2 Schueco
"008E" => {name=>"Schueco_263-155" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, "008E" => {name=>"Schueco_263-155" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Remote Display 4 buttons Schueco
"008F" => {name=>"Schueco_263-145" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, "008F" => {name=>"Schueco_263-145" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"",}, # HM Push Button Interface Schueco
"0090" => {name=>"Schueco_263-162" ,cyc=>'00:30' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, "0090" => {name=>"Schueco_263-162" ,cyc=>'00:30' ,rxt=>'c:w' ,lst=>'1,3' ,chn=>"",}, # HM radio-controlled motion detector Schueco
"0092" => {name=>"Schueco_263-144" ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, "0092" => {name=>"Schueco_263-144" ,cyc=>'' ,rxt=>'c' ,lst=>'4' ,chn=>"",}, # HM Switch Interface 3 switches Schueco
"0093" => {name=>"Schueco_263-158" ,cyc=>'' ,rxt=>'c:w' ,lst=>'' ,chn=>"",}, "0093" => {name=>"Schueco_263-158" ,cyc=>'' ,rxt=>'c:w' ,lst=>'' ,chn=>"",}, #
"0094" => {name=>"Schueco_263-157" ,cyc=>'' ,rxt=>'c:w' ,lst=>'' ,chn=>"",}, "0094" => {name=>"Schueco_263-157" ,cyc=>'' ,rxt=>'c:w' ,lst=>'' ,chn=>"",}, #
"00A1" => {name=>"HM-LC-SW1-PL2" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",}, "00A1" => {name=>"HM-LC-SW1-PL2" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"",}, #
#263 130 radio-controlled switch actuator 1-channel (flush-mount) Schueco
#263 131 radio-controlled switch actuator 1-channel (flush-mount) Schueco
#263 132 1 channel dimmer L (ceiling voids) Schueco
#263 133 1 channel dimmer TPBU (flush mount) Schueco
#263 134 1 channel dimmer T (ceiling voids) Schueco
#263 146 radio-controlled blind actuator 1-channel (flush-mount) Schueco
#263 147 radio-controlled blind actuator 1-channel (flush-mount) Schueco
#263 167 HM Smoke Detector Schueco
#ZEL STG RM FZS radio-controlled socket adapter switch actuator 1-channel Roto
#ZEL STG RM FZS-2 radio-controlled socket adapter switch actuator 1-channel Roto
#BRC-H Dorma Remote 4 single buttons
#RC-H DORMA Remote 4 buttons
#atent DORMA Remote 3 buttons
); );
sub sub
CUL_HM_Initialize($) CUL_HM_Initialize($)
@ -737,15 +774,16 @@ CUL_HM_Parse($$)
push @event, "$eventName:down:$val" if(($err&0x30) == 0x20); push @event, "$eventName:down:$val" if(($err&0x30) == 0x20);
push @event, "$eventName:stop:$val" if(($err&0x30) == 0x00); push @event, "$eventName:stop:$val" if(($err&0x30) == 0x00);
} }
if ($st eq "dimmer"){ elsif ($st eq "dimmer"){
push @event, "overload:".(($err&0x02)?"on":"off"); push @event,"overload:".(($err&0x02)?"on":"off");
push @event, "overheat:".(($err&0x04)?"on":"off"); push @event,"overheat:".(($err&0x04)?"on":"off");
push @event, "reduced:" .(($err&0x08)?"on":"off"); push @event,"reduced:" .(($err&0x08)?"on":"off");
} }
if ($model eq "HM-SEC-SFA-SM" && $chn eq "00"){ elsif ($model eq "HM-SEC-SFA-SM"){ # && $chn eq "00")
push @event, "powerError:" .(($err&0x02) ? "on":"off"); CUL_HM_UpdtReadBulk(CUL_HM_getDeviceHash($shash),1,
push @event, "sabotageError:" .(($err&0x04) ? "on":"off"); "powerError:" .(($err&0x02) ? "on":"off"),
push @event, "batterieError:" .(($err&0x08) ? "on":"off"); "sabotageError:".(($err&0x04) ? "on":"off"),
"batterieError:".(($err&0x08) ? "on":"off"));
} }
push @event, "battery:" . (($err&0x80) ? "low" : "ok" ) push @event, "battery:" . (($err&0x80) ? "low" : "ok" )
if(($model eq "HM-LC-SW1-BA-PCB")&&($err&0x80)); if(($model eq "HM-LC-SW1-BA-PCB")&&($err&0x80));
@ -861,13 +899,15 @@ CUL_HM_Parse($$)
push @event, "cover:". (($err&0x0E)?"open" :"closed"); push @event, "cover:". (($err&0x0E)?"open" :"closed");
push @event, "battery:". (($err&0x80)?"low" :"ok" ); push @event, "battery:". (($err&0x80)?"low" :"ok" );
} }
elsif($msgType eq "41" && $p =~ m/^01(..)(..)(..)/) {#01 is "motion" elsif($msgType eq "41" && $p =~ m/^01(..)(..)(..)/) {#01 is channel
my($cnt,$nextTr) = (hex($1),(hex($3)>>4)); my($cnt,$bright,$nextTr);
$state = $2; ($cnt,$state,$nextTr) = (hex($1),$2,(hex($3)>>4));
my $bright = hex($state); $bright = hex($state);
my @nextVal = ("0x0","0x1","0x2","0x3","15" ,"30" ,"60" ,"120",
"240","0x9","0xa","0xb","0xc","0xd","0xe","0xf");
push @event, "state:motion"; push @event, "state:motion";
push @event, "motion:on$target"; #added peterp push @event, "motion:on$target"; #added peterp
push @event, "motionCount:".$cnt."_next:".$nextTr; push @event, "motionCount:".$cnt."_next:".$nextTr."-".$nextVal[$nextTr];
push @event, "brightness:".$bright; push @event, "brightness:".$bright;
} }
elsif($msgType eq "70" && $p =~ m/^7F(..)(.*)/) { elsif($msgType eq "70" && $p =~ m/^7F(..)(.*)/) {
@ -1068,8 +1108,9 @@ CUL_HM_Parse($$)
if (!defined($dChHash->{helper}{trgLgRpt})); if (!defined($dChHash->{helper}{trgLgRpt}));
$dChHash->{helper}{trgLgRpt} +=1; $dChHash->{helper}{trgLgRpt} +=1;
my $state = ReadingsVal($dChName,"virtActState","OFF"); my $state = ReadingsVal($dChName,"virtActState","OFF");
$state = ($state eq "OFF")?"ON":"OFF"; my $tNoOld = ReadingsVal($dChName,"virtActTrigNo","0");
$state = ($state eq "OFF")?"ON":"OFF" if ($trigNo ne $tNoOld);
if (hex($msgFlag)&0x20){ if (hex($msgFlag)&0x20){
$longPress .= "_Release"; $longPress .= "_Release";
$dhash->{helper}{trgLgRpt}=0; $dhash->{helper}{trgLgRpt}=0;
@ -1328,7 +1369,7 @@ my %culHmRegDefine = (
transmDevTryMax =>{a=> 20.0,s=>1.0,l=>0,min=>1 ,max=>10 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"max message re-transmit"}, transmDevTryMax =>{a=> 20.0,s=>1.0,l=>0,min=>1 ,max=>10 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"max message re-transmit"},
evtFltrPeriod =>{a=> 1.0,s=>0.4,l=>1,min=>0.5,max=>7.5 ,c=>'factor' ,f=>2 ,u=>'s' ,d=>1,t=>"event filter period"}, evtFltrPeriod =>{a=> 1.0,s=>0.4,l=>1,min=>0.5,max=>7.5 ,c=>'factor' ,f=>2 ,u=>'s' ,d=>1,t=>"event filter period"},
evtFltrNum =>{a=> 1.4,s=>0.4,l=>1,min=>1 ,max=>15 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"sensitivity - read sach n-th puls"}, evtFltrNum =>{a=> 1.4,s=>0.4,l=>1,min=>1 ,max=>15 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"sensitivity - read sach n-th puls"},
minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"minimum interval in sec" ,lit=>{0=>0,15=>1,20=>2,60=>3,120=>4}}, minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"minimum interval in sec" ,lit=>{15=>0,30=>1,60=>2,120=>3,240=>4}},
captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture within interval" ,lit=>{off=>0,on=>1}}, captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture within interval" ,lit=>{off=>0,on=>1}},
brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"brightness filter"}, brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"brightness filter"},
ledOnTime =>{a=> 34 ,s=>1 ,l=>1,min=>0 ,max=>1.275 ,c=>'factor' ,f=>200 ,u=>'s' ,d=>1,t=>"LED ontime"}, ledOnTime =>{a=> 34 ,s=>1 ,l=>1,min=>0 ,max=>1.275 ,c=>'factor' ,f=>200 ,u=>'s' ,d=>1,t=>"LED ontime"},
@ -1714,14 +1755,18 @@ CUL_HM_Get($@)
foreach my $regName (@regArr){ foreach my $regName (@regArr){
my $reg = $culHmRegDefine{$regName}; my $reg = $culHmRegDefine{$regName};
my $help = $reg->{t}; my $help = $reg->{t};
$help .= " options:".join(",",keys%{$reg->{lit}})if (defined($reg->{lit})); my ($min,$max) = ($reg->{min},$reg->{max});
push @rI,sprintf("%4d: %-16s | %3d to %-11s | %8s | %s\n", if (defined($reg->{lit})){
$reg->{l},$regName,$reg->{min},$reg->{max}.$reg->{u}, $help .= " options:".join(",",keys%{$reg->{lit}});
$min =$max ="-","-";
}
push @rI,sprintf("%4d: %-16s | %3s to %-11s | %8s | %s\n",
$reg->{l},$regName,$min,$max.$reg->{u},
((($reg->{l} == 3)||($reg->{l} == 4))?"required":""),$help) ((($reg->{l} == 3)||($reg->{l} == 4))?"required":""),$help)
if (!($isChannel && $reg->{l} == 0)); if (!($isChannel && $reg->{l} == 0));
} }
my $info = sprintf("list: %16s | %-18s | %-8s | %s\n", my $info = sprintf("list: %16s | %-20s | %-8s | %s\n",
"register","range","peer","description"); "register","range","peer","description");
foreach(sort(@rI)){$info .= $_;} foreach(sort(@rI)){$info .= $_;}
return $info; return $info;
@ -2583,6 +2628,7 @@ CUL_HM_Set($@)
} }
foreach my $channel (keys %{$hash}){# remove higher numbers foreach my $channel (keys %{$hash}){# remove higher numbers
my $chNo = $1 if($channel =~ m/^channel_(.*)/); my $chNo = $1 if($channel =~ m/^channel_(.*)/);
next if (!defined($chNo));
CommandDelete(undef,$hash->{$channel}) CommandDelete(undef,$hash->{$channel})
if (hex($chNo) > $maxBtnNo); if (hex($chNo) > $maxBtnNo);
} }
@ -2605,7 +2651,7 @@ CUL_HM_Set($@)
push (@peerList,substr($peer,0,6)); push (@peerList,substr($peer,0,6));
} }
my $oldPeer; # only once to device, not channel! my $oldPeer = " "; # only once to device, not channel!
foreach my $peer (sort @peerList){ foreach my $peer (sort @peerList){
next if ($oldPeer eq $peer); next if ($oldPeer eq $peer);
@ -2632,18 +2678,17 @@ CUL_HM_Set($@)
my $peerChn = substr($peerDst,6,2); my $peerChn = substr($peerDst,6,2);
$peerDst = substr($peerDst,0,6); $peerDst = substr($peerDst,0,6);
my $peerHash; my $peerHash;
$peerHash = $modules{CUL_HM}{defptr}{$peerDst.$peerChn} $peerHash = $modules{CUL_HM}{defptr}{$peerDst.$peerChn}if ($modules{CUL_HM}{defptr}{$peerDst.$peerChn});
if ($modules{CUL_HM}{defptr}{$peerDst.$peerChn}); $peerHash = $modules{CUL_HM}{defptr}{$peerDst} if (!$peerHash);
$peerHash = $modules{CUL_HM}{defptr}{$peerDst} if (!$peerHash);
return "$peerN not a CUL_HM device" if($target && ($target ne "remote") &&(!$peerHash ||$peerHash->{TYPE} ne "CUL_HM")); return "$peerN not a CUL_HM device" if($target && ($target ne "remote") &&(!$peerHash ||$peerHash->{TYPE} ne "CUL_HM"));
return "$single must be single or dual" if(defined($single) && (($single ne"single") &&($single ne"dual"))); return "$single must be single or dual" if(defined($single) && (($single ne"single") &&($single ne"dual")));
return "$set must be set or unset" if(defined($set) && (($set ne"set") &&($set ne"unset"))); return "$set must be set or unset" if(defined($set) && (($set ne"set") &&($set ne"unset")));
return "$target must be [actor|remote|both]" if(defined($target) && (($target ne"actor") && return "$target must be [actor|remote|both]" if(defined($target) && (($target ne"actor")&&($target ne"remote")&&($target ne"both")));
($target ne"remote")&&($target ne"both"))); return "use climate chan to pair TC" if( $md eq "HM-CC-TC" &&$chn ne "02");
return "use climate chan to pair TC" if($md eq "HM-CC-TC" &&$chn ne "02"); return "use - single [set|unset] actor - for smoke detector" if( $st eq "smokeDetector" && (!$single || $single ne "single" || $target ne "actor"));
return "use - single [set|unset] actor - for smoke detector" if($st eq "smokeDetector" && (!$single || $single ne "single" || $target ne "actor")); return "use - single - for ".$st if(($st eq "threeStateSensor"||
return "use - single - for threeStateSensor" if($st eq "threeStateSensor" && (!$single || $single ne "single")); $st eq "motionDetector" ) && (!$single || $single ne "single"));
$single = ($single eq "single")?1:"";#default to dual $single = ($single eq "single")?1:"";#default to dual
$set = ($set eq "unset")?0:1; $set = ($set eq "unset")?0:1;
@ -3366,6 +3411,12 @@ my %culHmBits = (
LONG => '00,2,$val=(hex($val)&0x40)?1:0', LONG => '00,2,$val=(hex($val)&0x40)?1:0',
LOWBAT => '00,2,$val=(hex($val)&0x80)?1:0', LOWBAT => '00,2,$val=(hex($val)&0x80)?1:0',
COUNTER => "02,2", } }, COUNTER => "02,2", } },
"41" => { txt => "Sensor_event", params => {
BUTTON => '00,2,$val=(hex($val)&0x3F)',
LONG => '00,2,$val=(hex($val)&0x40)?1:0',
LOWBAT => '00,2,$val=(hex($val)&0x80)?1:0',
VALUE => '02,2,$val=(hex($val))',
NEXT => '04,2,$val=(hex($val))',} },
"58" => { txt => "ClimateEvent", params => { "58" => { txt => "ClimateEvent", params => {
CMD => "00,2", CMD => "00,2",
ValvePos => '02,2,$val=(hex($val))', } }, ValvePos => '02,2,$val=(hex($val))', } },
@ -3678,7 +3729,7 @@ CUL_HM_getRegFromStore($$$$)
if ($hash->{helper}{shadowReg}&&$hash->{helper}{shadowReg}{$regLN}){ if ($hash->{helper}{shadowReg}&&$hash->{helper}{shadowReg}{$regLN}){
$dReadS = $1 if($hash->{helper}{shadowReg}{$regLN} =~ m/$addrS:(..)/); $dReadS = $1 if($hash->{helper}{shadowReg}{$regLN} =~ m/$addrS:(..)/);
} }
my $dReadR; my $dReadR = " ";
if ($hash->{READINGS}{$regLN}) { if ($hash->{READINGS}{$regLN}) {
$dReadR = $1 if($hash->{READINGS}{$regLN}{VAL} =~ m/$addrS:(..)/); $dReadR = $1 if($hash->{READINGS}{$regLN}{VAL} =~ m/$addrS:(..)/);
} }
@ -4103,7 +4154,7 @@ CUL_HM_setAttrIfCh($$$$)
make the traces better readable.<br><br> make the traces better readable.<br><br>
define may also be invoked by the <a href="#autocreate">autocreate</a> define may also be invoked by the <a href="#autocreate">autocreate</a>
module, together with the necessary hmClass and subType attributes. module, together with the necessary subType attribute.
Usually you issue a <a href="#CULset">hmPairForSec</a> and press the Usually you issue a <a href="#CULset">hmPairForSec</a> and press the
corresponding button on the device to be paired, or issue a <a corresponding button on the device to be paired, or issue a <a
href="#CULset">hmPairSerial</a> set command if the device is a receiver href="#CULset">hmPairSerial</a> set command if the device is a receiver
@ -4120,7 +4171,7 @@ CUL_HM_setAttrIfCh($$$$)
you cannot choose it arbitrarily like for FS20 devices). You may you cannot choose it arbitrarily like for FS20 devices). You may
detect it by inspecting the fhem log.</li> detect it by inspecting the fhem log.</li>
<li>the hmClass attribute<br> <li>the hmClass attribute<br>
which is either sender or receiver</li> which is either sender or receiver. It is not used in fhem</li>
<li>the subType attribute<br> <li>the subType attribute<br>
which is one of switch dimmer blindActuator remote sensor swi which is one of switch dimmer blindActuator remote sensor swi
pushButton threeStateSensor motionDetector keyMatic winMatic pushButton threeStateSensor motionDetector keyMatic winMatic