diff --git a/fhem/FHEM/88_HMCCU.pm b/fhem/FHEM/88_HMCCU.pm index 97bead938..ce6946a09 100755 --- a/fhem/FHEM/88_HMCCU.pm +++ b/fhem/FHEM/88_HMCCU.pm @@ -4,7 +4,7 @@ # # $Id$ # -# Version 4.3.022 +# Version 4.3.023 # # Module for communication between FHEM and Homematic CCU2/3. # @@ -52,7 +52,7 @@ my %HMCCU_CUST_CHN_DEFAULTS; my %HMCCU_CUST_DEV_DEFAULTS; # HMCCU version -my $HMCCU_VERSION = '4.3.022'; +my $HMCCU_VERSION = '4.3.023'; # Constants and default values my $HMCCU_MAX_IOERRORS = 100; @@ -353,6 +353,8 @@ sub HMCCU_GetDutyCycle ($); sub HMCCU_GetHMState ($$$); sub HMCCU_GetIdFromIP ($$); sub HMCCU_GetTimeSpec ($); +sub HMCCU_Max ($$); +sub HMCCU_Min ($$); sub HMCCU_MaxHashEntries ($$); sub HMCCU_RefToString ($); sub HMCCU_ResolveName ($$); @@ -1378,7 +1380,7 @@ sub HMCCU_DelayedShutdown ($) # HMCCU_Log ($hash, 3, "DelayedShutdown()"); - my $delay = max (AttrVal ("global", "maxShutdownDelay", 10)-2, 0); + my $delay = HMCCU_Max (AttrVal ("global", "maxShutdownDelay", 10)-2, 0); # Shutdown RPC server if (!exists ($hash->{hmccu}{delayedShutdown})) { @@ -7043,7 +7045,7 @@ sub HMCCU_UpdateCB ($$$) my $c_ok = HMCCU_UpdateMultipleDevices ($hash, \%events); my $c_err = 0; - $c_err = max($param->{devCount}-$c_ok, 0) if (exists ($param->{devCount})); + $c_err = HMCCU_Max($param->{devCount}-$c_ok, 0) if (exists ($param->{devCount})); HMCCU_Log ($hash, 2, "Update success=$c_ok failed=$c_err") if ($logcount); } @@ -7592,6 +7594,20 @@ sub HMCCU_GetHMState ($$$) return @hmstate; } +sub HMCCU_Min ($$) +{ + my ($a, $b) = @_; + + return $a < $b ? $a : $b; +} + +sub HMCCU_Max ($$) +{ + my ($a, $b) = @_; + + return $a > $b ? $a : $b; +} + ###################################################################### # Calculate time difference in seconds between current time and # specified timestamp diff --git a/fhem/FHEM/88_HMCCUCHN.pm b/fhem/FHEM/88_HMCCUCHN.pm index 263578812..ddb9c1609 100644 --- a/fhem/FHEM/88_HMCCUCHN.pm +++ b/fhem/FHEM/88_HMCCUCHN.pm @@ -4,7 +4,7 @@ # # $Id$ # -# Version 4.3.010 +# Version 4.3.011 # # (c) 2020 zap (zap01 t-online de) # @@ -259,7 +259,7 @@ sub HMCCUCHN_Set ($@) return HMCCU_SetError ($hash, $usage) if (scalar (keys %dpval) < 1); $rc = HMCCU_SetMultipleDatapoints ($hash, \%dpval); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'control') { return HMCCU_SetError ($hash, -14) if ($cd eq ''); @@ -272,7 +272,7 @@ sub HMCCUCHN_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$ccuif.$ccuaddr.$cd" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt =~ /^($hash->{statevals})$/) { my $cmd = $1; @@ -287,7 +287,7 @@ sub HMCCUCHN_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$ccuif.$ccuaddr.$sd" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'toggle') { return HMCCU_SetError ($hash, -15) if ($statevals eq '' || !exists($hash->{statevals})); @@ -322,7 +322,7 @@ sub HMCCUCHN_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$objname" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'pct' || $opt eq 'up' || $opt eq 'down') { return HMCCU_SetError ($hash, "Can't find LEVEL datapoint for device type $ccutype") @@ -366,11 +366,11 @@ sub HMCCUCHN_Set ($@) return HMCCU_SetError ($hash, $rc, $result) if ($rc < 0); # Set level - my $objvalue = min(max($result+$delta,0),100); + my $objvalue = HMCCU_Min(HMCCU_Max($result+$delta,0),100); $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$objname" => $objvalue }); } - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'on-for-timer' || $opt eq 'on-till') { return HMCCU_SetError ($hash, -15) if ($statevals eq '' || !exists($hash->{statevals})); @@ -395,7 +395,7 @@ sub HMCCUCHN_Set ($@) "001.$ccuif.$ccuaddr.ON_TIME" => $timespec, "002.$ccuif.$ccuaddr.$sd" => HMCCU_Substitute ("on", $statevals, 1, undef, '') }); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'clear') { my $rnexp = shift @$a; @@ -412,7 +412,7 @@ sub HMCCUCHN_Set ($@) ($ccuobj, undef) = HMCCU_SplitChnAddr ($ccuaddr); } ($rc, $result) = HMCCU_RPCRequest ($hash, "putParamset", $ccuobj, "MASTER", $h); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'rpcparameter') { return HMCCU_SetError ($hash, "Usage: set $name rpcparameter [MASTER|VALUES] {parameter}={value} [...]") @@ -430,7 +430,7 @@ sub HMCCUCHN_Set ($@) return HMCCU_SetError ($hash, "Key must be MASTER or VALUES"); } - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'defaults') { $rc = HMCCU_SetDefaults ($hash); diff --git a/fhem/FHEM/88_HMCCUDEV.pm b/fhem/FHEM/88_HMCCUDEV.pm index 6a9fb1d82..4e28afa52 100644 --- a/fhem/FHEM/88_HMCCUDEV.pm +++ b/fhem/FHEM/88_HMCCUDEV.pm @@ -414,7 +414,7 @@ sub HMCCUDEV_Set ($@) return HMCCU_SetError ($hash, $usage) if (scalar (keys %dpval) < 1); $rc = HMCCU_SetMultipleDatapoints ($hash, \%dpval); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'control') { return HMCCU_SetError ($hash, -12) if ($cc eq ''); @@ -429,7 +429,7 @@ sub HMCCUDEV_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$ccuif.$ccuaddr:$cc.$cd" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt =~ /^($hash->{statevals})$/) { my $cmd = $1; @@ -443,7 +443,7 @@ sub HMCCUDEV_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$ccuif.$ccuaddr:$sc.$sd" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'toggle') { return HMCCU_SetError ($hash, -15) if ($statevals eq '' || !exists($hash->{statevals})); @@ -482,7 +482,7 @@ sub HMCCUDEV_Set ($@) $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$objname" => HMCCU_Substitute ($objvalue, $statevals, 1, undef, '') } ); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'pct' || $opt eq 'up' || $opt eq 'down') { return HMCCU_SetError ($hash, -11) if ($sc eq '' && $cc eq ''); @@ -538,11 +538,11 @@ sub HMCCUDEV_Set ($@) return HMCCU_SetError ($hash, $rc, $result) if ($rc < 0); # Set level - my $objvalue = min(max($result+$delta,0),100); + my $objvalue = HMCCU_Min(HMCCU_Max($result+$delta,0),100); $rc = HMCCU_SetMultipleDatapoints ($hash, { "001.$objname" => $objvalue }); } - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'on-for-timer' || $opt eq 'on-till') { return HMCCU_SetError ($hash, -15) if ($statevals eq '' || !exists($hash->{statevals})); @@ -566,7 +566,7 @@ sub HMCCUDEV_Set ($@) "001.$ccuif.$ccuaddr:$sc.ON_TIME" => $timespec, "002.$ccuif.$ccuaddr:$sc.$sd" => HMCCU_Substitute ("on", $statevals, 1, undef, '') }); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'clear') { my $rnexp = shift @$a; @@ -585,7 +585,7 @@ sub HMCCUDEV_Set ($@) } my ($rc, $res) = HMCCU_RPCRequest ($hash, "putParamset", $objname, "MASTER", $h); - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'rpcparameter') { return HMCCU_SetError ($hash, "Usage: set $name rpcparameter { channel VALUES | [channel] MASTER } {parameter}={value} [...]") @@ -617,7 +617,7 @@ sub HMCCUDEV_Set ($@) return HMCCU_SetError ($hash, "Key must be MASTER or VALUES"); } - return HMCCU_SetError ($hash, min(0, $rc)); + return HMCCU_SetError ($hash, HMCCU_Min(0, $rc)); } elsif ($opt eq 'defaults') { my $rc = HMCCU_SetDefaults ($hash); diff --git a/fhem/FHEM/88_HMCCURPCPROC.pm b/fhem/FHEM/88_HMCCURPCPROC.pm index 4e5db11a5..eb3349561 100755 --- a/fhem/FHEM/88_HMCCURPCPROC.pm +++ b/fhem/FHEM/88_HMCCURPCPROC.pm @@ -4,7 +4,7 @@ # # $Id$ # -# Version 1.9 +# Version 1.9.001 # # Subprocess based RPC Server module for HMCCU. # @@ -35,7 +35,7 @@ use SetExtensions; ###################################################################### # HMCCURPC version -my $HMCCURPCPROC_VERSION = '1.9'; +my $HMCCURPCPROC_VERSION = '1.9.001'; # Maximum number of events processed per call of Read() my $HMCCURPCPROC_MAX_EVENTS = 100; @@ -440,7 +440,7 @@ sub HMCCURPCPROC_DelayedShutdown ($) # HMCCU_Log ($hash, 3, "DelayedShutdown()"); - my $delay = max (AttrVal ("global", "maxShutdownDelay", 10)-2, 0); + my $delay = HMCCU_Max (AttrVal ("global", "maxShutdownDelay", 10)-2, 0); # Shutdown RPC server if (defined ($hmccu_hash) && exists ($hmccu_hash->{hmccu}{interfaces}{$ifname}{manager}) &&