mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-09 20:57:11 +00:00
HMCCU: Fixed delayed init and readingname bugs
git-svn-id: https://svn.fhem.de/fhem/trunk@25258 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
504702cbdd
commit
5a9885896c
@ -1,5 +1,6 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- bugfix: 88_HMCCU: Fixed delayed init and readingname bugs
|
||||
- feature: 93_DbRep: new attr numDecimalPlaces,
|
||||
Forum:#/topic,53584.msg1178063.html#msg1178063
|
||||
- change: 98_WeekdayTimer: CONDITION now is checked at each switching time
|
||||
|
@ -57,7 +57,7 @@ my %HMCCU_CUST_CHN_DEFAULTS;
|
||||
my %HMCCU_CUST_DEV_DEFAULTS;
|
||||
|
||||
# HMCCU version
|
||||
my $HMCCU_VERSION = '5.0 213201747';
|
||||
my $HMCCU_VERSION = '5.0 213281908';
|
||||
|
||||
# Timeout for CCU requests (seconds)
|
||||
my $HMCCU_TIMEOUT_REQUEST = 4;
|
||||
@ -389,7 +389,7 @@ sub HMCCU_Initialize ($)
|
||||
' ccudef-stripnumber ccudef-attributes ccuReadingPrefix'.
|
||||
' ccuflags:multiple-strict,procrpc,dptnocheck,logCommand,noagg,nohmstate,updGroupMembers,'.
|
||||
'logEvents,noEvents,noInitialUpdate,noReadings,nonBlocking,reconnect,logPong,trace,logEnhanced'.
|
||||
' ccuReqTimeout ccuGetVars rpcPingCCU'.
|
||||
' ccuReqTimeout ccuGetVars rpcPingCCU rpcinterfaces'.
|
||||
' rpcserver:on,off rpcserveraddr rpcserverport rpctimeout rpcevtimeout substitute'.
|
||||
' ccuget:Value,State '.
|
||||
$readingFnAttributes;
|
||||
@ -479,7 +479,7 @@ sub HMCCU_Define ($$$)
|
||||
$hash->{config} = $HMCCU_CONFIG_VERSION;
|
||||
$hash->{ccutype} = 'CCU2/3';
|
||||
$hash->{RPCState} = 'inactive';
|
||||
$hash->{NOTIFYDEV} = 'global,TYPE=HMCCU';
|
||||
$hash->{NOTIFYDEV} = 'global';
|
||||
$hash->{hmccu}{rpcports} = undef;
|
||||
|
||||
HMCCU_Log ($hash, 1, "Initialized version $HMCCU_VERSION");
|
||||
@ -494,8 +494,8 @@ sub HMCCU_Define ($$$)
|
||||
if (($hash->{ccustate} ne 'active' || $rc > 0) && !$init_done) {
|
||||
# Schedule later update of CCU assets if CCU is not active during FHEM startup
|
||||
$hash->{hmccu}{ccu}{delayed} = 1;
|
||||
HMCCU_Log ($hash, 1, 'Scheduling delayed initialization in '.$hash->{hmccu}{ccu}{delay}.' seconds');
|
||||
InternalTimer (gettimeofday()+$hash->{hmccu}{ccu}{delay}, "HMCCU_InitDevice", $hash);
|
||||
# HMCCU_Log ($hash, 1, 'Scheduling delayed initialization in '.$hash->{hmccu}{ccu}{delay}.' seconds');
|
||||
# InternalTimer (gettimeofday()+$hash->{hmccu}{ccu}{delay}, "HMCCU_InitDevice", $hash);
|
||||
}
|
||||
|
||||
$hash->{hmccu}{$_} = 0 for ('evtime', 'evtimeout', 'updatetime', 'rpccount', 'defaults');
|
||||
@ -525,17 +525,23 @@ sub HMCCU_InitDevice ($)
|
||||
my $name = $hash->{NAME};
|
||||
my $host = $hash->{host};
|
||||
|
||||
if ($hash->{hmccu}{ccu}{delayed} == 1) {
|
||||
HMCCU_Log ($hash, 1, 'Initializing devices');
|
||||
if (HMCCU_IsDelayedInit ($hash)) {
|
||||
HMCCU_Log ($hash, 1, 'Delayed I/O device initialization');
|
||||
if (!HMCCU_TCPPing ($host, $HMCCU_REGA_PORT{$hash->{prot}}, $hash->{hmccu}{ccu}{timeout})) {
|
||||
$hash->{ccustate} = 'unreachable';
|
||||
return HMCCU_Log ($hash, 1, "CCU port ".$HMCCU_REGA_PORT{$hash->{prot}}." is not reachable", 1);
|
||||
}
|
||||
else {
|
||||
$hash->{ccustate} = 'active';
|
||||
}
|
||||
}
|
||||
|
||||
my ($devcnt, $chncnt, $ifcount, $prgcount, $gcount) = HMCCU_GetDeviceList ($hash);
|
||||
if ($ifcount > 0) {
|
||||
setDevAttrList ($name, $modules{HMCCU}{AttrList}.' rpcinterfaces:multiple-strict,'.$hash->{ccuinterfaces});
|
||||
my $rpcinterfaces = 'rpcinterfaces:multiple-strict,'.$hash->{ccuinterfaces};
|
||||
my $attributes = $modules{HMCCU}{AttrList};
|
||||
$attributes =~ s/rpcinterfaces/$rpcinterfaces/;
|
||||
setDevAttrList ($name, $attributes);
|
||||
|
||||
HMCCU_Log ($hash, 1, [
|
||||
"Read $devcnt devices with $chncnt channels from CCU $host",
|
||||
@ -543,8 +549,8 @@ sub HMCCU_InitDevice ($)
|
||||
"Read $gcount virtual groups from CCU $host"
|
||||
]);
|
||||
|
||||
# Interactive device definition
|
||||
if ($init_done && $hash->{hmccu}{ccu}{delayed} == 0) {
|
||||
# Interactive device definition or delayed initialization
|
||||
if ($init_done && !HMCCU_IsDelayedInit ($hash)) {
|
||||
# Force sync with CCU during interactive device definition
|
||||
if ($hash->{hmccu}{ccu}{sync} == 1) {
|
||||
HMCCU_LogDisplay ($hash, 1, 'Reading device config from CCU. This may take a couple of seconds ...');
|
||||
@ -552,6 +558,8 @@ sub HMCCU_InitDevice ($)
|
||||
HMCCU_Log ($hash, 2, "Read RPC device configuration: devices/channels=$cDev parametersets=$cPar links=$cLnk");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return HMCCU_Log ($hash, 1, "No RPC interfaces found on CCU $host", 2);
|
||||
@ -572,13 +580,15 @@ sub HMCCU_PostInit ($)
|
||||
|
||||
my $host = $hash->{host};
|
||||
|
||||
if (HMCCU_IsDelayedInit ($hash)) {
|
||||
return if (HMCCU_InitDevice ($hash) > 0);
|
||||
}
|
||||
|
||||
if ($hash->{ccustate} eq 'active') {
|
||||
my $rpcServer = AttrVal ($hash->{NAME}, 'rpcserver', 'off');
|
||||
|
||||
HMCCU_Log ($hash, 1, 'Reading device config from CCU. This may take a couple of seconds ...');
|
||||
$hash->{postInit} = 1;
|
||||
my ($cDev, $cPar, $cLnk) = HMCCU_GetDeviceConfig ($hash);
|
||||
$hash->{postInit} = 0;
|
||||
HMCCU_Log ($hash, 2, "Read device configuration: devices/channels=$cDev parametersets=$cPar links=$cLnk");
|
||||
|
||||
HMCCU_StartExtRPCServer ($hash) if ($rpcServer eq 'on');
|
||||
@ -588,6 +598,18 @@ sub HMCCU_PostInit ($)
|
||||
}
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# Check for delayed initialization
|
||||
######################################################################
|
||||
|
||||
sub HMCCU_IsDelayedInit ($)
|
||||
{
|
||||
my ($ioHash) = @_;
|
||||
|
||||
return exists($ioHash->{hmccu}{ccu}{delayed}) && exists($ioHash->{hmccu}{ccu}{delay}) &&
|
||||
$ioHash->{hmccu}{ccu}{delayed} == 1 && $ioHash->{hmccu}{ccu}{delay} > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# Set or delete attribute
|
||||
######################################################################
|
||||
@ -1036,7 +1058,7 @@ sub HMCCU_Notify ($$)
|
||||
my $devname = $devhash->{NAME};
|
||||
my $devtype = $devhash->{TYPE};
|
||||
|
||||
return if (!HMCCU_IsDeviceActive ($hash));
|
||||
# return if (!HMCCU_IsDeviceActive ($hash));
|
||||
|
||||
my $events = deviceEvents ($devhash, 1);
|
||||
return if (!$events);
|
||||
@ -1047,7 +1069,7 @@ sub HMCCU_Notify ($$)
|
||||
# Global event
|
||||
if ($event eq 'INITIALIZED') {
|
||||
# FHEM initialized. Schedule post initialization tasks
|
||||
my $delay = $hash->{ccustate} eq 'active' && $hash->{hmccu}{ccu}{delayed} == 0 ?
|
||||
my $delay = $hash->{ccustate} eq 'active' && !HMCCU_IsDelayedInit ($hash) ?
|
||||
$HMCCU_INIT_INTERVAL0 : $hash->{hmccu}{ccu}{delay}+$HMCCU_CCU_RPC_OFFSET;
|
||||
HMCCU_Log ($hash, 0, "Scheduling post FHEM initialization tasks in $delay seconds");
|
||||
InternalTimer (gettimeofday()+$delay, "HMCCU_PostInit", $hash, 0);
|
||||
@ -1370,8 +1392,7 @@ sub HMCCU_Set ($@)
|
||||
}
|
||||
my $host = $hash->{host};
|
||||
|
||||
$options = 'initialize:noArg' if (exists($hash->{hmccu}{ccu}{delayed}) &&
|
||||
$hash->{hmccu}{ccu}{delayed} == 1 && $hash->{ccustate} eq 'unreachable');
|
||||
$options = 'initialize:noArg' if (HMCCU_IsDelayedInit ($hash) && $hash->{ccustate} eq 'unreachable');
|
||||
return 'HMCCU: CCU busy, choose one of rpcserver:off'
|
||||
if ($opt ne 'rpcserver' && HMCCU_IsRPCStateBlocking ($hash));
|
||||
|
||||
@ -1722,7 +1743,7 @@ sub HMCCU_Get ($@)
|
||||
}
|
||||
my $usage = "HMCCU: Unknown argument $opt, choose one of $options";
|
||||
|
||||
return undef if ($hash->{hmccu}{ccu}{delayed} || $hash->{ccustate} ne 'active');
|
||||
return undef if (HMCCU_IsDelayedInit ($hash) || $hash->{ccustate} ne 'active');
|
||||
return 'HMCCU: CCU busy, choose one of rpcstate:noArg'
|
||||
if ($opt ne 'rpcstate' && HMCCU_IsRPCStateBlocking ($hash));
|
||||
|
||||
@ -2347,11 +2368,16 @@ sub HMCCU_GetReadingName ($$$$$$$;$)
|
||||
if ((exists($hash->{hmccu}{control}{chn}) && "$c" eq $hash->{hmccu}{control}{chn}) ||
|
||||
(exists($hash->{hmccu}{state}{chn}) && "$c" eq $hash->{hmccu}{state}{chn})) {
|
||||
my $role = HMCCU_GetChannelRole ($hash, $c);
|
||||
HMCCU_Trace ($hash, 2, "role=$role");
|
||||
if ($role ne '' && exists($HMCCU_READINGS->{$role})) {
|
||||
$crn = $HMCCU_READINGS->{$role};
|
||||
$crn =~ s/C#\./$c\./g;
|
||||
$crn =~ s/C#\\/$c\\/g;
|
||||
HMCCU_Trace ($hash, 2, "crn=$crn");
|
||||
push @srl, $crn;
|
||||
}
|
||||
else {
|
||||
HMCCU_Trace ($hash, 2, "No rule for role $role");
|
||||
}
|
||||
}
|
||||
my $sr = join (';', @srl);
|
||||
|
||||
@ -2417,6 +2443,7 @@ sub HMCCU_GetReadingName ($$$$$$$;$)
|
||||
my @rnewList = split (',', $rnew);
|
||||
next if (scalar (@rnewList) < 1);
|
||||
if ($rnlist[0] =~ /$rold/) {
|
||||
HMCCU_Trace ($hash, 2, "Match $rnlist[0] : $rold");
|
||||
foreach my $rnew (@rnewList) {
|
||||
if ($rnew =~ /^\+(.+)$/) {
|
||||
my $radd = $1;
|
||||
@ -2429,6 +2456,9 @@ sub HMCCU_GetReadingName ($$$$$$$;$)
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
HMCCU_Trace ($hash, 2, "No match $rnlist[0] : $rold");
|
||||
}
|
||||
}
|
||||
|
||||
# Convert to lower or upper case
|
||||
@ -3140,7 +3170,7 @@ sub HMCCU_UpdateDeviceTable ($$)
|
||||
}
|
||||
|
||||
# Delayed initialization if CCU was not ready during FHEM start
|
||||
if ($hash->{hmccu}{ccu}{delayed} == 1) {
|
||||
if (HMCCU_IsDelayedInit ($hash)) {
|
||||
# Initialize pending client devices
|
||||
my @cdev = HMCCU_FindClientDevices ($hash, '(HMCCUDEV|HMCCUCHN|HMCCURPCPROC)', undef, 'ccudevstate=pending');
|
||||
if (scalar(@cdev) > 0) {
|
||||
@ -3395,6 +3425,7 @@ sub HMCCU_CreateDevice ($@)
|
||||
$defOpts //= '';
|
||||
my $cmd = "$devName $defMod $defAdd";
|
||||
$cmd .= " $defOpts" if ($defOpts ne '');
|
||||
$cmd .= " iodev=$hash->{NAME}" if ($defAdd =~ /^INT[0-9]+$/);
|
||||
my $ret = CommandDefine (undef, $cmd);
|
||||
if ($ret) {
|
||||
HMCCU_Log ($hash, 2, "Define command failed $cmd. $ret");
|
||||
@ -4368,6 +4399,8 @@ sub HMCCU_IsValidParameter ($$$$;$)
|
||||
|
||||
$oper //= 7;
|
||||
my $ioHash = HMCCU_GetHash ($clHash) // return 0;
|
||||
|
||||
return 0 if (!defined($parameter) || $parameter eq '');
|
||||
|
||||
my $devDesc = ref($object) eq 'HASH' ? $object : HMCCU_GetDeviceDesc ($ioHash, $object);
|
||||
|
||||
@ -4676,7 +4709,7 @@ sub HMCCU_UpdateParamsetReadings ($$$;$)
|
||||
my @rnList = HMCCU_GetReadingName ($clHash, $clInt, $a, $c, $p, '', $clRF, $ps);
|
||||
my $hide = HMCCU_FilterReading ($clHash, $chnAddr, $p, $ps) ? 0 : 1;
|
||||
foreach my $rn (@rnList) {
|
||||
HMCCU_Trace ($clHash, 2, "rn=$rn, hide=$hide, fv=$fv, cv=$cv");
|
||||
HMCCU_Trace ($clHash, 2, "p=$p rn=$rn, hide=$hide, fv=$fv, cv=$cv");
|
||||
HMCCU_BulkUpdate ($clHash, $rn, $fv, $cv, $hide);
|
||||
}
|
||||
}
|
||||
@ -5524,7 +5557,7 @@ sub HMCCU_GetDeviceList ($)
|
||||
$hash->{ccustate} = 'active';
|
||||
|
||||
# Delete old entries
|
||||
HMCCU_Log ($hash, 2, "Deleting old groups");
|
||||
HMCCU_Log ($hash, 2, "Deleting old CCU configuration data");
|
||||
%{$hash->{hmccu}{dev}} = ();
|
||||
%{$hash->{hmccu}{adr}} = ();
|
||||
%{$hash->{hmccu}{interfaces}} = ();
|
||||
@ -8480,7 +8513,7 @@ sub HMCCU_DetectDevice ($$$)
|
||||
# state/control channel is the first channel with a state/control datapoint
|
||||
my $i = 0;
|
||||
foreach my $pr (@patternRoles) {
|
||||
if ($HMCCU_STATECONTROL->{$pr}{S} ne '') {
|
||||
if (HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $HMCCU_STATECONTROL->{$pr}{S}, 5)) {
|
||||
$di{rolePattern}{$firstChannel}{stateRole} = $pr;
|
||||
$di{rolePattern}{$firstChannel}{stateChannel} = $firstChannel+$i;
|
||||
$di{rolePattern}{$firstChannel}{stateDatapoint} = $HMCCU_STATECONTROL->{$pr}{S};
|
||||
@ -8491,7 +8524,7 @@ sub HMCCU_DetectDevice ($$$)
|
||||
}
|
||||
$i = 0;
|
||||
foreach my $pr (@patternRoles) {
|
||||
if ($HMCCU_STATECONTROL->{$pr}{C} ne '') {
|
||||
if (HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $HMCCU_STATECONTROL->{$pr}{C}, 2)) {
|
||||
$di{rolePattern}{$firstChannel}{controlRole} = $pr;
|
||||
$di{rolePattern}{$firstChannel}{controlChannel} = $firstChannel+$i;
|
||||
$di{rolePattern}{$firstChannel}{controlDatapoint} = $HMCCU_STATECONTROL->{$pr}{C};
|
||||
@ -8508,25 +8541,15 @@ sub HMCCU_DetectDevice ($$$)
|
||||
}
|
||||
}
|
||||
|
||||
if ($di{defSCh} != -1) {
|
||||
if ($di{defSCh} != -1 && exists($di{stateRole}{$di{defSCh}})) {
|
||||
my $dpn = $di{stateRole}{$di{defSCh}}{datapoint} // '';
|
||||
my $dpr = $di{stateRole}{$di{defSCh}}{role} // '';
|
||||
if ($dpn eq '') {
|
||||
HMCCU_Log ($ioHash, 5, "State datapoint not defined for channel $di{defSCh}, role $dpr");
|
||||
}
|
||||
else {
|
||||
$di{defSDP} = $di{defSCh}.'.'.$dpn;
|
||||
}
|
||||
$di{defSDP} = $di{defSCh}.'.'.$dpn if ($dpn ne '');
|
||||
}
|
||||
if ($di{defCCh} != -1) {
|
||||
if ($di{defCCh} != -1 && exists($di{controlRole}{$di{defCCh}})) {
|
||||
my $dpn = $di{controlRole}{$di{defCCh}}{datapoint} // '';
|
||||
my $dpr = $di{controlRole}{$di{defCCh}}{role} // '';
|
||||
if ($dpn eq '') {
|
||||
HMCCU_Log ($ioHash, 2, "Control datapoint not defined for channel $di{defCCh}, role $dpr");
|
||||
}
|
||||
else {
|
||||
$di{defCDP} = $di{defCCh}.'.'.$dpn;
|
||||
}
|
||||
$di{defCDP} = $di{defCCh}.'.'.$dpn if ($dpn ne '');
|
||||
}
|
||||
|
||||
return \%di;
|
||||
@ -8546,15 +8569,15 @@ sub HMCCU_IdentifyRole ($$$$$)
|
||||
my ($a, $c) = HMCCU_SplitChnAddr ($devDesc->{ADDRESS});
|
||||
my $p = $HMCCU_STATECONTROL->{$t}{P};
|
||||
|
||||
# State datapoint must be readable and/or event
|
||||
# State datapoint must be of type readable and/or event
|
||||
my $sDP = HMCCU_DetectSCDatapoint ($HMCCU_STATECONTROL->{$t}{S}, $iface);
|
||||
push @$stateRoles, { 'channel' => $c, 'role' => $t, 'datapoint' => $sDP, 'priority' => $p }
|
||||
if ($sDP ne '' && HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $sDP, 5));
|
||||
if (HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $sDP, 5));
|
||||
|
||||
# Control datapoint must be writeable
|
||||
my $cDP = HMCCU_DetectSCDatapoint ($HMCCU_STATECONTROL->{$t}{C}, $iface);
|
||||
push @$controlRoles, { 'channel' => $c, 'role' => $t, 'datapoint' => $cDP, 'priority' => $p }
|
||||
if ($cDP ne ''&& HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $cDP, 2));
|
||||
if (HMCCU_IsValidParameter ($ioHash, $devDesc, 'VALUES', $cDP, 2));
|
||||
}
|
||||
}
|
||||
|
||||
@ -10487,7 +10510,7 @@ sub HMCCU_MaxHashEntries ($$)
|
||||
<a name="HMCCU"></a>
|
||||
<h3>HMCCU</h3>
|
||||
<ul>
|
||||
The module provides an interface between FHEM and a Homematic CCU2. HMCCU is the
|
||||
The module provides an interface between FHEM and a Homematic CCU. HMCCU is the
|
||||
I/O device for the client devices HMCCUDEV and HMCCUCHN. The module requires the
|
||||
additional Perl modules IO::File, RPC::XML::Client, RPC::XML::Server.
|
||||
</br></br>
|
||||
@ -10524,8 +10547,10 @@ sub HMCCU_MaxHashEntries ($$)
|
||||
<li>Start RPC servers with command 'set rpcserver on'</li>
|
||||
<li>Optionally enable automatic start of RPC servers with attribute 'rpcserver'</li>
|
||||
</ul><br/>
|
||||
Then start with the definition of client devices using modules HMCCUDEV (CCU devices)
|
||||
and HMCCUCHN (CCU channels) or with command 'get create'.<br/>
|
||||
When RPC servers are started for the first time, HMCCU will create a HMCCURPCPROC device for
|
||||
each interface defined in attribut 'rpcinterfaces'.<br/>
|
||||
After I/O device has been defined, start with the definition of client devices using modules HMCCUDEV (CCU devices)
|
||||
and HMCCUCHN (CCU channels) or with commands 'get createDev' or 'get create'.<br/>
|
||||
</ul>
|
||||
<br/>
|
||||
|
||||
|
@ -30,7 +30,7 @@ sub HMCCUCHN_Set ($@);
|
||||
sub HMCCUCHN_Get ($@);
|
||||
sub HMCCUCHN_Attr ($@);
|
||||
|
||||
my $HMCCUCHN_VERSION = '5.0 213261849';
|
||||
my $HMCCUCHN_VERSION = '5.0 213281908';
|
||||
|
||||
######################################################################
|
||||
# Initialize module
|
||||
|
@ -31,7 +31,7 @@ sub HMCCUDEV_Set ($@);
|
||||
sub HMCCUDEV_Get ($@);
|
||||
sub HMCCUDEV_Attr ($@);
|
||||
|
||||
my $HMCCUDEV_VERSION = '5.0 213201747';
|
||||
my $HMCCUDEV_VERSION = '5.0 213281908';
|
||||
|
||||
######################################################################
|
||||
# Initialize module
|
||||
@ -208,7 +208,7 @@ sub HMCCUDEV_InitDevice ($$)
|
||||
|
||||
my $rc = 0;
|
||||
|
||||
if ($init_done) {
|
||||
if ($init_done && !HMCCU_IsDelayedInit ($ioHash)) {
|
||||
my $detect = HMCCU_DetectDevice ($ioHash, $da, $di);
|
||||
return "Specify option 'forceDev' for HMCCUDEV or use HMCCUCHN instead (recommended). Command: define $name HMCCUCHN $detect->{defAdd}"
|
||||
if (defined($detect) && $detect->{defMod} eq 'HMCCUCHN' && $devHash->{hmccu}{forcedev} == 0);
|
||||
|
@ -39,7 +39,7 @@ require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
||||
######################################################################
|
||||
|
||||
# HMCCURPC version
|
||||
my $HMCCURPCPROC_VERSION = '5.0 213201747';
|
||||
my $HMCCURPCPROC_VERSION = '5.0 213281908';
|
||||
|
||||
# Maximum number of events processed per call of Read()
|
||||
my $HMCCURPCPROC_MAX_EVENTS = 100;
|
||||
|
@ -76,6 +76,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'CLIMATE_TRANSCEIVER' => {
|
||||
F => 3, S => 'ACTUAL_TEMPERATURE', C => '', V => '', P => 1
|
||||
},
|
||||
'CLIMATECONTROL_FLOOR_TRANSCEIVER' => {
|
||||
F => 3, S => 'LEVEL', C => '', V => '', P => 1
|
||||
},
|
||||
'CLIMATECONTROL_REGULATOR' => {
|
||||
F => 3, S => 'LEVEL', C => 'SETPOINT', V => 'on:30.5,off:4.5', P => 2
|
||||
},
|
||||
@ -106,12 +109,18 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'HEATING_CLIMATECONTROL_TRANSCEIVER' => {
|
||||
F => 3, S => 'ACTUAL_TEMPERATURE', C => 'SET_POINT_TEMPERATURE', V => 'on:30.5,off:4.5', P => 2
|
||||
},
|
||||
'JALOUSIE' => {
|
||||
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'open:100,close:0', P => 2
|
||||
},
|
||||
'KEY' => {
|
||||
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
|
||||
},
|
||||
'KEY_TRANSCEIVER' => {
|
||||
F => 3, S => 'PRESS_SHORT', C => '', V => '', P => 1
|
||||
},
|
||||
'KEYMATIC' => {
|
||||
F => 3, S => 'STATE', C => 'STATE', V => 'locked:false,unlocked:true', P => 2
|
||||
},
|
||||
'LUXMETER' => {
|
||||
F => 3, S => 'LUX', C => '', V => '', P => 2
|
||||
},
|
||||
@ -130,6 +139,12 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'POWERMETER' => {
|
||||
F => 3, S => 'CURRENT', C => '', V => '', P => 1
|
||||
},
|
||||
'POWERMETER_IEC1' => {
|
||||
F => 3, S => 'ENERGY_COUNTER', C => '', V => '', P => 1
|
||||
},
|
||||
'POWERMETER_IEC2' => {
|
||||
F => 3, S => 'IEC_ENERGY_COUNTER', C => '', V => '', P => 1
|
||||
},
|
||||
'PRESENCEDETECTOR_TRANSCEIVER' => {
|
||||
F => 3, S => 'PRESENCE_DETECTION_STATE', C => 'PRESENCE_DETECTION_ACTIVE', V => 'active:1,inactive:0', P => 2
|
||||
},
|
||||
@ -148,9 +163,6 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'SMOKE_DETECTOR' => {
|
||||
F => 3, S => 'BidCos-RF:STATE,SMOKE_DETECTOR_ALARM_STATUS', C => 'HmIP-RF:SMOKE_DETECTOR_COMMAND', V => '', P => 2
|
||||
},
|
||||
'VIRTUAL_KEY' => {
|
||||
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
|
||||
},
|
||||
'SHUTTER_TRANSMITTER' => {
|
||||
F => 3, S => 'LEVEL', C => '', V => '', P => 1
|
||||
},
|
||||
@ -169,6 +181,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'THERMALCONTROL_TRANSMIT' => {
|
||||
F => 3, S => 'ACTUAL_TEMPERATURE', C => 'SET_TEMPERATURE', V => 'on:30.5,off:4.5', P => 2
|
||||
},
|
||||
'VIRTUAL_KEY' => {
|
||||
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
|
||||
},
|
||||
'WATER_DETECTION_TRANSMITTER' => {
|
||||
F => 3, S => 'ALARMSTATE', C => '', V => '', P => 1
|
||||
},
|
||||
@ -189,31 +204,33 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
|
||||
%HMCCU_READINGS = (
|
||||
'BLIND' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'BLIND_TRANSMITTER' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'BLIND_VIRTUAL_RECEIVER' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'SHUTTER_TRANSMITTER' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'SHUTTER_VIRTUAL_RECEIVER' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'DIMMER' =>
|
||||
'(C#\.)?LEVEL$:+pct',
|
||||
'^(C#\.)?LEVEL$:+pct',
|
||||
'DIMMER_TRANSMITTER' =>
|
||||
'(C#\.)?LEVEL$:+pct;(C#\.)?COLOR$:+color',
|
||||
'^(C#\.)?LEVEL$:+pct;(C#\.)?COLOR$:+color',
|
||||
'DIMMER_VIRTUAL_RECEIVER' =>
|
||||
'(C#\.)?LEVEL$:+pct;(C#\.)?COLOR$:+color',
|
||||
'^(C#\.)?LEVEL$:+pct;(C#\.)?COLOR$:+color',
|
||||
'DIMMER_WEEK_PROFILE' =>
|
||||
'(C#\.)?WEEK_PROGRAM_CHANNEL_LOCKS$:+progMode',
|
||||
'^(C#\.)?WEEK_PROGRAM_CHANNEL_LOCKS$:+progMode',
|
||||
'JALOUSIE' =>
|
||||
'^(C#\.)?LEVEL$:+pct;(C#\.)?LEVEL_SLATS$:+pctSlats',
|
||||
'KEY' =>
|
||||
'(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'^(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'KEY_TRANSCEIVER' =>
|
||||
'(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'^(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'VIRTUAL_KEY' =>
|
||||
'(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'^(C#\.)?PRESS_(SHORT|LONG)$:+pressed',
|
||||
'ACCELERATION_TRANSCEIVER' =>
|
||||
'(C#\.)?MOTION:motion',
|
||||
'^(C#\.)?MOTION:motion',
|
||||
'MOTION_DETECTOR' =>
|
||||
'^(C#\.)?BRIGHTNESS$:brightness;(C#\.)?MOTION:motion',
|
||||
'MOTIONDETECTOR_TRANSCEIVER' =>
|
||||
@ -221,35 +238,35 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'PRESENCEDETECTOR_TRANSCEIVER' =>
|
||||
'^(C#\.)?ILLUMINATION$:brightness;(C#\.)?PRESENCE_DETECTION_STATE:presence;(C#\.)?PRESENCE_DETECTION_ACTIVE:detection',
|
||||
'WEATHER' =>
|
||||
'(C#\.)?TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?HUMIDITY$:+humidity',
|
||||
'^(C#\.)?TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?HUMIDITY$:+humidity',
|
||||
'WEATHER_TRANSMIT' =>
|
||||
'(C#\.)?TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?HUMIDITY$:+humidity',
|
||||
'^(C#\.)?TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?HUMIDITY$:+humidity',
|
||||
'CLIMATE_TRANSCEIVER' =>
|
||||
'(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?ACTUAL_HUMIDITY$:+humidity',
|
||||
'^(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?ACTUAL_HUMIDITY$:+humidity',
|
||||
'THERMALCONTROL_TRANSMIT' =>
|
||||
'(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'(C#\.)?SET_TEMPERATURE$:+desired-temp',
|
||||
'^(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'^(C#\.)?SET_TEMPERATURE$:+desired-temp',
|
||||
'CLIMATECONTROL_RT_TRANSCEIVER' =>
|
||||
'(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'(C#\.)?SET_TEMPERATURE$:+desired-temp',
|
||||
'^(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'^(C#\.)?SET_TEMPERATURE$:+desired-temp',
|
||||
'HEATING_CLIMATECONTROL_TRANSCEIVER' =>
|
||||
'(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'(C#\.)?HUMIDITY$:+humidity;'.
|
||||
'(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'(C#\.)?SET_POINT_TEMPERATURE$:+desired-temp',
|
||||
'^(C#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'.
|
||||
'^(C#\.)?HUMIDITY$:+humidity;'.
|
||||
'^(C#\.)?ACTUAL_HUMIDITY$:+humidity;'.
|
||||
'^(C#\.)?SET_POINT_TEMPERATURE$:+desired-temp',
|
||||
'CLIMATECONTROL_REGULATOR' =>
|
||||
'(C#\.)?SETPOINT$:+desired-temp',
|
||||
'^(C#\.)?SETPOINT$:+desired-temp',
|
||||
'DEFAULT' =>
|
||||
'([0-9]{1,2}\.)?LEVEL$:+pct;'.
|
||||
'([0-9]{1,2}\.)?SET_TEMPERATURE$:+desired-temp;'.
|
||||
'^([0-9]{1,2}\.)?LEVEL$:+pct;'.
|
||||
'^([0-9]{1,2}\.)?SET_TEMPERATURE$:+desired-temp;'.
|
||||
'^([0-9]{1,2}\.)?(ACTUAL_TEMPERATURE|TEMPERATURE)$:+measured-temp;'.
|
||||
'([0-9]{1,2}\.)?SET_POINT_TEMPERATURE$:+desired-temp;'.
|
||||
'([0-9]{1,2}\.)?ACTUAL_HUMIDITY$:+humidity'
|
||||
'^([0-9]{1,2}\.)?SET_POINT_TEMPERATURE$:+desired-temp;'.
|
||||
'^([0-9]{1,2}\.)?ACTUAL_HUMIDITY$:+humidity'
|
||||
);
|
||||
|
||||
######################################################################
|
||||
@ -316,11 +333,27 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'unlock' => 'V:LOCK_TARGET_LEVEL:1',
|
||||
'lock' => 'V:LOCK_TARGET_LEVEL:0'
|
||||
},
|
||||
'JALOUSIE' => {
|
||||
'pct' => 'V:LEVEL:?level',
|
||||
'open' => 'V:LEVEL:100',
|
||||
'close' => 'V:LEVEL:0',
|
||||
'up' => 'V:LEVEL:?delta=+20',
|
||||
'down' => 'V:LEVEL:?delta=-20',
|
||||
'stop' => 'V:STOP:1',
|
||||
'pctSlats' => 'V:LEVEL_SLATS:?level',
|
||||
'openSlats' => 'V:LEVEL_SLATS:100',
|
||||
'closeSlats' => 'V:LEVEL_SLATS:0',
|
||||
},
|
||||
'KEY' => {
|
||||
'on' => 'V:PRESS_SHORT:1',
|
||||
'off' => 'V:PRESS_SHORT:1',
|
||||
'press' => 'V:PRESS_SHORT:1'
|
||||
},
|
||||
'KEYMATIC' => {
|
||||
'open' => 'V:OPEN:true',
|
||||
'lock' => 'V:STATE:false',
|
||||
'unklock' => 'V:STATE:true'
|
||||
},
|
||||
'VIRTUAL_KEY' => {
|
||||
'on' => 'V:PRESS_SHORT:1',
|
||||
'off' => 'V:PRESS_SHORT:1',
|
||||
@ -464,6 +497,12 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'cmdIcon' => 'open:fts_door_open unlock:secur_open lock:secur_lock',
|
||||
'webCmd' => 'lock:unlock:open'
|
||||
},
|
||||
'JALOUSIE' => {
|
||||
'substexcl' => 'pct',
|
||||
'cmdIcon' => 'open:fts_shutter_up stop:fts_shutter_manual close:fts_shutter_down',
|
||||
'webCmd' => 'pct:open:close:stop',
|
||||
'widgetOverride' => 'pct:slider,0,10,100'
|
||||
},
|
||||
'KEY' => {
|
||||
'event-on-update-reading' => 'PRESS.*',
|
||||
'cmdIcon' => 'press:taster',
|
||||
@ -472,6 +511,10 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'KEY_TRANSCEIVER' => {
|
||||
'event-on-update-reading' => 'PRESS.*'
|
||||
},
|
||||
'KEYMATIC' => {
|
||||
'cmdIcon' => 'open:fts_door_right_open lock:secure_locked unlock:secur_open',
|
||||
'webCmd' => 'open:lock:unlock'
|
||||
},
|
||||
'MOTION_DETECTOR' => {
|
||||
'_none_' => ''
|
||||
},
|
||||
@ -537,6 +580,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'CLIMATECONTROL_VENT_DRIVE' => {
|
||||
'_none_' => ''
|
||||
},
|
||||
'CLIMATECONTROL_FLOOR_TRANSCEIVER' => {
|
||||
'_none_' => ''
|
||||
},
|
||||
'WATER_DETECTION_TRANSMITTER' => {
|
||||
'_none_' => ''
|
||||
}
|
||||
@ -577,6 +623,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'PRESS_SHORT' => { '1' => 'pressed', 'true' => 'pressed' },
|
||||
'PRESS_LONG' => { '1' => 'pressed', 'true' => 'pressed' }
|
||||
},
|
||||
'KEYMATIC' => {
|
||||
'STATE' => { '0' => 'locked', 'false' => 'locked', '1' => 'unlocked', 'true' => 'unlocked' }
|
||||
},
|
||||
'VIRTUAL_KEY' => {
|
||||
'PRESS_SHORT' => { '1' => 'pressed', 'true' => 'pressed' },
|
||||
'PRESS_LONG' => { '1' => 'pressed', 'true' => 'pressed' }
|
||||
@ -618,6 +667,12 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
||||
'DIRECTION' => { '0' => 'none', '1' => 'up', '2' => 'down' },
|
||||
'WORKING' => { '0' => 'no', 'false' => 'no', '1' => 'yes', 'true' => 'yes' }
|
||||
},
|
||||
'JALOUSIE' => {
|
||||
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' },
|
||||
'LEVEL_SLATS' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' },
|
||||
'DIRECTION' => { '0' => 'none', '1' => 'up', '2' => 'down' },
|
||||
'WORKING' => { '0' => 'no', 'false' => 'no', '1' => 'yes', 'true' => 'yes' }
|
||||
},
|
||||
'SHUTTER_TRANSMITTER' => {
|
||||
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' }
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user