mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-23 08:36:24 +00:00
HMCCU: Bugfixes and improvements
git-svn-id: https://svn.fhem.de/fhem/trunk@25675 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
1e4bc06ec7
commit
594fc4d420
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# 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.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- bugfix: 88_HMCCU: bugfixes and improvements
|
||||||
- bugfix: 70_ESCVP21net: bugfixes
|
- bugfix: 70_ESCVP21net: bugfixes
|
||||||
- feature: 73_GardenaSmartBridge: asyncron response processing,
|
- feature: 73_GardenaSmartBridge: asyncron response processing,
|
||||||
no blocking if more then 3-4 devices
|
no blocking if more then 3-4 devices
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
# CCU group devices, HomeGear, CUxD, Osram Lightify, Homematic Virtual Layer
|
# CCU group devices, HomeGear, CUxD, Osram Lightify, Homematic Virtual Layer
|
||||||
# and Philips Hue (not tested)
|
# and Philips Hue (not tested)
|
||||||
#
|
#
|
||||||
# (c) 2021 by zap (zap01 <at> t-online <dot> de)
|
# (c) 2022 by zap (zap01 <at> t-online <dot> de)
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@ -57,7 +57,7 @@ my %HMCCU_CUST_CHN_DEFAULTS;
|
|||||||
my %HMCCU_CUST_DEV_DEFAULTS;
|
my %HMCCU_CUST_DEV_DEFAULTS;
|
||||||
|
|
||||||
# HMCCU version
|
# HMCCU version
|
||||||
my $HMCCU_VERSION = '5.0 220301356';
|
my $HMCCU_VERSION = '5.0 220431743';
|
||||||
|
|
||||||
# Timeout for CCU requests (seconds)
|
# Timeout for CCU requests (seconds)
|
||||||
my $HMCCU_TIMEOUT_REQUEST = 4;
|
my $HMCCU_TIMEOUT_REQUEST = 4;
|
||||||
@ -2485,15 +2485,15 @@ sub HMCCU_ModifyReadingName ($$)
|
|||||||
my $f = 0;
|
my $f = 0;
|
||||||
|
|
||||||
foreach my $rr (@$srl) {
|
foreach my $rr (@$srl) {
|
||||||
my ($rold, $rnew) = split (':', $rr);
|
my ($rold, $rnw) = split (':', $rr);
|
||||||
if (!defined ($rnew) || $rnew eq '') {
|
next if (!defined($rold) || $rold eq '');
|
||||||
|
if ($rn =~ /$rold/) {
|
||||||
|
if (!defined ($rnw) || $rnw eq '') {
|
||||||
# Suppress reading
|
# Suppress reading
|
||||||
$f = 1;
|
$f = 1;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
my @rnewList = split (',', $rnew);
|
foreach my $rnew (split (',', $rnw)) {
|
||||||
if ($rn =~ /$rold/) {
|
|
||||||
foreach my $rnew (@rnewList) {
|
|
||||||
my $radd = $rn;
|
my $radd = $rn;
|
||||||
if ($rnew =~ /^\+(.+)$/) {
|
if ($rnew =~ /^\+(.+)$/) {
|
||||||
# Add new reading
|
# Add new reading
|
||||||
@ -2718,10 +2718,14 @@ sub HMCCU_Log ($$$;$)
|
|||||||
|
|
||||||
if (ref($msg) eq 'ARRAY') {
|
if (ref($msg) eq 'ARRAY') {
|
||||||
foreach my $m (@$msg) {
|
foreach my $m (@$msg) {
|
||||||
|
# Remove credentials from URLs
|
||||||
|
$m =~ s/(https?:\/\/)[^\@]+\@/$1/g;
|
||||||
Log3 $logname, $level, "$type [$name] $m";
|
Log3 $logname, $level, "$type [$name] $m";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
# Remove credentials from URLs
|
||||||
|
$msg =~ s/(https?:\/\/)[^\@]+\@/$1/g;
|
||||||
Log3 $logname, $level, "$type [$name] $msg";
|
Log3 $logname, $level, "$type [$name] $msg";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7837,8 +7841,11 @@ sub HMCCU_ExecuteGetParameterCommand ($@)
|
|||||||
|
|
||||||
my %objects;
|
my %objects;
|
||||||
foreach my $a (@$addList) {
|
foreach my $a (@$addList) {
|
||||||
my $devDesc = HMCCU_GetDeviceDesc ($ioHash, $a, $clHash->{ccuif}) // return HMCCU_Log (
|
my $devDesc = HMCCU_GetDeviceDesc ($ioHash, $a, $clHash->{ccuif});
|
||||||
$clHash, 2, "Can't get device description", undef);
|
if (!defined($devDesc)) {
|
||||||
|
HMCCU_Log ($clHash, 2, "Can't get device description");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
my $paramset = $defParamset eq '' ? $devDesc->{PARAMSETS} : $defParamset;
|
my $paramset = $defParamset eq '' ? $devDesc->{PARAMSETS} : $defParamset;
|
||||||
my ($da, $dc) = HMCCU_SplitChnAddr ($a, 'd');
|
my ($da, $dc) = HMCCU_SplitChnAddr ($a, 'd');
|
||||||
@ -10088,6 +10095,15 @@ sub HMCCU_Min ($$)
|
|||||||
{
|
{
|
||||||
my ($a, $b) = @_;
|
my ($a, $b) = @_;
|
||||||
|
|
||||||
|
if (!defined($a) || !defined($b)) {
|
||||||
|
HMCCU_Log (undef, 2, "Argument not defined in HMCCU_Min ".stacktraceAsString(undef));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!HMCCU_IsFltNum($a) || !HMCCU_IsFltNum($b)) {
|
||||||
|
HMCCU_Log (undef, 2, "Argument $a or $b isn't numeric in HMCCU_Min ".stacktraceAsString(undef));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return $a < $b ? $a : $b;
|
return $a < $b ? $a : $b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10095,6 +10111,15 @@ sub HMCCU_Max ($$)
|
|||||||
{
|
{
|
||||||
my ($a, $b) = @_;
|
my ($a, $b) = @_;
|
||||||
|
|
||||||
|
if (!defined($a) || !defined($b)) {
|
||||||
|
HMCCU_Log (undef, 2, "Argument not defined in HMCCU_Min ".stacktraceAsString(undef));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!HMCCU_IsFltNum($a) || !HMCCU_IsFltNum($b)) {
|
||||||
|
HMCCU_Log (undef, 2, "Argument $a or $b isn't numeric in HMCCU_Max ".stacktraceAsString(undef));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return $a > $b ? $a : $b;
|
return $a > $b ? $a : $b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10537,7 +10562,7 @@ sub HMCCU_BitsToStr ($$)
|
|||||||
|
|
||||||
sub HMCCU_AdjustValue ($$$)
|
sub HMCCU_AdjustValue ($$$)
|
||||||
{
|
{
|
||||||
my ($value, $low, $high);
|
my ($value, $low, $high) = @_;;
|
||||||
|
|
||||||
return $low if ($value < $low);
|
return $low if ($value < $low);
|
||||||
return $high if ($value > $high);
|
return $high if ($value > $high);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
# Version 5.0
|
# Version 5.0
|
||||||
#
|
#
|
||||||
# (c) 2021 zap (zap01 <at> t-online <dot> de)
|
# (c) 2022 zap (zap01 <at> t-online <dot> de)
|
||||||
#
|
#
|
||||||
######################################################################
|
######################################################################
|
||||||
# Client device for Homematic channels.
|
# Client device for Homematic channels.
|
||||||
@ -19,7 +19,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use SetExtensions;
|
use SetExtensions;
|
||||||
|
|
||||||
require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
# require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
||||||
|
|
||||||
sub HMCCUCHN_Initialize ($);
|
sub HMCCUCHN_Initialize ($);
|
||||||
sub HMCCUCHN_Define ($@);
|
sub HMCCUCHN_Define ($@);
|
||||||
@ -30,7 +30,7 @@ sub HMCCUCHN_Set ($@);
|
|||||||
sub HMCCUCHN_Get ($@);
|
sub HMCCUCHN_Get ($@);
|
||||||
sub HMCCUCHN_Attr ($@);
|
sub HMCCUCHN_Attr ($@);
|
||||||
|
|
||||||
my $HMCCUCHN_VERSION = '5.0 220301356';
|
my $HMCCUCHN_VERSION = '5.0 220431743';
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Initialize module
|
# Initialize module
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
# Version 5.0
|
# Version 5.0
|
||||||
#
|
#
|
||||||
# (c) 2021 zap (zap01 <at> t-online <dot> de)
|
# (c) 2022 zap (zap01 <at> t-online <dot> de)
|
||||||
#
|
#
|
||||||
######################################################################
|
######################################################################
|
||||||
# Client device for Homematic devices.
|
# Client device for Homematic devices.
|
||||||
@ -20,7 +20,7 @@ use warnings;
|
|||||||
# use Data::Dumper;
|
# use Data::Dumper;
|
||||||
use SetExtensions;
|
use SetExtensions;
|
||||||
|
|
||||||
require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
# require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
||||||
|
|
||||||
sub HMCCUDEV_Initialize ($);
|
sub HMCCUDEV_Initialize ($);
|
||||||
sub HMCCUDEV_Define ($@);
|
sub HMCCUDEV_Define ($@);
|
||||||
@ -31,7 +31,7 @@ sub HMCCUDEV_Set ($@);
|
|||||||
sub HMCCUDEV_Get ($@);
|
sub HMCCUDEV_Get ($@);
|
||||||
sub HMCCUDEV_Attr ($@);
|
sub HMCCUDEV_Attr ($@);
|
||||||
|
|
||||||
my $HMCCUDEV_VERSION = '5.0 220301356';
|
my $HMCCUDEV_VERSION = '5.0 220431743';
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Initialize module
|
# Initialize module
|
||||||
@ -719,12 +719,12 @@ sub HMCCUDEV_Get ($@)
|
|||||||
commands are allowed:
|
commands are allowed:
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<ul>
|
<ul>
|
||||||
<li>text1-3=Text - Content of display line 2-4</li>
|
<li>text1-3:Text - Content of display line 2-4</li>
|
||||||
<li>icon1-3=IconCode - Icons of display line 2-4</li>
|
<li>icon1-3:IconCode - Icons of display line 2-4</li>
|
||||||
<li>sound=SoundCode - Sound</li>
|
<li>sound:SoundCode - Sound</li>
|
||||||
<li>signal=SignalCode - Optical signal</li>
|
<li>signal:SignalCode - Optical signal</li>
|
||||||
<li>pause=Seconds - Pause between signals (1-160)</li>
|
<li>pause:Seconds - Pause between signals (1-160)</li>
|
||||||
<li>repeat=Count - Repeat count for sound (0-15)</li>
|
<li>repeat:Count - Repeat count for sound (0-15)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br/>
|
<br/>
|
||||||
IconCode := ico_off, ico_on, ico_open, ico_closed, ico_error, ico_ok, ico_info,
|
IconCode := ico_off, ico_on, ico_open, ico_closed, ico_error, ico_ok, ico_info,
|
||||||
@ -734,7 +734,7 @@ sub HMCCUDEV_Get ($@)
|
|||||||
snd_long<br/><br/>
|
snd_long<br/><br/>
|
||||||
Example:<br/>
|
Example:<br/>
|
||||||
<code>
|
<code>
|
||||||
set HM_EPDISP datapoint 3.SUBMIT "text1:Line2,text2:Has Blank,text3:10:05:21,sound:snd_short,signal:sig_red
|
set HM_EPDISP datapoint 3.SUBMIT text1:Line2,text2:Has Blank,text3:10:05:21,sound:snd_short,signal:sig_red
|
||||||
</code>
|
</code>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
# RPC::XML::Client
|
# RPC::XML::Client
|
||||||
# RPC::XML::Server
|
# RPC::XML::Server
|
||||||
#
|
#
|
||||||
# ND deaktiviert in Read und Write!!
|
# ND deactivated in Read and Write!!
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ use RPC::XML::Client;
|
|||||||
use RPC::XML::Server;
|
use RPC::XML::Server;
|
||||||
use SetExtensions;
|
use SetExtensions;
|
||||||
|
|
||||||
require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
# require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
@ -39,7 +39,7 @@ require "$attr{global}{modpath}/FHEM/88_HMCCU.pm";
|
|||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
# HMCCURPC version
|
# HMCCURPC version
|
||||||
my $HMCCURPCPROC_VERSION = '5.0 220301356';
|
my $HMCCURPCPROC_VERSION = '5.0 220431743';
|
||||||
|
|
||||||
# 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;
|
||||||
@ -1001,17 +1001,23 @@ sub HMCCURPCPROC_ProcessEvent ($$)
|
|||||||
|
|
||||||
# Detect event type and clkey
|
# Detect event type and clkey
|
||||||
my ($et, $clkey, $evdata) = split (/\|/, $event, 3);
|
my ($et, $clkey, $evdata) = split (/\|/, $event, 3);
|
||||||
return HMCCU_Log ($hash, 2, "Syntax error in RPC event data $event", undef)
|
|
||||||
if (!defined($evdata));
|
if (!defined($evdata)) {
|
||||||
|
HMCCU_Log ($hash, 2, "Syntax error in RPC event data $event");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
# Check for valid server
|
# Check for valid server
|
||||||
return HMCCU_Log ($hash, 2, "Received $et event for unknown RPC server $clkey", undef)
|
if ($clkey ne $rpcname) {
|
||||||
if ($clkey ne $rpcname);
|
HMCCU_Log ($hash, 2, "Received $et event for unknown RPC server $clkey");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
# Check event type
|
# Check event type
|
||||||
if (!exists ($rpceventargs{$et})) {
|
if (!exists ($rpceventargs{$et})) {
|
||||||
$et =~ s/([\x00-\xFF])/sprintf("0x%X ",ord($1))/eg;
|
$et =~ s/([\x00-\xFF])/sprintf("0x%X ",ord($1))/eg;
|
||||||
return HMCCU_Log ($hash, 2, "Received unknown event from CCU: $et", undef);
|
HMCCU_Log ($hash, 2, "Received unknown event from CCU: $et");
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Parse event
|
# Parse event
|
||||||
@ -1019,8 +1025,10 @@ sub HMCCURPCPROC_ProcessEvent ($$)
|
|||||||
my $tc = scalar(@t);
|
my $tc = scalar(@t);
|
||||||
|
|
||||||
# Check event parameters
|
# Check event parameters
|
||||||
return HMCCU_Log ($hash, 2, "Wrong number of $tc parameters in event $event. Expected ".
|
if ($tc != $rpceventargs{$et}) {
|
||||||
$rpceventargs{$et}, undef) if ($tc != $rpceventargs{$et});
|
HMCCU_Log ($hash, 2, "Wrong number of $tc parameters in event $event. Expected ".$rpceventargs{$et});
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
# Update statistic counters
|
# Update statistic counters
|
||||||
$rh->{rec}{$et}++;
|
$rh->{rec}{$et}++;
|
||||||
@ -1061,7 +1069,8 @@ sub HMCCURPCPROC_ProcessEvent ($$)
|
|||||||
return ($et, $clkey, ($srun == 0 ? 1 : 0), $srun);
|
return ($et, $clkey, ($srun == 0 ? 1 : 0), $srun);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return HMCCU_Log ($hash, 0, "Received SL event. Wrong PID=".$t[0]." for RPC server $clkey", undef);
|
HMCCU_Log ($hash, 0, "Received SL event. Wrong PID=".$t[0]." for RPC server $clkey");
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($et eq 'IN') {
|
elsif ($et eq 'IN') {
|
||||||
@ -1454,15 +1463,19 @@ sub HMCCURPCPROC_InitRPCServer ($$$$)
|
|||||||
if ($prot eq 'B') {
|
if ($prot eq 'B') {
|
||||||
$server->{__daemon} = IO::Socket::INET->new (LocalPort => $cbPort,
|
$server->{__daemon} = IO::Socket::INET->new (LocalPort => $cbPort,
|
||||||
Type => SOCK_STREAM, Reuse => 1, Listen => SOMAXCONN);
|
Type => SOCK_STREAM, Reuse => 1, Listen => SOMAXCONN);
|
||||||
return HMCCU_Log ($name, 1, "Can't create RPC callback server $clkey. Port $cbPort in use?", undef)
|
if (!($server->{__daemon})) {
|
||||||
if (!($server->{__daemon}));
|
HMCCU_Log ($name, 1, "Can't create RPC callback server $clkey. Port $cbPort in use?");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
return $server;
|
return $server;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create XML RPC server
|
# Create XML RPC server
|
||||||
$server = RPC::XML::Server->new (port => $cbPort);
|
$server = RPC::XML::Server->new (port => $cbPort);
|
||||||
return HMCCU_Log ($name, 1, "Can't create RPC callback server $clkey. Port $cbPort in use?", undef)
|
if (!ref($server)) {
|
||||||
if (!ref($server));
|
HMCCU_Log ($name, 1, "Can't create RPC callback server $clkey. Port $cbPort in use?");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
HMCCU_Log ($name, 2, "Callback server $clkey created. Listening on port $cbPort");
|
HMCCU_Log ($name, 2, "Callback server $clkey created. Listening on port $cbPort");
|
||||||
|
|
||||||
# Callback for events
|
# Callback for events
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#
|
#
|
||||||
# Configuration parameters for HomeMatic devices.
|
# Configuration parameters for HomeMatic devices.
|
||||||
#
|
#
|
||||||
# (c) 2021 by zap (zap01 <at> t-online <dot> de)
|
# (c) 2022 by zap (zap01 <at> t-online <dot> de)
|
||||||
#
|
#
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|
||||||
@ -208,6 +208,9 @@ $HMCCU_CONFIG_VERSION = '5.0';
|
|||||||
'THERMALCONTROL_TRANSMIT' => {
|
'THERMALCONTROL_TRANSMIT' => {
|
||||||
F => 3, S => 'ACTUAL_TEMPERATURE', C => 'SET_TEMPERATURE', V => 'on:30.5,off:4.5', P => 2
|
F => 3, S => 'ACTUAL_TEMPERATURE', C => 'SET_TEMPERATURE', V => 'on:30.5,off:4.5', P => 2
|
||||||
},
|
},
|
||||||
|
'TILT_SENSOR' => {
|
||||||
|
F => 3, S => 'STATE', C => '', V => '', P => 1
|
||||||
|
},
|
||||||
'VIRTUAL_KEY' => {
|
'VIRTUAL_KEY' => {
|
||||||
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
|
F => 3, S => 'PRESS_SHORT', C => 'PRESS_SHORT', V => 'pressed:true', P => 1
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user