2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-26 10:34:52 +00:00

HMCCU: version 4.2

git-svn-id: https://svn.fhem.de/fhem/trunk@16038 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
zap 2018-01-29 16:07:43 +00:00
parent e53d5b5cc2
commit 9f523ba845
7 changed files with 4158 additions and 757 deletions

View File

@ -1,5 +1,7 @@
# 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.
- update: 88_HMCCU: Version 4.2
- new: 88_HMCCURPCPROC: Sub process based RPC server for HMCCU.
- feature: 73_PRESENCE: new collectord package (RSSI based room selection
for BTLE devices (lepresenced), ping command for
daemon monitoring, systemd service unit

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,9 @@
#
# $Id$
#
# Version 4.1.003
# Version 4.2
#
# (c) 2017 zap (zap01 <at> t-online <dot> de)
# (c) 2018 zap (zap01 <at> t-online <dot> de)
#
######################################################################
#
@ -15,7 +15,7 @@
#
# set <name> config [device] <parameter>=<value> [...]
# set <name> control <value>
# set <name> datapoint <datapoint> <value>
# set <name> datapoint <datapoint> <value> [...]
# set <name> defaults
# set <name> devstate <value>
# set <name> <stateval_cmds>
@ -33,9 +33,8 @@
# get <name> devstate
# get <name> update
#
# attr <name> ccuackstate { 0 | 1 }
# attr <name> ccucalculate <value>:<reading>[:<dp-list>][...]
# attr <name> ccuflags { altread, nochn0, trace }
# attr <name> ccuflags { ackState, nochn0, trace }
# attr <name> ccuget { State | Value }
# attr <name> ccureadings { 0 | 1 }
# attr <name> ccureadingfilter <filter-rule>[;...]
@ -82,8 +81,8 @@ sub HMCCUCHN_Initialize ($)
$hash->{AttrFn} = "HMCCUCHN_Attr";
$hash->{parseParams} = 1;
$hash->{AttrList} = "IODev ccuackstate:0,1 ccucalculate ".
"ccuflags:multiple-strict,altread,nochn0,trace ccureadingfilter ".
$hash->{AttrList} = "IODev ccucalculate ".
"ccuflags:multiple-strict,ackState,nochn0,trace ccureadingfilter ".
"ccureadingformat:name,namelc,address,addresslc,datapoint,datapointlc ".
"ccureadingname:textField-long ".
"ccureadings:0,1 ccuscaleval ccuverify:0,1,2 ccuget:State,Value controldatapoint ".
@ -219,20 +218,28 @@ sub HMCCUCHN_Set ($@)
my $rc;
if ($opt eq 'datapoint') {
my $objname = shift @$a;
my $objvalue = shift @$a;
my $usage = "Usage: set $name datapoint {datapoint} {value} [...]";
my %dpval;
while (my $objname = shift @$a) {
my $objvalue = shift @$a;
return HMCCU_SetError ($hash, "Usage: set $name datapoint {datapoint} {value}")
if (!defined ($objname) || !defined ($objvalue));
return HMCCU_SetError ($hash, -8)
if (!HMCCU_IsValidDatapoint ($hash, $ccutype, $ccuaddr, $objname, 2));
return HMCCU_SetError ($hash, $usage) if (!defined ($objvalue));
return HMCCU_SetError ($hash, -8)
if (!HMCCU_IsValidDatapoint ($hash, $ccutype, $ccuaddr, $objname, 2));
$objvalue =~ s/\\_/%20/g;
$objvalue = HMCCU_Substitute ($objvalue, $statevals, 1, undef, '');
$objvalue =~ s/\\_/%20/g;
$objvalue = HMCCU_Substitute ($objvalue, $statevals, 1, undef, '');
$objname = $ccuif.'.'.$ccuaddr.'.'.$objname;
$rc = HMCCU_SetDatapoint ($hash, $objname, $objvalue);
return HMCCU_SetError ($hash, $rc) if ($rc < 0);
$objname = $ccuif.'.'.$ccuaddr.'.'.$objname;
$dpval{$objname} = $objvalue;
}
return HMCCU_SetError ($hash, $usage) if (scalar (keys %dpval) < 1);
foreach my $dpt (keys %dpval) {
$rc = HMCCU_SetDatapoint ($hash, $dpt, $dpval{$dpt});
return HMCCU_SetError ($hash, $rc) if ($rc < 0);
}
return HMCCU_SetState ($hash, "OK");
}
@ -623,12 +630,13 @@ sub HMCCUCHN_Get ($@)
Valid parameters can be listed by using commands 'get configdesc' or 'get configlist'.
With option 'device' specified parameters are set in device instead of channel.
</li><br/>
<li><b>set &lt;name&gt; datapoint &lt;datapoint&gt; &lt;value&gt;</b><br/>
Set value of a datapoint of a CCU channel. If parameter <i>value</i> contains special
<li><b>set &lt;name&gt; datapoint &lt;datapoint&gt; &lt;value&gt; [...]</b><br/>
Set datapoint values of a CCU channel. If parameter <i>value</i> contains special
character \_ it's substituted by blank.
<br/><br/>
Examples:<br/>
<code>set temp_control datapoint SET_TEMPERATURE 21</code>
<code>set temp_control datapoint SET_TEMPERATURE 21</code><br/>
<code>set temp_control datapoint AUTO_MODE 1 SET_TEMPERATURE 21</code>
</li><br/>
<li><b>set &lt;name&gt; defaults</b><br/>
Set default attributes for CCU device type. Default attributes are only available for
@ -745,10 +753,6 @@ sub HMCCUCHN_Get ($@)
To reduce the amount of events it's recommended to set attribute 'event-on-change-reading'
to '.*'.
<br/><br/>
<li><b>ccuackstate {<u>0</u> | 1}</b><br/>
If set to 1 state will be set to result of command (i.e. 'OK'). Otherwise state is only
updated if value of state datapoint has changed.
</li><br/>
<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>. The following <i>values</i>
@ -766,6 +770,7 @@ sub HMCCUCHN_Get ($@)
</li><br/>
<li><b>ccuflags {nochn0, trace}</b><br/>
Control behaviour of device:<br/>
ackState: Acknowledge command execution by setting STATE to error or success.<br/>
nochn0: Prevent update of status channel 0 datapoints / readings.<br/>
trace: Write log file information for operations related to this device.
</li><br/>
@ -915,16 +920,21 @@ sub HMCCUCHN_Get ($@)
set my_switch on
</code>
</li><br/>
<li><b>stripnumber [&lt;datapoint-expr&gt;!]{<u>0</u>|1|2|-n}[;...]</b><br/>
Remove trailing digits or zeroes from floating point numbers and/or round floating
point numbers. If attribute is negative (-0 is valid) floating point values are rounded
<li><b>stripnumber [&lt;datapoint-expr&gt;!]{<u>0</u>|1|2|-n|%fmt}[;...]</b><br/>
Remove trailing digits or zeroes from floating point numbers, round or format
numbers. If attribute is negative (-0 is valid) floating point values are rounded
to the specified number of digits before they are stored in readings. The meaning of
values 0-2 is:<br/>
values 0,1,2 is:<br/>
0 = Floating point numbers are stored as read from CCU (i.e. with trailing zeros)<br/>
1 = Trailing zeros are stripped from floating point numbers except one digit.<br/>
2 = All trailing zeros are stripped from floating point numbers.<br/>
With %fmt one can specify any valid sprintf() format string.<br/>
If <i>datapoint-expr</i> is specified the formatting applies only to datapoints
matching the regular expression.
matching the regular expression.<br/>
Example:<br>
<code>
attr myDev stripnumber TEMPERATURE!%.2f degree
</code>
</li><br/>
<li><b>substexcl &lt;reading-expr&gt;</b><br/>
Exclude values of readings matching <i>reading-expr</i> from substitution. This is helpful

View File

@ -4,9 +4,9 @@
#
# $Id$
#
# Version 4.1.001
# Version 4.2
#
# (c) 2017 zap (zap01 <at> t-online <dot> de)
# (c) 2018 zap (zap01 <at> t-online <dot> de)
#
######################################################################
#
@ -16,7 +16,7 @@
# set <name> clear [<regexp>]
# set <name> config [<channel-number>] <parameter>=<value> [...]
# set <name> control <value>
# set <name> datapoint [<channel-number>.]<datapoint> <value>
# set <name> datapoint [<channel-number>.]<datapoint> <value> [...]
# set <name> defaults
# set <name> devstate <value>
# set <name> on-till <timestamp>
@ -33,9 +33,8 @@
# get <name> devstate
# get <name> update
#
# attr <name> ccuackstate { 0 | 1 }
# attr <name> ccucalculate <value>:<reading>[:<dp-list>][...]
# attr <name> ccuflags { altread, nochn0, trace }
# attr <name> ccuflags { ackState, nochn0, trace }
# attr <name> ccuget { State | Value }
# attr <name> ccureadings { 0 | 1 }
# attr <name> ccureadingformat { address[lc] | name[lc] | datapoint[lc] }
@ -85,8 +84,8 @@ sub HMCCUDEV_Initialize ($)
$hash->{AttrFn} = "HMCCUDEV_Attr";
$hash->{parseParams} = 1;
$hash->{AttrList} = "IODev ccuackstate:0,1 ccucalculate:textField-long ".
"ccuflags:multiple-strict,altread,nochn0,trace ccureadingfilter:textField-long ".
$hash->{AttrList} = "IODev ccucalculate:textField-long ".
"ccuflags:multiple-strict,ackState,nochn0,trace ccureadingfilter:textField-long ".
"ccureadingformat:name,namelc,address,addresslc,datapoint,datapointlc ".
"ccureadingname:textField-long ".
"ccureadings:0,1 ccuget:State,Value ccuscaleval ccuverify:0,1,2 disable:0,1 ".
@ -142,7 +141,7 @@ sub HMCCUDEV_Define ($@)
$hmccu_hash = HMCCU_FindIODevice ($devspec) if (!defined ($hmccu_hash));
return "Cannot detect IO device" if (!defined ($hmccu_hash));
return "Invalid or unknown CCU device name or address"
return "Invalid or unknown CCU device name or address: $devspec"
if (! HMCCU_IsValidDevice ($hmccu_hash, $devspec));
my ($di, $da, $dn, $dt, $dc) = HMCCU_GetCCUDeviceParam ($hmccu_hash, $devspec);
@ -180,14 +179,9 @@ sub HMCCUDEV_Define ($@)
return "Invalid device or channel $gd" if (!HMCCU_IsValidDevice ($hmccu_hash, $gd));
if (HMCCU_IsDevAddr ($gd, 0) || HMCCU_IsChnAddr ($gd, 1)) {
$gdo = $gd;
}
else {
($gda, $gdc) = HMCCU_GetAddress ($hmccu_hash, $gd, '', '');
$gdo = $gda;
$gdo .= ':'.$gdc if ($gdc ne '');
}
($gda, $gdc) = HMCCU_GetAddress ($hmccu_hash, $gd, '', '');
$gdo = $gda;
$gdo .= ':'.$gdc if ($gdc ne '');
if (exists ($hash->{ccugroup}) && $hash->{ccugroup} ne '') {
$hash->{ccugroup} .= ",".$gdo;
@ -287,42 +281,49 @@ sub HMCCUDEV_Set ($@)
my $rc;
if ($opt eq 'datapoint') {
my $objname = shift @$a;
my $objvalue = shift @$a;
my $usage = "Usage: set $name datapoint [{channel-number}.]{datapoint} {value} [...]";
my %dpval;
while (my $objname = shift @$a) {
my $objvalue = shift @$a;
if ($ccutype eq 'HM-Dis-EP-WM55' && !defined ($objvalue)) {
$objvalue = '';
foreach my $t (keys %{$h}) {
if ($objvalue eq '') {
$objvalue = $t.'='.$h->{$t};
}
else {
$objvalue .= ','.$t.'='.$h->{$t};
if ($ccutype eq 'HM-Dis-EP-WM55' && !defined ($objvalue)) {
$objvalue = '';
foreach my $t (keys %{$h}) {
if ($objvalue eq '') {
$objvalue = $t.'='.$h->{$t};
}
else {
$objvalue .= ','.$t.'='.$h->{$t};
}
}
}
return HMCCU_SetError ($hash, $usage) if (!defined ($objvalue) || $objvalue eq '');
if ($objname =~ /^([0-9]+)\..+$/) {
my $chn = $1;
return HMCCU_SetError ($hash, -7) if ($chn >= $hash->{channels});
}
else {
return HMCCU_SetError ($hash, -11) if ($sc eq '');
$objname = $sc.'.'.$objname;
}
return HMCCU_SetError ($hash, -8)
if (!HMCCU_IsValidDatapoint ($hash, $ccutype, 0, $objname, 2));
$objvalue =~ s/\\_/%20/g;
$objvalue = HMCCU_Substitute ($objvalue, $statevals, 1, undef, '');
$objname = $ccuif.'.'.$ccuaddr.':'.$objname;
$dpval{$objname} = $objvalue;
}
return HMCCU_SetError ($hash, "Usage: set $name datapoint [{channel-number}.]{datapoint} {value}")
if (!defined ($objvalue) || $objvalue eq '');
return HMCCU_SetError ($hash, $usage) if (scalar (keys %dpval) < 1);
if ($objname =~ /^([0-9]+)\..+$/) {
my $chn = $1;
return HMCCU_SetError ($hash, -7) if ($chn >= $hash->{channels});
foreach my $dpt (keys %dpval) {
$rc = HMCCU_SetDatapoint ($hash, $dpt, $dpval{$dpt});
return HMCCU_SetError ($hash, $rc) if ($rc < 0);
}
else {
return HMCCU_SetError ($hash, -11) if ($sc eq '');
$objname = $sc.'.'.$objname;
}
return HMCCU_SetError ($hash, -8)
if (!HMCCU_IsValidDatapoint ($hash, $ccutype, 0, $objname, 2));
$objvalue =~ s/\\_/%20/g;
$objvalue = HMCCU_Substitute ($objvalue, $statevals, 1, undef, '');
$objname = $ccuif.'.'.$ccuaddr.':'.$objname;
$rc = HMCCU_SetDatapoint ($hash, $objname, $objvalue);
return HMCCU_SetError ($hash, $rc) if ($rc < 0);
return HMCCU_SetState ($hash, "OK");
}
@ -775,12 +776,13 @@ sub HMCCUDEV_Get ($@)
using command 'get configdesc'.
</li><br/>
<li><b>set &lt;name&gt; datapoint [&lt;channel-number&gt;.]&lt;datapoint&gt;
&lt;value&gt;</b><br/>
Set value of a datapoint of a CCU device channel. If channel number is not specified
&lt;value&gt; [...]</b><br/>
Set datapoint values of a CCU device channel. If channel number is not specified
state channel is used. String \_ is substituted by blank.
<br/><br/>
Example:<br/>
<code>set temp_control datapoint 1.SET_TEMPERATURE 21</code>
<code>set temp_control datapoint 2.SET_TEMPERATURE 21</code><br/>
<code>set temp_control datapoint 2.AUTO_MODE 1 2.SET_TEMPERATURE 21</code>
</li><br/>
<li><b>set &lt;name&gt; defaults</b><br/>
Set default attributes for CCU device type. Default attributes are only available for
@ -893,9 +895,6 @@ sub HMCCUDEV_Get ($@)
<ul>
To reduce the amount of events it's recommended to set attribute 'event-on-change-reading'
to '.*'.<br/><br/>
<li><b>ccuackstate {<u>0</u> | 1}</b><br/>
<a href="#HMCCUCHNattr">see HMCCUCHN</a>
</li><br/>
<li><b>ccucalculate &lt;value-type&gt;:&lt;reading&gt;[:&lt;dp-list&gt;[;...]</b><br/>
<a href="#HMCCUCHNattr">see HMCCUCHN</a>
</li><br/>

File diff suppressed because it is too large Load Diff

2619
fhem/FHEM/88_HMCCURPCPROC.pm Executable file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
#
# $Id$
#
# Version 4.1.002
# Version 4.2
#
# Configuration parameters for HomeMatic devices.
#
@ -71,21 +71,30 @@ use vars qw(%HMCCU_SCRIPTS);
substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes",
webCmd => "press"
},
"HM-LC-Sw1-Pl-2|HMIP-PS" => {
"HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => {
_description => "Steckdose",
_channels => "1,3",
_channels => "1",
ccureadingfilter => "STATE",
controldatapoint => "STATE",
statedatapoint => "STATE",
statevals => "on:true,off:false",
substitute => "STATE!(1|true):on,(0|false):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
webCmd => "devstate",
widgetOverride => "devstate:uzsuToggle,off,on"
},
"HMIP-PS" => {
_description => "Steckdose",
_channels => "3",
ccureadingfilter => "STATE",
statedatapoint => "STATE",
statevals => "on:true,off:false",
substitute => "STATE!(1|true):on,(0|false):off",
webCmd => "devstate",
widgetOverride => "devstate:uzsuToggle,off,on"
},
"HM-LC-Dim1L-Pl|HM-LC-Dim1L-Pl-2|HM-LC-Dim1L-CV|HM-LC-Dim2L-CV|HM-LC-Dim2L-SM|HM-LC-Dim1L-Pl-3|HM-LC-Dim1L-CV-2" => {
_description => "Funk-Anschnitt-Dimmaktor",
_channels => "1",
ccureadingfilter => "(^LEVEL$|DIRECTION)",
ccureadingfilter => "(^LEVEL\$|DIRECTION)",
ccuscaleval => "LEVEL:0:1:0:100",
cmdIcon => "on:general_an off:general_aus",
controldatapoint => "LEVEL",
@ -101,7 +110,7 @@ use vars qw(%HMCCU_SCRIPTS);
"HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => {
_description => "Funk-PWM-Dimmaktor",
_channels => "1",
ccureadingfilter => "(^LEVEL$|DIRECTION)",
ccureadingfilter => "(^LEVEL\$|DIRECTION)",
ccuscaleval => "LEVEL:0:1:0:100",
cmdIcon => "on:general_an off:general_aus",
controldatapoint => "LEVEL",
@ -173,6 +182,28 @@ use vars qw(%HMCCU_SCRIPTS);
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HM-LC-Sw2PBU-FM" => {
_description => "Funk-Schaltaktor 2-fach",
_channels => "1,2",
ccureadingfilter => "STATE",
controldatapoint => "STATE",
statedatapoint => "STATE",
statevals => "on:true,off:false",
substitute => "STATE!(true|1):on,(false|0):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HmIP-BSM" => {
_description => "Schalt-Mess-Aktor",
_channels => "4",
ccureadingfilter => "STATE",
statedatapoint => "STATE",
controldatapoint => "STATE",
statevals => "on:true,off:false",
substitute => "STATE!(true|1):on,(false|0):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HM-SCI-3-FM" => {
_description => "3 Kanal Schliesserkontakt",
_channels => "1,2,3",
@ -293,6 +324,14 @@ use vars qw(%HMCCU_SCRIPTS);
statedatapoint => "STATE",
substitute => "ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded"
},
"HmIP-SWSD" => {
_description => "Funk-Rauchmelder",
_channels => "1",
ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
eventMap => "/datapoint SMOKE_DETECTOR_COMMAND 0:reservedAlarmOff/datapoint SMOKE_DETECTOR_COMMAND 1:intrusionAlarmOff/datapoint SMOKE_DETECTOR_COMMAND 2:intrusionAlarmOn/datapoint SMOKE_DETECTOR_COMMAND 3:smokeTest/datapoint SMOKE_DETECTOR_COMMAND 4:comTest/datapoint SMOKE_DETECTOR_COMMAND 5:comTestRepeat/",
statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
substitute => "SMOKE_DETECTOR_ALARM_STATUS!0:noAlarm,1:primaryAlarm,2:intrusionAlarm,3:secondaryAlarm;SMOKE_DETECTOR_TEST_RESULT!0:none,1:smokeTestOK,2:smokeTestFailed,3:comTestSent,4:comTestOK"
},
"HM-Sec-SFA-SM" => {
_description => "Alarmsirene",
_channels => "1",
@ -340,9 +379,9 @@ use vars qw(%HMCCU_SCRIPTS);
%HMCCU_DEV_DEFAULTS = (
"CCU2" => {
_description => "HomeMatic CCU2",
"ccudef-readingfilter" => '^(LOW_?BAT|UNREACH)$',
"ccudef-readingfilter" => '^(LOW_?BAT|UNREACH)\$',
"ccudef-readingformat" => 'datapoint',
"ccudef-readingname" => '^(.+\.)?AES_KEY$:sign;^(.+\.)?LOW_?BAT$:battery;^(.+\.)?BATTERY_STATE$:batteryLevel;^(.+\.)?UNREACH$:Activity;^(.+\.)?TEMPERATURE$:+temperature;^(.+\.)?SET_TEMPERATURE$:+desired-temp;^(.+\.)?HUMIDITY$:+humidity;^(.+\.)?LEVEL$:+pct;^(.+\.)?CONTROL_MODE$:+controlMode',
"ccudef-readingname" => '^(.+\.)?AES_KEY\$:sign;^(.+\.)?LOW_?BAT\$:battery;^(.+\.)?BATTERY_STATE\$:batteryLevel;^(.+\.)?UNREACH\$:Activity;^(.+\.)?TEMPERATURE\$:+temperature;^(.+\.)?SET_TEMPERATURE\$:+desired-temp;^(.+\.)?HUMIDITY\$:+humidity;^(.+\.)?LEVEL\$:+pct;^(.+\.)?CONTROL_MODE\$:+controlMode',
"ccudef-substitute" => 'AES_KEY!(0|false):off,(1|true):on;LOWBAT,LOW_BAT!(0|false):ok,(1|true):low;UNREACH!(0|false):alive,(1|true):dead;MOTION!(0|false):noMotion,(1|true):motion;DIRECTION!0:stop,1:up,2:down,3:undefined;WORKING!0:false,1:true;INHIBIT!(0|false):unlocked,(1|true):locked'
},
"HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => {
@ -388,25 +427,23 @@ use vars qw(%HMCCU_SCRIPTS);
substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes",
webCmd => "press"
},
"HM-LC-Sw1-Pl-2" => {
"HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => {
_description => "Steckdose",
ccureadingfilter => "STATE",
controldatapoint => "1.STATE",
statedatapoint => "1.STATE",
statevals => "on:true,off:false",
substitute => "STATE!(1|true):on,(0|false):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
webCmd => "devstate",
widgetOverride => "devstate:uzsuToggle,off,on"
},
"HMIP-PS" => {
_description => "Steckdose IP",
ccureadingfilter => "STATE",
controldatapoint => "3.STATE",
statedatapoint => "3.STATE",
statevals => "on:1,off:0",
substitute => "STATE!(1|true):on,(0|false):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
webCmd => "devstate",
widgetOverride => "devstate:uzsuToggle,off,on"
},
"HM-ES-PMSw1-Pl|HM-ES-PMSw1-Pl-DN-R1|HM-ES-PMSw1-Pl-DN-R2|HM-ES-PMSw1-Pl-DN-R3|HM-ES-PMSw1-Pl-DN-R4|HM-ES-PMSw1-Pl-DN-R5" => {
_description => "Steckdose mit Energiemessung",
@ -421,7 +458,7 @@ use vars qw(%HMCCU_SCRIPTS);
},
"HMIP-PSM" => {
_description => "Steckdose mit Energiemessung IP",
ccureadingfilter => "(STATE|CURRENT|^ENERGY_COUNTER$|POWER)",
ccureadingfilter => "(STATE|CURRENT|^ENERGY_COUNTER\$|POWER)",
controldatapoint => "3.STATE",
statedatapoint => "3.STATE",
statevals => "on:true,off:false",
@ -431,7 +468,7 @@ use vars qw(%HMCCU_SCRIPTS);
widgetOverride => "control:uzsuToggle,off,on"
}, "HM-LC-Dim1L-Pl|HM-LC-Dim1L-Pl-2|HM-LC-Dim1L-CV|HM-LC-Dim2L-CV|HM-LC-Dim2L-SM|HM-LC-Dim1L-Pl-3|HM-LC-Dim1L-CV-2" => {
_description => "Funk-Anschnitt-Dimmaktor",
ccureadingfilter => "(^LEVEL$|DIRECTION)",
ccureadingfilter => "(^LEVEL\$|DIRECTION)",
ccuscaleval => "LEVEL:0:1:0:100",
cmdIcon => "on:general_an off:general_aus",
controldatapoint => "1.LEVEL",
@ -446,7 +483,7 @@ use vars qw(%HMCCU_SCRIPTS);
},
"HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => {
_description => "Funk-PWM-Dimmaktor",
ccureadingfilter => "(^LEVEL$|DIRECTION)",
ccureadingfilter => "(^LEVEL\$|DIRECTION)",
ccuscaleval => "LEVEL:0:1:0:100",
cmdIcon => "on:general_an off:general_aus",
controldatapoint => "1.LEVEL",
@ -506,6 +543,26 @@ use vars qw(%HMCCU_SCRIPTS);
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HM-LC-Sw2PBU-FM" => {
_description => "Funk-Schaltaktor 2-fach",
ccureadingfilter => "STATE",
controldatapoint => "1.STATE",
statedatapoint => "1.STATE",
statevals => "on:true,off:false",
substitute => "STATE!(true|1):on,(false|0):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HmIP-BSM" => {
_description => "Schalt-Mess-Aktor",
ccureadingfilter => "(STATE|PRESS)",
statedatapoint => "4.STATE",
controldatapoint => "4.STATE",
statevals => "on:true,off:false",
substitute => "STATE!(true|1):on,(false|0):off",
webCmd => "control",
widgetOverride => "control:uzsuToggle,off,on"
},
"HM-LC-SW4-BA-PCB|HM-SCI-3-FM" => {
_description => "4 Kanal Funk Schaltaktor für Batteriebetrieb, 3 Kanal Schließerkontakt",
ccureadingfilter => "STATE",
@ -679,6 +736,13 @@ use vars qw(%HMCCU_SCRIPTS);
statedatapoint => "1.STATE",
substitute => "STATE!(0|false):ok,(1|true):alarm"
},
"HmIP-SWSD" => {
_description => "Funk-Rauchmelder",
ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
eventMap => "/datapoint 1.SMOKE_DETECTOR_COMMAND 0:reservedAlarmOff/datapoint 1.SMOKE_DETECTOR_COMMAND 1:intrusionAlarmOff/datapoint 1.SMOKE_DETECTOR_COMMAND 2:intrusionAlarmOn/datapoint 1.SMOKE_DETECTOR_COMMAND 3:smokeTest/datapoint 1.SMOKE_DETECTOR_COMMAND 4:comTest/datapoint 1.SMOKE_DETECTOR_COMMAND 5:comTestRepeat/",
statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
substitute => "SMOKE_DETECTOR_ALARM_STATUS!0:noAlarm,1:primaryAlarm,2:intrusionAlarm,3:secondaryAlarm;SMOKE_DETECTOR_TEST_RESULT!0:none,1:smokeTestOK,2:smokeTestFailed,3:comTestSent,4:comTestOK"
},
"HM-Sec-SFA-SM" => {
_description => "Alarmsirene",
ccureadingfilter => "STATE",
@ -931,16 +995,42 @@ if (odev) {
}
else {
WriteLine ("ERROR: Device not found");
}
)
},
"GetDevice" => {
description => "Query CCU device or channel",
syntax => "name",
parameters => 1,
code => qq(
object odev=dom.GetObject("\$name");
if (odev) {
if (odev.IsTypeOf (OT_CHANNEL)) {
string devid = odev.Device();
odev = dom.GetObject (devid);
}
string intid=odev.Interface();
string intna=dom.GetObject(intid).Name();
string chnid;
integer cc=0;
foreach (chnid, odev.Channels()) {
object ochn=dom.GetObject(chnid);
WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection());
cc=cc+1;
}
WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
}
)
},
"GetDeviceList" => {
description => "Query CCU devices and channels",
description => "Query CCU devices, channels and interfaces",
syntax => "",
parameters => 0,
code => qq(
string devid;
string chnid;
string sifId;
foreach(devid, root.Devices().EnumUsedIDs()) {
object odev=dom.GetObject(devid);
string intid=odev.Interface();
@ -952,6 +1042,12 @@ foreach(devid, root.Devices().EnumUsedIDs()) {
cc=cc+1;
}
WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
}
foreach(sifId, root.Interfaces().EnumIDs()) {
object oIf=dom.GetObject(sifId);
if (oIf) {
WriteLine("I;" # oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
}
}
)
},
@ -1025,6 +1121,8 @@ string sDevList = "\$list";
foreach (sDevice, sDevList.Split(",")) {
object odev = dom.GetObject (sDevice);
if (odev) {
string intid = odev.Interface();
string intna = dom.GetObject(intid).Name();
string sType = odev.HssType();
foreach (chnid, odev.Channels()) {
object ochn = dom.GetObject(chnid);
@ -1035,7 +1133,7 @@ foreach (sDevice, sDevList.Split(",")) {
object oDP = dom.GetObject(sDPId);
if (oDP) {
string sDPName = oDP.Name().StrValueByIndex(".",2);
WriteLine (sAddr # ";" # sType # ";" # sChnNo # ";" # sDPName # ";" # oDP.ValueType() # ";" # oDP.Operations());
WriteLine (intna # ";" # sAddr # ";" # sType # ";" # sChnNo # ";" # sDPName # ";" # oDP.ValueType() # ";" # oDP.Operations());
}
}
}
@ -1062,6 +1160,50 @@ foreach (sChannel, sChnList.Split(",")) {
}
}
}
}
)
},
"GetInterfaceList" => {
description => "Get CCU RPC interfaces",
syntax => "",
parameters => 0,
code => qq(
string sifId;
foreach(sifId, root.Interfaces().EnumIDs()) {
object oIf = dom.GetObject(sifId);
if (oIf) {
WriteLine (oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
}
}
)
},
"ClearUnreachable" => {
description => "Clear device unreachable alarms in CCU",
syntax => "",
parameters => 0,
code => qq(
string itemID;
string address;
object aldp_obj;
foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
address = dom.GetObject(itemID).Address();
aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH");
if (aldp_obj) {
if (aldp_obj.Value()) {
aldp_obj.AlReceipt();
}
}
}
)
},
"GetNameByAddress" => {
description => "Get device or channel name by address",
syntax => "iface, address",
parameters => 2,
code => qq(
object lObjDevice = xmlrpc.GetObjectByHSSAddress(interfaces.Get("\$iface"),"\$address");
if (lObjDevice) {
WriteLine (lObjDevice.Name());
}
)
}