FHEM2FHEM-Fehler

Begonnen von Cori, 10 Dezember 2014, 17:58:16

Vorheriges Thema - Nächstes Thema

Cori

Hallo,
ich nutze FHEM2FHEM um die Verfügbarkeit zu 2 anderen FHEM-Installationen bei Verwandten zu überwachen, die ich managen darf.
Dazu lasse ich mir einfach alle 5min ein trigger-Event zukommen und überprüfe in regelmäßigen Abständen, wie lange das letze Signal her ist.
Die 3 FHEM-Installationen auf Raspberry/BananaPis sind untereinander über ein FB-VPN verbunden.
Ab der Zeit, ab der die Verbindung Nachts getrennt wird und sich die VPNs neu verbinden müssen, bekomme ich eine Events mehr rein. Die FHEM2FHEM-Instanzen bleiben aber auf "connected".
Als Lösung des Problems lasse ich nun mit der regelmäßigen Prüfung eine bedingte modify-Anweisung ausführen. Bei Tests ist mir jedoch aufgefallen, dass bei einer Änderung der Adresse, unaufhaltsam Events im 1/10s-Takt generiert werden, wenn die Verbindung wieder geklappt hat.
Zitat
...
2014-12-10 15:59:17 FHEM2FHEM FHEM_RL CONNECTED
2014-12-10 15:59:17 FHEM2FHEM FHEM_RL CONNECTED
2014-12-10 15:59:18 FHEM2FHEM FHEM_RL CONNECTED
2014-12-10 15:59:18 FHEM2FHEM FHEM_RL CONNECTED
2014-12-10 15:59:18 FHEM2FHEM FHEM_RL CONNECTED
...
Da scheint also ein Problem im Code zu bestehen.

Außerdem eine Bitte für das Modul:
Einführung einer set-Anweisung zur erneuten Verbindung mit der entfernten FHEM-Instanz, sodass es eine saubere Möglichkeit zum modify gibt.
Evtl. auch eine Prüfschleife wie beim disconnected, um den fehlerhaften connected-Status zu korrigieren.

Vielen Dank schon mal im Voraus.
Cori
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

rudolfkoenig

Das Problem konnte ich nicht nachstellen, dazu brauche ich mehr Details, am besten eine einfache Anleitung.
Beim rumprobieren habe ich ein Bug gefixt (modify bei disconnected schaltet das automatische reconnect aus), und ich habe das reopen set Befehl als Alternative zu modify eingebaut.

Cori

Hey, super für die schnelle Reaktion.
Also ich habe das ganze nochmal nach einem Update mit neuen Instanzen getestet. Gleiches Ergebnis.
Folgendes Vorgehen:
auf remote FHEM:
define telnet_test telnet 7073 global

auf lokalem FHEM:
define FHEM_test FHEM2FHEM 192.168.21.11:7073 LOG:test.*

  • Status: connected
  • Port des telnet_test auf 70730 geändert
  • Status bleibt connected
  • FHEM_test modify über FHEMWeb ohne Änderungen
  • Status: disconnected
  • FHEM_test modify über FHEMWeb mit Änderung des Ports in 70730
  • nach Ablauf der reconnect-Zeit erneutes modify ohne Änderungen zur Umgehung des von dir schon gefundenen Problems
  • im Event monitor erscheinen pro Sekunde ca. 10 Events:
2014-12-10 23:54:23 FHEM2FHEM FHEM_test CONNECTED
Zum Abbrechen der Eventflut ist entweder ein delete oder ein modify zu fehlerhafter Adresse nötig.
Das Problem tritt auch auf, wenn man die IP ändert. Jedoch nicht bei Änderung der RegExp oder wenn man nach der Änderung des remoten Telnet-Ports den Richtigen gleich beim Ersten modify der FHEM2FHEM-Instanz einträgt. Somit das modify anschließend sofort wieder zu einem connected führt.
Das Problem ist also das zwischenzeitliche disconnected.

Ich hoffe, ich habe das nachvollziehbar aufgeführt. Es gibt sicherlich nur extrem wenige Fälle, bei denen das zu Fehlern führt. Aber wenn du es gelöst bekommst, wird dein System wieder ein Stück perfekter.  ;)
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

LuckyDay

