From 8b71c1786048a0c5a02426506ff930298cf281ae Mon Sep 17 00:00:00 2001 From: Beta-User Date: Sat, 11 May 2019 14:49:14 +0000 Subject: [PATCH] 10_MYSENSORS_DEVICE: bugfix for ack-timeout, #100410 git-svn-id: https://svn.fhem.de/fhem/trunk@19370 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 4 +++- fhem/FHEM/10_MYSENSORS_DEVICE.pm | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 47514140a..3aaecdcc8 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,6 +1,8 @@ # 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. - - change: 98_Heating_Control.pm will be removed soon. Users will need to + - bugfix: 10_MYSENSORS_DEVICE: prevent fhem crashing by ack timeout + at higher verobse levels + - change: 98_Heating_Control.pm will be removed soon. Users will need to change their device definitions to 98_WeekdayTimer; supporting code is provided, but perl calls have to be changed manually. - bugfix: 73_AutoShuttersControl: fix bug roommate and windwo comfort diff --git a/fhem/FHEM/10_MYSENSORS_DEVICE.pm b/fhem/FHEM/10_MYSENSORS_DEVICE.pm index 2cc4bbd97..7791199a6 100755 --- a/fhem/FHEM/10_MYSENSORS_DEVICE.pm +++ b/fhem/FHEM/10_MYSENSORS_DEVICE.pm @@ -1135,12 +1135,13 @@ sub timeoutAck($) { if ($hash->{IODev}->{outstandingAck} == 0) { Log3 $hash->{NAME}, 4, "$hash->{NAME}: timeoutAck called, no outstanding Acks at all"; readingsSingleUpdate($hash,"heartbeat","alive",1) if (ReadingsVal($hash,"heartbeat","dead") eq "NACK"); - } elsif (@{$hash->{IODev}->{messagesForRadioId}->{$hash->{radioId}}->{messages}}) { - Log3 $hash->{NAME}, 4, "$hash->{NAME}: timeoutAck called, outstanding: @$hash->{IODev}->{messagesForRadioId}->{$hash->{radioId}}->{messages}"; - readingsSingleUpdate($hash,"heartbeat","NACK",1) ; + } elsif (my $outs = $hash->{IODev}->{messagesForRadioId}->{$hash->{radioId}}->{messages}) { + my $outstanding = @$outs; + Log3 $hash->{NAME}, 4, "$hash->{NAME}: timeoutAck called, outstanding: $outstanding"; + readingsSingleUpdate($hash,"heartbeat","NACK",1) ; } else { - Log3 $hash->{NAME}, 4, "$hash->{NAME}: timeoutAck called, no outstanding Acks for Node"; - readingsSingleUpdate($hash,"heartbeat","alive",1) if (ReadingsVal($hash,"heartbeat","dead") eq "NACK"); + Log3 $hash->{NAME}, 4, "$hash->{NAME}: timeoutAck called, no outstanding Acks for Node"; + readingsSingleUpdate($hash,"heartbeat","alive",1) if (ReadingsVal($hash,"heartbeat","dead") eq "NACK"); } }