valvePos, comments and get param improve

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@4699 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-01-20 11:26:29 +00:00
parent e20bed5386
commit 5c97c34417
2 changed files with 37 additions and 26 deletions

View File

@ -176,6 +176,13 @@ sub CUL_HM_Initialize($) {
$hash->{hmIoMaxDly} = 60;# poll timeout - stop poll and discard $hash->{hmIoMaxDly} = 60;# poll timeout - stop poll and discard
$hash->{hmAutoReadScan} = 4; # delay autoConf readings $hash->{hmAutoReadScan} = 4; # delay autoConf readings
$hash->{helper}{hmManualOper} = 0;# default automode $hash->{helper}{hmManualOper} = 0;# default automode
my @dcpl = # deviceChannelParamList list of device params valid for channels
("ignore","dummy",
"actCycle","actStatus",
"expert","burstAccess","msgRepeat","autoReadReg",
".stc",".devInfo","firmware","serialNr","model","subType");
$hash->{helper}{dcpl} = \@dcpl;
} }
sub CUL_HM_updateConfig($){ sub CUL_HM_updateConfig($){
@ -200,10 +207,12 @@ sub CUL_HM_updateConfig($){
$attr{$name}{expert} = AttrVal($name,"expert" ,"2_full"); $attr{$name}{expert} = AttrVal($name,"expert" ,"2_full");
$attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus"); $attr{$name}{autoReadReg}= AttrVal($name,"autoReadReg","4_reqStatus");
} }
CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert}) if ($attr{$name}{expert});#need update after readings are available CUL_HM_Attr("attr",$name,"expert",$attr{$name}{expert})
if ($attr{$name}{expert});#need update after readings are available
} }
else{# Action Detector only else{# Action Detector only
$attr{$name}{"event-on-change-reading"} = AttrVal($name, "event-on-change-reading", ".*"); $attr{$name}{"event-on-change-reading"} =
AttrVal($name, "event-on-change-reading", ".*");
delete $hash->{helper}{role}; delete $hash->{helper}{role};
$hash->{helper}{role}{vrt} = 1; $hash->{helper}{role}{vrt} = 1;
next; next;
@ -351,7 +360,7 @@ sub CUL_HM_Define($$) {##############################
$hash->{helper}{q}{qReqConf}=""; # queue autoConfig requests for this device $hash->{helper}{q}{qReqConf}=""; # queue autoConfig requests for this device
$hash->{helper}{q}{qReqStat}=""; # queue autoConfig requests for this device $hash->{helper}{q}{qReqStat}=""; # queue autoConfig requests for this device
CUL_HM_prtInit ($hash); CUL_HM_prtInit ($hash);
AssignIoPort($hash) if (!$init_done); AssignIoPort($hash) if (!$init_done && $HMid ne "000000");
} }
$modules{CUL_HM}{defptr}{$HMid} = $hash; $modules{CUL_HM}{defptr}{$HMid} = $hash;
@ -619,7 +628,7 @@ sub CUL_HM_Parse($$) {##############################
my @event; #events to be posted for main entity my @event; #events to be posted for main entity
my $name = $shash->{NAME}; my $name = $shash->{NAME};
my $ioId = CUL_HM_Id($shash->{IODev}); my $ioId = CUL_HM_Id($devH->{IODev});
$ioId = $id if(!$ioId); $ioId = $id if(!$ioId);
return (@entities,$name) if (CUL_HM_getAttrInt($name,"ignore")); return (@entities,$name) if (CUL_HM_getAttrInt($name,"ignore"));
@ -2123,7 +2132,7 @@ sub CUL_HM_Get($@) {
return "no get value specified" if(@a < 2); return "no get value specified" if(@a < 2);
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $devName = $hash->{device}?$hash->{device}:$name; my $devName = InternalVal($name,"device",$name);
my $st = AttrVal($devName, "subType", ""); my $st = AttrVal($devName, "subType", "");
my $md = AttrVal($devName, "model", ""); my $md = AttrVal($devName, "model", "");
my $mId = CUL_HM_getMId($hash); my $mId = CUL_HM_getMId($hash);
@ -2162,12 +2171,15 @@ sub CUL_HM_Get($@) {
my $id = CUL_HM_IOid($hash); my $id = CUL_HM_IOid($hash);
#----------- now start processing -------------- #----------- now start processing --------------
if($cmd eq "param") { ###################################################### if ($cmd eq "param") { ###################################################
return $attr{$name}{$a[2]} if ($attr{$name}{$a[2]}); my $p = $a[2];
return $hash->{READINGS}{$a[2]}{VAL} if ($hash->{READINGS}{$a[2]}); return $attr{$name}{$p} if ($attr{$name}{$p});
return $attr{$devName}{$a[2]} if ($attr{$devName}{$a[2]}); return $hash->{READINGS}{$p}{VAL} if ($hash->{READINGS}{$p});
return $hash->{$a[2]} if ($hash->{$a[2]}); return $hash->{$p} if ($hash->{$p});
return $hash->{helper}{$a[2]} if ($hash->{helper}{$a[2]} && ref($hash->{helper}{$a[2]}) ne "HASH"); return $hash->{helper}{$p} if ($hash->{helper}{$p} && ref($hash->{helper}{$p}) ne "HASH");
return "undefined" if (!grep /^$p$/,@{$modules{CUL_HM}{helper}{dcpl}});
return $attr{$devName}{$p} if ($attr{$devName}{$p});
return "undefined"; return "undefined";
} }
elsif($cmd eq "reg") { ##################################################### elsif($cmd eq "reg") { #####################################################
@ -2310,7 +2322,7 @@ sub CUL_HM_Set($@) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
return "device ignored due to attr 'ignore'" return "device ignored due to attr 'ignore'"
if (CUL_HM_getAttrInt($name,"ignore")); if (CUL_HM_getAttrInt($name,"ignore"));
my $devName = $hash->{device}?$hash->{device}:$name; my $devName = InternalVal($name,"device",$name);
my $st = AttrVal($devName, "subType", ""); my $st = AttrVal($devName, "subType", "");
my $md = AttrVal($devName, "model" , ""); my $md = AttrVal($devName, "model" , "");
my $flag = CUL_HM_getFlag($hash); #set burst flag my $flag = CUL_HM_getFlag($hash); #set burst flag
@ -3166,7 +3178,7 @@ sub CUL_HM_Set($@) {
readingsSingleUpdate($hash,"valvePosTC","$vp %",0); readingsSingleUpdate($hash,"valvePosTC","$vp %",0);
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077; $hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256; $hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
$hash->{helper}{vd}{msgCnt} = 1; $hash->{helper}{vd}{msgCnt} = 1 if (!defined $hash->{helper}{vd}{msgCnt});
if (!$hash->{helper}{virtTC}){ if (!$hash->{helper}{virtTC}){
$hash->{helper}{vd}{next} = gettimeofday() $hash->{helper}{vd}{next} = gettimeofday()
if (!defined $hash->{helper}{vd}{next}); if (!defined $hash->{helper}{vd}{next});
@ -3953,7 +3965,6 @@ sub CUL_HM_SndCmd($$) {
return if( AttrVal($hash->{NAME},"ignore","") return if( AttrVal($hash->{NAME},"ignore","")
|| AttrVal($hash->{NAME},"dummy","")); || AttrVal($hash->{NAME},"dummy",""));
if(!defined $hash->{IODev} ||!defined $hash->{IODev}{NAME}){ if(!defined $hash->{IODev} ||!defined $hash->{IODev}{NAME}){
AssignIoPort($hash); AssignIoPort($hash);
if(!defined $hash->{IODev} ||!defined $hash->{IODev}{NAME}){ if(!defined $hash->{IODev} ||!defined $hash->{IODev}{NAME}){
CUL_HM_eventP($hash,"IOerr"); CUL_HM_eventP($hash,"IOerr");
@ -4390,6 +4401,10 @@ sub CUL_HM_getAssChnIds($) { #in: name out:ID list of assotiated channels
sub CUL_HM_Id($) {#in: ioHash out: ioHMid sub CUL_HM_Id($) {#in: ioHash out: ioHMid
my ($io) = @_; my ($io) = @_;
if (ref($io) ne 'HASH'){
Log 1,"have problems with $io";
return "000000";
}
my $fhtid = defined($io->{FHTID}) ? $io->{FHTID} : "0000"; my $fhtid = defined($io->{FHTID}) ? $io->{FHTID} : "0000";
return $attr{$io->{NAME}}{hmId}?$attr{$io->{NAME}}{hmId}:"F1$fhtid"; return $attr{$io->{NAME}}{hmId}?$attr{$io->{NAME}}{hmId}:"F1$fhtid";
} }

View File

@ -261,11 +261,8 @@ my $K_actDetID = '000000'; # id of actionDetector
#263 167 HM Smoke Detector Schueco #263 167 HM Smoke Detector Schueco
#"HM-RC-Key4-2" #"HM-RC-Key4-2"
#"HM-RC-Sec4-2" #"HM-RC-Sec4-2"
); );
##----------definitions for register settings----------------- ##----------definitions for register settings-----------------
# definition of Register for all devices # definition of Register for all devices
# a: address, incl bits 13.4 4th bit in reg 13 # a: address, incl bits 13.4 4th bit in reg 13
@ -519,10 +516,10 @@ my $K_actDetID = '000000'; # id of actionDetector
cndTxFalling =>{a=>132.0,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if falling" ,lit=>{off=>0,on=>1}}, cndTxFalling =>{a=>132.0,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if falling" ,lit=>{off=>0,on=>1}},
cndTxRising =>{a=>132.1,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if rising" ,lit=>{off=>0,on=>1}}, cndTxRising =>{a=>132.1,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if rising" ,lit=>{off=>0,on=>1}},
cndTxCycBelow =>{a=>132.2,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if cond is below threshold",lit=>{off=>0,on=>1}}, cndTxCycBelow =>{a=>132.2,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"cyclic trigger if level is below cndTxCycBelow",lit=>{off=>0,on=>1}},
cndTxCycAbove =>{a=>132.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if cond is above threshold",lit=>{off=>0,on=>1}}, cndTxCycAbove =>{a=>132.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"cyclic trigger if level is above cndTxDecAbove",lit=>{off=>0,on=>1}},
cndTxDecAbove =>{a=>133 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if decision is above"}, cndTxDecAbove =>{a=>133 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"level for cndTxCycAbove"},
cndTxDecBelow =>{a=>134 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"trigger if decision is below"}, cndTxDecBelow =>{a=>134 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"level for cndTxCycBelow"},
txThrLoPwr =>{a=>135.0,s=>4 ,l=>1,min=>0 ,max=>3680 ,c=>'' ,f=>'100' ,u=>'W' ,d=>1,t=>"threshold low power"}, txThrLoPwr =>{a=>135.0,s=>4 ,l=>1,min=>0 ,max=>3680 ,c=>'' ,f=>'100' ,u=>'W' ,d=>1,t=>"threshold low power"},
txThrHiPwr =>{a=>139.0,s=>4 ,l=>1,min=>0 ,max=>3680 ,c=>'' ,f=>'100' ,u=>'W' ,d=>1,t=>"threshold high power"}, txThrHiPwr =>{a=>139.0,s=>4 ,l=>1,min=>0 ,max=>3680 ,c=>'' ,f=>'100' ,u=>'W' ,d=>1,t=>"threshold high power"},
@ -564,7 +561,6 @@ my $K_actDetID = '000000'; # id of actionDetector
# RC19 08:00 ? RC19 Button 08:08 # RC19 08:00 ? RC19 Button 08:08
# Bl1PBU 08:00 09:00 10:00 # Bl1PBU 08:00 09:00 10: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".
# "or =>max(state,chan)\n". # "or =>max(state,chan)\n".