From 59563dfaf6958264681a97635d72a06157b2babc Mon Sep 17 00:00:00 2001 From: narsskrarc <> Date: Wed, 24 Jun 2015 10:38:03 +0000 Subject: [PATCH] 34_NUT.pm: Handling bei Verlust der Verbindung verbessert git-svn-id: https://svn.fhem.de/fhem/trunk@8815 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/34_NUT.pm | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 0a8e8b073..57c973bb3 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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. + - bugfix: 34_NUT: Handling bei Verlust der Verbindung verbessert - bugfix: 31_MilightDevice: Small changes from MarkusM (Remove dependency on Math::Round) - bugfix: 30_MilightBridge: Minor change to ping code to try and resolve diff --git a/fhem/FHEM/34_NUT.pm b/fhem/FHEM/34_NUT.pm index 0f9401a4d..8894b02ea 100644 --- a/fhem/FHEM/34_NUT.pm +++ b/fhem/FHEM/34_NUT.pm @@ -3,6 +3,8 @@ # # Abfrage einer UPS über die Network UPS Tools (www.networkupstools.org) # +# 14.06.2015 +# # DEFINE bla NUT [[:]] # Readings: @@ -134,6 +136,8 @@ sub NUT_Ready($) { sub NUT_DevInit($) { my ($hash) = @_; + $hash->{pollValState} = 0; + delete $hash->{WaitForAnswer}; NUT_ListVar($hash); return undef; @@ -160,15 +164,27 @@ sub NUT_ListVar($) { my ($hash) = @_; my $name = $hash->{NAME}; - if ($attr{$name}{disable} == 0) { - # TODO - # - Mechanismus, der verhindert, dass lauter Befehle abgesendet werden, während er noch auf Antworten wartet + if ($hash->{STATE} eq 'disconnected') { + # Verbindung scheint nicht zu bestehen + # Alles abbrechen, ich verlasse mich auf DevIo_OpenDev, dass es alles wieder anwirft, sobald die Verbindung wieder steht + $hash->{pollValState} = 0; + RemoveInternalTimer("pollTimer:".$name); + DevIo_OpenDev($hash, 1, "NUT_DevInit"); + return; + } + + if (not defined $attr{$name}{disable} or $attr{$name}{disable} == 0) { if (defined $hash->{WaitForAnswer}) { # Keine Antwort auf die letzte Frage -> NUT nicht mehr erreichbar! Log3 $name, 3, "NUT antwortet nicht"; DevIo_Disconnected($hash); - DevIo_OpenDev($hash, 0, undef); + delete $hash->{DevIoJustClosed}; + $hash->{pollValState} = 0; + delete $hash->{WaitForAnswer}; + RemoveInternalTimer("pollTimer:".$name); + DevIo_OpenDev($hash, 1, "NUT_DevInit"); + return; } my $ups = $hash->{UpsName};