2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 13:26:02 +00:00

param noOnOff, correct HMInfo checkConfig

git-svn-id: https://svn.fhem.de/fhem/trunk@4692 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2014-01-19 17:23:09 +00:00
parent 35ea165c66
commit a60f9d8104
3 changed files with 36 additions and 24 deletions

View File

@ -482,6 +482,9 @@ sub CUL_HM_Attr(@) {#################################
else {return "param $_ unknown, use offAtPon or onAtRain";}
}
}
elsif ($md =~ m/^virtual_/ && $attrVal eq "noOnOff"){
;
}
else{
return "attribut param not defined for this entity";
}
@ -1533,7 +1536,6 @@ sub CUL_HM_Parse($$) {##############################
next if (!$modules{CUL_HM}{defptr}{$dChId});
my $dChNo = substr($dChId,6,2);
my $dChName = CUL_HM_id2Name($dChId);
if(($attr{$dChName}{peerIDs}?$attr{$dChName}{peerIDs}:"") =~m/$recId/){
my $dChHash = $defs{$dChName};
$dChHash->{helper}{trgLgRpt} = 0
@ -1541,18 +1543,22 @@ sub CUL_HM_Parse($$) {##############################
$dChHash->{helper}{trgLgRpt} +=1;
my $trgLgRpt = $dChHash->{helper}{trgLgRpt};
my $state = ReadingsVal($dChName,"virtActState","OFF");
my $tNoOld = ReadingsVal($dChName,"virtActTrigNo","0");
$state = ($state eq "OFF")?"ON":"OFF" if ($trigNo ne $tNoOld);
my ($stT,$stAck) = ("ack","00");#state text and state Ack for Msg
if (AttrVal($dChName,"param","") !~ m/noOnOff/){
$stT = ReadingsVal($dChName,"virtActState","OFF");
$stT = ($stT eq "OFF")?"ON":"OFF"
if ($trigNo ne ReadingsVal($dChName,"virtActTrigNo","0"));
$stAck = '01'.$dChNo.(($stT eq "ON")?"C8":"00")."00"
}
if (hex($mFlg)&0x20){
$longPress .= "_Release";
$dChHash->{helper}{trgLgRpt}=0;
push @ack,$dhash,$mNo."8002".$dst.$src.'01'.$dChNo.
(($state eq "ON")?"C8":"00")."00";
push @ack,$dhash,$mNo."8002".$dst.$src.$stAck;
}
push @entities,
CUL_HM_UpdtReadBulk($dChHash,1,"state:".$state,
"virtActState:".$state,
CUL_HM_UpdtReadBulk($dChHash,1,"state:".$stT,
"virtActState:".$stT,
"virtActTrigger:".CUL_HM_id2Name($recId),
"virtActTrigType:".$longPress,
"virtActTrigRpt:".$trgLgRpt,
@ -3162,7 +3168,8 @@ sub CUL_HM_Set($@) {
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
$hash->{helper}{vd}{msgCnt} = 1;
if (!$hash->{helper}{virtTC}){
$hash->{helper}{vd}{next} = 0 if (!defined $hash->{helper}{vd}{next});
$hash->{helper}{vd}{next} = gettimeofday()
if (!defined $hash->{helper}{vd}{next});
$hash->{helper}{virtTC} = "03";
CUL_HM_valvePosUpdt("valvePos:$dst$chn");
};
@ -3500,24 +3507,28 @@ sub CUL_HM_valvePosUpdt(@) {#update valve position periodically to please valve
my $nextTimer = (($lo+$hi)&0xff)/4 + 120;#original - instable
my $name = $hash->{NAME};
my $vp = ReadingsVal($name,"valvePosTC","15 %");
my $ackTime;
$vp =~ s/ %//;
$vp *=2.56;
my $tn = gettimeofday();
my $delta = int(($tn - $hash->{helper}{vd}{next})*1000);
# Log 1,"VD-timing ##### diff:$delta";
Log 1,"VD-timing Critical ##### diff:$delta" if ($delta >100);
Log3 $name,3,"VD-timing Critical ##### diff:$delta" if ($delta >100);
foreach my $peer (sort(split(',',AttrVal($name,"peerIDs","")))) {
next if (length($peer) != 8);
$peer = substr($peer,0,6);
my $pn = CUL_HM_id2Name($peer);
$ackTime = ReadingsTimestamp($pn, "ValvePosition", "nix");
CUL_HM_PushCmdStack($hash,sprintf("%02XA258%s%s%s%02X",$msgCnt,$vDevId
,$peer,$hash->{helper}{virtTC},$vp));
}
# if ($delta > 250) {
if ($ackTime && $ackTime ne $hash->{helper}{vd}{ackT} ) {
$hash->{helper}{vd}{next} += $nextTimer;
# }
# else {
# $hash->{helper}{vd}{next} = $tn+$nextTimer;
# }
}
else {
$hash->{helper}{vd}{next} = $tn+$nextTimer;
}
$hash->{helper}{vd}{ackT} = $ackTime;
$hash->{helper}{vd}{next} = $tn+$nextTimer;
$hash->{helper}{vd}{msgCnt} = $msgCnt;
$hash->{helper}{virtTC} = "00";
@ -6487,6 +6498,10 @@ sub CUL_HM_complConfig($) {# read config if enabled and not complete
offAtPon: heat channel only: force heating off after powerOn<br>
onAtRain: heat channel only: force heating on while status changes to 'rain' and off when it changes to 'dry'<br>
</li>
<li><B>virtuals</B><br>
noOnOff: virtual entity will not toggle state when trigger is received. If this parameter is
not given the entity will toggle its state between On and Off with each trigger<br>
</li>
</ul><br>
<a name="CUL_HMevents"></a>
<b>Generated events:</b>

View File

@ -207,9 +207,9 @@ sub HMinfo_peerCheck(@) { #####################################################
}
my $ret = "";
$ret .="\n\n peer list not read" ."\n ".(join "\n ",sort @peerIDsEmpty) if(@peerIDsEmpty);
$ret .="\n\n peer list incomplete"."\n ".(join "\n ",sort @peerIDsFail) if(@peerIDsEmpty);
$ret .="\n\n peer list incomplete"."\n ".(join "\n ",sort @peerIDsFail) if(@peerIDsFail);
$ret .="\n\n peer not defined" ."\n ".(join "\n ",sort @peerIDnotDef) if(@peerIDnotDef);
$ret .="\n\n peer not verified" ."\n ".(join "\n ",sort @peerIDsNoPeer)if(@peerIDsEmpty);
$ret .="\n\n peer not verified" ."\n ".(join "\n ",sort @peerIDsNoPeer)if(@peerIDsNoPeer);
return $ret;
}
sub HMinfo_burstCheck(@) { ####################################################
@ -884,7 +884,7 @@ sub HMinfo_SetFn($@) {#########################################################
,"configCheck","param","peerCheck","peerXref"
,"protoEvents","msgStat:view,clear","rssi"
,"models"
,"regCheck","register","saveConfig","update"
,"regCheck","register","saveConfig","loadConfig","update"
,"cpRegs"
,"tempList"
,"templateChk","templateDef","templateList","templateSet");

View File

@ -1348,18 +1348,15 @@ $culHmChanSets{"ROTO_ZEL-STG-RM-FWT02"} = $culHmChanSets{"HM-CC-TC02"};
LOWBAT => '06,02,$val=(hex($val)&0x80)?1:0',
RSSI => '08,02,$val=(-1)*(hex($val))', }},
"02;p01=02" => { txt => "ACK2"}, # smokeDetector pairing only?
"02;p01=04" => { txt => "ACK-proc", params => {# connected to AES??
"02;p01=04" => { txt => "AES_req", params => {#
Para1 => "02,4",
Para2 => "06,4",
Para3 => "10,4",
Para4 => "14,2",}}, # remote?
keyNo => "14,2",}},
"02;p01=80" => { txt => "NACK"},
"02;p01=84" => { txt => "NACK_TARGET_INVALID"},
"02" => { txt => "ACK/NACK_UNKNOWN "},
"02" => { txt => "Request AES", params => { #todo check data
DATA => "0," } },
"03" => { txt => "AES reply", params => { # send 'old' AES key to actor
DATA => "0," } },