Patch für FHEM2FHEM: Beim Verbindungsaufbau wird attribut disable ignoriert

Begonnen von gandy, 23 Juli 2015, 22:04:37

Vorheriges Thema - Nächstes Thema

gandy

In meiner Installation habe ich mehrere externe FHEM Instanzen über FHEM2FHEM angebunden. Manchmal fallen einzelne davon aus und sind nicht mehr unter ihrer IP erreichbar, was zu regelmässigem Freeze beim versuchten Verbindungsaufbau führt und die Responsivität der Hauptinstallation in Mitleidenschaft zieht.

Um das zu umgehen, lasse ich per PRESENCE lan-ping die Erreichbarkeit prüfen und bei Statusänderung das attribut ignore in der jeweiligen FHEM2FHEM Instanz entsprechend setzen:


define fhem_laantena FHEM2FHEM 192.168.1.34:7072 LOG:(EC.*)|(heartbeat_laantena.*)
attr fhem_laantena disable 0
attr fhem_laantena room _Server

define lan_laantena PRESENCE lan-ping 192.168.1.34
attr lan_laantena event-on-change-reading .+

define nf.lan_fhem notify lan_.+:presence:.+ { $NAME=~ s/lan_/fhem_/;; fhem("attr $NAME disable ".(($EVTPART1 eq "absent")?"1":"0")) }


Nun musste ich aber feststellen, dass FHEM2FHEM auch bei disable=1 weiterin versucht, die Verbindung herzustellen, wodurch es in jedem Fall zu Timeouts und den dadurch bedingten Nebenwirkungen kommt.

Der beigefügte Patch behebt das, basierend auf "93_FHEM2FHEM.pm 8416 2015-04-11 10:46:08Z"

Grüße,
Andy.
fhem (svn) auf i5-4210U NUC
2x HMLAN, 19x HM-SEC-RHS, 15x HM-LC-Bl1PBU-FM, etc.
ODYS Neron Tablet / Android 4.2
Samsung Galaxy Tab 2 10.1N / Android 4.1.2
Samsung Galaxy Note / Android 6.0.1

rudolfkoenig

Patch akzeptiert, sobald sourceforge funktioniert, wird es eingecheckt.

eldrik

Hallo Rudi,

wurde der patch bereits eingespielt?

Edit: habe gerade den Patch mit der aktuellen FHEM2FHEM Version verglichen, ja der Patch ist eingespielt.

Was mich etwas irritiert ist, ich habe diverse FHEM2FHEM Verbindungen und vor einem Shutdown bzw. Restart einer FHEM2FHEM Instanz setze ich einen Befehl in Richtung Hauptinstanz ab, welcher den attr disable der FHEM2FHEM Verbindung auf 1 setzt.

Trotzdem erhalte ich beim Restart der FHEM2FHEM Instanz die Meldung

10.0.81.56:7072 disconnected, waiting to reappear

nach dem Restart weist mir perfmon den entsprechenden Freetze aus

Perfmon: possible freeze starting at 10:23:21, delay is 4.362

Edit2:

Ich habe jetzt im Code die unterstrichene Zeile hinzugefügt, somit wird sleep(5) nicht mehr durchlaufen wenn der Status auf disable 1 gesetzt wurde.

return if(IsDisabled($name));

sub
FHEM2FHEM_Disconnected($)
{
  my $hash = shift;
  my $dev = $hash->{Host};
  my $name = $hash->{NAME};

  return if(!defined($hash->{FD}));                 # Already deleted
  Log3 $name, 1, "$dev disconnected, waiting to reappear";
  FHEM2FHEM_CloseDev($hash);
  $readyfnlist{"$name.$dev"} = $hash;               # Start polling
  $hash->{STATE} = "disconnected";

  # Without the following sleep the open of the device causes a SIGSEGV,
  # and following opens block infinitely. Only a reboot helps.
  return if(IsDisabled($name));
  sleep(5);

  DoTrigger($name, "DISCONNECTED");
}


Greetz
Eldrik

rudolfkoenig