From 1c9e60c34d9bcbba77924eaa8f65ee93c19e2f6b Mon Sep 17 00:00:00 2001 From: zap <> Date: Thu, 12 Nov 2020 18:45:39 +0000 Subject: [PATCH] HMCCU: bugs fixed 4.4 beta git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@23144 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- contrib/HMCCU/FHEM/88_HMCCU.pm | 50 ++++++++++++++++++++------------ contrib/HMCCU/FHEM/HMCCUConf.pm | 25 ++++++++++++++-- contrib/HMCCU/controls_HMCCU.txt | 10 +++---- 3 files changed, 58 insertions(+), 27 deletions(-) diff --git a/contrib/HMCCU/FHEM/88_HMCCU.pm b/contrib/HMCCU/FHEM/88_HMCCU.pm index 0ed80d4af..5669d9c62 100644 --- a/contrib/HMCCU/FHEM/88_HMCCU.pm +++ b/contrib/HMCCU/FHEM/88_HMCCU.pm @@ -4,7 +4,7 @@ # # $Id: 88_HMCCU.pm 18745 2019-02-26 17:33:23Z zap $ # -# Version 4.4.051 +# Version 4.4.052 # # Module for communication between FHEM and Homematic CCU2/3. # @@ -41,22 +41,23 @@ use SetExtensions; use HMCCUConf; # Import configuration data -my $HMCCU_STATECONTROL = \%HMCCUConf::HMCCU_STATECONTROL; -my $HMCCU_READINGS = \%HMCCUConf::HMCCU_READINGS; -my $HMCCU_ROLECMDS = \%HMCCUConf::HMCCU_ROLECMDS; -my $HMCCU_GETROLECMDS = \%HMCCUConf::HMCCU_GETROLECMDS; -my $HMCCU_ATTR = \%HMCCUConf::HMCCU_ATTR; -my $HMCCU_CONVERSIONS = \%HMCCUConf::HMCCU_CONVERSIONS; -my $HMCCU_CHN_DEFAULTS = \%HMCCUConf::HMCCU_CHN_DEFAULTS; -my $HMCCU_DEV_DEFAULTS = \%HMCCUConf::HMCCU_DEV_DEFAULTS; -my $HMCCU_SCRIPTS = \%HMCCUConf::HMCCU_SCRIPTS; +my $HMCCU_CONFIG_VERSION = $HMCCUConf::HMCCU_CONFIG_VERSION; +my $HMCCU_STATECONTROL = \%HMCCUConf::HMCCU_STATECONTROL; +my $HMCCU_READINGS = \%HMCCUConf::HMCCU_READINGS; +my $HMCCU_ROLECMDS = \%HMCCUConf::HMCCU_ROLECMDS; +my $HMCCU_GETROLECMDS = \%HMCCUConf::HMCCU_GETROLECMDS; +my $HMCCU_ATTR = \%HMCCUConf::HMCCU_ATTR; +my $HMCCU_CONVERSIONS = \%HMCCUConf::HMCCU_CONVERSIONS; +my $HMCCU_CHN_DEFAULTS = \%HMCCUConf::HMCCU_CHN_DEFAULTS; +my $HMCCU_DEV_DEFAULTS = \%HMCCUConf::HMCCU_DEV_DEFAULTS; +my $HMCCU_SCRIPTS = \%HMCCUConf::HMCCU_SCRIPTS; # Custom configuration data my %HMCCU_CUST_CHN_DEFAULTS; my %HMCCU_CUST_DEV_DEFAULTS; # HMCCU version -my $HMCCU_VERSION = '4.4.051'; +my $HMCCU_VERSION = '4.4.052'; # Timeout for CCU requests (seconds) my $HMCCU_TIMEOUT_REQUEST = 4; @@ -460,6 +461,7 @@ sub HMCCU_Define ($$) } $hash->{version} = $HMCCU_VERSION; + $hash->{config} = $HMCCU_CONFIG_VERSION; $hash->{ccutype} = 'CCU2/3'; $hash->{RPCState} = 'inactive'; $hash->{NOTIFYDEV} = 'global,TYPE=(HMCCU|HMCCUDEV|HMCCUCHN)'; @@ -3354,7 +3356,7 @@ sub HMCCU_GetChannelRole ($;$) else { my ($sc, $sd, $cc, $cd) = HMCCU_GetSpecialDatapoints ($clHash); $chnNo = $cc; - } + } } if (defined($chnNo) && $chnNo ne '') { foreach my $role (split(',', $clHash->{hmccu}{role})) { @@ -3587,8 +3589,10 @@ sub HMCCU_DeviceDescToStr ($$) $devDesc = HMCCU_GetDeviceDesc ($ioHash, $a, $iface); return undef if (!defined($devDesc)); + my $channelType = $devDesc->{TYPE}; + my $status = exists($HMCCU_STATECONTROL->{$channelType}) ? ' known' : ''; $result .= $a eq $devAddr ? "Device $a" : "Channel $a"; - $result .= " $devDesc->{_name} [$devDesc->{TYPE}]\n"; + $result .= " $devDesc->{_name} [$channelType]$status\n"; foreach my $n (sort keys %{$devDesc}) { next if ($n =~ /^_/ || $n =~ /^(ADDRESS|TYPE|INDEX|VERSION)$/ || !defined($devDesc->{$n}) || $devDesc->{$n} eq ''); @@ -6123,6 +6127,7 @@ sub HMCCU_GetAttribute ($$$$) ###################################################################### # Set default attributes for client device. +# Optionally delete obsolete attributes. ###################################################################### sub HMCCU_SetDefaultAttributes ($;$) @@ -6133,9 +6138,10 @@ sub HMCCU_SetDefaultAttributes ($;$) $parRef //= { mode => 'update', role => undef, ctrlChn => undef }; my $role = $parRef->{role} // HMCCU_GetChannelRole ($clHash, $parRef->{ctrlChn}); - if ($role ne '' && exists($HMCCU_ATTR->{$role})) { - HMCCU_Log ($clHash, 2, "Default attributes found for role $role"); + if ($role ne '') { $clHash->{hmccu}{semDefaults} = 1; + + # Delete obsolete attributes if ($parRef->{mode} eq 'reset') { my @removeAttr = ('ccureadingname', 'ccuscaleval', 'eventMap', 'substitute', 'webCmd', 'widgetOverride' @@ -6144,9 +6150,14 @@ sub HMCCU_SetDefaultAttributes ($;$) CommandDeleteAttr (undef, "$clName $a") if (exists($attr{$clName}{$a})); } } - foreach my $a (keys %{$HMCCU_ATTR->{$role}}) { - CommandAttr (undef, "$clName $a ".$HMCCU_ATTR->{$role}{$a}); + + # Set additional attributes + if (exists($HMCCU_ATTR->{$role})) { + foreach my $a (keys %{$HMCCU_ATTR->{$role}}) { + CommandAttr (undef, "$clName $a ".$HMCCU_ATTR->{$role}{$a}); + } } + $clHash->{hmccu}{semDefaults} = 0; return 1; } @@ -8922,10 +8933,11 @@ sub HMCCU_MaxHashEntries ($$) format identifiers which are substituted by corresponding values of the CCU device or channel:
%n = CCU object name (channel or device)
- %d = CCU device name, %a = CCU address
+ %d = CCU device name
+ %a = CCU address
In addition a list of default attributes for the created client devices can be specified. If option 'defattr' is specified HMCCU tries to set default attributes for device. - This is not necessary of HMCCU is able to detect the role of a device or channel. + This is not necessary because HMCCU is able to detect the role of a device or channel. With option 'duplicates' HMCCU will overwrite existing devices and/or create devices for existing device addresses. Option 'save' will save FHEM config after device definition.
diff --git a/contrib/HMCCU/FHEM/HMCCUConf.pm b/contrib/HMCCU/FHEM/HMCCUConf.pm index 98f88fbb6..9d88d832f 100644 --- a/contrib/HMCCU/FHEM/HMCCUConf.pm +++ b/contrib/HMCCU/FHEM/HMCCUConf.pm @@ -4,7 +4,7 @@ # # $Id: HMCCUConf.pm 18552 2019-02-10 11:52:28Z zap $ # -# Version 4.8.007 +# Version 4.8.010 # # Configuration parameters for HomeMatic devices. # @@ -17,6 +17,7 @@ package HMCCUConf; use strict; use warnings; +use vars qw($HMCCU_CONFIG_VERSION); use vars qw(%HMCCU_STATECONTROL); use vars qw(%HMCCU_READINGS); use vars qw(%HMCCU_ROLECMDS); @@ -26,6 +27,8 @@ use vars qw(%HMCCU_CHN_DEFAULTS); use vars qw(%HMCCU_DEV_DEFAULTS); use vars qw(%HMCCU_SCRIPTS); +$HMCCU_CONFIG_VERSION = '4.8.010'; + ###################################################################### # Channel roles with state and control datapoints # F: 1=Channel/HMCCUCHN, 2=Device/HMCCUDEV, 3=Both @@ -84,8 +87,14 @@ use vars qw(%HMCCU_SCRIPTS); 'DIMMER_VIRTUAL_RECEIVER' => { F => 3, S => 'LEVEL', C => 'LEVEL', V => 'on:100,off:0' }, + 'WEATHER' => { + F => 3, S => 'TEMPERATURE', C => 'TEMPERATURE', V => '' + }, 'WEATHER_TRANSMIT' => { - F => 1, S => 'TEMPERATURE', C => 'TEMPERATURE', V => '' + F => 3, S => 'TEMPERATURE', C => 'TEMPERATURE', V => '' + }, + 'CLIMATE_TRANSCEIVER' => { + F => 3, S => 'ACTUAL_TEMPERATURE', C => 'ACTUAL_TEMPERATURE', V => '' }, 'THERMALCONTROL_TRANSMIT' => { F => 3, S => 'ACTUAL_TEMPERATURE', C => 'SET_TEMPERATURE', V => 'on:30.5,off:4.5' @@ -115,8 +124,15 @@ use vars qw(%HMCCU_SCRIPTS); '(CC#\.)?LEVEL$:+pct;(CC#\.)?LEVEL$:+pct', 'DIMMER_VIRTUAL_RECEIVER' => '(CC#\.)?LEVEL$:+pct;(CC#\.)?LEVEL$:+pct', + 'WEATHER' => + '(SC#\.)?TEMPERATURE$:+measured-temp;'. + '(SC#\.)?HUMIDITY$:+humidity', 'WEATHER_TRANSMIT' => - '(SC#\.)?TEMPERATURE$:+measured-temp', + '(SC#\.)?TEMPERATURE$:+measured-temp;'. + '(SC#\.)?HUMIDITY$:+humidity', + 'CLIMATE_TRANSCEIVER' => + '(SC#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'. + '(SC#\.)?ACTUAL_HUMIDITY$:+humidity', 'THERMALCONTROL_TRANSMIT' => '(SC#\.)?ACTUAL_TEMPERATURE$:+measured-temp;'. '(SC#\.)?ACTUAL_HUMIDITY$:+humidity;'. @@ -268,16 +284,19 @@ use vars qw(%HMCCU_SCRIPTS); %HMCCU_ATTR = ( 'BLIND' => { 'substexcl' => 'pct', + 'cmdIcon' => 'open:fts_shutter_up stop:fts_shutter_manual close:fts_shutter_down', 'webCmd' => 'open:close:stop:pct', 'widgetOverride' => 'pct:slider,0,10,100' }, 'BLIND_VIRTUAL_RECEIVER' => { 'substexcl' => 'pct', + 'cmdIcon' => 'open:fts_shutter_up stop:fts_shutter_manual close:fts_shutter_down', 'webCmd' => 'open:close:stop:pct', 'widgetOverride' => 'pct:slider,0,10,100' }, 'SHUTTER_VIRTUAL_RECEIVER' => { 'substexcl' => 'pct', + 'cmdIcon' => 'open:fts_shutter_up stop:fts_shutter_manual close:fts_shutter_down', 'webCmd' => 'open:close:stop:pct', 'widgetOverride' => 'pct:slider,0,10,100' }, diff --git a/contrib/HMCCU/controls_HMCCU.txt b/contrib/HMCCU/controls_HMCCU.txt index 398b64df7..59b21ffd3 100644 --- a/contrib/HMCCU/controls_HMCCU.txt +++ b/contrib/HMCCU/controls_HMCCU.txt @@ -1,5 +1,5 @@ -UPD 2020-11-08_17:25:29 102657 FHEM/88_HMCCURPCPROC.pm -UPD 2020-11-08_17:25:44 75793 FHEM/HMCCUConf.pm -UPD 2020-11-08_17:23:47 39378 FHEM/88_HMCCUCHN.pm -UPD 2020-11-08_17:23:36 302150 FHEM/88_HMCCU.pm -UPD 2020-11-08_17:23:59 30769 FHEM/88_HMCCUDEV.pm +UPD 2020-11-12_19:39:34 102657 FHEM/88_HMCCURPCPROC.pm +UPD 2020-11-12_19:40:01 76540 FHEM/HMCCUConf.pm +UPD 2020-11-12_19:39:14 39378 FHEM/88_HMCCUCHN.pm +UPD 2020-11-12_19:39:06 302472 FHEM/88_HMCCU.pm +UPD 2020-11-12_19:39:22 30769 FHEM/88_HMCCUDEV.pm