mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 01:06:04 +00:00
new devices, valvePos for VD
git-svn-id: https://svn.fhem.de/fhem/trunk@4849 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
9977df7adc
commit
fa699cd58b
@ -3283,70 +3283,79 @@ sub CUL_HM_Set($@) {
|
|||||||
my %lim = (valvePos =>{min=>0 ,max=>99 ,rd =>"valvePosTC" ,u =>" %"},
|
my %lim = (valvePos =>{min=>0 ,max=>99 ,rd =>"valvePosTC" ,u =>" %"},
|
||||||
virtTemp =>{min=>-20,max=>50 ,rd =>"temperature",u =>"" },
|
virtTemp =>{min=>-20,max=>50 ,rd =>"temperature",u =>"" },
|
||||||
virtHum =>{min=>0 ,max=>99 ,rd =>"humidity" ,u =>"" },);
|
virtHum =>{min=>0 ,max=>99 ,rd =>"humidity" ,u =>"" },);
|
||||||
if ($valu eq "off"){
|
if ($md eq "HM-CC-VD"){
|
||||||
if ($cmd eq "virtHum") {$hash->{helper}{vd}{vinH} = "";}
|
return "level between $lim{$cmd}{min} and $lim{$cmd}{max} allowed"
|
||||||
else {$hash->{helper}{vd}{vin} = "";}
|
|
||||||
if ((!$hash->{helper}{vd}{vinH} || $hash->{helper}{vd}{vinH} eq "") &&
|
|
||||||
(!$hash->{helper}{vd}{vin} || $hash->{helper}{vd}{vin} eq "") ){
|
|
||||||
$state = "$cmd:stopped";
|
|
||||||
RemoveInternalTimer("valvePos:$dst$chn");# remove responsePending timer
|
|
||||||
RemoveInternalTimer("valveTmr:$dst$chn");# remove responsePending timer
|
|
||||||
delete($hash->{helper}{virtTC});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($hash->{helper}{virtTC} || $valu ne "off") {
|
|
||||||
if ($valu ne "off"){
|
|
||||||
return "level between $lim{$cmd}{min} and $lim{$cmd}{max} or 'off' allowed"
|
|
||||||
if ($valu !~ m/^[+-]?\d+\.?\d+$/||
|
if ($valu !~ m/^[+-]?\d+\.?\d+$/||
|
||||||
$valu > $lim{$cmd}{max}||$valu < $lim{$cmd}{min} );
|
$valu > $lim{$cmd}{max}||$valu < $lim{$cmd}{min} );
|
||||||
if ($cmd eq "virtHum") {$hash->{helper}{vd}{vinH} = $valu;}
|
CUL_HM_PushCmdStack($hash,'++A258'.$id.$dst
|
||||||
else {$hash->{helper}{vd}{vin} = $valu;}
|
."00".sprintf("%02X",($valu * 2.56)%256));
|
||||||
}
|
}
|
||||||
if ($cmd eq "valvePos"){
|
else{
|
||||||
my @pId = grep !/^$/,split(',',AttrVal($name,"peerIDs",""));
|
if ($valu eq "off"){
|
||||||
return "virtual TC support one VD only. Correct number of peers"
|
if ($cmd eq "virtHum") {$hash->{helper}{vd}{vinH} = "";}
|
||||||
if (scalar @pId != 1);
|
else {$hash->{helper}{vd}{vin} = "";}
|
||||||
my $ph = CUL_HM_id2Hash($pId[0]);
|
if ((!$hash->{helper}{vd}{vinH} || $hash->{helper}{vd}{vinH} eq "") &&
|
||||||
return "peerID $pId[0] is not assigned to a device " if (!$ph);
|
(!$hash->{helper}{vd}{vin} || $hash->{helper}{vd}{vin} eq "") ){
|
||||||
$hash->{helper}{vd}{typ} = 1; #valvePos
|
$state = "$cmd:stopped";
|
||||||
$hash->{helper}{vd}{id} = $modules{CUL_HM}{defptr}{$pId[0]}
|
RemoveInternalTimer("valvePos:$dst$chn");# remove responsePending timer
|
||||||
?$pId[0]
|
RemoveInternalTimer("valveTmr:$dst$chn");# remove responsePending timer
|
||||||
:substr($pId[0],0,6);
|
delete($hash->{helper}{virtTC});
|
||||||
$hash->{helper}{vd}{cmd} = "A258$dst".substr($pId[0],0,6);
|
}
|
||||||
CUL_HM_UpdtReadBulk($ph,1,
|
}
|
||||||
"state:set_$valu %",
|
if ($hash->{helper}{virtTC} || $valu ne "off") {
|
||||||
"ValveDesired:$valu %");
|
if ($valu ne "off"){
|
||||||
$hash->{helper}{vd}{val} = sprintf("%02X",($valu * 2.56)%256);
|
return "level between $lim{$cmd}{min} and $lim{$cmd}{max} or 'off' allowed"
|
||||||
$state = "ValveAdjust:$valu %";
|
if ($valu !~ m/^[+-]?\d+\.?\d+$/||
|
||||||
}
|
$valu > $lim{$cmd}{max}||$valu < $lim{$cmd}{min} );
|
||||||
else{#virtTemp || virtHum
|
if ($cmd eq "virtHum") {$hash->{helper}{vd}{vinH} = $valu;}
|
||||||
$hash->{helper}{vd}{typ} = 2; #virtTemp
|
else {$hash->{helper}{vd}{vin} = $valu;}
|
||||||
$hash->{helper}{vd}{cmd} = "8670$dst"."000000";
|
}
|
||||||
my $t = $hash->{helper}{vd}{vin}?$hash->{helper}{vd}{vin}:0;
|
if ($cmd eq "valvePos"){
|
||||||
$t *=10;
|
my @pId = grep !/^$/,split(',',AttrVal($name,"peerIDs",""));
|
||||||
$t -= 0x8000 if ($t < 0);
|
return "virtual TC support one VD only. Correct number of peers"
|
||||||
$hash->{helper}{vd}{val} = sprintf("%04X", $t & 0x7fff);
|
if (scalar @pId != 1);
|
||||||
$hash->{helper}{vd}{val} .= sprintf("%02X", $hash->{helper}{vd}{vinH})
|
my $ph = CUL_HM_id2Hash($pId[0]);
|
||||||
if ($hash->{helper}{vd}{vinH} && $hash->{helper}{vd}{vinH} ne "");
|
return "peerID $pId[0] is not assigned to a device " if (!$ph);
|
||||||
}
|
$hash->{helper}{vd}{typ} = 1; #valvePos
|
||||||
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
|
$hash->{helper}{vd}{id} = $modules{CUL_HM}{defptr}{$pId[0]}
|
||||||
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
|
?$pId[0]
|
||||||
$hash->{helper}{vd}{msgCnt} = ReadingsVal($name,".msgCnt",0)
|
:substr($pId[0],0,6);
|
||||||
if (!defined $hash->{helper}{vd}{msgCnt});
|
$hash->{helper}{vd}{cmd} = "A258$dst".substr($pId[0],0,6);
|
||||||
if (!$hash->{helper}{virtTC}){
|
CUL_HM_UpdtReadBulk($ph,1,
|
||||||
my $pn = CUL_HM_id2Name($hash->{helper}{vd}{id});
|
"state:set_$valu %",
|
||||||
$hash->{helper}{vd}{ackT} = ReadingsTimestamp($pn, "ValvePosition", "")
|
"ValveDesired:$valu %");
|
||||||
if (!defined $hash->{helper}{vd}{ackT});
|
$hash->{helper}{vd}{val} = sprintf("%02X",($valu * 2.56)%256);
|
||||||
$hash->{helper}{vd}{miss} = 0 if (!defined$hash->{helper}{vd}{miss});
|
$state = "ValveAdjust:$valu %";
|
||||||
$hash->{helper}{virtTC} = ($cmd eq "valvePos")?"03":"00";
|
}
|
||||||
CUL_HM_UpdtReadSingle($hash,"valveCtrl","init",1)if ($cmd eq "valvePos");
|
else{#virtTemp || virtHum
|
||||||
$hash->{helper}{vd}{next} = ReadingsVal($name,".next",gettimeofday())
|
$hash->{helper}{vd}{typ} = 2; #virtTemp
|
||||||
if (!defined $hash->{helper}{vd}{next});
|
$hash->{helper}{vd}{cmd} = "8670$dst"."000000";
|
||||||
CUL_HM_valvePosUpdt("valvePos:$dst$chn");
|
my $t = $hash->{helper}{vd}{vin}?$hash->{helper}{vd}{vin}:0;
|
||||||
}
|
$t *=10;
|
||||||
$hash->{helper}{virtTC} = ($cmd eq "valvePos")?"03":"00";
|
$t -= 0x8000 if ($t < 0);
|
||||||
|
$hash->{helper}{vd}{val} = sprintf("%04X", $t & 0x7fff);
|
||||||
|
$hash->{helper}{vd}{val} .= sprintf("%02X", $hash->{helper}{vd}{vinH})
|
||||||
|
if ($hash->{helper}{vd}{vinH} && $hash->{helper}{vd}{vinH} ne "");
|
||||||
|
}
|
||||||
|
$hash->{helper}{vd}{idh} = hex(substr($dst,2,2))*20077;
|
||||||
|
$hash->{helper}{vd}{idl} = hex(substr($dst,4,2))*256;
|
||||||
|
$hash->{helper}{vd}{msgCnt} = ReadingsVal($name,".msgCnt",0)
|
||||||
|
if (!defined $hash->{helper}{vd}{msgCnt});
|
||||||
|
if (!$hash->{helper}{virtTC}){
|
||||||
|
my $pn = CUL_HM_id2Name($hash->{helper}{vd}{id});
|
||||||
|
$hash->{helper}{vd}{ackT} = ReadingsTimestamp($pn, "ValvePosition", "")
|
||||||
|
if (!defined $hash->{helper}{vd}{ackT});
|
||||||
|
$hash->{helper}{vd}{miss} = 0 if (!defined$hash->{helper}{vd}{miss});
|
||||||
|
$hash->{helper}{virtTC} = ($cmd eq "valvePos")?"03":"00";
|
||||||
|
CUL_HM_UpdtReadSingle($hash,"valveCtrl","init",1)if ($cmd eq "valvePos");
|
||||||
|
$hash->{helper}{vd}{next} = ReadingsVal($name,".next",gettimeofday())
|
||||||
|
if (!defined $hash->{helper}{vd}{next});
|
||||||
|
CUL_HM_valvePosUpdt("valvePos:$dst$chn");
|
||||||
|
}
|
||||||
|
$hash->{helper}{virtTC} = ($cmd eq "valvePos")?"03":"00";
|
||||||
|
}
|
||||||
|
CUL_HM_UpdtReadSingle($hash,$lim{$cmd}{rd},$valu.$lim{$cmd}{u},1);
|
||||||
}
|
}
|
||||||
CUL_HM_UpdtReadSingle($hash,$lim{$cmd}{rd},$valu.$lim{$cmd}{u},1);
|
|
||||||
}
|
}
|
||||||
elsif($cmd eq "matic") { ####################################################
|
elsif($cmd eq "matic") { ####################################################
|
||||||
# Trigger pre-programmed action in the winmatic. These actions must be
|
# Trigger pre-programmed action in the winmatic. These actions must be
|
||||||
|
@ -229,7 +229,7 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
"00A5" => {name=>"HM-RC-Sec4-2" ,st=>'remote' ,cyc=>'' ,rxt=>'c:l' ,lst=>'1,4' ,chn=>"Btn:1:2,BTN_T:3:3,BTN_A:4:4",},#only 1 and 2 can be peered???
|
"00A5" => {name=>"HM-RC-Sec4-2" ,st=>'remote' ,cyc=>'' ,rxt=>'c:l' ,lst=>'1,4' ,chn=>"Btn:1:2,BTN_T:3:3,BTN_A:4:4",},#only 1 and 2 can be peered???
|
||||||
"00A6" => {name=>"HM-RC-Key4-2" ,st=>'remote' ,cyc=>'' ,rxt=>'c:l' ,lst=>'1,4' ,chn=>"Btn:1:2,BTN_T:3:3,BTN_A:4:4",},#only 1 and 2 can be peered???
|
"00A6" => {name=>"HM-RC-Key4-2" ,st=>'remote' ,cyc=>'' ,rxt=>'c:l' ,lst=>'1,4' ,chn=>"Btn:1:2,BTN_T:3:3,BTN_A:4:4",},#only 1 and 2 can be peered???
|
||||||
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'sensRain' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1p' ,chn=>"Rain:1:1,Heating:2:2",},#stc:70 THSensor
|
"00A7" => {name=>"HM-Sen-RD-O" ,st=>'sensRain' ,cyc=>'' ,rxt=>'' ,lst=>'1:1,4:1p' ,chn=>"Rain:1:1,Heating:2:2",},#stc:70 THSensor
|
||||||
"00A8" => {name=>"HM-WDS30-OT2-SM" ,st=>'THSensor' ,cyc=>'00:10' ,rxt=>'c:w:f' ,lst=>'p' ,chn=>"T1:1:1,T2:2:2,T1_T2:3:3,T2_T1:4:4,Event:5:5",},
|
"00A8" => {name=>"HM-WDS30-OT2-SM" ,st=>'THSensor' ,cyc=>'12:00' ,rxt=>'c:w:f' ,lst=>'p' ,chn=>"T1:1:1,T2:2:2,T1_T2:3:3,T2_T1:4:4,Event:5:5",},
|
||||||
"00A9" => {name=>"HM-PB-6-WM55" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:6",},
|
"00A9" => {name=>"HM-PB-6-WM55" ,st=>'remote' ,cyc=>'' ,rxt=>'c' ,lst=>'1,4' ,chn=>"Btn:1:6",},
|
||||||
"00AB" => {name=>"HM-LC-SW4-BA-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
"00AB" => {name=>"HM-LC-SW4-BA-PCB" ,st=>'switch' ,cyc=>'' ,rxt=>'b' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
"00AC" => {name=>"HM-ES-PMSw1-Pl" ,st=>'powerMeter' ,cyc=>'00:10' ,rxt=>'' ,lst=>'1:2.3.4.5.6,3:1p,4:3p.4p.5p.6p'
|
"00AC" => {name=>"HM-ES-PMSw1-Pl" ,st=>'powerMeter' ,cyc=>'00:10' ,rxt=>'' ,lst=>'1:2.3.4.5.6,3:1p,4:3p.4p.5p.6p'
|
||||||
@ -256,12 +256,25 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
"00C0" => {name=>"HM-SEC-MDIR-2" ,st=>'motionDetector' ,cyc=>'00:20' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"",},
|
"00C0" => {name=>"HM-SEC-MDIR-2" ,st=>'motionDetector' ,cyc=>'00:20' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"",},
|
||||||
"00C1" => {name=>"HM-Sen-MDIR-O-2" ,st=>'motionDetector' ,cyc=>'00:10' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"",},
|
"00C1" => {name=>"HM-Sen-MDIR-O-2" ,st=>'motionDetector' ,cyc=>'00:10' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"",},
|
||||||
"00C2" => {name=>"HM-PB-2-WM55-2" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
"00C2" => {name=>"HM-PB-2-WM55-2" ,st=>'pushButton' ,cyc=>'' ,rxt=>'c:w:l' ,lst=>'1,4' ,chn=>"Btn:1:2",},
|
||||||
|
"00C8" => {name=>"HM-LC-Sw1-Pl-3" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
|
"00C9" => {name=>"HM-LC-Sw1-SM-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
|
"00CA" => {name=>"HM-LC-Sw1-FM-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
||||||
|
"00CB" => {name=>"HM-LC-Sw2-FM-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
||||||
|
"00CC" => {name=>"HM-LC-Sw2-DR-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:2",},
|
||||||
|
"00CD" => {name=>"HM-LC-Sw4-SM-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
|
"00CE" => {name=>"HM-LC-Sw4-PCB-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
|
"00CF" => {name=>"HM-LC-Sw4-WM-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
|
"00D0" => {name=>"HM-LC-Sw4-DR-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
|
"00D1" => {name=>"HM-LC-Bl1-SM-2" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
||||||
|
"00D2" => {name=>"HM-LC-Bl1-FM-2" ,st=>'blindActuator' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",}, # radio-controlled blind actuator 1-channel (flush-mount)
|
||||||
"8001" => {name=>"PS-switch" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
"8001" => {name=>"PS-switch" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
||||||
"8002" => {name=>"PS-Th-Sens" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"Sen:1:4",},
|
"8002" => {name=>"PS-Th-Sens" ,st=>'THSensor' ,cyc=>'' ,rxt=>'' ,lst=>'1,4' ,chn=>"Sen:1:4",},
|
||||||
|
|
||||||
# "xxxx" => {name=>"HM-LC-SW4-DR-2" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"Sw:1:4",},
|
# "HM-LGW-O-TW-W-EU" #Funk LAN Gateway
|
||||||
# "xxxx" => {name=>"HM-LC-Sw1-Pl-3" ,st=>'switch' ,cyc=>'' ,rxt=>'' ,lst=>'1,3' ,chn=>"",},
|
#################open:---------------------------
|
||||||
# "HM-LGW-O-TW-W-EU" #Funk LAN Gateway
|
|
||||||
|
# rf_s list 1 ist neu
|
||||||
|
# rf_s_644 list 1 ist neu
|
||||||
);
|
);
|
||||||
|
|
||||||
##----------definitions for register settings-----------------
|
##----------definitions for register settings-----------------
|
||||||
@ -687,6 +700,8 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
blindActuator =>{ intKeyVisib =>1
|
blindActuator =>{ intKeyVisib =>1
|
||||||
,driveUp =>1,driveDown =>1,driveTurn =>1,refRunCounter =>1
|
,driveUp =>1,driveDown =>1,driveTurn =>1,refRunCounter =>1
|
||||||
,sign =>1
|
,sign =>1
|
||||||
|
,confBtnTime =>1,localResDis =>1
|
||||||
|
,transmitTryMax =>1,statusInfoMinDly=>1,statusInfoRandom=>1
|
||||||
,MaxTimeF =>1
|
,MaxTimeF =>1
|
||||||
,OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1
|
,OnDly =>1,OnTime =>1,OffDly =>1,OffTime =>1
|
||||||
,OffLevel =>1,OnLevel =>1
|
,OffLevel =>1,OnLevel =>1
|
||||||
@ -715,6 +730,8 @@ my $K_actDetID = '000000'; # id of actionDetector
|
|||||||
,lgMultiExec =>1
|
,lgMultiExec =>1
|
||||||
},
|
},
|
||||||
switch =>{ intKeyVisib =>1,sign =>1
|
switch =>{ intKeyVisib =>1,sign =>1
|
||||||
|
,confBtnTime =>1,localResDis =>1
|
||||||
|
,transmitTryMax =>1,powerUpAction =>1,statusInfoMinDly=>1,statusInfoRandom=>1
|
||||||
,OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1
|
,OnTime =>1,OffTime =>1,OnDly =>1,OffDly =>1
|
||||||
,SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1
|
,SwJtOn =>1,SwJtOff =>1,SwJtDlyOn =>1,SwJtDlyOff =>1
|
||||||
,CtValLo =>1,CtValHi =>1
|
,CtValLo =>1,CtValHi =>1
|
||||||
@ -1161,7 +1178,7 @@ $culHmSubTypeSets{powerMeter} = $culHmSubTypeSets{outputUnit};
|
|||||||
$culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor};
|
$culHmSubTypeSets{motionDetector} = $culHmSubTypeSets{threeStateSensor};
|
||||||
|
|
||||||
%culHmModelSets = (# channels of this subtype-------------
|
%culHmModelSets = (# channels of this subtype-------------
|
||||||
# "HM-CC-VD" =>{ valvePos => "position"},
|
"HM-CC-VD" =>{ valvePos =>"[off|0.0..99.0]"},
|
||||||
"HM-RC-19" =>{ service => "<count>"
|
"HM-RC-19" =>{ service => "<count>"
|
||||||
,alarm => "<count>"
|
,alarm => "<count>"
|
||||||
,display => "<text> [comma|no] [unit] [off|1|2|3] [off|on|slow|fast] <symbol>"},
|
,display => "<text> [comma|no] [unit] [off|1|2|3] [off|on|slow|fast] <symbol>"},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user