2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

HMCCU: Features and bugfixes

git-svn-id: https://svn.fhem.de/fhem/trunk@28381 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
zap 2024-01-14 16:23:51 +00:00
parent 24b426313d
commit 1746efcd0d
5 changed files with 503 additions and 890 deletions

File diff suppressed because it is too large Load Diff

View File

@ -30,7 +30,7 @@ sub HMCCUCHN_Set ($@);
sub HMCCUCHN_Get ($@);
sub HMCCUCHN_Attr ($@);
my $HMCCUCHN_VERSION = '5.0 232691829';
my $HMCCUCHN_VERSION = '5.0 240121821';
######################################################################
# Initialize module
@ -57,7 +57,7 @@ sub HMCCUCHN_Initialize ($)
'ccureadingname:textField-long ccuSetOnChange ccuReadingPrefix '.
'ccuscaleval ccuverify:0,1,2 ccuget:State,Value devStateFlags '.
'disable:0,1 hmstatevals:textField-long statevals substitute:textField-long '.
'substexcl stripnumber peer:textField-long traceFilter '. $readingFnAttributes;
'substexcl stripnumber traceFilter '. $readingFnAttributes;
}
######################################################################
@ -279,6 +279,9 @@ sub HMCCUCHN_Attr ($@)
my @t = split(':', $attrval);
return "$clType [$name] Missing flag and or value expression in attribute $attrname" if (scalar(@t) != 3);
}
elsif ($attrname eq 'peer') {
return "$clType [$name] Attribute 'peer' is no longer supported. Please use DOIF or NOTIFY";
}
}
elsif ($cmd eq 'del') {
if ($attrname =~ /^(state|control)datapoint$/) {
@ -327,13 +330,13 @@ sub HMCCUCHN_Set ($@)
# Command readingFilter depends on readable datapoints
my ($add, $chn) = split(":", $hash->{ccuaddr});
my @dpRList = ();
my $dpRCount = HMCCU_GetValidDatapoints ($hash, $hash->{ccutype}, $chn, 5, \@dpRList);
my $dpRCount = HMCCU_GetValidParameters ($hash, $chn, 'VALUES', 5, \@dpRList);
$syntax .= ' readingFilter:multiple-strict,'.join(',', @dpRList) if ($dpRCount > 0);
# Commands only available in read/write mode
if ($hash->{readonly} ne 'yes') {
$syntax .= ' config';
my $dpWCount = HMCCU_GetValidDatapoints ($hash, $hash->{ccutype}, $chn, 2);
my $dpWCount = HMCCU_GetValidParameters ($hash, $chn, 'VALUES', 2);
$syntax .= ' datapoint' if ($dpWCount > 0);
my $addCmds = $hash->{hmccu}{cmdlist}{set} // '';
$syntax .= " $addCmds" if ($addCmds ne '');
@ -349,9 +352,9 @@ sub HMCCUCHN_Set ($@)
elsif ($lcopt eq 'datapoint') {
return HMCCU_ExecuteSetDatapointCommand ($hash, $a, $h);
}
elsif ($lcopt eq 'toggle') {
return HMCCU_ExecuteToggleCommand ($hash);
}
# elsif ($lcopt eq 'toggle') {
# return HMCCU_ExecuteToggleCommand ($hash);
# }
elsif (exists($hash->{hmccu}{roleCmds}{set}{$opt})) {
return HMCCU_ExecuteRoleCommand ($ioHash, $hash, 'set', $opt, $a, $h);
}
@ -384,6 +387,9 @@ sub HMCCUCHN_Set ($@)
HMCCU_RefreshReadings ($hash) if ($rc);
return HMCCU_SetError ($hash, $retMsg);
}
elsif ($lcopt eq 'echo') {
return HMCCU_RefToString ($h);
}
else {
return "Unknown argument $opt choose one of $syntax";
}
@ -420,7 +426,7 @@ sub HMCCUCHN_Get ($@)
# Command datapoint depends on readable datapoints
my ($add, $chn) = split(":", $hash->{ccuaddr});
my @dpRList;
my $dpRCount = HMCCU_GetValidDatapoints ($hash, $ccutype, $chn, 1, \@dpRList);
my $dpRCount = HMCCU_GetValidParameters ($hash, $chn, 'VALUES', 1, \@dpRList);
$syntax .= ' datapoint:'.join(",", @dpRList) if ($dpRCount > 0);
# Additional device specific commands
@ -432,13 +438,7 @@ sub HMCCUCHN_Get ($@)
if ($opt ne '?' && $ccuflags =~ /logCommand/ || HMCCU_IsFlag ($ioName, 'logCommand'));
if ($lcopt eq 'datapoint') {
my $objname = shift @$a // return HMCCU_SetError ($hash, "Usage: get $name datapoint {datapoint}");
return HMCCU_SetError ($hash, -8, $objname)
if (!HMCCU_IsValidParameter ($hash, $ccuaddr, 'VALUES', $objname, 1));
$objname = "$ccuif.$ccuaddr.$objname";
my ($rc, $result) = HMCCU_GetDatapoint ($hash, $objname, 0);
return $rc < 0 ? HMCCU_SetError ($hash, $rc, $result) : $result;
return HMCCU_ExecuteGetDatapointCommand ($hash, $a);
}
elsif ($lcopt eq 'deviceinfo') {
my $extended = shift @$a;
@ -563,12 +563,19 @@ sub HMCCUCHN_Get ($@)
Set value of control datapoint. This command is available only on command line
for compatibility reasons. It should not be used any more.
</li><br/>
<li><b>set &lt;name&gt; datapoint &lt;datapoint&gt; &lt;value&gt; | &lt;datapoint&gt=&lt;value&gt; [...]</b><br/>
<li><b>set &lt;name&gt; datapoint [&lt;no&gt;:][&lt;channel&gt;.]&lt;datapoint&gt; &lt;{value|'oldval'}&gt; | [&lt;no&gt;:][&lt;channel&gt;.]&lt;datapoint&gt=&lt;value&gt; [...]</b><br/>
Set datapoint values of a CCU channel. If value contains blank characters it must be
enclosed in double quotes. This command is only available, if channel contains a writeable datapoint.<br/><br/>
enclosed in double quotes. This command is only available, if channel contains a writeable datapoint.<br/>
By using parameter <i>no</i> one can specify the order in which datapoints are set (see 3rd example below).<br/>
When using syntax <i>datapoint</i>=<i>value</i> with multiple datapoints always specify a <i>no</i> to ensure
that datapoints are set in the desired order.<br/>
The special <i>value</i> 'oldval' will set the datapoint to its previous value. This can be used to realize a toggle function
for each datapoint. Note: the previous value of a datapoint is not available at the first 'set datapoint' command after
FHEM start.<br/><br/>
Examples:<br/>
<code>set temp_control datapoint SET_TEMPERATURE 21</code><br/>
<code>set temp_control datapoint AUTO_MODE 1 SET_TEMPERATURE=21</code>
<code>set temp_control datapoint AUTO_MODE 1 SET_TEMPERATURE=21</code><br/>
<code>set temp_control datapoint 2:AUTO_MODE=0 1:SET_TEMPERATURE=21</code>
</li><br/>
<li><b>set &lt;name&gt; defaults ['reset'|'forceReset'|'old'|'<u>update</u>']</b><br/>
Set default attributes for CCU device type. Default attributes are only available for
@ -742,9 +749,7 @@ sub HMCCUCHN_Get ($@)
<a name="calculate"></a>
<li><b>ccucalculate &lt;value-type&gt;:&lt;reading&gt;[:&lt;dp-list&gt;[;...]</b><br/>
Calculate special values like dewpoint based on datapoints specified in
<i>dp-list</i>. The result is stored in <i>reading</i>. For datapoints in <i>dp-list</i>
also variable notation is supported (for more information on variables see documentation of
attribute 'peer').<br/>
<i>dp-list</i>. The result is stored in <i>reading</i>.<br/>
The following <i>value-types</i> are supported:<br/>
dewpoint = calculate dewpoint, <i>dp-list</i> = &lt;temperature&gt;,&lt;humidity&gt;<br/>
abshumidity = calculate absolute humidity, <i>dp-list</i> = &lt;temperature&gt;,&lt;humidity&gt;<br/>
@ -928,39 +933,6 @@ sub HMCCUCHN_Get ($@)
Optionally the name of the HomeMatic state reading can be specified at the beginning of
the attribute in format =&lt;reading&gt;;. The default reading name is 'hmstate'.
</li><br/>
<a name="peer"></a>
<li><b>peer &lt;datapoints&gt;:&lt;condition&gt;:
{ccu:&lt;object&gt;=&lt;value&gt;|hmccu:&lt;object&gt;=&lt;value&gt;|
fhem:&lt;command&gt;}</b><br/>
Logically peer datapoints of a HMCCUCHN or HMCCUDEV device with another device or any
FHEM command.<br/>
Parameter <i>datapoints</i> is a comma separated list of datapoints in format
<i>channelno.datapoint</i> which can trigger the action.<br/>
Parameter <i>condition</i> is a valid Perl expression which can contain
<i>channelno.datapoint</i> names as variables. Variables must start with a '$' or a '%'.
If a variable is preceded by a '$' the variable is substituted by the converted datapoint
value (i.e. "on" instead of "true"). If variable is preceded by a '%' the raw value
(i.e. "true") is used. If '$' or '%' is doubled the previous values will be used.<br/>
If the result of this operation is true, the action specified after the second colon
is executed. Three types of actions are supported:<br/>
<b>hmccu</b>: Parameter <i>object</i> refers to a FHEM device/datapoint in format
&lt;device&gt;:&lt;channelno&gt;.&lt;datapoint&gt;<br/>
<b>ccu</b>: Parameter <i>object</i> refers to a CCU channel/datapoint in format
&lt;channel&gt;.&lt;datapoint&gt;. <i>channel</i> can be a channel name or address.<br/>
<b>fhem</b>: The specified <i>command</i> will be executed<br/>
If action contains the string $value it is substituted by the current value of the
datapoint which triggered the action. The attribute supports multiple peering rules
separated by semicolons and optionally by newline characters.<br/><br/>
Examples:<br/>
# Set FHEM device mydummy to value if formatted value of 1.STATE is 'on'<br/>
<code>attr mydev peer 1.STATE:'$1.STATE' eq 'on':fhem:set mydummy $value</code><br/>
# Set 2.LEVEL of device myBlind to 100 if raw value of 1.STATE is 1<br/>
<code>attr mydev peer 1.STATE:'%1.STATE' eq '1':hmccu:myBlind:2.LEVEL=100</code><br/>
# Set 1.STATE of device LEQ1234567 to true if 1.LEVEL < 100<br/>
<code>attr mydev peer 1.LEVEL:$1.LEVEL < 100:ccu:LEQ1234567:1.STATE=true</code><br/>
# Set 1.STATE of device LEQ1234567 to true if current level is different from old level<br/>
<code>attr mydev peer 1.LEVEL:$1.LEVEL != $$1.LEVEL:ccu:LEQ1234567:1.STATE=true</code><br/>
</li><br/>
<a name="statedatapoint"></a>
<li><b>statedatapoint &lt;datapoint&gt;</b><br/>
Set datapoint used for displaying device state. This attribute must be set, if

View File

@ -31,7 +31,7 @@ sub HMCCUDEV_Set ($@);
sub HMCCUDEV_Get ($@);
sub HMCCUDEV_Attr ($@);
my $HMCCUDEV_VERSION = '5.0 232691829';
my $HMCCUDEV_VERSION = '5.0 240121821';
######################################################################
# Initialize module
@ -58,7 +58,7 @@ sub HMCCUDEV_Initialize ($)
'ccureadingname:textField-long ccuSetOnChange ccuReadingPrefix devStateFlags '.
'ccuget:State,Value ccuscaleval ccuverify:0,1,2 disable:0,1 '.
'hmstatevals:textField-long statevals substexcl substitute:textField-long statechannel statedatapoint '.
'controlchannel controldatapoint stripnumber peer:textField-long traceFilter '.
'controlchannel controldatapoint stripnumber traceFilter '.
$readingFnAttributes;
}
@ -415,13 +415,13 @@ sub HMCCUDEV_Set ($@)
# Command readingFilter depends on readable datapoints
my @dpRList = ();
my $dpRCount = HMCCU_GetValidDatapoints ($hash, $hash->{ccutype}, -1, 5, \@dpRList);
my $dpRCount = HMCCU_GetValidParameters ($hash, undef, 'VALUES', 5, \@dpRList);
$syntax .= ' readingFilter:multiple-strict,'.join(',', @dpRList) if ($dpRCount > 0);
# Commands only available in read/write mode
if ($hash->{readonly} ne 'yes') {
$syntax .= ' config';
my $dpWCount = HMCCU_GetValidDatapoints ($hash, $hash->{ccutype}, -1, 2);
my $dpWCount = HMCCU_GetValidParameters ($hash, undef, 'VALUES', 2);
$syntax .= ' datapoint' if ($dpWCount > 0);
my $addCmds = $hash->{hmccu}{cmdlist}{set} // '';
$syntax .= " $addCmds" if ($addCmds ne '');
@ -437,9 +437,9 @@ sub HMCCUDEV_Set ($@)
elsif ($lcopt eq 'datapoint') {
return HMCCU_ExecuteSetDatapointCommand ($hash, $a, $h);
}
elsif ($lcopt eq 'toggle') {
return HMCCU_ExecuteToggleCommand ($hash);
}
# elsif ($lcopt eq 'toggle') {
# return HMCCU_ExecuteToggleCommand ($hash);
# }
elsif (exists($hash->{hmccu}{roleCmds}{set}{$opt})) {
return HMCCU_ExecuteRoleCommand ($ioHash, $hash, 'set', $opt, $a, $h);
}
@ -509,7 +509,7 @@ sub HMCCUDEV_Get ($@)
# Command datapoint depends on readable datapoints
my @dpRList;
my $dpRCount = HMCCU_GetValidDatapoints ($hash, $ccutype, -1, 1, \@dpRList);
my $dpRCount = HMCCU_GetValidParameters ($hash, undef, 'VALUES', 1, \@dpRList);
$syntax .= ' datapoint:'.join(",", @dpRList) if ($dpRCount > 0);
# Additional device specific commands
@ -521,27 +521,7 @@ sub HMCCUDEV_Get ($@)
if ($opt ne '?' && $ccuflags =~ /logCommand/ || HMCCU_IsFlag ($ioName, 'logCommand'));
if ($lcopt eq 'datapoint') {
my $objname = shift @$a // return HMCCU_SetError ($hash, "Usage: get $name datapoint [{channel-number}.]{datapoint}");
my $chn;
my $dpt;
if ($objname =~ /^([0-9]+)\.(.+)$/) {
($chn, $dpt) = ($1, $2);
return HMCCU_SetError ($hash, -7) if ($chn >= $hash->{hmccu}{channels});
}
else {
my ($sc, $sd, $cc, $cd) = HMCCU_GetSCDatapoints ($hash);
return HMCCU_SetError ($hash, -11) if ($sc eq '');
($chn, $dpt) = ($sc, $objname);
}
return HMCCU_SetError ($hash, -8, $objname)
if (!HMCCU_IsValidParameter ($hash, HMCCU_GetChannelAddr ($hash, $chn), 'VALUES', $dpt, 1));
$objname = "$ccuif.$ccuaddr:$chn.$dpt";
my ($rc, $result) = HMCCU_GetDatapoint ($hash, $objname, 0);
return HMCCU_SetError ($hash, $rc, $result) if ($rc < 0);
return $result;
return HMCCU_ExecuteGetDatapointCommand ($hash, $a);
}
elsif ($lcopt eq 'deviceinfo') {
my $extended = shift @$a;
@ -823,10 +803,6 @@ sub HMCCUDEV_Get ($@)
<a href="#HMCCUCHNattr">see HMCCUCHN</a>
</li><br/>
<li><b>hmstatevals &lt;subst-rule&gt;[;...]</b><br/>
<a href="#HMCCUCHNattr">see HMCCUCHN</a>
</li><br/>
<li><b>peer [&lt;datapoints&gt;:&lt;condition&gt;:
{ccu:&lt;object&gt;=&lt;value&gt;|hmccu:&lt;object&gt;=&lt;value&gt;}</b><br/>
<a href="#HMCCUCHNattr">see HMCCUCHN</a>
</li><br/>
<li><b>statechannel &lt;channel-number&gt;</b><br/>

View File

@ -39,7 +39,7 @@ use SetExtensions;
######################################################################
# HMCCURPC version
my $HMCCURPCPROC_VERSION = '5.0 232691829';
my $HMCCURPCPROC_VERSION = '5.0 240121821';
# Maximum number of events processed per call of Read()
my $HMCCURPCPROC_MAX_EVENTS = 100;
@ -114,6 +114,7 @@ my $BINRPC_ERROR = 0x42696EFF;
my %BINRPC_TYPE_MAPPING = (
'BOOL' => $BINRPC_BOOL,
'INTEGER' => $BINRPC_INTEGER,
'ENUM' => $BINRPC_INTEGER,
'STRING' => $BINRPC_STRING,
'FLOAT' => $BINRPC_DOUBLE,
'DOUBLE' => $BINRPC_DOUBLE,

View File

@ -8,7 +8,7 @@
#
# Configuration parameters for HomeMatic devices.
#
# (c) 2022 by zap (zap01 <at> t-online <dot> de)
# (c) 2024 by zap (zap01 <at> t-online <dot> de)
#
#########################################################################
@ -58,6 +58,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
'ACCESSPOINT_GENERIC_RECEIVER' => {
F => 3, S => 'VOLTAGE', C => '', V => '', P => 1
},
'ACOUSTIC_SIGNAL_TRANSMITTER' => {
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0', P => 2
},
'ALARM_SWITCH_VIRTUAL_RECEIVER' => {
F => 3, S => 'ACOUSTIC_ALARM_ACTIVE', C => 'ACOUSTIC_ALARM_SELECTION', V => '', P => 2
},
@ -169,6 +172,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
'RAINDETECTOR_HEAT' => {
F => 3, S => 'STATE', C => 'STATE', V => 'on:true,off:false', P => 2
},
'RGBW_COLOR' => {
F => 3, S => 'COLOR', C => 'COLOR', V => '', P => 2
},
'ROTARY_HANDLE_SENSOR' => {
F => 3, S => 'STATE', C => '', V => '', P => 2
},
@ -211,6 +217,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
'TILT_SENSOR' => {
F => 3, S => 'STATE', C => '', V => '', P => 1
},
'UNIVERSAL_LIGHT_RECEIVER' => {
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0', P => 1
},
'VIRTUAL_KEY' => {
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
},
@ -315,33 +324,41 @@ $HMCCU_CONFIG_VERSION = '5.0';
);
#######################################################################################
# Set commands related to channel role
# Set/Get commands related to channel role
# Role => { Command-Definition, ... }
# Command-Defintion:
# Command[:InterfaceExpr] => [No:]Datapoint-Def[:Function] [...]'
# [Mode ]Command[:InterfaceExpr] => [No:]Datapoint-Def[:Function] [...]'
# Mode:
# Either 'set' or 'get'. Default is 'set'.
# Command:
# The command name.
# InterfaceExpr:
# Command is only available, if interface of device is matching the regular
# expression.
# No:
# Execution order of subcommands. By default subcommands are
# executed from left to right.
# Execution order of subcommands. By default subcommands are executed from left to
# right.
# Function:
# A Perl function name
# Datapoint-Def:
# No parameters: Paramset:Datapoints:[Parameter=]FixedValue[,...]
# One parameter: Paramset:Datapoints:?Parameter
# Command with no parameters: Paramset:Datapoints:[Parameter=]Value
# Toggle command: Paramset:Datapoints:[Parameter=]Value1,Value2[,...]
# Command with one parameter: Paramset:Datapoints:?Parameter
# Optional parameter with default: Paramset:Datapoints:?Parameter=Default-Value
# List of values (also toggle): Paramset:Datapoints:#Parameter[=FixedValue[,...]]
# List of values: Paramset:Datapoints:#Parameter[=Value[,...]]
# Internal value (paramset "I"): Paramset:Datapoints:*Parameter=Default-Value
# Paramset:
# V=VALUES, M=MASTER (channel), D=MASTER (device), I=INTERNAL
# V=VALUES, M=MASTER (channel), D=MASTER (device), I=INTERNAL, S=VALUE_STRING
# Datapoints:
# List of parameter names separated by ','
# List of datapoint or config parameter names separated by ','. Multiple names can
# be specified to support multiple firmware revesions with different names.
# Parameter characters:
# ? = any value is accepted
# # = If datapoint is of type ENUM, values are taken from
# parameter set description. Otherwise a list of values must
# be specified after '='.
# * = internal value $hash->{hmccu}{values}{parameterName}
# See also paramset "I"
# FixedValue: Parameter values are detected in the following order:
# # = If datapoint is of type ENUM, values are taken from parameter set description.
# Otherwise a list of values must be specified after '='.
# * = internal value $hash->{hmccu}{values}{parameterName}. See also paramset "I"
# FixedValue:
# Parameter values are detected in the following order:
# 1. If command parameter name is identical with controldatapoint,
# option values are taken from controldatapoint definition {V}. The
# FixedValues are used as lookup key into HMCCU_STATECCONTROL.
@ -350,11 +367,17 @@ $HMCCU_CONFIG_VERSION = '5.0';
# names are taken from HMCCU_CONVERSIONS by using FixedValues as
# lookup key.
# 3. As a fallback command options and option values are identical.
# Default-Value:
# If Default-Value is preceeded by + or -, value is added to or
# subtracted from current datapoint value
#######################################################################################
%HMCCU_ROLECMDS = (
'ACOUSTIC_SIGNAL_TRANSMITTER' => {
'level' => 'V:LEVEL:?level',
'on' => 'V:LEVEL:1',
'off' => 'V:LEVEL:0'
},
'ALARM_SWITCH_VIRTUAL_RECEIVER' => {
'opticalAlarm' => 'V:OPTICAL_ALARM_SELECTION:#alarmMode V:ACOUSTIC_ALARM_SELECTION:0 V:DURATION_UNIT:*unit=0 V:DURATION_VALUE:*duration=10',
'acousticAlarm' => 'V:ACOUSTIC_ALARM_SELECTION:#alarmMode V:OPTICAL_ALARM_SELECTION:0 V:DURATION_UNIT:0 V:DURATION_VALUE:10',
@ -365,24 +388,24 @@ $HMCCU_CONFIG_VERSION = '5.0';
},
'BLIND' => {
'pct' => 'V:LEVEL:?level',
'open' => 'V:LEVEL:100',
'open' => 'V:LEVEL:1',
'close' => 'V:LEVEL:0',
'up' => 'V:LEVEL:?delta=+20',
'down' => 'V:LEVEL:?delta=-20',
'oldPos' => 'V:LEVEL:100.5',
'oldPos' => 'V:LEVEL:1.005',
'stop' => 'V:STOP:1'
},
'BLIND_VIRTUAL_RECEIVER' => {
'pct' => 'V:LEVEL:?level',
'open' => 'V:LEVEL:100',
'open' => 'V:LEVEL:1',
'close' => 'V:LEVEL:0',
'oldLevel' => 'V:LEVEL:100.5',
'oldLevel' => 'V:LEVEL:1.005',
'up' => 'V:LEVEL:?delta=+20',
'down' => 'V:LEVEL:?delta=-20',
'stop' => 'V:STOP:1',
'pctSlats' => 'V:LEVEL_2:?level V:LEVEL:100.5',
'openSlats' => 'V:LEVEL_2:100 V:LEVEL:100.5',
'closeSlats' => 'V:LEVEL_2:0 V:LEVEL:100.5',
'pctSlats' => 'V:LEVEL_2:?level V:LEVEL:1.005',
'openSlats' => 'V:LEVEL_2:100 V:LEVEL:1.005',
'closeSlats' => 'V:LEVEL_2:0 V:LEVEL:1.005',
},
'CLIMATECONTROL_REGULATOR' => {
'desired-temp' => 'V:SETPOINT:?temperature',
@ -402,25 +425,27 @@ $HMCCU_CONFIG_VERSION = '5.0';
'DIMMER' => {
'pct' => '3:V:LEVEL:?level 1:V:ON_TIME:?time=0.0 2:V:RAMP_TIME:?ramp=0.5',
'level' => 'V:LEVEL:?level',
'on' => 'V:LEVEL:100',
'on' => 'V:LEVEL:1',
'off' => 'V:LEVEL:0',
'on-for-timer' => 'V:ON_TIME:?duration V:LEVEL:100',
'on-till' => 'V:ON_TIME:?time V:LEVEL:100',
'on-for-timer' => 'V:ON_TIME:?duration V:LEVEL:1',
'on-till' => 'V:ON_TIME:?time V:LEVEL:1',
'up' => 'V:LEVEL:?delta=+10',
'down' => 'V:LEVEL:?delta=-10',
'stop' => 'V:RAMP_STOP:1'
'stop' => 'V:RAMP_STOP:1',
'toggle' => 'V:LEVEL:0,1'
},
'DIMMER_VIRTUAL_RECEIVER' => {
'pct' => '5:V:LEVEL:?level 1:V:DURATION_UNIT:0 2:V:ON_TIME,DURATION_VALUE:?time=0.0 3:V:RAMP_TIME_UNIT:0 4:V:RAMP_TIME,RAMP_TIME_VALUE:?ramp=0.5',
'level' => 'V:LEVEL:?level',
'on' => 'V:LEVEL:100',
'on' => 'V:LEVEL:1',
'off' => 'V:LEVEL:0',
'oldLevel' => 'V:LEVEL:100.5',
'on-for-timer' => '1:V:DURATION_UNIT:0 2:V:ON_TIME,DURATION_VALUE:?duration 3:V:LEVEL:100',
'on-till' => '1:V:DURATION_UNIT:0 2:V:ON_TIME,DURATION_VALUE:?time 3:V:LEVEL:100',
'oldLevel' => 'V:LEVEL:1.005',
'on-for-timer' => '1:V:DURATION_UNIT:0 2:V:ON_TIME,DURATION_VALUE:?duration 3:V:LEVEL:1',
'on-till' => '1:V:DURATION_UNIT:0 2:V:ON_TIME,DURATION_VALUE:?time 3:V:LEVEL:1',
'up' => 'V:LEVEL:?delta=+10',
'down' => 'V:LEVEL:?delta=-10',
'color' => 'V:COLOR:#color'
'color' => 'V:COLOR:#color',
'toggle' => 'V:LEVEL:0,1'
},
'DIMMER_WEEK_PROFILE' => {
'progMode' => 'V:WEEK_PROGRAM_TARGET_CHANNEL_LOCK:#progMode'
@ -447,13 +472,13 @@ $HMCCU_CONFIG_VERSION = '5.0';
},
'JALOUSIE' => {
'pct' => 'V:LEVEL:?level',
'open' => 'V:LEVEL:100',
'open' => 'V:LEVEL:1',
'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',
'openSlats' => 'V:LEVEL_SLATS:1',
'closeSlats' => 'V:LEVEL_SLATS:0',
},
'KEY' => {
@ -484,10 +509,14 @@ $HMCCU_CONFIG_VERSION = '5.0';
'on-for-timer' => 'V:ON_TIME:?duration V:STATE:1',
'on-till' => 'V:ON_TIME:?time V:STATE:1'
},
'RGBW_COLOR' => {
'color' => 'V:COLOR:?color V:ACT_HSV_COLOR_VALUE:?hsvColor',
'brightness' => 'V:ACT_BRIGHTNESS:?brightness'
},
'SHUTTER_VIRTUAL_RECEIVER' => {
'pct' => 'V:LEVEL:?level',
'open' => 'V:LEVEL:100',
'oldLevel' => 'V:LEVEL:100.5',
'open' => 'V:LEVEL:1',
'oldLevel' => 'V:LEVEL:1.005',
'close' => 'V:LEVEL:0',
'up' => 'V:LEVEL:?delta=+20',
'down' => 'V:LEVEL:?delta=-20',
@ -500,7 +529,8 @@ $HMCCU_CONFIG_VERSION = '5.0';
'on' => 'V:STATE:1',
'off' => 'V:STATE:0',
'on-for-timer' => 'V:ON_TIME:?duration V:STATE:1',
'on-till' => 'V:ON_TIME:?time V:STATE:1'
'on-till' => 'V:ON_TIME:?time V:STATE:1',
'toggle' => 'V:STATE:0,1'
},
'SWITCH_PANIC' => {
'panic' => 'V:STATE:#panic=on,off',
@ -516,7 +546,8 @@ $HMCCU_CONFIG_VERSION = '5.0';
'on' => 'V:STATE:1',
'off' => 'V:STATE:0',
'on-for-timer' => 'V:ON_TIME:?duration V:STATE:1',
'on-till' => 'V:ON_TIME:?time V:STATE:1'
'on-till' => 'V:ON_TIME:?time V:STATE:1',
'toggle' => 'V:STATE:0,1'
},
'THERMALCONTROL_TRANSMIT' => {
'desired-temp' => 'V:SET_TEMPERATURE:?temperature',
@ -528,6 +559,17 @@ $HMCCU_CONFIG_VERSION = '5.0';
'week-program' => 'D:WEEK_PROGRAM_POINTER:#program',
'get week-program' => 'D:WEEK_PROGRAM_POINTER:#program:HMCCU_DisplayWeekProgram'
},
'UNIVERSAL_LIGHT_RECEIVER' => {
'pct' => '5:V:LEVEL:?level 1:V:DURATION_UNIT:0 2:V:DURATION_VALUE:?time=0.0 3:V:RAMP_TIME_UNIT:0 4:V:RAMP_TIME_VALUE:?ramp=0.5',
'level' => 'V:LEVEL:?level',
'on' => 'V:LEVEL:1',
'off' => 'V:LEVEL:0',
'on-for-timer' => '1:V:DURATION_UNIT:0 2:V:DURATION_VALUE:?duration 3:V:LEVEL:1',
'on-till' => '1:V:DURATION_UNIT:0 2:V:DURATION_VALUE:?time 3:V:LEVEL:1',
'up' => 'V:LEVEL:?delta=+10',
'down' => 'V:LEVEL:?delta=-10',
'toggle' => 'V:LEVEL:0,1'
},
'VIRTUAL_KEY' => {
'on' => 'V:PRESS_SHORT:1',
'off' => 'V:PRESS_SHORT:1',
@ -642,6 +684,12 @@ $HMCCU_CONFIG_VERSION = '5.0';
'webCmd' => 'desired-temp:auto:manu:boost:on:off',
'widgetOverride' => 'desired-temp:slider,4.5,0.5,30.5,1'
},
'UNIVERSAL_LIGHT_RECEIVER' => {
'cmdIcon' => 'on:general_an off:general_aus',
'substexcl' => 'pct|level',
'webCmd' => 'level:on:off',
'widgetOverride' => 'level:slider,0,10,100'
},
'CLIMATECONTROL_RT_TRANSCEIVER' => {
'substexcl' => 'desired-temp',
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
@ -802,6 +850,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
'CLIMATECONTROL_REGULATOR' => {
'SETPOINT' => { '4.5' => 'off', '30.5' => 'on' }
},
'UNIVERSAL_LIGHT_RECEIVER' => {
'LEVEL' => { '0' => 'off', '100' => 'on', 'off' => '0', 'on' => '100' }
},
'WATER_DETECTION_TRANSMITTER' => {
'ALARMSTATE' => { '0' => 'noAlarm', '1' => 'alarm', 'false' => 'noAlarm', 'true' => 'alarm' }
},
@ -2300,7 +2351,7 @@ if(oTmpArray) {
object odev = dom.GetObject((och.Device()));
var ival = trigDP.Value();
time sftime = oTmp.AlOccurrenceTime(); ! erste Meldezeit
time sltime = oTmp.LastTriggerTime();!letze Meldezeit
time sltime = oTmp.LastTriggerTime(); ! letzte Meldezeit
var sdesc = trigDP.HssType();
var sserial = odev.Address();
var sname = odev.Name();