mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-07 16:59:18 +00:00
Dimmer auto-update for virtual channels, some bugs
git-svn-id: https://svn.fhem.de/fhem/trunk@2850 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0b1c14593c
commit
f5592d4419
@ -221,7 +221,7 @@ my %culHmModel=(
|
|||||||
"00A2" => {name=>"ROTO_ZEL-STG-RM-FZS-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #radio-controlled socket adapter switch actuator 1-channel
|
"00A2" => {name=>"ROTO_ZEL-STG-RM-FZS-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, #radio-controlled socket adapter switch actuator 1-channel
|
||||||
"00A3" => {name=>"HM-LC-Dim1L-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"00A3" => {name=>"HM-LC-Dim1L-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"00A4" => {name=>"HM-LC-Dim1T-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"00A4" => {name=>"HM-LC-Dim1T-Pl-2" ,st=>'dimmer' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1' ,chn=>"Rain:1:1,Sw:2:2",},
|
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1' ,chn=>"Rain:1:1,Sw:2:2",} ,
|
||||||
#263 167 HM Smoke Detector Schueco
|
#263 167 HM Smoke Detector Schueco
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -750,7 +750,8 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
# CMD:8202 SRC:13F251 DST:15B50D 010100002A
|
# CMD:8202 SRC:13F251 DST:15B50D 010100002A
|
||||||
# status ACK to controlling HM-CC-TC
|
# status ACK to controlling HM-CC-TC
|
||||||
if($msgType eq "02" && $p =~ m/^(..)(..)(..)(..)/) {#subtype+chn+value+err
|
if($msgType eq "02" && $p =~ m/^(..)(..)(..)(..)/) {#subtype+chn+value+err
|
||||||
my ($chn,$vp, $err) = ($2,hex($3), hex($4));
|
my ($chn,$vp, $err) = (hex($2),hex($3), hex($4));
|
||||||
|
$chn = sprintf("%02X",$chn&0x3f);
|
||||||
$vp = int($vp)/2; # valve position in %
|
$vp = int($vp)/2; # valve position in %
|
||||||
push @event, "ValvePosition:$vp %";
|
push @event, "ValvePosition:$vp %";
|
||||||
push @event, "state:$vp %";
|
push @event, "state:$vp %";
|
||||||
@ -838,18 +839,22 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status
|
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status
|
||||||
($msgType eq "10" && $p =~ m/^06/)) { # or Info_Status message here
|
($msgType eq "10" && $p =~ m/^06/)) { # or Info_Status message here
|
||||||
|
|
||||||
my ($subType,$chn,$val,$err) = ($1,$2,hex($3)/2,hex($4))
|
my ($subType,$chn,$val,$err) = ($1,hex($2),hex($3)/2,hex($4))
|
||||||
if($p =~ m/^(..)(..)(..)(..)/);
|
if($p =~ m/^(..)(..)(..)(..)/);
|
||||||
|
$chn = sprintf("%02X",$chn&0x3f);
|
||||||
|
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
||||||
|
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
||||||
my ($x,$pl) = ($1,hex($2)/2) if($p =~ m/^........(..)(..)/);
|
my ($x,$pl) = ($1,hex($2)/2) if($p =~ m/^........(..)(..)/);
|
||||||
my $stUpdt = 1;# shall state be updated?
|
my $stUpdt = 1;# shall state be updated?
|
||||||
if (defined $pl){# device with virtual channels...
|
if (defined $pl){# device with virtual channels...
|
||||||
push @event,"virtLevel:".($val == 100?"on":($val == 0?"off":"$val %"));
|
push @event,"virtLevel:".($val == 100?"on":($val == 0?"off":"$val %"));
|
||||||
|
my $vDim = $shash->{helper}{vDim};#shortcut
|
||||||
|
my $ph = CUL_HM_id2Hash($vDim->{idPhy}) if ($vDim->{idPhy});
|
||||||
if ($msgType eq "10"){
|
if ($msgType eq "10"){
|
||||||
$val = $pl;# Physical level is pl - but only for InfoStatus
|
$val = $pl;# Physical level is pl - but only for InfoStatus
|
||||||
$pl = ($pl == 100 ? "on" : ($pl == 0 ? "off" : "$pl %"));
|
$pl = ($pl == 100 ? "on" : ($pl == 0 ? "off" : "$pl %"));
|
||||||
#set state for all virtual
|
#set state for all virtual
|
||||||
my $vDim = $shash->{helper}{vDim};#shortcut
|
RemoveInternalTimer("sUpdt:".$ph->{NAME});
|
||||||
my $ph = CUL_HM_id2Hash($vDim->{idPhy}) if ($vDim->{idPhy});
|
|
||||||
if ($ph){
|
if ($ph){
|
||||||
push @entities,CUL_HM_UpdtReadSingle($ph,"state",$pl,1);
|
push @entities,CUL_HM_UpdtReadSingle($ph,"state",$pl,1);
|
||||||
my $vh;
|
my $vh;
|
||||||
@ -861,13 +866,11 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$stUpdt = 0;# no update
|
$stUpdt = 0;# no update
|
||||||
$val = ReadingsVal($name,"state","");
|
$val = ReadingsVal($name,"state",""); # keep value
|
||||||
|
InternalTimer(gettimeofday()+3,"CUL_HM_stateUpdat", "sUpdt:".$ph->{NAME}, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Multi-channel device: Use channel if defined
|
|
||||||
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
|
||||||
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
|
||||||
$val = ($val == 100 ? "on" : ($val == 0 ? "off" : "$val %"))
|
$val = ($val == 100 ? "on" : ($val == 0 ? "off" : "$val %"))
|
||||||
if ($stUpdt );
|
if ($stUpdt );
|
||||||
push @event, "deviceMsg:$val$target" if($chn ne "00");
|
push @event, "deviceMsg:$val$target" if($chn ne "00");
|
||||||
@ -911,7 +914,7 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
my $buttonID = $buttonField&0x3f;# only 6 bit are valid
|
my $buttonID = $buttonField&0x3f;# only 6 bit are valid
|
||||||
my $btnName;
|
my $btnName;
|
||||||
my $state = "";
|
my $state = "";
|
||||||
my $chnHash = $modules{CUL_HM}{defptr}{$src.uc(sprintf("%02x",$buttonID))};
|
my $chnHash = $modules{CUL_HM}{defptr}{$src.sprintf("%02X",$buttonID)};
|
||||||
|
|
||||||
if ($chnHash){# use userdefined name - ignore this irritating on-off naming
|
if ($chnHash){# use userdefined name - ignore this irritating on-off naming
|
||||||
$btnName = $chnHash->{NAME};
|
$btnName = $chnHash->{NAME};
|
||||||
@ -1140,7 +1143,8 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
my $mT = $msgType.substr($p,0,2);
|
my $mT = $msgType.substr($p,0,2);
|
||||||
if ($mT eq "1006" ||$$mT eq "0201"){
|
if ($mT eq "1006" ||$$mT eq "0201"){
|
||||||
$p =~ m/^..(..)(..)(..)?$/;
|
$p =~ m/^..(..)(..)(..)?$/;
|
||||||
($chn,$state,$err) = ($1, $2, hex($3));
|
($chn,$state,$err) = (hex($1), $2, hex($3));
|
||||||
|
$chn = sprintf("%02X",$chn&0x3f);
|
||||||
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
||||||
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
||||||
push @event, "alive:yes";
|
push @event, "alive:yes";
|
||||||
@ -1151,7 +1155,8 @@ sub CUL_HM_Parse($$) {#############################
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($msgType eq "41"){
|
elsif($msgType eq "41"){
|
||||||
($chn,$cnt,$state)=($1,$2,$3) if($p =~ m/^(..)(..)(..)/);
|
($chn,$cnt,$state)=(hex($1),$2,$3) if($p =~ m/^(..)(..)(..)/);
|
||||||
|
$chn = sprintf("%02X",$chn&0x3f);
|
||||||
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
||||||
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
||||||
}
|
}
|
||||||
@ -2279,10 +2284,12 @@ sub CUL_HM_getMId($) {#in: hash(chn or dev) out:model key (key for %culHmModel).
|
|||||||
my $mId = $hash->{helper}{mId};
|
my $mId = $hash->{helper}{mId};
|
||||||
if (!$mId){
|
if (!$mId){
|
||||||
my $model = AttrVal($hash->{NAME}, "model", "");
|
my $model = AttrVal($hash->{NAME}, "model", "");
|
||||||
foreach my $mIdKey(grep {$culHmModel{$_}{name} eq $model}keys%culHmModel){
|
foreach my $mIdKey(keys%culHmModel){
|
||||||
$mId = $hash->{helper}{mId} = $mIdKey;
|
next if (!$culHmModel{$mIdKey}{name} || $culHmModel{$mIdKey}{name} ne $model);
|
||||||
|
$mId = $hash->{helper}{mId} = $mIdKey ;
|
||||||
return $mIdKey;
|
return $mIdKey;
|
||||||
}
|
}
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
return $mId;
|
return $mId;
|
||||||
}
|
}
|
||||||
@ -2420,7 +2427,7 @@ sub CUL_HM_Set($@) {
|
|||||||
$state = "";
|
$state = "";
|
||||||
my $serialNr = AttrVal($name, "serialNr", undef);
|
my $serialNr = AttrVal($name, "serialNr", undef);
|
||||||
return "serialNr is not set" if(!$serialNr);
|
return "serialNr is not set" if(!$serialNr);
|
||||||
CUL_HM_PushCmdStack($hash,"++A401".$id."000000010A".unpack("H*",$serialNr));
|
CUL_HM_PushCmdStack($hash,"++A401".$id."000000010A".uc( unpack("H*",$serialNr)));
|
||||||
$hash->{hmPairSerial} = $serialNr;
|
$hash->{hmPairSerial} = $serialNr;
|
||||||
}
|
}
|
||||||
elsif($cmd eq "unpair") { ###################################################
|
elsif($cmd eq "unpair") { ###################################################
|
||||||
@ -4481,6 +4488,11 @@ sub CUL_HM_storeRssi(@){
|
|||||||
$hash->{"rssi_".$peerName} = $rssi;
|
$hash->{"rssi_".$peerName} = $rssi;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
sub CUL_HM_stateUpdat($){
|
||||||
|
my $name = shift;
|
||||||
|
(undef,$name)=split":",$name,2;
|
||||||
|
CUL_HM_Set(CUL_HM_name2Hash($name),$name,"statusRequest") if ($name);
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user