mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
change devicepair to peerChan
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@2962 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
f974f02dd0
commit
daba090b8e
@ -1,4 +1,5 @@
|
|||||||
##############################################
|
##############################################
|
||||||
|
##############################################
|
||||||
# CUL HomeMatic handler
|
# CUL HomeMatic handler
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
@ -941,7 +942,7 @@ sub CUL_HM_Parse($$) {##############################
|
|||||||
my %colorTable=("00"=>"off","01"=>"red","02"=>"green","03"=>"orange");
|
my %colorTable=("00"=>"off","01"=>"red","02"=>"green","03"=>"orange");
|
||||||
my $actColor = $colorTable{$msgState};
|
my $actColor = $colorTable{$msgState};
|
||||||
$actColor = "unknown" if(!$actColor);
|
$actColor = "unknown" if(!$actColor);
|
||||||
push @event, "color:$actColor"; #todo duplicate
|
push @event, "color:$actColor";
|
||||||
push @event, "state:$actColor";
|
push @event, "state:$actColor";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1683,7 +1684,7 @@ sub CUL_HM_Get($@) {
|
|||||||
#+++++++++++++++++ set command+++++++++++++++++++++++++++++++++++++++++++++++++
|
#+++++++++++++++++ set command+++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
sub CUL_HM_Set($@) {
|
sub CUL_HM_Set($@) {
|
||||||
my ($hash, @a) = @_;
|
my ($hash, @a) = @_;
|
||||||
my ($ret, $tval, $rval); #added rval for ramptime by unimatrix
|
my $ret;
|
||||||
return "no set value specified" if(@a < 2);
|
return "no set value specified" if(@a < 2);
|
||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
@ -1817,14 +1818,6 @@ sub CUL_HM_Set($@) {
|
|||||||
}
|
}
|
||||||
$state = "";
|
$state = "";
|
||||||
}
|
}
|
||||||
elsif($cmd eq "getpair") { ##################################################
|
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.'00040000000000');
|
|
||||||
$state = "";
|
|
||||||
}
|
|
||||||
elsif($cmd eq "getdevicepair") { ############################################
|
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.$chn.'03');
|
|
||||||
$state = "";
|
|
||||||
}
|
|
||||||
elsif($cmd eq "getSerial") { ################################################
|
elsif($cmd eq "getSerial") { ################################################
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.'0009');
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.'0009');
|
||||||
$state = "";
|
$state = "";
|
||||||
@ -1849,16 +1842,16 @@ sub CUL_HM_Set($@) {
|
|||||||
return "unknown peer".$peer if (length($pID) != 8);# peer only to channel
|
return "unknown peer".$peer if (length($pID) != 8);# peer only to channel
|
||||||
my $pCh1 = substr($pID,6,2);
|
my $pCh1 = substr($pID,6,2);
|
||||||
my $pCh2 = $pCh1;
|
my $pCh2 = $pCh1;
|
||||||
if($culHmSubTypeSets{$st}{devicepair}||
|
if($culHmSubTypeSets{$st}{peerChan}||
|
||||||
$culHmModelSets{$md}{devicepair}||
|
$culHmModelSets{$md}{peerChan}||
|
||||||
$culHmChanSets{$mdCh}{devicepair}){
|
$culHmChanSets{$mdCh}{peerChan}){
|
||||||
$pCh2 = "00"; # button behavior
|
$pCh2 = "00"; # button behavior
|
||||||
}
|
}
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.$chn.'01'.
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'01'.$id.$dst.$chn.'01'.
|
||||||
substr($pID,0,6).$pCh1.$pCh2);
|
substr($pID,0,6).$pCh1.$pCh2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq "regBulk"||$cmd eq "getRegRaw") { ######################### reg
|
elsif($cmd =~ m/^(regBulk|getRegRaw)$/) { ############################### reg
|
||||||
my ($list,$addr,$data,$peerID);
|
my ($list,$addr,$data,$peerID);
|
||||||
$state = "";
|
$state = "";
|
||||||
if ($cmd eq "regBulk"){
|
if ($cmd eq "regBulk"){
|
||||||
@ -2019,7 +2012,7 @@ sub CUL_HM_Set($@) {
|
|||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'000000');
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'000000');
|
||||||
$hash = $chnHash; # report to channel if defined
|
$hash = $chnHash; # report to channel if defined
|
||||||
}
|
}
|
||||||
elsif($cmd eq "on-for-timer"||$cmd eq "on-till") { ##########################
|
elsif($cmd =~ m/^(on-for-timer|on-till)$/) { ################################
|
||||||
my (undef,undef,$duration,$edate) = @a; #date prepared extention to entdate
|
my (undef,undef,$duration,$edate) = @a; #date prepared extention to entdate
|
||||||
if ($cmd eq "on-till"){
|
if ($cmd eq "on-till"){
|
||||||
# to be extended to handle end date as well
|
# to be extended to handle end date as well
|
||||||
@ -2031,7 +2024,7 @@ sub CUL_HM_Set($@) {
|
|||||||
$duration = $eSec - $ltSec;
|
$duration = $eSec - $ltSec;
|
||||||
}
|
}
|
||||||
return "please enter the duration in seconds" if (!defined ($duration));
|
return "please enter the duration in seconds" if (!defined ($duration));
|
||||||
$tval = CUL_HM_encodeTime16($duration);# onTime 0.0..85825945.6, 0=forever
|
my $tval = CUL_HM_encodeTime16($duration);# onTime 0.0..85825945.6, 0=forever
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'C80000'.$tval);
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'C80000'.$tval);
|
||||||
$hash = $chnHash; # report to channel if defined
|
$hash = $chnHash; # report to channel if defined
|
||||||
}
|
}
|
||||||
@ -2044,36 +2037,34 @@ sub CUL_HM_Set($@) {
|
|||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'800100FF'); # LEVEL_SET
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'800100FF'); # LEVEL_SET
|
||||||
}
|
}
|
||||||
elsif($cmd eq "unlock") { ###################################################
|
elsif($cmd eq "unlock") { ###################################################
|
||||||
$tval = (@a > 2) ? int($a[2]) : 0;
|
my $tval = (@a > 2) ? int($a[2]) : 0;
|
||||||
my $delay = ($tval > 0) ? CUL_HM_encodeTime8($tval) : "FF"; # RELOCK_DELAY (FF=never)
|
my $delay = ($tval > 0) ? CUL_HM_encodeTime8($tval) : "FF"; # RELOCK_DELAY (FF=never)
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'800101'.$delay);# LEVEL_SET
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'800101'.$delay);# LEVEL_SET
|
||||||
}
|
}
|
||||||
elsif($cmd eq "open") { #####################################################
|
elsif($cmd eq "open") { #####################################################
|
||||||
$tval = (@a > 2) ? int($a[2]) : 0;
|
my $tval = (@a > 2) ? int($a[2]) : 0;
|
||||||
my $delay = ($tval > 0) ? CUL_HM_encodeTime8($tval) : "FF"; # RELOCK_DELAY (FF=never)
|
my $delay = ($tval > 0) ? CUL_HM_encodeTime8($tval) : "FF"; # RELOCK_DELAY (FF=never)
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'8001C8'.$delay);# OPEN
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'8001C8'.$delay);# OPEN
|
||||||
$state = "";
|
|
||||||
}
|
}
|
||||||
elsif($cmd eq "inhibit") { ##################################################
|
elsif($cmd eq "inhibit") { ##################################################
|
||||||
return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/);
|
return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/);
|
||||||
my $val = ($a[2] eq "on") ? "01" : "00";
|
my $val = ($a[2] eq "on") ? "01" : "00";
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.$val.'01'); # SET_LOCK
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.$val.'01'); # SET_LOCK
|
||||||
$state = "";
|
|
||||||
}
|
}
|
||||||
elsif($cmd =~ m/^(up|down|pct)$/) { #########################################
|
elsif($cmd =~ m/^(up|down|pct)$/) { #########################################
|
||||||
my $lvl;
|
my ($lvl,$tval,$rval) = ($a[1],"","");
|
||||||
if ($cmd eq "pct"){
|
if ($cmd ne "pct"){#dim [<changeValue>|up|down] ... [ontime] [ramptime]
|
||||||
$lvl = $a[1];
|
|
||||||
}
|
|
||||||
else{#dim [<changeValue>|up|down] ... [ontime] [ramptime]
|
|
||||||
shift @a; # align array with 'pct'
|
shift @a; # align array with 'pct'
|
||||||
$lvl = (defined $a[1])?$a[1]:10;
|
$lvl = (defined $a[1])?$a[1]:10;
|
||||||
$lvl = -1*$lvl if ($cmd eq "down");
|
$lvl = -1*$lvl if ($cmd eq "down");
|
||||||
$lvl += CUL_HM_getChnLvl($name);
|
$lvl += CUL_HM_getChnLvl($name);
|
||||||
}
|
}
|
||||||
$lvl = ($lvl > 100)?100:(($lvl < 0)?0:$lvl);
|
$lvl = ($lvl > 100)?100:(($lvl < 0)?0:$lvl);
|
||||||
$tval = $a[2]?CUL_HM_encodeTime16($a[2]):"FFFF";# onTime 0.0..6709248, 0=forever
|
if ($st eq "dimmer"){# at least blind cannot stand ramp time...
|
||||||
$rval = CUL_HM_encodeTime16((@a > 3)?$a[3]:2.5); # rampTime 0.0..6709248, 0=immediate
|
$tval = $a[2]?CUL_HM_encodeTime16($a[2]):"FFFF";# onTime 0.05..85825945.6, 0=forever
|
||||||
|
$rval = CUL_HM_encodeTime16((@a > 3)?$a[3]:2.5);# rampTime 0.0..85825945.6, 0=immediate
|
||||||
|
}
|
||||||
|
Log 1,"General test blind: $st time:$tval ramp:$rval";
|
||||||
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s",
|
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s02%s%02X%s%s",
|
||||||
$flag,$id,$dst,$chn,$lvl*2,$rval,$tval));
|
$flag,$id,$dst,$chn,$lvl*2,$rval,$tval));
|
||||||
if (defined $hash->{READINGS}{"virtLevel"}{VAL}){
|
if (defined $hash->{READINGS}{"virtLevel"}{VAL}){
|
||||||
@ -2192,7 +2183,7 @@ sub CUL_HM_Set($@) {
|
|||||||
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s8012%s%04X%02X",
|
CUL_HM_PushCmdStack($hash,sprintf("++%s11%s%s8012%s%04X%02X",
|
||||||
$flag,$id,$dst,$text,$symbAdd,$beepBack));
|
$flag,$id,$dst,$text,$symbAdd,$beepBack));
|
||||||
}
|
}
|
||||||
elsif($cmd eq "alarm"||$cmd eq "service") { #################################
|
elsif($cmd =~ m/^(alarm|service)$/) { #######################################
|
||||||
return "$a[2] must be below 255" if ($a[2] >255 );
|
return "$a[2] must be below 255" if ($a[2] >255 );
|
||||||
$chn = 18 if ($chn eq "01");
|
$chn = 18 if ($chn eq "01");
|
||||||
my $subtype = ($cmd eq "alarm")?"81":"82";
|
my $subtype = ($cmd eq "alarm")?"81":"82";
|
||||||
@ -2406,8 +2397,8 @@ sub CUL_HM_Set($@) {
|
|||||||
$pressCnt));
|
$pressCnt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq "devicepair") { ###############################################
|
elsif($cmd =~ m/^(devicepair|peerChan)$/) { #################################
|
||||||
#devicepair <btnN> device ... [single|dual] [set|unset] [actor|remote|both]
|
#peerChan <btnN> device ... [single|dual] [set|unset] [actor|remote|both]
|
||||||
my ($bNo,$peerN,$single,$set,$target) = ($a[2],$a[3],$a[4],$a[5],$a[6]);
|
my ($bNo,$peerN,$single,$set,$target) = ($a[2],$a[3],$a[4],$a[5],$a[6]);
|
||||||
$state = "";
|
$state = "";
|
||||||
return "$bNo is not a button number" if(($bNo < 1) && !$chn);
|
return "$bNo is not a button number" if(($bNo < 1) && !$chn);
|
||||||
@ -2760,10 +2751,8 @@ sub CUL_HM_eventP($$) {#handle protocol events
|
|||||||
my $delMsgSum;
|
my $delMsgSum;
|
||||||
$nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel});
|
$nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel});
|
||||||
$nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} if ($hash->{cmdStack});
|
$nAttr->{protCmdDel} += scalar @{$hash->{cmdStack}} if ($hash->{cmdStack});
|
||||||
my $burstEvt = ($hash->{helper}{burstEvtCnt})?
|
$hash->{protState} = "CMDs_done".($hash->{helper}{burstEvtCnt}?
|
||||||
$hash->{helper}{burstEvtCnt}:0;
|
("_events:".$hash->{helper}{burstEvtCnt}):"");
|
||||||
$hash->{protState} = "CMDs_done".
|
|
||||||
(($burstEvt)?("_events:".$burstEvt):"");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sub CUL_HM_respPendRm($) {#del response related entries in messageing entity
|
sub CUL_HM_respPendRm($) {#del response related entries in messageing entity
|
||||||
@ -2795,9 +2784,8 @@ sub CUL_HM_respPendTout($) {
|
|||||||
if ((CUL_HM_getRxType($hash) & 0x03) == 0){#to slow for wakeup and config
|
if ((CUL_HM_getRxType($hash) & 0x03) == 0){#to slow for wakeup and config
|
||||||
delete($hash->{cmdStack});
|
delete($hash->{cmdStack});
|
||||||
delete($hash->{protCmdPend});
|
delete($hash->{protCmdPend});
|
||||||
my $burstEvt = $hash->{helper}{burstEvtCnt}?
|
$hash->{protState} = "CMDs_done".($hash->{helper}{burstEvtCnt}?
|
||||||
("_events:".$hash->{helper}{burstEvtCnt}):"";
|
("_events:".$hash->{helper}{burstEvtCnt}):"");
|
||||||
$hash->{protState} = "CMDs_done".$burstEvt;
|
|
||||||
}
|
}
|
||||||
CUL_HM_respPendRm($hash);
|
CUL_HM_respPendRm($hash);
|
||||||
CUL_HM_ProcessCmdStack($hash); # continue processing commands
|
CUL_HM_ProcessCmdStack($hash); # continue processing commands
|
||||||
@ -2844,10 +2832,8 @@ sub CUL_HM_ProcessCmdStack($) {
|
|||||||
delete($hash->{cmdStack});
|
delete($hash->{cmdStack});
|
||||||
delete($hash->{protCmdPend});
|
delete($hash->{protCmdPend});
|
||||||
#-- update info ---
|
#-- update info ---
|
||||||
my $burstEvt = ($hash->{helper}{burstEvtCnt})?
|
$hash->{protState} = "CMDs_done".($hash->{helper}{burstEvtCnt}?
|
||||||
$hash->{helper}{burstEvtCnt}:0;
|
("_events:".$hash->{helper}{burstEvtCnt}):"");
|
||||||
$hash->{protState} = "CMDs_done".
|
|
||||||
(($burstEvt)?("_events:".$burstEvt):"");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $sent;
|
return $sent;
|
||||||
@ -2906,9 +2892,8 @@ sub CUL_HM_Resend($) {#resend a message if there is no answer
|
|||||||
delete($hash->{cmdStack});
|
delete($hash->{cmdStack});
|
||||||
delete($hash->{protCmdPend});
|
delete($hash->{protCmdPend});
|
||||||
CUL_HM_respPendRm($hash);
|
CUL_HM_respPendRm($hash);
|
||||||
my $burstEvt = $hash->{helper}{burstEvtCnt}?
|
$hash->{protState} = "CMDs_done".($hash->{helper}{burstEvtCnt}?
|
||||||
("_events:".$hash->{helper}{burstEvtCnt}):"";
|
("_events:".$hash->{helper}{burstEvtCnt}):"");
|
||||||
$hash->{protState} = "CMDs_done".$burstEvt;
|
|
||||||
readingsSingleUpdate($hash,"state","MISSING ACK",1);
|
readingsSingleUpdate($hash,"state","MISSING ACK",1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -3888,17 +3873,6 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
configuration for additional peers. <br> The command is a shortcut
|
configuration for additional peers. <br> The command is a shortcut
|
||||||
for a selection of other commands.
|
for a selection of other commands.
|
||||||
</li>
|
</li>
|
||||||
<li><B>getdevicepair</B><a name="CUL_HMgetdevicepair"></a><br>
|
|
||||||
will read the peers (see devicepair) that are assigned to a channel.
|
|
||||||
This command needs to be executed per channel. Information will be
|
|
||||||
stored in the field Peers of the channel (see devicepair for specials
|
|
||||||
about single-channel deivces). <br> For sender the same procedure as
|
|
||||||
described in devicepair is necessary to get a reading. Also note that
|
|
||||||
a proper diaplay will only be possible if define per channel (button)
|
|
||||||
was done - see define. </li>
|
|
||||||
<li><B>getpair</B><a name="CUL_HMgetpair"></a><br>
|
|
||||||
read pair information of the device. See also <a
|
|
||||||
href="#CUL_HMpair">pair</a></li>
|
|
||||||
<li><B>getRegRaw [List0|List1|List2|List3|List4|List5|List6]
|
<li><B>getRegRaw [List0|List1|List2|List3|List4|List5|List6]
|
||||||
<peerChannel> </B><a name="CUL_HMgetRegRaw"></a><br>
|
<peerChannel> </B><a name="CUL_HMgetRegRaw"></a><br>
|
||||||
|
|
||||||
@ -3966,13 +3940,13 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
See also <a href="#CUL_HMgetpair">getPair</a> and
|
See also <a href="#CUL_HMgetpair">getPair</a> and
|
||||||
<a href="#CUL_HMunpair">unpair</a>.</li><br>
|
<a href="#CUL_HMunpair">unpair</a>.</li><br>
|
||||||
Don't confuse pair (to a central) with peer (channel to channel) with
|
Don't confuse pair (to a central) with peer (channel to channel) with
|
||||||
<a href="#CUL_HMdevicepair">devicepair</a>.<br>
|
<a href="#CUL_HMpeerChan">peerChan</a>.<br>
|
||||||
<li><B>peerBulk</B> <peerch1,peerch2,...<a name="CUL_HMpeerBulk"></a><br>
|
<li><B>peerBulk</B> <peerch1,peerch2,...<a name="CUL_HMpeerBulk"></a><br>
|
||||||
peerBulk will add peer channels to the channel. All channels in the
|
peerBulk will add peer channels to the channel. All channels in the
|
||||||
list will be added. This includes that the parameter and behavior
|
list will be added. This includes that the parameter and behavior
|
||||||
defined for this 'link' will return to the defaults. peerBulk is only
|
defined for this 'link' will return to the defaults. peerBulk is only
|
||||||
meant to add peers. More suffisticated funktionality as provided by
|
meant to add peers. More suffisticated funktionality as provided by
|
||||||
<a href="#CUL_HMdevicepair">devicepair</a> is not supported. peerBulk
|
<a href="#CUL_HMpeerChan">peerChan</a> is not supported. peerBulk
|
||||||
will only add channels in 'single' button mode.<br>
|
will only add channels in 'single' button mode.<br>
|
||||||
Also note that peerBulk will not delete any existing peers, just add
|
Also note that peerBulk will not delete any existing peers, just add
|
||||||
and re-add given peers.<br>
|
and re-add given peers.<br>
|
||||||
@ -4017,7 +3991,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
<value> is the data in human readable manner that will be written
|
<value> is the data in human readable manner that will be written
|
||||||
to the register.<br>
|
to the register.<br>
|
||||||
<peerChannel> is required if this register is defined on a per
|
<peerChannel> is required if this register is defined on a per
|
||||||
'devicepair' base. It can be set to '0' other wise.See <a
|
'peerChan' base. It can be set to '0' other wise.See <a
|
||||||
href="CUL_HMgetRegRaw">getRegRaw</a> for full description<br>
|
href="CUL_HMgetRegRaw">getRegRaw</a> for full description<br>
|
||||||
Supported register for a device can be explored using<br>
|
Supported register for a device can be explored using<br>
|
||||||
<ul><code>set regSet ? 0 0</code></ul>
|
<ul><code>set regSet ? 0 0</code></ul>
|
||||||
@ -4050,7 +4024,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
<ul><code>
|
<ul><code>
|
||||||
define vRemote CUL_HM 100000 # the selected HMid must not be in use<br>
|
define vRemote CUL_HM 100000 # the selected HMid must not be in use<br>
|
||||||
set vRemote virtual 20 # define 20 button remote controll<br>
|
set vRemote virtual 20 # define 20 button remote controll<br>
|
||||||
set vRemote_Btn4 devicepair 0 <actorchannel> # pairs Button 4 and 5 to the given channel<br>
|
set vRemote_Btn4 peerChan 0 <actorchannel> # peers Button 4 and 5 to the given channel<br>
|
||||||
set vRemote_Btn4 press<br>
|
set vRemote_Btn4 press<br>
|
||||||
set vRemote_Btn5 press long<br>
|
set vRemote_Btn5 press long<br>
|
||||||
</code></ul>
|
</code></ul>
|
||||||
@ -4118,34 +4092,41 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
activate learn mode. Whether commands are pending is reported on
|
activate learn mode. Whether commands are pending is reported on
|
||||||
device level with parameter 'protCmdPend'.
|
device level with parameter 'protCmdPend'.
|
||||||
<ul>
|
<ul>
|
||||||
<li><B>devicepair <btn_no> <hmDevice> [single|dual]
|
<li><B>peerChan <btn_no> <hmDevice> [single|dual]
|
||||||
[set|unset] [actor|remote]</B><a name="CUL_HMdevicepair"></a><br>
|
[set|unset] [actor|remote]</B><a name="CUL_HMpeerChan"></a><br>
|
||||||
|
|
||||||
Devicepair will establish a connection between a sender-channel and
|
peerChan will establish a connection between a sender-<B>channel</B> and
|
||||||
an actuator-channel called link in HM nomenclatur. Trigger from
|
an actuator-<B>channel</B> called link in HM nomenclatur. Peering must not be
|
||||||
sender-channel, e.g. button press, will be processed by the
|
confused with pairing.<br>
|
||||||
actuator-channel without CCU interaction. Sender-channel waits for an
|
<B>Pairing</B> refers to assign a <B>device</B> to the central.<br>
|
||||||
acknowledge of each actuator paired to it. Positive indication will be
|
<B>Peering</B> refers to virtally connect two <B>channels</B>.<br>
|
||||||
given once all actuator responded. <br>
|
Peering allowes direkt interaction between sender and aktor without
|
||||||
|
the necessity of a CCU<br>
|
||||||
Sender must be set into learning mode after command execution. FHEM
|
Peering a sender-channel causes the sender to expect an ack from -each-
|
||||||
postpones the commands until then.<br>
|
of its peers after sending a trigger. It will give positive feedback (e.g. LED green)
|
||||||
|
only if all peers acknowledged.<br>
|
||||||
devicepair can be repeated for an existing devicepair. This will cause
|
Peering an aktor-channel will setup a parameter set which defines the action to be
|
||||||
parameter reset to HM defaults for this link.<br>
|
taken once a trigger from -this- peer arrived. In other words an aktor will <br>
|
||||||
|
- process trigger from peers only<br>
|
||||||
|
- define the action to be taken dedicated for each peer's trigger<br>
|
||||||
|
An actor channel will setup a default action upon peering - which is actor dependant.
|
||||||
|
It may also depend whether one or 2 buttons are peered <B>in one command</B>.
|
||||||
|
A swich may setup oen button for 'on' and the other for 'off' if 2 button are
|
||||||
|
peered. If only one button is peered the funktion will likely be 'toggle'.<br>
|
||||||
|
The funtion can be modified by programming the register (aktor dependant).<br>
|
||||||
|
|
||||||
Even though the command is executed on a remote or push-button it will
|
Even though the command is executed on a remote or push-button it will
|
||||||
as well take effect on the actuator directly. Both sides' pairing is
|
as well take effect on the actuator directly. Both sides' peering is
|
||||||
virtually independant and has different impact on sender and receiver
|
virtually independant and has different impact on sender and receiver
|
||||||
side.<br>
|
side.<br>
|
||||||
|
|
||||||
Devicepairing of one actuator-channel to multiple sender-channel as
|
Peering of one actuator-channel to multiple sender-channel as
|
||||||
well as one sender-channel to multiple Actuator-channel is
|
well as one sender-channel to multiple Actuator-channel is
|
||||||
possible.<br>
|
possible.<br>
|
||||||
|
|
||||||
<hmDevice> is the actuator-channel to be paired.<br>
|
<hmDevice> is the actuator-channel to be peered.<br>
|
||||||
|
|
||||||
<btn_no> is the sender-channel (button) to be paired. If
|
<btn_no> is the sender-channel (button) to be peered. If
|
||||||
'single' is choosen buttons are counted from 1. For 'dual' btn_no is
|
'single' is choosen buttons are counted from 1. For 'dual' btn_no is
|
||||||
the number of the Button-pair to be used. I.e. '3' in dual is the
|
the number of the Button-pair to be used. I.e. '3' in dual is the
|
||||||
3rd button pair correcponding to button 5 and 6 in single mode.<br>
|
3rd button pair correcponding to button 5 and 6 in single mode.<br>
|
||||||
@ -4163,23 +4144,23 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
simple switch actuator to toggle on/off. Nevertheless also dimmer can
|
simple switch actuator to toggle on/off. Nevertheless also dimmer can
|
||||||
be learned to only one button. <br>
|
be learned to only one button. <br>
|
||||||
|
|
||||||
'set' will setup pairing for the channels<br>
|
'set' will setup peering for the channels<br>
|
||||||
|
|
||||||
'unset' will remove the pairing for the channels<br>
|
'unset' will remove the peering for the channels<br>
|
||||||
|
|
||||||
[actor|remote|both] limits the execution to only actor or only remote.
|
[actor|remote|both] limits the execution to only actor or only remote.
|
||||||
This gives the user the option to redo the pairing on the remote
|
This gives the user the option to redo the peering on the remote
|
||||||
channel while the settings in the actor will not be removed.<br>
|
channel while the settings in the actor will not be removed.<br>
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
<ul>
|
<ul>
|
||||||
<code>
|
<code>
|
||||||
set myRemote devicepair 2 mySwActChn single set # pair second button to an actuator channel<br>
|
set myRemote peerChan 2 mySwActChn single set #peer second button to an actuator channel<br>
|
||||||
set myRmtBtn devicepair 0 mySwActChn single set #myRmtBtn is a button of the remote. '0' is not processed here<br>
|
set myRmtBtn peerChan 0 mySwActChn single set #myRmtBtn is a button of the remote. '0' is not processed here<br>
|
||||||
set myRemote devicepair 2 mySwActChn dual set #pair button 3 and 4<br>
|
set myRemote peerChan 2 mySwActChn dual set #peer button 3 and 4<br>
|
||||||
set myRemote devicepair 3 mySwActChn dual unset #remove pairing for button 5 and 6<br>
|
set myRemote peerChan 3 mySwActChn dual unset #remove peering for button 5 and 6<br>
|
||||||
set myRemote devicepair 3 mySwActChn dual unset aktor #remove pairing for button 5 and 6 in actor only<br>
|
set myRemote peerChan 3 mySwActChn dual unset aktor #remove peering for button 5 and 6 in actor only<br>
|
||||||
set myRemote devicepair 3 mySwActChn dual set remote #pair button 5 and 6 on remote only. Link settings il mySwActChn will be maintained<br>
|
set myRemote peerChan 3 mySwActChn dual set remote #peer button 5 and 6 on remote only. Link settings il mySwActChn will be maintained<br>
|
||||||
</code>
|
</code>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -4188,7 +4169,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
</li>
|
</li>
|
||||||
<li>virtual<a name="CUL_HMvirtual"></a><br>
|
<li>virtual<a name="CUL_HMvirtual"></a><br>
|
||||||
<ul>
|
<ul>
|
||||||
<li><B><a href="#CUL_HMdevicepair">devicepair</a></B> see remote</li>
|
<li><B><a href="#CUL_HMpeerChan">peerChan</a></B> see remote</li>
|
||||||
<li><B>press [long|short]<a name="CUL_HMpress"></a></B>
|
<li><B>press [long|short]<a name="CUL_HMpress"></a></B>
|
||||||
simulates a button press short (default) or long. Note that the current
|
simulates a button press short (default) or long. Note that the current
|
||||||
implementation will not specify the duration for long. Only one trigger
|
implementation will not specify the duration for long. Only one trigger
|
||||||
@ -4198,13 +4179,13 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
</li>
|
</li>
|
||||||
<li>smokeDetector<br>
|
<li>smokeDetector<br>
|
||||||
Note: All these commands work right now only if you have more then one
|
Note: All these commands work right now only if you have more then one
|
||||||
smoekDetector, and you paired them to form a group. For issuing the
|
smoekDetector, and you peered them to form a group. For issuing the
|
||||||
commands you have to use the master of this group, and currently you
|
commands you have to use the master of this group, and currently you
|
||||||
have to guess which of the detectors is the master.<br>
|
have to guess which of the detectors is the master.<br>
|
||||||
smokeDetector can be setup to teams using
|
smokeDetector can be setup to teams using
|
||||||
<a href="#CUL_HMdevicepair">devicepair</a>. You need to pair all
|
<a href="#CUL_HMpeerChan">peerChan</a>. You need to peer all
|
||||||
team-members to the master. Don't forget to also devicepair the master
|
team-members to the master. Don't forget to also peerChan the master
|
||||||
itself to the team - i.e. pair it to itself! doing that you have full
|
itself to the team - i.e. peer it to itself! doing that you have full
|
||||||
controll over the team and don't need to guess.<br>
|
controll over the team and don't need to guess.<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li><B>test</B> - execute a network test</li>
|
<li><B>test</B> - execute a network test</li>
|
||||||
@ -4339,7 +4320,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
[sec]: Sets the delay in seconds after the lock automatically locked
|
[sec]: Sets the delay in seconds after the lock automatically locked
|
||||||
again.<br>0 - 65535 seconds</li>
|
again.<br>0 - 65535 seconds</li>
|
||||||
<li><B>inhibit [on|off]</B><br>
|
<li><B>inhibit [on|off]</B><br>
|
||||||
Block / unblock all directly paired remotes and the hardware buttons of the
|
Block / unblock all directly peered remotes and the hardware buttons of the
|
||||||
keyMatic. If inhibit set on, the door lock drive can be controlled only by
|
keyMatic. If inhibit set on, the door lock drive can be controlled only by
|
||||||
FHEM.<br><br>
|
FHEM.<br><br>
|
||||||
Examples:
|
Examples:
|
||||||
@ -4416,7 +4397,7 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
|
|||||||
entity.<br>
|
entity.<br>
|
||||||
Target of the data is ONLY the HM-device information which is located
|
Target of the data is ONLY the HM-device information which is located
|
||||||
IN the HM device. Explicitely this is the peer-list and the register.
|
IN the HM device. Explicitely this is the peer-list and the register.
|
||||||
With the register also the pairing is included.<br>
|
With the register also the peering is included.<br>
|
||||||
The file is readable and editable by the user. Additionaly timestamps
|
The file is readable and editable by the user. Additionaly timestamps
|
||||||
are stored to help user to validate.<br>
|
are stored to help user to validate.<br>
|
||||||
Restrictions:<br>
|
Restrictions:<br>
|
||||||
|
@ -324,6 +324,11 @@ my %culHmRegDefine = (
|
|||||||
batDefectLimit =>{a=> 19.0,s=>1.0,l=>0,min=>0.1,max=>2 ,c=>'factor' ,f=>100 ,u=>'Ohm' ,d=>1,t=>"batterie defect detection"},
|
batDefectLimit =>{a=> 19.0,s=>1.0,l=>0,min=>0.1,max=>2 ,c=>'factor' ,f=>100 ,u=>'Ohm' ,d=>1,t=>"batterie defect detection"},
|
||||||
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"},
|
||||||
localResDis =>{a=> 24.0,s=>1.0,l=>0,min=>1 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"local reset disable" ,lit=>{off=>0,on=>1}},
|
localResDis =>{a=> 24.0,s=>1.0,l=>0,min=>1 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"local reset disable" ,lit=>{off=>0,on=>1}},
|
||||||
|
#un-identified List0
|
||||||
|
# SEC-WM55 02:01 (AES on?)
|
||||||
|
# SEC-WDS 02:01 16:01(sabotage) ?
|
||||||
|
# SEC-SC 02:00 ?
|
||||||
|
|
||||||
#--- list 1, Channel level------------------
|
#--- list 1, Channel level------------------
|
||||||
#blindActuator mainly
|
#blindActuator mainly
|
||||||
driveDown =>{a=> 11.0,s=>2.0,l=>1,min=>0 ,max=>6000.0 ,c=>'factor' ,f=>10 ,u=>'s' ,d=>1,t=>"drive time up"},
|
driveDown =>{a=> 11.0,s=>2.0,l=>1,min=>0 ,max=>6000.0 ,c=>'factor' ,f=>10 ,u=>'s' ,d=>1,t=>"drive time up"},
|
||||||
@ -410,6 +415,10 @@ my %culHmRegDefine = (
|
|||||||
stormLowThresh =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"Storm lower threshold"},
|
stormLowThresh =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"Storm lower threshold"},
|
||||||
# others
|
# others
|
||||||
localResetDis =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"LocalReset disable",lit=>{off=>0,on=>1}},
|
localResetDis =>{a=> 7 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"LocalReset disable",lit=>{off=>0,on=>1}},
|
||||||
|
#un-identified List1
|
||||||
|
# SEC-WM55 8:01 (AES on?)
|
||||||
|
# SEC-WDS 34:0x64 ?
|
||||||
|
# SEC-SC 8:00 ?
|
||||||
|
|
||||||
# logicCombination=>{a=> 89.0,s=>0.5,l=>1,min=>0 ,max=>16 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"".
|
# logicCombination=>{a=> 89.0,s=>0.5,l=>1,min=>0 ,max=>16 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"".
|
||||||
# "inactive=>unused\n".
|
# "inactive=>unused\n".
|
||||||
@ -657,7 +666,6 @@ my %culHmGlobalSetsDevice = (
|
|||||||
reset => "",
|
reset => "",
|
||||||
pair => "",
|
pair => "",
|
||||||
unpair => "",
|
unpair => "",
|
||||||
getpair => "",
|
|
||||||
getSerial => "",
|
getSerial => "",
|
||||||
virtual =>"<noButtons>",
|
virtual =>"<noButtons>",
|
||||||
);
|
);
|
||||||
@ -666,7 +674,6 @@ my %culHmGlobalSets = (
|
|||||||
regBulk => "<list>:<peer> <addr1:data1> <addr2:data2> ...",
|
regBulk => "<list>:<peer> <addr1:data1> <addr2:data2> ...",
|
||||||
peerBulk => "<peer1,peer2,...>",
|
peerBulk => "<peer1,peer2,...>",
|
||||||
statusRequest => "",
|
statusRequest => "",
|
||||||
getdevicepair => "",
|
|
||||||
getRegRaw =>"[List0|List1|List2|List3|List4|List5|List6] ... <PeerChannel>",
|
getRegRaw =>"[List0|List1|List2|List3|List4|List5|List6] ... <PeerChannel>",
|
||||||
getConfig => "",
|
getConfig => "",
|
||||||
regSet =>"<regName> <value> ... <peerChannel>",
|
regSet =>"<regName> <value> ... <peerChannel>",
|
||||||
@ -687,17 +694,23 @@ my %culHmSubTypeSets = (
|
|||||||
up => "[<changeValue>] [ontime] [ramptime]...",
|
up => "[<changeValue>] [ontime] [ramptime]...",
|
||||||
down => "[<changeValue>] [ontime] [ramptime]..."
|
down => "[<changeValue>] [ontime] [ramptime]..."
|
||||||
},
|
},
|
||||||
remote =>{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
remote =>{ devicepair => "... outdated, use peerChan",
|
||||||
pushButton =>{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
peerChan => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
||||||
threeStateSensor =>{ devicepair => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
pushButton =>{ devicepair => "... outdated, use peerChan",
|
||||||
motionDetector =>{ devicepair => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
peerChan => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
||||||
|
threeStateSensor =>{ devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
||||||
|
motionDetector =>{ devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
||||||
virtual =>{ raw => "data ...",
|
virtual =>{ raw => "data ...",
|
||||||
devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",
|
devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",
|
||||||
press => "[long|short]...",
|
press => "[long|short]...",
|
||||||
valvePos => "position",#acting as TC
|
valvePos => "position",#acting as TC
|
||||||
virtual =>"<noButtons>",}, #redef necessary for virtual
|
virtual =>"<noButtons>",}, #redef necessary for virtual
|
||||||
smokeDetector =>{ test => "", alarmOn=>"", alarmOff=>"",
|
smokeDetector =>{ test => "", alarmOn=>"", alarmOff=>"",
|
||||||
devicepair => "<btnNumber> device ... single [set|unset] actor",},
|
devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... single [set|unset] actor",},
|
||||||
winMatic =>{ matic => "<btn>",
|
winMatic =>{ matic => "<btn>",
|
||||||
keydef => "<btn> <txt1> <txt2>",
|
keydef => "<btn> <txt1> <txt2>",
|
||||||
create => "<txt>" },
|
create => "<txt>" },
|
||||||
@ -735,7 +748,8 @@ my %culHmModelSets = (
|
|||||||
|
|
||||||
my %culHmChanSets = (
|
my %culHmChanSets = (
|
||||||
"HM-CC-TC00"=>{
|
"HM-CC-TC00"=>{
|
||||||
devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",
|
devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... single [set|unset] [actor|remote|both]",
|
||||||
"day-temp" => "[on,off,6.0..30.0]",
|
"day-temp" => "[on,off,6.0..30.0]",
|
||||||
"night-temp" => "[on,off,6.0..30.0]",
|
"night-temp" => "[on,off,6.0..30.0]",
|
||||||
"party-temp" => "[on,off,6.0..30.0]",
|
"party-temp" => "[on,off,6.0..30.0]",
|
||||||
@ -753,7 +767,8 @@ my %culHmChanSets = (
|
|||||||
controlMode => "[manual|auto|central|party]",
|
controlMode => "[manual|auto|central|party]",
|
||||||
decalcDay => "day", },
|
decalcDay => "day", },
|
||||||
"HM-CC-TC02"=>{
|
"HM-CC-TC02"=>{
|
||||||
devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",
|
devicepair => "... outdated, use peerChan",
|
||||||
|
peerChan => "<btnNumber> device ... single [set|unset] [actor|remote|both]",
|
||||||
"day-temp" => "[on,off,6.0..30.0]",
|
"day-temp" => "[on,off,6.0..30.0]",
|
||||||
"night-temp" => "[on,off,6.0..30.0]",
|
"night-temp" => "[on,off,6.0..30.0]",
|
||||||
"party-temp" => "[on,off,6.0..30.0]",
|
"party-temp" => "[on,off,6.0..30.0]",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user