mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-13 05:06:35 +00:00
HMCCU: Update for version 4.4 beta
git-svn-id: https://svn.fhem.de/fhem/trunk@21416 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e932d7a2c3
commit
2165681567
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# $Id: 88_HMCCU.pm 18745 2019-02-26 17:33:23Z zap $
|
# $Id: 88_HMCCU.pm 18745 2019-02-26 17:33:23Z zap $
|
||||||
#
|
#
|
||||||
# Version 4.4.013
|
# Version 4.4.014
|
||||||
#
|
#
|
||||||
# Module for communication between FHEM and Homematic CCU2/3.
|
# Module for communication between FHEM and Homematic CCU2/3.
|
||||||
#
|
#
|
||||||
@ -56,7 +56,7 @@ my %HMCCU_CUST_CHN_DEFAULTS;
|
|||||||
my %HMCCU_CUST_DEV_DEFAULTS;
|
my %HMCCU_CUST_DEV_DEFAULTS;
|
||||||
|
|
||||||
# HMCCU version
|
# HMCCU version
|
||||||
my $HMCCU_VERSION = '4.4.013';
|
my $HMCCU_VERSION = '4.4.014';
|
||||||
|
|
||||||
# Constants and default values
|
# Constants and default values
|
||||||
my $HMCCU_MAX_IOERRORS = 100;
|
my $HMCCU_MAX_IOERRORS = 100;
|
||||||
@ -8748,6 +8748,7 @@ sub HMCCU_GetDeviceStates ($)
|
|||||||
'0.STICKY_UNREACH' => 'stickyUnreach', '0.UPDATE_PENDING' => 'updPending'
|
'0.STICKY_UNREACH' => 'stickyUnreach', '0.UPDATE_PENDING' => 'updPending'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my @stValKeys = ('0.LOWBAT', '0.UNREACH');
|
||||||
my %stVal = (
|
my %stVal = (
|
||||||
'0.LOWBAT' => '1|true:low,0|false:ok', '0.UNREACH' => '1|true:dead,0|false:alive'
|
'0.LOWBAT' => '1|true:low,0|false:ok', '0.UNREACH' => '1|true:dead,0|false:alive'
|
||||||
);
|
);
|
||||||
@ -8763,7 +8764,7 @@ sub HMCCU_GetDeviceStates ($)
|
|||||||
$clHash->{hmccu}{dp}{$dp}{VALUES}{VAL} =~ /^(1|true)$/);
|
$clHash->{hmccu}{dp}{$dp}{VALUES}{VAL} =~ /^(1|true)$/);
|
||||||
}
|
}
|
||||||
push @values, scalar(@state) > 0 ? join(',', @state) : 'ok';
|
push @values, scalar(@state) > 0 ? join(',', @state) : 'ok';
|
||||||
foreach my $dp (keys %stVal) {
|
foreach my $dp (@stValKeys) {
|
||||||
if (exists($clHash->{hmccu}{dp}{$dp}) && exists($clHash->{hmccu}{dp}{$dp}{VALUES})&&
|
if (exists($clHash->{hmccu}{dp}{$dp}) && exists($clHash->{hmccu}{dp}{$dp}{VALUES})&&
|
||||||
defined($clHash->{hmccu}{dp}{$dp}{VALUES}{SVAL})) {
|
defined($clHash->{hmccu}{dp}{$dp}{VALUES}{SVAL})) {
|
||||||
push @values, $clHash->{hmccu}{dp}{$dp}{VALUES}{SVAL};
|
push @values, $clHash->{hmccu}{dp}{$dp}{VALUES}{SVAL};
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# $Id: 88_HMCCUCHN.pm 18552 2019-02-10 11:52:28Z zap $
|
# $Id: 88_HMCCUCHN.pm 18552 2019-02-10 11:52:28Z zap $
|
||||||
#
|
#
|
||||||
# Version 4.4.012
|
# Version 4.4.014
|
||||||
#
|
#
|
||||||
# (c) 2020 zap (zap01 <at> t-online <dot> de)
|
# (c) 2020 zap (zap01 <at> t-online <dot> de)
|
||||||
#
|
#
|
||||||
@ -248,9 +248,6 @@ sub HMCCUCHN_Set ($@)
|
|||||||
return "No set command specified" if (!defined ($opt));
|
return "No set command specified" if (!defined ($opt));
|
||||||
$opt = lc($opt);
|
$opt = lc($opt);
|
||||||
|
|
||||||
my $rocmds = "clear defaults:noArg";
|
|
||||||
my $rwcmds = "clear config control datapoint defaults:noArg values";
|
|
||||||
|
|
||||||
# Get I/O device, check device state
|
# Get I/O device, check device state
|
||||||
return undef if (!defined ($hash->{ccudevstate}) || $hash->{ccudevstate} eq 'pending' ||
|
return undef if (!defined ($hash->{ccudevstate}) || $hash->{ccudevstate} eq 'pending' ||
|
||||||
!defined ($hash->{IODev}));
|
!defined ($hash->{IODev}));
|
||||||
@ -278,16 +275,32 @@ sub HMCCUCHN_Set ($@)
|
|||||||
# Get additional commands (including state commands)
|
# Get additional commands (including state commands)
|
||||||
my $roleCmds = HMCCU_GetSpecialCommands ($hash, $cc);
|
my $roleCmds = HMCCU_GetSpecialCommands ($hash, $cc);
|
||||||
|
|
||||||
|
my %pset = ('V' => 'VALUES', 'M' => 'MASTER', 'D' => 'MASTER');
|
||||||
my $cmdList = '';
|
my $cmdList = '';
|
||||||
|
my %valLookup;
|
||||||
foreach my $cmd (keys %$roleCmds) {
|
foreach my $cmd (keys %$roleCmds) {
|
||||||
$cmdList .= " $cmd";
|
$cmdList .= " $cmd";
|
||||||
my @setList = split (/\s+/, $roleCmds->{$cmd});
|
my @setList = split (/\s+/, $roleCmds->{$cmd});
|
||||||
foreach my $set (@setList) {
|
foreach my $set (@setList) {
|
||||||
my ($ps, $dpt, $par) = split(/:/, $set);
|
my ($ps, $dpt, $par) = split(/:/, $set);
|
||||||
if ($par !~ /^\?/) {
|
my @argList = ();
|
||||||
my @argList = split (',', $par);
|
if ($par =~ /^#/) {
|
||||||
$cmdList .= scalar(@argList) > 1 ? ":$par" : ":noArg";
|
my $adr = $ccuaddr;
|
||||||
|
$adr =~ s/:[0-9]{1,2}$//;
|
||||||
|
my $paramDef = HMCCU_GetParamDef ($ioHash, $adr, $pset{$ps}, $dpt);
|
||||||
|
if (defined($paramDef)) {
|
||||||
|
if ($paramDef->{TYPE} eq 'ENUM' && defined($paramDef->{VALUE_LIST})) {
|
||||||
|
$par = $paramDef->{VALUE_LIST};
|
||||||
|
$par =~ s/[ ]+/-/g;
|
||||||
|
@argList = split (',', $par);
|
||||||
|
while (my ($i, $e) = each(@argList)) { $valLookup{$pset{$ps}}{$dpt}{$e} = $i; }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
elsif ($par !~ /^\?/) {
|
||||||
|
@argList = split (',', $par);
|
||||||
|
}
|
||||||
|
$cmdList .= scalar(@argList) > 1 ? ":$par" : ":noArg";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,23 +356,6 @@ sub HMCCUCHN_Set ($@)
|
|||||||
$rc = HMCCU_SetMultipleDatapoints ($hash, \%dpval);
|
$rc = HMCCU_SetMultipleDatapoints ($hash, \%dpval);
|
||||||
return HMCCU_SetError ($hash, min(0, $rc));
|
return HMCCU_SetError ($hash, min(0, $rc));
|
||||||
}
|
}
|
||||||
elsif ($opt eq 'control') {
|
|
||||||
return HMCCU_SetError ($hash, -14) if ($cd eq '');
|
|
||||||
if (!HMCCU_IsValidDatapoint ($hash, $ccutype, $cc, $cd, 2)) {
|
|
||||||
HMCCU_Trace ($hash, 2, "Set", "Invalid datapoint $cc $cd");
|
|
||||||
return HMCCU_SetError ($hash, -8);
|
|
||||||
}
|
|
||||||
my $objvalue = shift @$a;
|
|
||||||
return HMCCU_SetError ($hash, "Usage: set $name control {value}") if (!defined ($objvalue));
|
|
||||||
|
|
||||||
$objvalue =~ s/\\_/%20/g;
|
|
||||||
$objvalue =~ HMCCU_Substitute ($objvalue, $stateVals, 1, undef, '');
|
|
||||||
|
|
||||||
$rc = HMCCU_SetMultipleDatapoints ($hash,
|
|
||||||
{ "001.$ccuif.$ccuaddr.$cd" => $objvalue }
|
|
||||||
);
|
|
||||||
return HMCCU_SetError ($hash, min(0, $rc));
|
|
||||||
}
|
|
||||||
elsif ($opt eq 'toggle') {
|
elsif ($opt eq 'toggle') {
|
||||||
return HMCCU_SetError ($hash, -15) if ($stateVals eq '');
|
return HMCCU_SetError ($hash, -15) if ($stateVals eq '');
|
||||||
return HMCCU_SetError ($hash, -12) if ($cc eq '');
|
return HMCCU_SetError ($hash, -12) if ($cc eq '');
|
||||||
@ -400,11 +396,10 @@ sub HMCCUCHN_Set ($@)
|
|||||||
my $i = 0;
|
my $i = 0;
|
||||||
foreach my $set (@setList) {
|
foreach my $set (@setList) {
|
||||||
my ($ps, $dpt, $par) = split(/:/, $set);
|
my ($ps, $dpt, $par) = split(/:/, $set);
|
||||||
$ps = $ps eq 'V' ? 'VALUES' : 'MASTER';
|
|
||||||
|
|
||||||
return HMCCU_SetError ($hash, "Syntax error in definition of command $opt")
|
return HMCCU_SetError ($hash, "Syntax error in definition of command $opt")
|
||||||
if (!defined($par));
|
if (!defined($par));
|
||||||
if (!HMCCU_IsValidParameter ($hash, $ccuaddr, $ps, $dpt)) {
|
if (!HMCCU_IsValidParameter ($hash, $ccuaddr, $pset{$ps}, $dpt)) {
|
||||||
HMCCU_Trace ($hash, 2, "Set", "Invalid parameter $ps $dpt");
|
HMCCU_Trace ($hash, 2, "Set", "Invalid parameter $ps $dpt");
|
||||||
return HMCCU_SetError ($hash, -8);
|
return HMCCU_SetError ($hash, -8);
|
||||||
}
|
}
|
||||||
@ -416,8 +411,8 @@ sub HMCCUCHN_Set ($@)
|
|||||||
if (!defined($value) && defined($parDef)) {
|
if (!defined($value) && defined($parDef)) {
|
||||||
if ($parDef =~ /^[+-][0-9]+$/) {
|
if ($parDef =~ /^[+-][0-9]+$/) {
|
||||||
return HMCCU_SetError ($hash, "Current value of $cc.$dpt not available")
|
return HMCCU_SetError ($hash, "Current value of $cc.$dpt not available")
|
||||||
if (!defined($hash->{hmccu}{dp}{"$cc.$dpt"}{$ps}{SVAL}));
|
if (!defined($hash->{hmccu}{dp}{"$cc.$dpt"}{$pset{$ps}}{SVAL}));
|
||||||
$value = $hash->{hmccu}{dp}{"$cc.$dpt"}{$ps}{SVAL}+int($parDef);
|
$value = $hash->{hmccu}{dp}{"$cc.$dpt"}{$pset{$ps}}{SVAL}+int($parDef);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$value = $parDef;
|
$value = $parDef;
|
||||||
@ -428,7 +423,14 @@ sub HMCCUCHN_Set ($@)
|
|||||||
if (!defined($value));
|
if (!defined($value));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$value = $par;
|
if (exists($valLookup{$ps}{$dpt})) {
|
||||||
|
return HMCCU_SetError ($hash, "Illegal value $par. Use one of ".join(',', keys %{$valLookup{$ps}{$dpt}}))
|
||||||
|
if (!exists($valLookup{$ps}{$dpt}{$par}));
|
||||||
|
$value = $valLookup{$ps}{$dpt}{$par};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$value = $par;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($opt eq 'pct' || $opt eq 'level') {
|
if ($opt eq 'pct' || $opt eq 'level') {
|
||||||
@ -457,7 +459,7 @@ sub HMCCUCHN_Set ($@)
|
|||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ($ps eq 'VALUES') {
|
if ($ps eq 'V') {
|
||||||
my $no = sprintf ("%03d", $i);
|
my $no = sprintf ("%03d", $i);
|
||||||
$dpval{"$i.$ccuif.$ccuaddr.$dpt"} = $value;
|
$dpval{"$i.$ccuif.$ccuaddr.$dpt"} = $value;
|
||||||
$i++;
|
$i++;
|
||||||
@ -579,7 +581,7 @@ sub HMCCUCHN_Set ($@)
|
|||||||
else {
|
else {
|
||||||
my $retmsg = "clear defaults:noArg";
|
my $retmsg = "clear defaults:noArg";
|
||||||
if ($hash->{readonly} ne 'yes') {
|
if ($hash->{readonly} ne 'yes') {
|
||||||
$retmsg .= " config control";
|
$retmsg .= " config";
|
||||||
$retmsg .= ':'.join(',', @states) if (scalar(@states) > 0);
|
$retmsg .= ':'.join(',', @states) if (scalar(@states) > 0);
|
||||||
$retmsg .= " datapoint".$cmdList;
|
$retmsg .= " datapoint".$cmdList;
|
||||||
$retmsg .= ' toggle:noArg' if (scalar(@states) > 0);
|
$retmsg .= ' toggle:noArg' if (scalar(@states) > 0);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# $Id: 88_HMCCURPCPROC.pm 18745 2019-02-26 17:33:23Z zap $
|
# $Id: 88_HMCCURPCPROC.pm 18745 2019-02-26 17:33:23Z zap $
|
||||||
#
|
#
|
||||||
# Version 4.4.002
|
# Version 4.4.003
|
||||||
#
|
#
|
||||||
# Subprocess based RPC Server module for HMCCU.
|
# Subprocess based RPC Server module for HMCCU.
|
||||||
#
|
#
|
||||||
@ -38,7 +38,7 @@ require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
|||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
# HMCCURPC version
|
# HMCCURPC version
|
||||||
my $HMCCURPCPROC_VERSION = '4.4.001';
|
my $HMCCURPCPROC_VERSION = '4.4.003';
|
||||||
|
|
||||||
# Maximum number of events processed per call of Read()
|
# Maximum number of events processed per call of Read()
|
||||||
my $HMCCURPCPROC_MAX_EVENTS = 100;
|
my $HMCCURPCPROC_MAX_EVENTS = 100;
|
||||||
@ -2342,7 +2342,8 @@ sub HMCCURPCPROC_Write ($$$$)
|
|||||||
# Try to send events immediately. Put them in queue if send fails
|
# Try to send events immediately. Put them in queue if send fails
|
||||||
my $rc = 0;
|
my $rc = 0;
|
||||||
my $err = '';
|
my $err = '';
|
||||||
if ($et ne 'ND' && $server->{hmccu}{ccuflags} !~ /queueEvents/) {
|
# if ($et ne 'ND' && $server->{hmccu}{ccuflags} !~ /queueEvents/) {
|
||||||
|
if ($server->{hmccu}{ccuflags} !~ /queueEvents/) {
|
||||||
($rc, $err) = HMCCURPCPROC_SendData ($server->{hmccu}{sockparent}, $ev);
|
($rc, $err) = HMCCURPCPROC_SendData ($server->{hmccu}{sockparent}, $ev);
|
||||||
HMCCU_Log ($name, 3, "SendData $ev $err") if ($rc == 0);
|
HMCCU_Log ($name, 3, "SendData $ev $err") if ($rc == 0);
|
||||||
}
|
}
|
||||||
@ -2430,22 +2431,29 @@ sub HMCCURPCPROC_NewDevicesCB ($$$)
|
|||||||
|
|
||||||
HMCCU_Log ($name, 2, "$cb NewDevice received $devcount device and channel specifications");
|
HMCCU_Log ($name, 2, "$cb NewDevice received $devcount device and channel specifications");
|
||||||
|
|
||||||
|
# Format:
|
||||||
|
# C/D|Address|Type|Version|Firmware|RxMode|Paramsets|
|
||||||
|
# LinkSourceRoles|LinkTargetRoles|Direction|Children|Parent|AESActive
|
||||||
|
|
||||||
foreach my $dev (@$a) {
|
foreach my $dev (@$a) {
|
||||||
my $msg = '';
|
my $msg = '';
|
||||||
|
my $ps = ref($dev->{PARAMSETS}) eq 'ARRAY' ?
|
||||||
|
join(',', @{$dev->{PARAMSETS}}) : $dev->{PARAMSETS};
|
||||||
if (defined($dev->{PARENT}) && $dev->{PARENT} ne '') {
|
if (defined($dev->{PARENT}) && $dev->{PARENT} ne '') {
|
||||||
|
my $lsr = ref($dev->{LINK_SOURCE_ROLES}) eq 'ARRAY' ?
|
||||||
|
join(',', @{$dev->{LINK_SOURCE_ROLES}}) : $dev->{LINK_SOURCE_ROLES};
|
||||||
|
my $ltr = ref($dev->{LINK_TARGET_ROLES}) eq 'ARRAY' ?
|
||||||
|
join(',', @{$dev->{LINK_TARGET_ROLES}}) : $dev->{LINK_TARGET_ROLES};
|
||||||
$msg = "C|".$dev->{ADDRESS}."|".$dev->{TYPE}."|".$dev->{VERSION}.
|
$msg = "C|".$dev->{ADDRESS}."|".$dev->{TYPE}."|".$dev->{VERSION}.
|
||||||
"|null|null|".join(',',@{$dev->{PARAMSETS}}).
|
"|null|null|".$ps."|".$lsr."|".$ltr."|".$dev->{DIRECTION}.
|
||||||
"|".join(',',@{$dev->{LINK_SOURCE_ROLES}}).
|
|
||||||
"|".join(',',@{$dev->{LINK_TARGET_ROLES}})."|".$dev->{DIRECTION}.
|
|
||||||
"|null|".$dev->{PARENT}."|".$dev->{AES_ACTIVE};
|
"|null|".$dev->{PARENT}."|".$dev->{AES_ACTIVE};
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# Wired devices do not have a RX_MODE attribute
|
# Wired devices do not have a RX_MODE attribute
|
||||||
my $rx = exists ($dev->{RX_MODE}) ? $dev->{RX_MODE} : 'null';
|
my $rx = exists ($dev->{RX_MODE}) ? $dev->{RX_MODE} : 'null';
|
||||||
$msg = "D|".$dev->{ADDRESS}."|".$dev->{TYPE}."|".$dev->{VERSION}."|".
|
$msg = "D|".$dev->{ADDRESS}."|".$dev->{TYPE}."|".$dev->{VERSION}."|".
|
||||||
$dev->{FIRMWARE}."|".$rx."|".join(',',@{$dev->{PARAMSETS}}).
|
$dev->{FIRMWARE}."|".$rx."|".$ps."|null|null|null|".
|
||||||
"|null|null|null".
|
join(',',@{$dev->{CHILDREN}})."|null|null";
|
||||||
"|".join(',',@{$dev->{CHILDREN}})."|null|null";
|
|
||||||
}
|
}
|
||||||
HMCCURPCPROC_Write ($server, "ND", $cb, $msg);
|
HMCCURPCPROC_Write ($server, "ND", $cb, $msg);
|
||||||
}
|
}
|
||||||
|
@ -35,12 +35,36 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
'SHUTTER_CONTACT' => {
|
'SHUTTER_CONTACT' => {
|
||||||
F => 3, S => 'STATE', C => '', V => ''
|
F => 3, S => 'STATE', C => '', V => ''
|
||||||
},
|
},
|
||||||
|
'SHUTTER_CONTACT_TRANSCEIVER' => {
|
||||||
|
F => 3, S => 'STATE', C => '', V => ''
|
||||||
|
},
|
||||||
|
'ROTARY_HANDLE_TRANSCEIVER' => {
|
||||||
|
F => 3, S => 'STATE', C => '', V => ''
|
||||||
|
},
|
||||||
|
'ALARM_SWITCH_VIRTUAL_RECEIVER' => {
|
||||||
|
F => 3, S => 'STATE', C => '', V => ''
|
||||||
|
},
|
||||||
|
'SMOKE_DETECTOR' => {
|
||||||
|
F => 3, S => 'SMOKE_DETECTOR_ALARM_STATUS', C => '', V => ''
|
||||||
|
},
|
||||||
|
'LUXMETER' => {
|
||||||
|
F => 3, S => 'LUX', C => '', V => ''
|
||||||
|
},
|
||||||
|
'MOTIONDETECTOR_TRANSCEIVER' => {
|
||||||
|
F => 3, S => 'MOTION', C => 'MOTION_DETECTION_ACTIVE', V => 'on:true,off:false'
|
||||||
|
},
|
||||||
'KEY' => {
|
'KEY' => {
|
||||||
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true'
|
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true'
|
||||||
},
|
},
|
||||||
|
'KEY_TRANSCEIVER' => {
|
||||||
|
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true'
|
||||||
|
},
|
||||||
'BLIND' => {
|
'BLIND' => {
|
||||||
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'open:100,close:0'
|
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'open:100,close:0'
|
||||||
},
|
},
|
||||||
|
'BLIND_VIRTUAL_RECEIVER' => {
|
||||||
|
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'open:100,close:0'
|
||||||
|
},
|
||||||
'SWITCH' => {
|
'SWITCH' => {
|
||||||
F => 3, S => 'STATE', C => 'STATE', V => 'on:true,off:false'
|
F => 3, S => 'STATE', C => 'STATE', V => 'on:true,off:false'
|
||||||
},
|
},
|
||||||
@ -50,6 +74,9 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
'DIMMER' => {
|
'DIMMER' => {
|
||||||
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0'
|
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0'
|
||||||
},
|
},
|
||||||
|
'DIMMER_VIRTUAL_RECEIVER' => {
|
||||||
|
F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0'
|
||||||
|
},
|
||||||
'WEATHER_TRANSMIT' => {
|
'WEATHER_TRANSMIT' => {
|
||||||
F => 1, S => 'TEMPERATURE', C => 'TEMPERATURE', V => ''
|
F => 1, S => 'TEMPERATURE', C => 'TEMPERATURE', V => ''
|
||||||
},
|
},
|
||||||
@ -73,16 +100,33 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
# Paramset:Datapoint:FixedValue[,FixedValue]
|
# Paramset:Datapoint:FixedValue[,FixedValue]
|
||||||
# Paramset:Datapoint:?Parameter
|
# Paramset:Datapoint:?Parameter
|
||||||
# Paramset:Datapoint:?Parameter=Default-Value
|
# Paramset:Datapoint:?Parameter=Default-Value
|
||||||
|
# Paramset:Datapoint:#Parameter
|
||||||
# Paramset:
|
# Paramset:
|
||||||
# V=VALUES or M=MASTER
|
# V=VALUES, M=MASTER (channel), D=MASTER (device)
|
||||||
|
# If Parameter is preceded by ? any value is accepted.
|
||||||
|
# If Parameter is preceded by # Datapoint must have type ENUM and
|
||||||
|
# valid values are taken from parameter set description.
|
||||||
# If Default-Value is preceeded by + or -, value is added to or
|
# If Default-Value is preceeded by + or -, value is added to or
|
||||||
# subtracted from current datapoint value
|
# subtracted from current datapoint value
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
%HMCCU_ROLECMDS = (
|
%HMCCU_ROLECMDS = (
|
||||||
|
'MOTIONDETECTOR_TRANSCEIVER' => {
|
||||||
|
'on' => 'V:MOTION_DETECTION_ACTIVE:true',
|
||||||
|
'off' => 'V:MOTION_DETECTION_ACTIVE:false'
|
||||||
|
},
|
||||||
|
'SMOKE_DETECTOR' => {
|
||||||
|
'command' => 'V:SMOKE_DETECTOR_COMMAND:#command'
|
||||||
|
},
|
||||||
'KEY' => {
|
'KEY' => {
|
||||||
'on' => 'V:PRESS_SHORT:true',
|
'on' => 'V:PRESS_SHORT:true',
|
||||||
'off' => 'V:PRESS_SHORT:true'
|
'off' => 'V:PRESS_SHORT:true',
|
||||||
|
'press' => 'V:PRESS_SHORT:true'
|
||||||
|
},
|
||||||
|
'KEY_TRANSCEIVER' => {
|
||||||
|
'on' => 'V:PRESS_SHORT:true',
|
||||||
|
'off' => 'V:PRESS_SHORT:true',
|
||||||
|
'press' => 'V:PRESS_SHORT:true'
|
||||||
},
|
},
|
||||||
'BLIND' => {
|
'BLIND' => {
|
||||||
'pct' => 'V:LEVEL:?level',
|
'pct' => 'V:LEVEL:?level',
|
||||||
@ -92,6 +136,22 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
'down' => 'V:LEVEL:?delta=-10',
|
'down' => 'V:LEVEL:?delta=-10',
|
||||||
'stop' => 'V:STOP:true'
|
'stop' => 'V:STOP:true'
|
||||||
},
|
},
|
||||||
|
'BLIND_VIRTUAL_RECEIVER' => {
|
||||||
|
'pct' => 'V:LEVEL:?level',
|
||||||
|
'open' => 'V:LEVEL:100',
|
||||||
|
'close' => 'V:LEVEL:0',
|
||||||
|
'up' => 'V:LEVEL:?delta=+10',
|
||||||
|
'down' => 'V:LEVEL:?delta=-10',
|
||||||
|
'stop' => 'V:STOP:true'
|
||||||
|
},
|
||||||
|
'SHUTTER_VIRTUAL_RECEIVER' => {
|
||||||
|
'pct' => 'V:LEVEL:?level',
|
||||||
|
'open' => 'V:LEVEL:100',
|
||||||
|
'close' => 'V:LEVEL:0',
|
||||||
|
'up' => 'V:LEVEL:?delta=+10',
|
||||||
|
'down' => 'V:LEVEL:?delta=-10',
|
||||||
|
'stop' => 'V:STOP:true'
|
||||||
|
},
|
||||||
'SWITCH' => {
|
'SWITCH' => {
|
||||||
'on' => 'V:STATE:true',
|
'on' => 'V:STATE:true',
|
||||||
'off' => 'V:STATE:false'
|
'off' => 'V:STATE:false'
|
||||||
@ -106,13 +166,19 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
'off' => 'V:LEVEL:0',
|
'off' => 'V:LEVEL:0',
|
||||||
'stop' => 'V:RAMP_STOP:true'
|
'stop' => 'V:RAMP_STOP:true'
|
||||||
},
|
},
|
||||||
|
'DIMMER_VIRTUAL_RECEIVER' => {
|
||||||
|
'pct' => 'V:LEVEL:?level',
|
||||||
|
'on' => 'V:LEVEL:100',
|
||||||
|
'off' => 'V:LEVEL:0'
|
||||||
|
},
|
||||||
'THERMALCONTROL_TRANSMIT' => {
|
'THERMALCONTROL_TRANSMIT' => {
|
||||||
'desired-temp' => 'V:SET_TEMPERATURE:?temperature',
|
'desired-temp' => 'V:SET_TEMPERATURE:?temperature',
|
||||||
'manu' => 'V:MANU_MODE:?temperature',
|
'manu' => 'V:MANU_MODE:?temperature',
|
||||||
'on' => 'V:MANU_MODE:30.5',
|
'on' => 'V:MANU_MODE:30.5',
|
||||||
'off' => 'V:MANU_MODE:4.5',
|
'off' => 'V:MANU_MODE:4.5',
|
||||||
'auto' => 'V:AUTO_MODE:true',
|
'auto' => 'V:AUTO_MODE:true',
|
||||||
'boost' => 'V:BOOST_MODE:true'
|
'boost' => 'V:BOOST_MODE:true',
|
||||||
|
'week-program' => 'D:WEEK_PROGRAM_POINTER:#program'
|
||||||
},
|
},
|
||||||
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
||||||
'desired-temp' => 'V:SET_TEMPERATURE:?temperature',
|
'desired-temp' => 'V:SET_TEMPERATURE:?temperature',
|
||||||
@ -140,39 +206,54 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
%HMCCU_ATTR = (
|
%HMCCU_ATTR = (
|
||||||
'BLIND' => {
|
'BLIND' => {
|
||||||
'ccureadingname' => 'LEVEL$:pct',
|
'ccureadingname' => 'LEVEL$:pct',
|
||||||
'webCmd' => 'up:down:stop:control',
|
'webCmd' => 'up:down:stop:pct',
|
||||||
'widgetOverride' => 'control:slider,0,10,100 pct:slider,0,10,100'
|
'widgetOverride' => 'pct:slider,0,10,100'
|
||||||
|
},
|
||||||
|
'BLIND_VIRTUAL_RECEIVER' => {
|
||||||
|
'ccureadingname' => 'LEVEL$:pct',
|
||||||
|
'webCmd' => 'up:down:stop:pct',
|
||||||
|
'widgetOverride' => 'pct:slider,0,10,100'
|
||||||
|
},
|
||||||
|
'SHUTTER_VIRTUAL_RECEIVER' => {
|
||||||
|
'ccureadingname' => 'LEVEL$:pct',
|
||||||
|
'webCmd' => 'up:down:stop:pct',
|
||||||
|
'widgetOverride' => 'pct:slider,0,10,100'
|
||||||
},
|
},
|
||||||
'SWITCH' => {
|
'SWITCH' => {
|
||||||
'webCmd' => 'control',
|
'webCmd' => 'toggle',
|
||||||
'widgetOverride' => 'control:uzsuToggle,off,on'
|
'widgetOverride' => 'toggle:uzsuToggle,off,on'
|
||||||
},
|
},
|
||||||
'SWITCH_VIRTUAL_RECEIVER' => {
|
'SWITCH_VIRTUAL_RECEIVER' => {
|
||||||
'webCmd' => 'control',
|
'webCmd' => 'toggle',
|
||||||
'widgetOverride' => 'control:uzsuToggle,off,on'
|
'widgetOverride' => 'toggle:uzsuToggle,off,on'
|
||||||
},
|
},
|
||||||
'DIMMER' => {
|
'DIMMER' => {
|
||||||
'ccureadingname' => 'LEVEL$:pct',
|
'ccureadingname' => 'LEVEL$:pct',
|
||||||
'webCmd' => 'control',
|
'webCmd' => 'pct',
|
||||||
'widgetOverride' => 'pct:slider,0,10,100 level:slider,0,10,100 control:slider,0,10,100'
|
'widgetOverride' => 'pct:slider,0,10,100'
|
||||||
|
},
|
||||||
|
'DIMMER_VIRTUAL_RECEIVER' => {
|
||||||
|
'ccureadingname' => 'LEVEL$:pct',
|
||||||
|
'webCmd' => 'pct',
|
||||||
|
'widgetOverride' => 'pct:slider,0,10,100'
|
||||||
},
|
},
|
||||||
'THERMALCONTROL_TRANSMIT' => {
|
'THERMALCONTROL_TRANSMIT' => {
|
||||||
'ccureadingname' => 'SET_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
'ccureadingname' => 'SET_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
||||||
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
||||||
'webCmd' => 'desired-temp:auto:manu:boost:on:off',
|
'webCmd' => 'desired-temp:auto:manu:boost:on:off',
|
||||||
'widgetOverride' => 'control:slider,4.5,0.5,30.5,1 desired-temp:slider,4.5,0.5,30.5,1'
|
'widgetOverride' => 'desired-temp:slider,4.5,0.5,30.5,1'
|
||||||
},
|
},
|
||||||
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
||||||
'ccureadingname' => 'SET_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
'ccureadingname' => 'SET_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
||||||
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
||||||
'webCmd' => 'desired-temp',
|
'webCmd' => 'desired-temp',
|
||||||
'widgetOverride' => 'control:slider,4.5,0.5,30.5,1 desired-temp:slider,4.5,0.5,30.5,1'
|
'widgetOverride' => 'desired-temp:slider,4.5,0.5,30.5,1'
|
||||||
},
|
},
|
||||||
'HEATING_CLIMATECONTROL_TRANSCEIVER' => {
|
'HEATING_CLIMATECONTROL_TRANSCEIVER' => {
|
||||||
'ccureadingname' => 'SET_POINT_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
'ccureadingname' => 'SET_POINT_TEMPERATURE$:desired-temp;ACTUAL_TEMPERATURE$:measured-temp',
|
||||||
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus',
|
||||||
'webCmd' => 'desired-temp:auto:manu:boost',
|
'webCmd' => 'desired-temp:auto:manu:boost',
|
||||||
'widgetOverride' => 'control:slider,4.5,0.5,30.5,1 desired-temp:slider,4.5,0.5,30.5,1'
|
'widgetOverride' => 'desired-temp:slider,4.5,0.5,30.5,1'
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -181,9 +262,29 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
%HMCCU_CONVERSIONS = (
|
%HMCCU_CONVERSIONS = (
|
||||||
|
'MOTIONDETECTOR_TRANSCEIVER' => {
|
||||||
|
'MOTION' => { '0' => 'noMotion', 'false' => 'noMotion', '1' => 'motion', 'true' => 'motion' },
|
||||||
|
},
|
||||||
|
'KEY' => {
|
||||||
|
'PRESS_SHORT' => { '1' => 'pressed', 'true' => 'pressed' },
|
||||||
|
'PRESS_LONG' => { '1' => 'pressed', 'true' => 'pressed' }
|
||||||
|
},
|
||||||
|
'KEY_TRANSCEIVER' => {
|
||||||
|
'PRESS_SHORT' => { '1' => 'pressed', 'true' => 'pressed' },
|
||||||
|
'PRESS_LONG' => { '1' => 'pressed', 'true' => 'pressed' }
|
||||||
|
},
|
||||||
'SHUTTER_CONTACT' => {
|
'SHUTTER_CONTACT' => {
|
||||||
'STATE' => { '0' => 'closed', '1' => 'open', 'false' => 'closed', 'true' => 'open' }
|
'STATE' => { '0' => 'closed', '1' => 'open', 'false' => 'closed', 'true' => 'open' }
|
||||||
},
|
},
|
||||||
|
'SHUTTER_CONTACT_TRANSCEIVER' => {
|
||||||
|
'STATE' => { '0' => 'closed', '1' => 'open', 'false' => 'closed', 'true' => 'open' }
|
||||||
|
},
|
||||||
|
'ROTARY_HANDLE_TRANSCEIVER' => {
|
||||||
|
'STATE' => { '0' => 'closed', '1' => 'open', 'false' => 'closed', 'true' => 'open' }
|
||||||
|
},
|
||||||
|
'ALARM_SWITCH_VIRTUAL_RECEIVER' => {
|
||||||
|
'STATE' => { '0' => 'ok', '1' => 'alarm', 'false' => 'ok', 'true' => 'alarm' }
|
||||||
|
},
|
||||||
'SWITCH' => {
|
'SWITCH' => {
|
||||||
'STATE' => { '0' => 'off', 'false' => 'off', '1' => 'on', 'true' => 'on', 'off' => '0', 'on' => '1' },
|
'STATE' => { '0' => 'off', 'false' => 'off', '1' => 'on', 'true' => 'on', 'off' => '0', 'on' => '1' },
|
||||||
},
|
},
|
||||||
@ -193,11 +294,21 @@ use vars qw(%HMCCU_SCRIPTS);
|
|||||||
'BLIND' => {
|
'BLIND' => {
|
||||||
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' }
|
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' }
|
||||||
},
|
},
|
||||||
|
'BLIND_VIRTUAL_RECEIVER' => {
|
||||||
|
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' }
|
||||||
|
},
|
||||||
|
'SHUTTER_VIRTUAL_RECEIVER' => {
|
||||||
|
'LEVEL' => { '0' => 'closed', '100' => 'open', 'close' => '0', 'open' => '100' }
|
||||||
|
},
|
||||||
'DIMMER' => {
|
'DIMMER' => {
|
||||||
'LEVEL' => { '0' => 'off', '100' => 'on', 'off' => '0', 'on' => '100' }
|
'LEVEL' => { '0' => 'off', '100' => 'on', 'off' => '0', 'on' => '100' }
|
||||||
},
|
},
|
||||||
|
'DIMMER_VIRTUAL_RECEIVER' => {
|
||||||
|
'LEVEL' => { '0' => 'off', '100' => 'on', 'off' => '0', 'on' => '100' }
|
||||||
|
},
|
||||||
'THERMALCONTROL_TRANSMIT' => {
|
'THERMALCONTROL_TRANSMIT' => {
|
||||||
'SET_TEMPERATURE' => { '4.5' => 'off', '30.5' => 'on' }
|
'SET_TEMPERATURE' => { '4.5' => 'off', '30.5' => 'on' },
|
||||||
|
'WINDOW_OPEN_REPORTING' => { '0' => 'closed', '1' => 'open', 'false' => 'closed', 'true' => 'open' }
|
||||||
},
|
},
|
||||||
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
'CLIMATECONTROL_RT_TRANSCEIVER' => {
|
||||||
'SET_TEMPERATURE' => { '4.5' => 'off', '30.5' => 'on' }
|
'SET_TEMPERATURE' => { '4.5' => 'off', '30.5' => 'on' }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user