2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-26 04:24:53 +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

@ -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

@ -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

@ -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: set $name datapoint [{channel-number}.]{datapoint} {value}")
if (!defined ($objvalue) || $objvalue eq '');
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;
}
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));
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;
$objvalue =~ s/\\_/%20/g;
$objvalue = HMCCU_Substitute ($objvalue, $statevals, 1, undef, '');
$objname = $ccuif.'.'.$ccuaddr.':'.$objname;
$dpval{$objname} = $objvalue;
}
$rc = HMCCU_SetDatapoint ($hash, $objname, $objvalue);
return HMCCU_SetError ($hash, $rc) if ($rc < 0);
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");
}
@ -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

@ -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());
}
)
}