diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index e84074a47..f11ae3497 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -3181,9 +3181,10 @@ sub CUL_HM_Set($@) { } elsif($cmd eq "press") { #################################################### my (undef,undef,$mode,$vChn) = @a; + $mode = 'short' if (!$mode); + return "$mode unknown - select long or short" if ($mode !~ m/^(short|long)$/); my $pressCnt = (!$hash->{helper}{count}?1:$hash->{helper}{count}+1)%256; $hash->{helper}{count}=$pressCnt;# remember for next round - my @peerList; if ($st eq 'virtual'){#serve all peers of virtual button foreach my $peer (sort(split(',',AttrVal($name,"peerIDs","")))) { @@ -3192,13 +3193,24 @@ sub CUL_HM_Set($@) { @peerList = grep !/^$/,CUL_HM_noDup(@peerList); @peerList = ('000000') if (scalar@peerList == 0);#send to broadcast if no peer foreach my $peer (sort @peerList){ - my $peerFlag = $peer eq '000000'?'A4': - CUL_HM_getFlag(CUL_HM_id2Hash($peer)); - $peerFlag =~ s/0/4/;# either 'A4' or 'B4' - CUL_HM_PushCmdStack($hash, sprintf("++%s40%s%s%02X%02X", + my ($pHash,$peerFlag,$rxt) = ($hash,'A4',1); + if ($peer ne '000000'){ + $pHash = CUL_HM_id2Hash($peer); + $rxt = CUL_HM_getRxType($pHash); + $peerFlag = ($rxt & 0x02)?"B4":"A4" if(!$vChn || $vChn ne "noBurst");#burst + } + CUL_HM_PushCmdStack($pHash, sprintf("++%s40%s%s%02X%02X", $peerFlag,$dst,$peer, hex($chn)+(($mode && $mode eq "long")?64:0), $pressCnt)); + + if ($rxt & 0x80){#burstConditional + CUL_HM_SndCmd($pHash, "++B112$id".substr($peer,0,6)) + if(!$vChn || $vChn ne "noBurst"); + } + else{ + CUL_HM_ProcessCmdStack($pHash); + } } } else{#serve internal channels for actor @@ -5776,11 +5788,16 @@ sub CUL_HM_reglUsed($) {# provide data for HMinfo
set <name> on-till 20:32:10