FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Cori am 10 Dezember 2014, 17:58:16

Titel: FHEM2FHEM-Fehler
Beitrag von: Cori am 10 Dezember 2014, 17:58:16
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
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: rudolfkoenig am 10 Dezember 2014, 21:32:41
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.
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: Cori am 11 Dezember 2014, 00:24:17
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.*
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.  ;)
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: LuckyDay am 11 Dezember 2014, 02:00:12
Port 70730 gibt es nicht, letzter Port ist 65535
nimm für Test doch bitte einen anderen
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: Cori am 11 Dezember 2014, 02:14:44
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.
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: rudolfkoenig am 11 Dezember 2014, 07:27:30
Zitat@rudolfkoenig: Schick mir doch mal die geänderte pm zu.

Mache ich nicht. Dafuer gibts SVN@sourceforge.
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: Cori am 11 Dezember 2014, 16:31:51
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.
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: rudolfkoenig am 12 Dezember 2014, 21:29:49
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?
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: Cori am 12 Dezember 2014, 22:36:23
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
Titel: Antw:FHEM2FHEM-Fehler
Beitrag von: rudolfkoenig am 13 Dezember 2014, 17:12:36
Zitatwarum steht bei dir abgebrochen und gestartet?

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