From 52c5f26a925810938a7d50d39bbd2d73aca89fbe Mon Sep 17 00:00:00 2001 From: mgehre <> Date: Thu, 13 Dec 2012 22:02:13 +0000 Subject: [PATCH] CUL_MAX: broadcast time: make it robust, add setter git-svn-id: https://svn.fhem.de/fhem/trunk@2324 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/14_CUL_MAX.pm | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/fhem/FHEM/14_CUL_MAX.pm b/fhem/FHEM/14_CUL_MAX.pm index 18ed4950b..ca53262d4 100644 --- a/fhem/FHEM/14_CUL_MAX.pm +++ b/fhem/FHEM/14_CUL_MAX.pm @@ -13,7 +13,7 @@ our %device_types; sub CUL_MAX_SendDeviceCmd($$); sub CUL_MAX_Send(@); -sub CUL_MAX_BroadcastTime($); +sub CUL_MAX_BroadcastTime(@); sub CUL_MAX_Set($@); sub CUL_MAX_SendAck($$$); sub CUL_MAX_SendTimeInformation(@); @@ -104,8 +104,12 @@ CUL_MAX_Set($@) if($setting eq "pairmode") { $hash->{pairmode} = 1; InternalTimer(gettimeofday()+$pairmodeDuration, "CUL_MAX_DisablePairmode", $hash, 0); + + } elsif($setting eq "broadcastTime") { + CUL_MAX_BroadcastTime($hash, 1); + } else { - return "Unknown argument $setting, choose one of pairmode"; + return "Unknown argument $setting, choose one of pairmode broadcastTime"; } return undef; } @@ -356,18 +360,30 @@ CUL_MAX_SendTimeInformation(@) } sub -CUL_MAX_BroadcastTime($) +CUL_MAX_SendTimeInformationSender($) { - my $hash = shift; + my $args = shift; + my ($hash,$addr,$payload) = @{$args}; + CUL_MAX_SendTimeInformation($hash, $addr, $payload); +} + +sub +CUL_MAX_BroadcastTime(@) +{ + my ($hash,$manual) = @_; my $payload = CUL_MAX_GetTimeInformationPayload(); Log 5, "CUL_MAX_BroadcastTime: payload $payload"; + my $i = 1; foreach my $addr (keys %{$modules{MAX}{defptr}}) { my $dhash = $modules{MAX}{defptr}{$addr}; if(exists($dhash->{IODev}) && $dhash->{IODev} == $hash) { - CUL_MAX_SendTimeInformation($hash, $addr, $payload); + #We queue it at different times and do not send directly, because + #sending them all in a row makes us not see the Acks + InternalTimer(gettimeofday()+3*$i++, "CUL_MAX_SendTimeInformationSender", [$hash, $addr, $payload], 0); } } - InternalTimer(gettimeofday()+$timeBroadcastInterval, "CUL_MAX_BroadcastTime", $hash, 0); + + InternalTimer(gettimeofday()+$timeBroadcastInterval, "CUL_MAX_BroadcastTime", $hash, 0) unless(defined($manual)); } 1;