Port 70730 gibt es nicht, letzter Port ist 65535
nimm für Test doch bitte einen anderen

Cori

Den hatte ich vorhin für das Bsp. aus Faulheit einfach so gewählt. Die 0 war halt schnell rangesetzt. ;)
Daran liegt es aber nicht. Für die Portnr. kann man verwenden was man will, oder man lässt sie und macht das gleiche Spiel mit der IP. Ist egal, es sind immer die gleichen Resultate ... Events wie am Fließband.

@rudolfkoenig: Schick mir doch mal die geänderte pm zu. Vielleicht wurde der Fehler ja schon mit dem Korrigieren des auto-reconnect-Problems gelöst.
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

rudolfkoenig

Zitat@rudolfkoenig: Schick mir doch mal die geänderte pm zu.

Mache ich nicht. Dafuer gibts SVN@sourceforge.

Cori

OK, danke, kannte ich noch nicht.
Also das reopen ist ne feine Sache. Gleich mal getestet und funktioniert.
Das vorherige Problem besteht weiter. Nach Änderung des Ports im FHEM2FHEM wieder die Eventflut.
Ich habe mal verschiedene Abläufe durchgespielt und das Problem tritt nur in der oben geschilderten Reihenfolge auf.
Also erst muss der remote Port geändert werden, dann ein reopen im lokalen FHEM2FHEM, damit er ein disconnected erkennt und dann die Änderung auf den nun richtigen Port.
Lässt man das reopen für die Erkennung des disconnected weg, ist alles IO.
Ändert man zu erst den Port lokal, dann den Port remote und führt dann ein reopen durch, ist auch alles IO. Obwohl er vorher ein disconnected hatte!
Aber steckt man einmal in dem Teufelskreis, funktioniert auch das nicht mehr, dann komme ich um ein Löschen und neues Definieren nicht herum.

Ich kann nur Vermutungen anstellen:
DoTrigger($name, "CONNECTED") if($reopen);
dürfte ja nur einmal ausgeführt werden.
Durch
sub
FHEM2FHEM_Ready($)
{
  my ($hash) = @_;
  return FHEM2FHEM_OpenDev($hash, 1);}

wird ja aber immer ein true mit übergeben. Evtl. das true nur unter der Bedingung, das der State noch nicht connected ist.

Ich will dir da nicht drinn rumschreiben, da ich mich mit Modulen noch nicht auskenne.
Ich sehe auch ehrlich nicht, wovon FHEM2FHEM_Ready aufgerufen wird.
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

rudolfkoenig

ZitatAlso erst muss der remote Port geändert werden, dann ein reopen im lokalen FHEM2FHEM, damit er ein disconnected erkennt und dann die Änderung auf den nun richtigen Port.

Irgendwie bin ich nicht helle genug: ich verstehe das nicht.
Habs versucht:
perl fhem.pl cfg1 (oeffnet telnet port 7072)
perl fhem.pl cfg2 (mit F2F zu 7072)
cfg1 abgebrochen, port auf 7173 geaendert, cfg1 gestartet
in cfg2: set F2F reopen
cfg1 abgebrochen, port auf 7073 geaendert, cfg1 gestartet
cfg2 erkennt cfg1 nach eine Minute automatisch. Ein reopen "hilft" nicht, funktioniert immer  noch.

Kann ich es bitte in dieser Art erklaert bekommen?

Cori

cfg1 (oeffnet telnet port 7072)
cfg2 (mit F2F zu 7072)
cfg1: modify mit port auf 7173     (warum steht bei dir abgebrochen und gestartet? Sind 2 eigenständige Maschinen.)
cfg2: set F2F reopen --> damit F2F state disconnected (ohne den reopen Befehl erkennt er nicht, dass keine Verbindung mehr bestehen kann)    (ohne den Schritt klappt es nicht)
cfg2: modify mit port auf 7073
cfg2: sobald erfolgreiches connected kommt Eventflut
diverse HomeMatic-Komponenten per HMLan und HMUART als IODevs und einige HUE-Lampen über HUE-Bridge2 an BananaPis mit Debian

rudolfkoenig

Zitatwarum steht bei dir abgebrochen und gestartet?

Habs doch gesagt, dass ich nicht helle war.
Habs gefixt und eingecheckt.