mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
add winmatic and sec-sc register, change winmatic events
git-svn-id: https://svn.fhem.de/fhem/trunk@2495 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e0824f0c4f
commit
d9d30098c2
@ -116,7 +116,7 @@ my %culHmModel=(
|
|||||||
"0022" => {name=>"WS888" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
"0022" => {name=>"WS888" ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
"0026" => {name=>"HM-SEC-KEY-S" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
"0026" => {name=>"HM-SEC-KEY-S" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
||||||
"0027" => {name=>"HM-SEC-KEY-O" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
"0027" => {name=>"HM-SEC-KEY-O" ,cyc=>'' ,rxt=>'b' ,lst=>'3' ,chn=>"",},
|
||||||
"0028" => {name=>"HM-SEC-WIN" ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"",},
|
"0028" => {name=>"HM-SEC-WIN" ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"Win:1:1,Akku:2:2",},
|
||||||
"0029" => {name=>"HM-RC-12" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
"0029" => {name=>"HM-RC-12" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
||||||
"002A" => {name=>"HM-RC-12-B" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
"002A" => {name=>"HM-RC-12-B" ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:12",},
|
||||||
"002D" => {name=>"HM-LC-SW4-PCB" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Sw:1:4",},
|
"002D" => {name=>"HM-LC-SW4-PCB" ,cyc=>'' ,rxt=>'' ,lst=>'3' ,chn=>"Sw:1:4",},
|
||||||
@ -984,22 +984,28 @@ CUL_HM_Parse($$)
|
|||||||
push @event, "airpress:$ap" if ($ap);
|
push @event, "airpress:$ap" if ($ap);
|
||||||
}
|
}
|
||||||
elsif($st eq "winMatic") { #################################################
|
elsif($st eq "winMatic") { #################################################
|
||||||
|
my($sType,$chn,$lvl,$stat) = ($1,$2,$3,$4) if ($p =~ m/^(..)(..)(..)(..)/);
|
||||||
if($msgType eq "10"){
|
if(($msgType eq "10" && $sType eq "06") ||
|
||||||
if ($p =~ m/^0601(..)(..)/) {
|
($msgType eq "02" && $sType eq "01")){
|
||||||
my ($lst, $flg) = ($1, $2);
|
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
|
||||||
if($lst eq "C8" && $flg eq "00") { push @event, "contact:tilted";
|
if($modules{CUL_HM}{defptr}{"$src$chn"});
|
||||||
} elsif($lst eq "FF" && $flg eq "00") { push @event, "contact:closed";
|
# stateflag meaning unknown
|
||||||
} elsif($lst eq "FF" && $flg eq "10") { push @event, "contact:lock_on";
|
push @event, "state:".(($lvl eq "FF")?"locked":((hex($lvl)/2)." %"));
|
||||||
} elsif($lst eq "00" && $flg eq "10") { push @event, "contact:movement_tilted";
|
if ($chn eq "01"){
|
||||||
} elsif($lst eq "00" && $flg eq "20") { push @event, "contact:movement_closed";
|
my %err = (0=>"no",1=>"TurnError",2=>"TiltError");
|
||||||
} elsif($lst eq "00" && $flg eq "30") { push @event, "contact:open";
|
my %dir = (0=>"no",1=>"up",2=>"down",3=>"undefined");
|
||||||
|
push @event, "motorError:".$err{(hex($stat)>>1)&0x02};
|
||||||
|
push @event, "direction:".$dir{(hex($stat)>>4)&0x02};
|
||||||
|
# CUL_HM_SndCmd($shash, $msgcnt."8002".$id.$src."0101".$lst."00")
|
||||||
|
# if($id eq $dst);# Send AckStatus
|
||||||
|
# $sendAck = "";
|
||||||
}
|
}
|
||||||
CUL_HM_SndCmd($shash, $msgcnt."8002".$id.$src."0101".$lst."00")
|
else{ #should be akku
|
||||||
if($id eq $dst);# Send AckStatus
|
my %statF = (0=>"trickleCharge",1=>"charge",2=>"dischange",3=>"unknown");
|
||||||
$sendAck = "";
|
push @event, "charge:".$statF{(hex($stat)>>4)&0x02};
|
||||||
}
|
}
|
||||||
elsif ($p =~ m/^0287(..)89(..)8B(..)/) {
|
}
|
||||||
|
if ($p =~ m/^0287(..)89(..)8B(..)/) {
|
||||||
my ($air, undef, $course) = ($1, $2, $3);
|
my ($air, undef, $course) = ($1, $2, $3);
|
||||||
push @event, "airing:".($air eq "FF" ? "inactiv" : CUL_HM_decodeTime8($air));
|
push @event, "airing:".($air eq "FF" ? "inactiv" : CUL_HM_decodeTime8($air));
|
||||||
push @event, "course:".($course eq "FF" ? "tilt" : "close");
|
push @event, "course:".($course eq "FF" ? "tilt" : "close");
|
||||||
@ -1011,8 +1017,6 @@ CUL_HM_Parse($$)
|
|||||||
push @event, "contact:tesed";
|
push @event, "contact:tesed";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
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)
|
||||||
@ -1204,6 +1208,11 @@ my %culHmRegDefShLg = (# register that are available for short AND long button p
|
|||||||
KeyJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
KeyJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from On" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
||||||
KeyJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
KeyJtOff =>{a=> 11.4,s=>0.4,l=>3,min=>0 ,max=>7 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,dlyUnlock=>1,rampUnlock=>2,lock=>3,dlyLock=>4,rampLock=>5,lock=>6,open=>8}},
|
||||||
|
|
||||||
|
WinJtOn =>{a=> 11.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,Off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
|
WinJtOff =>{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,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,Off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
|
WinJtRampOn =>{a=> 13.0,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,Off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
|
WinJtRampOff =>{a=> 13.4,s=>0.4,l=>3,min=>0 ,max=>9 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Jump from Off" ,lit=>{no=>0,rampOnDly=>1,rampOn=>2,on=>3,ramoOffDly=>4,rampOff=>5,Off=>6,rampOnFast=>8,rampOffFast=>9}},
|
||||||
|
|
||||||
CtValLo =>{a=> 4.0,s=>1 ,l=>3,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Condition value low for CT table" },
|
CtValLo =>{a=> 4.0,s=>1 ,l=>3,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Condition value low for CT table" },
|
||||||
CtValHi =>{a=> 5.0,s=>1 ,l=>3,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Condition value high for CT table" },
|
CtValHi =>{a=> 5.0,s=>1 ,l=>3,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Condition value high for CT table" },
|
||||||
|
|
||||||
@ -1252,7 +1261,7 @@ my %culHmRegDefine = (
|
|||||||
redTempLvl =>{a=> 52.0,s=>1.0,l=>1,min=>30 ,max=>100 ,c=>'' ,f=>'' ,u=>"C" ,d=>1,t=>"reduced temperatur recover"},
|
redTempLvl =>{a=> 52.0,s=>1.0,l=>1,min=>30 ,max=>100 ,c=>'' ,f=>'' ,u=>"C" ,d=>1,t=>"reduced temperatur recover"},
|
||||||
redLvl =>{a=> 53.0,s=>1.0,l=>1,min=>0 ,max=>100 ,c=>'factor' ,f=>2 ,u=>"%" ,d=>1,t=>"reduced power level"},
|
redLvl =>{a=> 53.0,s=>1.0,l=>1,min=>0 ,max=>100 ,c=>'factor' ,f=>2 ,u=>"%" ,d=>1,t=>"reduced power level"},
|
||||||
loadErrCalib =>{a=> 18.0,s=>1.0,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>"" ,d=>0,t=>"Load Error Calibration"},
|
loadErrCalib =>{a=> 18.0,s=>1.0,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>"" ,d=>0,t=>"Load Error Calibration"},
|
||||||
transmitTryMax =>{a=> 48.0,s=>1.0,l=>1,min=>0 ,max=>10 ,c=>'' ,f=>'' ,u=>"" ,d=>0,t=>"max message re-transmit"},
|
transmitTryMax =>{a=> 48.0,s=>1.0,l=>1,min=>1 ,max=>10 ,c=>'' ,f=>'' ,u=>"" ,d=>0,t=>"max message re-transmit"},
|
||||||
loadAppearBehav =>{a=> 49.0,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>"" ,d=>1,t=>"behavior on load appearence at restart",lit=>{off=>0,last=>1,btnPress=>2,btnPressIfWasOn=>3}},
|
loadAppearBehav =>{a=> 49.0,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>"" ,d=>1,t=>"behavior on load appearence at restart",lit=>{off=>0,last=>1,btnPress=>2,btnPressIfWasOn=>3}},
|
||||||
powerUpAction =>{a=> 86.0,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>"" ,d=>1,t=>"behavior on power up" ,lit=>{off=>0,on=>1}},
|
powerUpAction =>{a=> 86.0,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>"" ,d=>1,t=>"behavior on power up" ,lit=>{off=>0,on=>1}},
|
||||||
statusInfoMinDly=>{a=> 87.0,s=>0.5,l=>1,min=>0.5,max=>15.5 ,c=>'factor' ,f=>2 ,u=>"s" ,d=>0,t=>"status message min delay"},
|
statusInfoMinDly=>{a=> 87.0,s=>0.5,l=>1,min=>0.5,max=>15.5 ,c=>'factor' ,f=>2 ,u=>"s" ,d=>0,t=>"status message min delay"},
|
||||||
@ -1293,7 +1302,7 @@ my %culHmRegDefine = (
|
|||||||
msgRhsPosB =>{a=> 32.4,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position B",lit=>{noMsg=>0,closed=>1,open=>2,tilted=>3}},
|
msgRhsPosB =>{a=> 32.4,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position B",lit=>{noMsg=>0,closed=>1,open=>2,tilted=>3}},
|
||||||
msgRhsPosC =>{a=> 32.2,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position C",lit=>{noMsg=>0,closed=>1,open=>2,tilted=>3}},
|
msgRhsPosC =>{a=> 32.2,s=>0.2,l=>1,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position C",lit=>{noMsg=>0,closed=>1,open=>2,tilted=>3}},
|
||||||
evtDly =>{a=> 33 ,s=>1 ,l=>1,min=>0 ,max=>7620 ,c=>'factor' ,f=>1.6 ,u=>'s' ,d=>0,t=>"Event delay time",},#todo check calculation
|
evtDly =>{a=> 33 ,s=>1 ,l=>1,min=>0 ,max=>7620 ,c=>'factor' ,f=>1.6 ,u=>'s' ,d=>0,t=>"Event delay time",},#todo check calculation
|
||||||
# keymatic secific register
|
# keymatic/winmatic secific register
|
||||||
signal =>{a=> 3.4,s=>0.1,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Confirmation beep" ,lit=>{off=>0,on=>1}},
|
signal =>{a=> 3.4,s=>0.1,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Confirmation beep" ,lit=>{off=>0,on=>1}},
|
||||||
signalTone =>{a=> 3.6,s=>0.2,l=>0,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"" ,lit=>{low=>0,mid=>1,high=>2,veryHigh=>3}},
|
signalTone =>{a=> 3.6,s=>0.2,l=>0,min=>0 ,max=>3 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"" ,lit=>{low=>0,mid=>1,high=>2,veryHigh=>3}},
|
||||||
keypressSignal =>{a=> 3.0,s=>0.1,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Keypress beep" ,lit=>{off=>0,on=>1}},
|
keypressSignal =>{a=> 3.0,s=>0.1,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Keypress beep" ,lit=>{off=>0,on=>1}},
|
||||||
@ -1301,19 +1310,27 @@ my %culHmRegDefine = (
|
|||||||
holdPWM =>{a=> 21 ,s=>1, l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Holdtime pulse wide modulation"},
|
holdPWM =>{a=> 21 ,s=>1, l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"Holdtime pulse wide modulation"},
|
||||||
setupDir =>{a=> 22 ,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Rotation direction for locking",lit=>{right=>0,left=>1}},
|
setupDir =>{a=> 22 ,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Rotation direction for locking",lit=>{right=>0,left=>1}},
|
||||||
setupPosition =>{a=> 23 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Rotation angle neutral position"},
|
setupPosition =>{a=> 23 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Rotation angle neutral position"},
|
||||||
angelOpen =>{a=> 24 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Door opening angle"},
|
angelOpen =>{a=> 24 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>1,t=>"Door opening angle"},
|
||||||
angelMax =>{a=> 25 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Angle maximum"},
|
angelMax =>{a=> 25 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>1,t=>"Angle maximum"},
|
||||||
angelLocked =>{a=> 26 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Angle Locked position"},
|
angelLocked =>{a=> 26 ,s=>1 ,l=>1,min=>0 ,max=>3000 ,c=>'factor' ,f=>0.06666 ,u=>'deg' ,d=>0,t=>"Angle Locked position"},
|
||||||
|
pullForce =>{a=> 28 ,s=>1 ,l=>1,min=>0 ,max=>100 ,c=>'factor' ,f=>2 ,u=>'%' ,d=>1,t=>"pull force level"},
|
||||||
|
pushForce =>{a=> 29 ,s=>1 ,l=>1,min=>0 ,max=>100 ,c=>'factor' ,f=>2 ,u=>'%' ,d=>1,t=>"push force level"},
|
||||||
|
tiltMax =>{a=> 30 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"maximum tilt level"},
|
||||||
ledFlashUnlocked=>{a=> 31.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"LED blinks when not locked",lit=>{off=>0,on=>1}},
|
ledFlashUnlocked=>{a=> 31.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"LED blinks when not locked",lit=>{off=>0,on=>1}},
|
||||||
ledFlashLocked =>{a=> 31.6,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"LED blinks when locked" ,lit=>{off=>0,on=>1}},
|
ledFlashLocked =>{a=> 31.6,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"LED blinks when locked" ,lit=>{off=>0,on=>1}},
|
||||||
# sec_mdir
|
# sec_mdir
|
||||||
|
cyclicInfoMsg =>{a=> 9 ,s=>1 ,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"cyclic message",lit=>{off=>0,on=>1}},
|
||||||
sabotageMsg =>{a=> 16.0,s=>1 ,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"enable sabotage message" ,lit=>{off=>0,on=>1}},
|
sabotageMsg =>{a=> 16.0,s=>1 ,l=>0,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"enable sabotage message" ,lit=>{off=>0,on=>1}},
|
||||||
|
transmDevTryMax =>{a=> 20.0,s=>1.0,l=>1,min=>1 ,max=>10 ,c=>'' ,f=>'' ,u=>'' ,d=>0,t=>"max message re-transmit"},
|
||||||
evtFltrPeriod =>{a=> 1.0,s=>0.4,l=>1,min=>0.5,max=>7.5 ,c=>'factor' ,f=>2 ,u=>'s' ,d=>1,t=>"event filter period"},
|
evtFltrPeriod =>{a=> 1.0,s=>0.4,l=>1,min=>0.5,max=>7.5 ,c=>'factor' ,f=>2 ,u=>'s' ,d=>1,t=>"event filter period"},
|
||||||
evtFltrNum =>{a=> 1.4,s=>0.4,l=>1,min=>1 ,max=>15 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"sensitivity - read sach n-th puls"},
|
evtFltrNum =>{a=> 1.4,s=>0.4,l=>1,min=>1 ,max=>15 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"sensitivity - read sach n-th puls"},
|
||||||
minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"minimum interval in sec" ,lit=>{0=>0,15=>1,20=>2,60=>3,120=>4}},
|
minInterval =>{a=> 2.0,s=>0.3,l=>1,min=>0 ,max=>4 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"minimum interval in sec" ,lit=>{0=>0,15=>1,20=>2,60=>3,120=>4}},
|
||||||
captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture within interval" ,lit=>{off=>0,on=>1}},
|
captInInterval =>{a=> 2.3,s=>0.1,l=>1,min=>0 ,max=>1 ,c=>'lit' ,f=>'' ,u=>'' ,d=>1,t=>"capture within interval" ,lit=>{off=>0,on=>1}},
|
||||||
brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"brightness filter"},
|
brightFilter =>{a=> 2.4,s=>0.4,l=>1,min=>0 ,max=>7 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"brightness filter"},
|
||||||
ledOnTime =>{a=> 34 ,s=>1 ,l=>1,min=>0 ,max=>1.275 ,c=>'factor' ,f=>200 ,u=>'s' ,d=>1,t=>"LED ontime"},
|
ledOnTime =>{a=> 34 ,s=>1 ,l=>1,min=>0 ,max=>1.275 ,c=>'factor' ,f=>200 ,u=>'s' ,d=>1,t=>"LED ontime"},
|
||||||
|
msgScPosA =>{a=> 32.6,s=>0.2,l=>1,min=>0 ,max=>2 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position A",lit=>{noMsg=>0,closed=>1,open=>2}},
|
||||||
|
msgScPosB =>{a=> 32.4,s=>0.2,l=>1,min=>0 ,max=>2 ,c=>'lit' ,f=>'' ,u=>'' ,d=>0,t=>"Message for position B",lit=>{noMsg=>0,closed=>1,open=>2}},
|
||||||
|
|
||||||
# weather units
|
# weather units
|
||||||
stormUpThresh =>{a=> 6 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"Storm upper threshold"},
|
stormUpThresh =>{a=> 6 ,s=>1 ,l=>1,min=>0 ,max=>255 ,c=>'' ,f=>'' ,u=>'' ,d=>1,t=>"Storm upper threshold"},
|
||||||
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"},
|
||||||
@ -1361,8 +1378,7 @@ my %culHmRegType = (
|
|||||||
lgMultiExec =>1,
|
lgMultiExec =>1,
|
||||||
},
|
},
|
||||||
winMatic=>{
|
winMatic=>{
|
||||||
OnTime =>1,OffTime =>1,OffLevelKm =>1,
|
signal =>1,signalTone =>1,keypressSignal =>1,
|
||||||
OnLevelKm =>1,OnRampOnSp =>1,OnRampOffSp =>1,
|
|
||||||
},
|
},
|
||||||
keyMatic=>{
|
keyMatic=>{
|
||||||
signal =>1,signalTone =>1,keypressSignal =>1,
|
signal =>1,signalTone =>1,keypressSignal =>1,
|
||||||
@ -1379,7 +1395,6 @@ my %culHmRegType = (
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
my %culHmRegModel = (
|
my %culHmRegModel = (
|
||||||
"HM-RC-12" => {backAtKey =>1, backAtMotion =>1, backOnTime =>1},
|
"HM-RC-12" => {backAtKey =>1, backAtMotion =>1, backOnTime =>1},
|
||||||
"HM-RC-12-B" => {backAtKey =>1, backAtMotion =>1, backOnTime =>1},
|
"HM-RC-12-B" => {backAtKey =>1, backAtMotion =>1, backOnTime =>1},
|
||||||
@ -1413,26 +1428,36 @@ my %culHmRegModel = (
|
|||||||
"HM-SEC-RHS" =>{peerNeedsBurst =>1,expectAES =>1,
|
"HM-SEC-RHS" =>{peerNeedsBurst =>1,expectAES =>1,
|
||||||
msgRhsPosA =>1,msgRhsPosB =>1,msgRhsPosC =>1,
|
msgRhsPosA =>1,msgRhsPosB =>1,msgRhsPosC =>1,
|
||||||
evtDly =>1,ledOnTime =>1,transmitTryMax =>1,},
|
evtDly =>1,ledOnTime =>1,transmitTryMax =>1,},
|
||||||
|
"HM-SEC-SC" =>{cyclicInfoMsg =>1,sabotageMsg =>1,transmDevTryMax =>1,
|
||||||
|
msgScPosA =>1,msgScPosB =>1,
|
||||||
|
ledOnTime =>1,transmitTryMax =>1,
|
||||||
|
peerNeedsBurst =>1,expectAES =>1,},
|
||||||
);
|
);
|
||||||
my %culHmRegChan = (# if channelspecific then enter them here
|
my %culHmRegChan = (# if channelspecific then enter them here
|
||||||
"HM-CC-TC02"=> {
|
"HM-CC-TC02" => {
|
||||||
dispTempHum =>1,dispTempInfo =>1,dispTempUnit =>1,mdTempReg =>1,
|
dispTempHum =>1,dispTempInfo =>1,dispTempUnit =>1,mdTempReg =>1,
|
||||||
mdTempValve =>1,tempComfort =>1,tempLower =>1,partyEndDay =>1,
|
mdTempValve =>1,tempComfort =>1,tempLower =>1,partyEndDay =>1,
|
||||||
partyEndMin =>1,partyEndHr =>1,tempParty =>1,decalDay =>1,
|
partyEndMin =>1,partyEndHr =>1,tempParty =>1,decalDay =>1,
|
||||||
decalHr =>1,decalMin =>1,
|
decalHr =>1,decalMin =>1,
|
||||||
},
|
},
|
||||||
"HM-CC-TC03" => {tempWinOpen =>1, }, #window channel
|
"HM-CC-TC03" =>{tempWinOpen =>1, }, #window channel
|
||||||
"HM-RC-1912" => {msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
"HM-RC-1912" =>{msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
||||||
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
||||||
lcdSymb =>1, lcdLvlInterp =>1},
|
lcdSymb =>1, lcdLvlInterp =>1},
|
||||||
"HM-RC-19-B12" => {msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
"HM-RC-19-B12" =>{msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
||||||
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
||||||
lcdSymb =>1, lcdLvlInterp =>1},
|
lcdSymb =>1, lcdLvlInterp =>1},
|
||||||
"HM-RC-19-SW12"=> {msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
"HM-RC-19-SW12" =>{msgShowTime =>1, beepAtAlarm =>1, beepAtService =>1,beepAtInfo =>1,
|
||||||
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
backlAtAlarm =>1, backlAtService =>1, backlAtInfo =>1,
|
||||||
lcdSymb =>1, lcdLvlInterp =>1},
|
lcdSymb =>1, lcdLvlInterp =>1},
|
||||||
"HM-OU-CFM-PL02"=>{Intense=>1}
|
"HM-OU-CFM-PL02"=>{Intense=>1},
|
||||||
|
"HM-SEC-WIN01" =>{setupDir =>1,pullForce =>1,pushForce =>1,tiltMax =>1,
|
||||||
|
CtValLo =>1,CtValHi =>1,
|
||||||
|
CtOn =>1,CtOff =>1,CtRampOn =>1,CtRampOff =>1,
|
||||||
|
WinJtOn =>1,WinJtOff =>1,WinJtRampOn =>1,WinJtRampOff =>1,
|
||||||
|
OnTime =>1,OffTime =>1,OffLevelKm =>1,
|
||||||
|
OnLevelKm =>1,OnRampOnSp =>1,OnRampOffSp =>1
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
##--------------- Conversion routines for register settings
|
##--------------- Conversion routines for register settings
|
||||||
@ -1751,38 +1776,29 @@ my %culHmGlobalSets = (
|
|||||||
clear =>"[readings|msgEvents]",
|
clear =>"[readings|msgEvents]",
|
||||||
);
|
);
|
||||||
my %culHmSubTypeSets = (
|
my %culHmSubTypeSets = (
|
||||||
switch =>
|
switch =>{ "on-for-timer"=>"sec", "on-till"=>"time",
|
||||||
{ "on-for-timer"=>"sec", "on-till"=>"time",
|
|
||||||
on=>"", off=>"", toggle=>"" },
|
on=>"", off=>"", toggle=>"" },
|
||||||
dimmer =>
|
dimmer =>{ "on-for-timer"=>"sec", , "on-till"=>"time",
|
||||||
{ "on-for-timer"=>"sec", , "on-till"=>"time",
|
|
||||||
on=>"", off=>"", toggle=>"", pct=>"", stop=>""},
|
on=>"", off=>"", toggle=>"", pct=>"", stop=>""},
|
||||||
blindActuator=>
|
blindActuator =>{ on=>"", off=>"", toggle=>"", pct=>"", stop=>""},
|
||||||
{ on=>"", off=>"", toggle=>"", pct=>"", stop=>""},
|
remote =>{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
||||||
remote =>
|
pushButton =>{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
||||||
{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
threeStateSensor =>{ devicepair => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
||||||
pushButton =>
|
motionDetector =>{ devicepair => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
||||||
{ devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",},
|
virtual =>{ raw => "data ...",
|
||||||
threeStateSensor =>
|
|
||||||
{ devicepair => "<btnNumber> device ... single [set|unset] [actor|remote|both]",},
|
|
||||||
virtual =>
|
|
||||||
{ raw => "data ...",
|
|
||||||
devicepair => "<btnNumber> device ... [single|dual] [set|unset] [actor|remote|both]",
|
devicepair => "<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 =>
|
smokeDetector =>{ test => "", "alarmOn"=>"", "alarmOff"=>"",
|
||||||
{ test => "", "alarmOn"=>"", "alarmOff"=>"",
|
|
||||||
alarm1 => "",
|
|
||||||
devicepair => "<btnNumber> device ... single [set|unset] actor",},
|
devicepair => "<btnNumber> device ... single [set|unset] actor",},
|
||||||
winMatic =>{matic => "<btn>",
|
winMatic =>{ matic => "<btn>",
|
||||||
read => "<btn>",
|
|
||||||
keydef => "<btn> <txt1> <txt2>",
|
keydef => "<btn> <txt1> <txt2>",
|
||||||
create => "<txt>" },
|
create => "<txt>" },
|
||||||
keyMatic =>{lock =>"",
|
keyMatic =>{ lock =>"",
|
||||||
unlock =>"[sec] ...",
|
unlock =>"[sec] ...",
|
||||||
open =>"[sec] ...",
|
open =>"[sec] ...",
|
||||||
inhibit=>"[on|off]"},
|
inhibit =>"[on|off]"},
|
||||||
|
|
||||||
);
|
);
|
||||||
my %culHmModelSets = (
|
my %culHmModelSets = (
|
||||||
@ -1847,6 +1863,8 @@ my %culHmChanSets = (
|
|||||||
displayTempUnit => "[celsius|fahrenheit]",
|
displayTempUnit => "[celsius|fahrenheit]",
|
||||||
controlMode => "[manual|auto|central|party]",
|
controlMode => "[manual|auto|central|party]",
|
||||||
decalcDay => "day", },
|
decalcDay => "day", },
|
||||||
|
"HM-SEC-WIN01"=>{ stop =>"",
|
||||||
|
level =>"<level> <relockDly> <speed>..."},
|
||||||
);
|
);
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
@ -2205,6 +2223,21 @@ CUL_HM_Set($@)
|
|||||||
}
|
}
|
||||||
CUL_HM_pushConfig($hash,$id,$dst,$lChn,$peerID,$peerChn,$list,$addrData);
|
CUL_HM_pushConfig($hash,$id,$dst,$lChn,$peerID,$peerChn,$list,$addrData);
|
||||||
}
|
}
|
||||||
|
elsif($cmd eq "level") { ###############################################
|
||||||
|
#level =>"<level> <relockDly> <speed>..."
|
||||||
|
my (undef,undef,$lvl,$rLocDly,$speed) = @a;
|
||||||
|
return "please enter level 0 to 100" if (!defined($lvl) || $lvl>100);
|
||||||
|
return "reloclDelay range 0..65535 or ignore"
|
||||||
|
if (defined($rLocDly) &&
|
||||||
|
($rLocDly > 65535 ||
|
||||||
|
($rLocDly < 0.1 && $rLocDly ne 'ignore' && $rLocDly ne '0' )));
|
||||||
|
return "select speed range 0 to 100" if (defined($speed) && $speed>100);
|
||||||
|
$rLocDly = 111600 if (!defined($rLocDly)||$rLocDly eq "ignore");# defaults
|
||||||
|
$speed = 30 if (!defined($rLocDly));
|
||||||
|
$rLocDly = CUL_HM_encodeTime8($rLocDly);# calculate hex value
|
||||||
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'81'.$chn.
|
||||||
|
sprintf("%02X%02s%02X",$lvl*2,$rLocDly,$speed*2));
|
||||||
|
}
|
||||||
elsif($cmd eq "on") { ###############################################
|
elsif($cmd eq "on") { ###############################################
|
||||||
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'C80000');
|
CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'02'.$chn.'C80000');
|
||||||
}
|
}
|
||||||
@ -2496,11 +2529,6 @@ CUL_HM_Set($@)
|
|||||||
CUL_HM_PushCmdStack($hash,
|
CUL_HM_PushCmdStack($hash,
|
||||||
sprintf("++A001%s%s0104%s%02X%s", $id, $dst, $id, $a[2], $chn));
|
sprintf("++A001%s%s0104%s%02X%s", $id, $dst, $id, $a[2], $chn));
|
||||||
}
|
}
|
||||||
elsif($cmd eq "read") { ###################################
|
|
||||||
return "read is discontinued since duplicate.\n".
|
|
||||||
"please use getRegRaw instead. Syntax getRegRaw List3 fhem<btn> \n".
|
|
||||||
"or getConfig for a complete configuratin list";
|
|
||||||
}
|
|
||||||
elsif($cmd eq "keydef") { #####################################
|
elsif($cmd eq "keydef") { #####################################
|
||||||
if ( $a[3] eq "tilt") {CUL_HM_pushConfig($hash,$id,$dst,1,$id,$a[2],3,"0B220D838B228D83");#JT_ON/OFF/RAMPON/RAMPOFF short and long
|
if ( $a[3] eq "tilt") {CUL_HM_pushConfig($hash,$id,$dst,1,$id,$a[2],3,"0B220D838B228D83");#JT_ON/OFF/RAMPON/RAMPOFF short and long
|
||||||
} elsif ($a[3] eq "close") {CUL_HM_pushConfig($hash,$id,$dst,1,$id,$a[2],3,"0B550D838B558D83");#JT_ON/OFF/RAMPON/RAMPOFF short and long
|
} elsif ($a[3] eq "close") {CUL_HM_pushConfig($hash,$id,$dst,1,$id,$a[2],3,"0B550D838B558D83");#JT_ON/OFF/RAMPON/RAMPOFF short and long
|
||||||
@ -2516,16 +2544,16 @@ CUL_HM_Set($@)
|
|||||||
elsif($cmd eq "test") { #####################################################
|
elsif($cmd eq "test") { #####################################################
|
||||||
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
|
my $testnr = $hash->{TESTNR} ? ($hash->{TESTNR} +1) : 1;
|
||||||
$hash->{TESTNR} = $testnr;
|
$hash->{TESTNR} = $testnr;
|
||||||
CUL_HM_SndCmd($hash, sprintf("++9440%s%s00%02X",$dst,$dst,$testnr));
|
my $msg = sprintf("++9440%s%s00%02X",$dst,$dst,$testnr);
|
||||||
|
CUL_HM_SndCmd($hash, $msg);# repeat non-ack messages - delivery uncertain
|
||||||
|
CUL_HM_SndCmd($hash, $msg);
|
||||||
|
CUL_HM_SndCmd($hash, $msg);
|
||||||
}
|
}
|
||||||
elsif($cmd =~ m/alarm(.*)/) { ###############################################
|
elsif($cmd =~ m/alarm(.*)/) { ###############################################
|
||||||
CUL_HM_SndCmd($hash, sprintf("++9441%s%s01%s",
|
my $msg = sprintf("++9441%s%s01%s",$dst,$dst,(($1 eq "On")?"0BC8":"0C01"));
|
||||||
$dst,$dst, (($1 eq "On" )? "0BC8" : "0C01")));
|
CUL_HM_SndCmd($hash, $msg);# repeat non-ack messages - delivery uncertain
|
||||||
}
|
CUL_HM_SndCmd($hash, $msg);
|
||||||
elsif($cmd eq "alarm1") { ############################################### General
|
CUL_HM_SndCmd($hash, $msg);
|
||||||
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 = "";
|
||||||
@ -4609,6 +4637,21 @@ CUL_HM_setAttrIfCh($$$$)
|
|||||||
</ul></code>
|
</ul></code>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
|
||||||
|
<li>winMatic <br><br>
|
||||||
|
<ul>winMatic provides 2 channels, one for the window control and a second
|
||||||
|
for the accumulator.</ul><br>
|
||||||
|
<ul>
|
||||||
|
<li><B>level <level> <relockDelay> <speed></B><br>
|
||||||
|
set the level. <br>
|
||||||
|
<level>: range is 0 to 100%<br>
|
||||||
|
<relockDelay>: range 0 to 65535 sec. 'ignore' can be used to igneore the value alternaly <br>
|
||||||
|
<speed>: range is 0 to 100%<br>
|
||||||
|
</li>
|
||||||
|
<li><B>stop</B><br>
|
||||||
|
stop movement<br>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
Debugging:
|
Debugging:
|
||||||
@ -4819,12 +4862,10 @@ CUL_HM_setAttrIfCh($$$$)
|
|||||||
humidity $h<br>
|
humidity $h<br>
|
||||||
airpress $ap<br>
|
airpress $ap<br>
|
||||||
<li>winMatic<br>
|
<li>winMatic<br>
|
||||||
contact closed<br>
|
motorError: [no|TurnError|TiltError]<br>
|
||||||
contact open<br>
|
direction: [no|up|down|undefined]<br>
|
||||||
contact tilted<br>
|
* Akku Channel<br>
|
||||||
contact movement_tilted<br>
|
charge: [trickleCharge|charge|dischange|unknown]<br>
|
||||||
contact movement_closed<br>
|
|
||||||
contact lock_on<br>
|
|
||||||
airing: $air<br>
|
airing: $air<br>
|
||||||
course: tilt<br>
|
course: tilt<br>
|
||||||
course: close<br>
|
course: close<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user