2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 07:16:03 +00:00

implement CO2 sensor SCD readings

git-svn-id: https://svn.fhem.de/fhem/trunk@2457 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinp876 2013-01-08 19:11:42 +00:00
parent f14f3cb44e
commit 1824d115b9

View File

@ -436,7 +436,7 @@ CUL_HM_Parse($$)
push @event, CUL_HM_Pair($name, $shash,$cmd,$src,$dst,$p); push @event, CUL_HM_Pair($name, $shash,$cmd,$src,$dst,$p);
} }
} }
elsif($model eq "KS550" || $model eq "HM-WDS100-C6-O") { ############ elsif($model eq "KS550" || $model eq "HM-WDS100-C6-O") { ####################
if($msgType eq "70" && $p =~ m/^(....)(..)(....)(....)(..)(..)(..)/) { if($msgType eq "70" && $p =~ m/^(....)(..)(....)(....)(..)(..)(..)/) {
@ -467,7 +467,7 @@ CUL_HM_Parse($$)
push @event, "unknown:$p"; push @event, "unknown:$p";
} }
} }
elsif($model eq "HM-CC-TC") { #################################### elsif($model eq "HM-CC-TC") { ###############################################
my ($sType,$chn) = ($1,$2) if($p && $p =~ m/^(..)(..)/); my ($sType,$chn) = ($1,$2) if($p && $p =~ m/^(..)(..)/);
if($msgType eq "70" && $p =~ m/^(....)(..)/) { # weather event if($msgType eq "70" && $p =~ m/^(....)(..)/) { # weather event
$chn = '01'; # fix definition $chn = '01'; # fix definition
@ -625,7 +625,7 @@ CUL_HM_Parse($$)
$sendAck = ""; $sendAck = "";
} }
} }
elsif($model eq "HM-CC-VD") { ################### elsif($model eq "HM-CC-VD") { ###############################################
# 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
@ -666,7 +666,16 @@ CUL_HM_Parse($$)
push @event, "ValveOffset:$of %"; push @event, "ValveOffset:$of %";
} }
} }
elsif($st eq "KFM100" && $model eq "KFM-Sensor") { ################### elsif($model eq "HM-CC-SCD"){ ###############################################
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status
($msgType eq "10" && $p =~ m/^06/) || #or Info_Status message here
($msgType eq "41")) {
my $co2Lvl = hex(substr($p,4,2));
my %lvl=(0=>"normal",100=>"added",200=>"addedStrong");
push @event, "state:".$lvl{$co2Lvl};
}
}
elsif($st eq "KFM100" && $model eq "KFM-Sensor") { ##########################
if($p =~ m/.14(.)0200(..)(..)(..)/) {# todo very risky - no start... if($p =~ m/.14(.)0200(..)(..)(..)/) {# todo very risky - no start...
my ($k_cnt, $k_v1, $k_v2, $k_v3) = ($1,$2,$3,$4); my ($k_cnt, $k_v1, $k_v2, $k_v3) = ($1,$2,$3,$4);
@ -698,7 +707,7 @@ CUL_HM_Parse($$)
} }
} }
elsif($st eq "switch" || ############################################ elsif($st eq "switch" || ####################################################
$st eq "dimmer" || $st eq "dimmer" ||
$st eq "blindActuator") { $st eq "blindActuator") {
@ -750,7 +759,8 @@ CUL_HM_Parse($$)
$chnHash = $shash; $chnHash = $shash;
if ($st eq "swi"){#maintain history for event naming if ($st eq "swi"){#maintain history for event naming
$btnName = "Btn$buttonField"; $btnName = "Btn$buttonField";
}else{ }
else{
my $btn = int((($buttonField&0x3f)+1)/2); my $btn = int((($buttonField&0x3f)+1)/2);
$btnName = "Btn$btn"; $btnName = "Btn$btn";
$state = ($buttonField&1 ? "off" : "on") $state = ($buttonField&1 ? "off" : "on")
@ -772,6 +782,7 @@ CUL_HM_Parse($$)
$shash->{helper}{addVal} = $buttonField; #store to handle changes $shash->{helper}{addVal} = $buttonField; #store to handle changes
readingsSingleUpdate($chnHash,"state",$target,1);#trigger chan evt also readingsSingleUpdate($chnHash,"state",$target,1);#trigger chan evt also
push @event,"battery:". (($buttonField&0x80)?"low":"ok"); push @event,"battery:". (($buttonField&0x80)?"low":"ok");
Log 1,"General Button:"."state:$btnName $state$target :".$buttonField;
push @event,"state:$btnName $state$target"; push @event,"state:$btnName $state$target";
} }
} }
@ -832,7 +843,7 @@ CUL_HM_Parse($$)
} }
} }
} }
elsif($st eq "motionDetector") { ##################################### elsif($st eq "motionDetector") { ############################################
# Code with help of Bassem # Code with help of Bassem
my $state; my $state;
if(($msgType eq "10" ||$msgType eq "02") && $p =~ m/^0601(..)(..)/) { if(($msgType eq "10" ||$msgType eq "02") && $p =~ m/^0601(..)(..)/) {
@ -862,7 +873,7 @@ CUL_HM_Parse($$)
$sendAck = ""; #todo why is this special? $sendAck = ""; #todo why is this special?
} }
} }
elsif($st eq "smokeDetector") { ##################################### elsif($st eq "smokeDetector") { #############################################
#Info Level: msgType=0x10 p(..)(..)(..) subtype=06, channel, state (1 byte) #Info Level: msgType=0x10 p(..)(..)(..) subtype=06, channel, state (1 byte)
#Event: msgType=0x41 p(..)(..)(..) channel , unknown, state (1 byte) #Event: msgType=0x41 p(..)(..)(..) channel , unknown, state (1 byte)
@ -914,7 +925,7 @@ CUL_HM_Parse($$)
$sendAck = ""; #todo why is this special? $sendAck = ""; #todo why is this special?
} }
} }
elsif($st eq "threeStateSensor") { ##################################### elsif($st eq "threeStateSensor") { ##########################################
#todo: check for correct msgType, see below #todo: check for correct msgType, see below
#Event: msgType=0x41 p(..)(..)(..) channel , unknown, state #Event: msgType=0x41 p(..)(..)(..) channel , unknown, state
#Info Level: msgType=0x10 p(..)(..)(..)(..) subty=06, chn, state,err (3bit) #Info Level: msgType=0x10 p(..)(..)(..)(..) subty=06, chn, state,err (3bit)
@ -953,32 +964,21 @@ CUL_HM_Parse($$)
} }
else{push @event, "3SSunknownMsg:$p" if(!@event);} else{push @event, "3SSunknownMsg:$p" if(!@event);}
} }
elsif($model eq "HM-WDC7000" ||$st eq "THSensor") { #################### elsif($model eq "HM-WDC7000" ||$st eq "THSensor") { #########################
if($model eq "HM-CC-SCD"){# co2 sensor my $t = hex(substr($p,0,4));
if (($msgType eq "02" && $p =~ m/^01/) || # handle Ack_Status $t -= 32768 if($t > 1638.4);
($msgType eq "10" && $p =~ m/^06/) || #or Info_Status message here $t = sprintf("%0.1f", $t/10);
($msgType eq "41")) { my $h = hex(substr($p,4,2));
my $co2Lvl = hex(substr($p,4,2)); my $ap = hex(substr($p,6,4));
my %lvl=(0=>"normal",1=>"added",2=>"addedStrong"); my $statemsg = "state:T: $t";
push @event, "state:".$lvl{$co2Lvl}; $statemsg .= " H: $h" if ($h);
} $statemsg .= " AP: $ap" if ($ap);
} push @event, $statemsg;
else{ push @event, "temperature:$t";#temp is always there
my $t = hex(substr($p,0,4)); push @event, "humidity:$h" if ($h);
$t -= 32768 if($t > 1638.4); push @event, "airpress:$ap" if ($ap);
$t = sprintf("%0.1f", $t/10);
my $h = hex(substr($p,4,2));
my $ap = hex(substr($p,6,4));
my $statemsg = "state:T: $t";
$statemsg .= " H: $h" if ($h);
$statemsg .= " AP: $ap" if ($ap);
push @event, $statemsg;
push @event, "temperature:$t";#temp is always there
push @event, "humidity:$h" if ($h);
push @event, "airpress:$ap" if ($ap);
}
} }
elsif($st eq "winMatic") { #################################### elsif($st eq "winMatic") { #################################################
if($msgType eq "10"){ if($msgType eq "10"){
if ($p =~ m/^0601(..)(..)/) { if ($p =~ m/^0601(..)(..)/) {
@ -1008,7 +1008,7 @@ CUL_HM_Parse($$)
} }
} }
elsif($st eq "keyMatic") { #################################### elsif($st eq "keyMatic") { #################################################
#Info Level: msgType=0x10 p(..)(..)(..)(..) subty=06, chn, state,err (3bit) #Info Level: msgType=0x10 p(..)(..)(..)(..) subty=06, chn, state,err (3bit)
#AckStatus: msgType=0x02 p(..)(..)(..)(..) subty=01, chn, state,err (3bit) #AckStatus: msgType=0x02 p(..)(..)(..)(..) subty=01, chn, state,err (3bit)
@ -1034,7 +1034,7 @@ CUL_HM_Parse($$)
push @event, "state:" . (($val == 1) ? "unlocked" : "locked") . $state; push @event, "state:" . (($val == 1) ? "unlocked" : "locked") . $state;
} }
} }
else{##################################### else{########################################################################
; # no one wants the message ; # no one wants the message
} }
@ -1175,26 +1175,26 @@ my %culHmRegDefShLg = (# register that are available for short AND long button p
ActNum =>{a=> 37 ,s=>1 ,l=>3,min=>1 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Action Number"}, ActNum =>{a=> 37 ,s=>1 ,l=>3,min=>1 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Action Number"},
Intense =>{a=> 43 ,s=>1 ,l=>3,min=>10 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Volume",lit=>{vol_0=>255,vol_1=>250,vol_2=>246,vol_3=>240,vol_4=>234,vol_5=>227,vol_6=>218,vol_7=>207,vol_8=>190,vol_9=>162,vol_00=>10}}, Intense =>{a=> 43 ,s=>1 ,l=>3,min=>10 ,max=>255 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Volume",lit=>{vol_0=>255,vol_1=>250,vol_2=>246,vol_3=>240,vol_4=>234,vol_5=>227,vol_6=>218,vol_7=>207,vol_8=>190,vol_9=>162,vol_00=>10}},
# statemachines # statemachines
BlJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtRampOn =>{a=> 13.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOn" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtRampOn =>{a=> 13.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOn" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtRampOff =>{a=> 13.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOff" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtRampOff =>{a=> 13.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOff" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtRefOn =>{a=> 28.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from refOn" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtRefOn =>{a=> 28.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from refOn" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
BlJtRefOff =>{a=> 28.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from refOff" ,lit=>{no=>0,onDly=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}}, BlJtRefOff =>{a=> 28.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from refOff" ,lit=>{no=>0,dlyOn=>1,refOn=>2,on=>3,dlyOff=>4,refOff=>5,off=>6,rampOn=>8,rampOff=>9}},
DimJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
DimJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
DimJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
DimJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
DimJtRampOn =>{a=> 13.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOn" ,lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtRampOn =>{a=> 13.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOn" ,lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
DimJtRampOff =>{a=> 13.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOff" ,lit=>{no=>0,onDly=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}}, DimJtRampOff =>{a=> 13.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from rampOff" ,lit=>{no=>0,dlyOn=>1,rampOn=>2,on=>3,dlyOff=>4,rampOff=>5,Off=>6}},
SwJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,onDly=>1,on=>3,dlyOff=>4,off=>6}}, SwJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
SwJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,onDly=>1,on=>3,dlyOff=>4,off=>6}}, SwJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
SwJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,onDly=>1,on=>3,dlyOff=>4,off=>6}}, SwJtDlyOn =>{a=> 12.0,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOn" ,lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
SwJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,onDly=>1,on=>3,dlyOff=>4,off=>6}}, SwJtDlyOff =>{a=> 12.4,s=>0.4,l=>3,min=>0 ,max=>6 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from delayOff",lit=>{no=>0,dlyOn=>1,on=>3,dlyOff=>4,off=>6}},
CtOn =>{a=> 3.0,s=>0.4,l=>3,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jmp on condition from On" ,lit=>{geLo=>0,geHi=>1,ltLo=>2,ltHi=>3,between=>4,outside=>5}}, CtOn =>{a=> 3.0,s=>0.4,l=>3,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jmp on condition from On" ,lit=>{geLo=>0,geHi=>1,ltLo=>2,ltHi=>3,between=>4,outside=>5}},
CtOff =>{a=> 3.4,s=>0.4,l=>3,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jmp on condition from Off" ,lit=>{geLo=>0,geHi=>1,ltLo=>2,ltHi=>3,between=>4,outside=>5}}, CtOff =>{a=> 3.4,s=>0.4,l=>3,min=>0 ,max=>5 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jmp on condition from Off" ,lit=>{geLo=>0,geHi=>1,ltLo=>2,ltHi=>3,between=>4,outside=>5}},
@ -1750,8 +1750,8 @@ my %culHmSubTypeSets = (
virtual =>"<noButtons>",}, #redef necessary for virtual virtual =>"<noButtons>",}, #redef necessary for virtual
smokeDetector => smokeDetector =>
{ test => "", "alarmOn"=>"", "alarmOff"=>"", { test => "", "alarmOn"=>"", "alarmOff"=>"",
# test1 => "", test2 => "", #General alarm1 => "",
devicepair => "<btnNumber> device ... single [set|unset] actor"}, devicepair => "<btnNumber> device ... single [set|unset] actor",},
winMatic =>{matic => "<btn>", winMatic =>{matic => "<btn>",
read => "<btn>", read => "<btn>",
keydef => "<btn> <txt1> <txt2>", keydef => "<btn> <txt1> <txt2>",
@ -2082,7 +2082,7 @@ CUL_HM_Set($@)
} }
} }
} }
if($cmd eq "regBulk"){; elsif($cmd eq "regBulk"){;
my @adIn = @a; my @adIn = @a;
shift @adIn;shift @adIn;shift @adIn; shift @adIn;shift @adIn;shift @adIn;
my $adList; my $adList;
@ -2495,19 +2495,14 @@ CUL_HM_Set($@)
$hash->{TESTNR} = $testnr; $hash->{TESTNR} = $testnr;
CUL_HM_SndCmd($hash, sprintf("++9440%s%s00%02X",$dst,$dst,$testnr)); CUL_HM_SndCmd($hash, sprintf("++9440%s%s00%02X",$dst,$dst,$testnr));
} }
elsif($cmd eq "test1") { ##################################################### General remove after test
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
$hash->{TESTNR} = $testnr;
CUL_HM_SndCmd($hash, sprintf("++B440%s%s00%02X",$dst,$dst,$testnr));
}
elsif($cmd eq "test2") { ##################################################### General remove after test
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
$hash->{TESTNR} = $testnr;
CUL_HM_SndCmd($hash, sprintf("++9440%s%s00%02X",$id,$dst,$testnr));
}
elsif($cmd =~ m/alarm(.*)/) { ############################################### elsif($cmd =~ m/alarm(.*)/) { ###############################################
CUL_HM_SndCmd($hash, sprintf("++9441%s%s01%s", CUL_HM_SndCmd($hash, sprintf("++9441%s%s01%s",
$dst,$dst, $1 eq "On" ? "0BC8" : "0C01")); $dst,$dst, (($1 eq "On" )? "0BC8" : "0C01")));
}
elsif($cmd eq "alarm1") { ############################################### General
my $testnr = $hash->{TESTNRa} ? ($hash->{TESTNRa} +1) : 1;
$hash->{TESTNRa} = $testnr;
CUL_HM_SndCmd($hash, sprintf("++9441%s%s01%02X",$dst,$dst, $testnr));
} }
elsif($cmd eq "virtual") { ################################################## elsif($cmd eq "virtual") { ##################################################
$state = ""; $state = "";