PRESENCE Fhem Absturz

Begonnen von ChrisW, 03 Februar 2013, 15:54:42

Vorheriges Thema - Nächstes Thema

ChrisW

Das sind die letzten Logs:

2013.02.03 15:50:39 1: Terminated -7680
2013.02.03 15:51:33 1: Terminated -6356
2013.02.03 15:51:50 1: ERROR: Select error -1 (10038), error count= 0


Und das ist der Code den ich bisher nutze:
define HandyChris PRESENCE lan-ping 192.168.2.50 30
define watchdog_Anwesenheit watchdog HandyChris:absent 00:15 Handy:present { fhem "set Wohnzimmer_FunkSteckdose3 off";; fhem "setstate watchdog_Anwesenheit defined";;}
attr watchdog_Anwesenheit regexp1WontReactivate 1
Raspberry PI3 mit allem möglichen.

Markus Bloch

Hallo Chris,

geh ich richtig in der Annahme, dass das ganze auf Windows 7 läuft? Wenn ja, dann ist das durchaus möglich, da ich das Modul unter Linux entwickelt habe und keine Windows spezifischen Sachen eingebaut habe.

Was nutzt du für eine Perl Umgebung unter Windows? Dann kann ich das die Tage mal Nachstellen und korrigieren.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

ChrisW

Hallo,
ja genau nutze Win7 64 bit mit Active Perl.
Wäre Klasse ;)
Raspberry PI3 mit allem möglichen.

Markus Bloch

Ich teste das und geb dir Bescheid
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Hallo Chris,

ich habe mir soeben die aktuellste Version ActivePerl von http://www.activestate.com/activeperl heruntergeladen und installiert. Habe ein FHEM installiert. Vorher nochmal ein update durchgeführt und anschließend ein PRESENCE Device definiert mit lan-ping.

Geht einwandfrei.

Version: ActivePerl-5.16.2.1602-MSWin32-x64

Hast du evtl. eine ältere Version von Active Perl?

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

ChrisW

5.16.1 hab ich.
Komisch nach ein paar Sekunden stürzt fhem ab
define HandyChris PRESENCE lan-ping 192.168.2.50 30
Raspberry PI3 mit allem möglichen.

ChrisW

Das steht im CMD Fenster:
Select error -1 (10038)
Error in PurgeComm at fhem.pl line 0.
Das Handle ist ung³ltig.
Error in GetCommTimeouts at fhem.pl line 0.
Error Closing handle 132 for \\.\com3
Das Handle ist ung³ltig.
Error closing Read Event handle 176 for \\.\com3
Das Handle ist ung³ltig.
Error closing Write Event handle 180 for \\.\com3
Das Handle ist ung³ltig.
Raspberry PI3 mit allem möglichen.

Markus Bloch

Hallo Chris,

auch wenn ich es mit Sicherheit nicht weis, so denke liegt es daran, dass sich PRESENCE unter Windows nicht mit einer CUL verträgt. Was man da genau machen kann, weis ich leider auch nicht.

Alternativ evtl. unter Windows eine zweite FHEM Instanz laufen lassen wo PRESENCE läuft und mit FHEM2FHEM koppeln.

Mehr kann ich dir da leider nicht helfen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

ChrisW

oha immer wieder diese Windows Probleme :(
Dann muss ich wohl bei meiner eigenen Ping abfrage bleiben bis es vielleicht eine Lösung gibt.
Das komische es funktioniert ja ein paar Sekunden.
Raspberry PI3 mit allem möglichen.

ChrisD

Hallo,

Ich habe das gleiche Problem wenn ich das PRESENCE-Modul unter ActivePerl benutze. Soweit ich feststellen konnte führt der exit(0)-Aufruf in BlockingCall dazu dass unter anderem die seriellen Schnittstellen geschlossen werden, was zu den Fehlermeldungen 'Error in PurgeComm...' führt. Versuchsweise habe ich
exit(0);
durch
sleep($timeout*2);
ersetzt. Dadurch wird der Child-Prozess über den Kill in BlockingKill beendet und es wird nichts geschlossen. Die Kommunikation mit dem CUL (und einer FHZ1000) laufen damit problemlos. Allerdings führt dies zu einem Speicherleck von 8K pro Kill.

Ich habe jetzt zu Testzwecken Strawberry Perl installiert und hier scheint das Problem nicht aufzutreten (nach 1 Stunde mit 5 Pings alle 30s).

Grüße,

ChrisD

Markus Bloch

Hallo Chris,

das liegt daran, dass das Modul Blocking.pm von Rudi eher für die Linux-Welt gedacht ist. Ich bin aber drann hier entsprechende Modifikationen durchzuführen, damit das ganze auch unter Windows läuft.

Der Unterschied zwischen Linux und Windows in dem Falle ist, das unter Linux ein komplett eigenständiger Prozess erzeugt wird (eine Kopie des aktuell laufenden FHEMs), der komplett losgelöst vom FHEM Mutterprozess läuft (Forking). Unter Windows ist das so nicht möglich. Hier wird ein Thread unterhalb des FHEM Prozesses erzeugt, der aber noch in bestimmten Teilen mit dem Mutter-Prozess verbunden ist. Technisch gesehen ist das noch ein Prozess.

Ich habe mal soeben mit Active Perl rumprobiert und habe folgendes in der Blocking.pm verändert.

oben bei den ganzen use-Befehlen bitte folgende Zeile einfügen.


use threads;


Da wo du bereits exit(0); durch sleep ersetzt hast bitte deine Zeile durch folgendes ersetzen.


threads->exit();


Damit läuft es bei mir bisher sauber durch, der Thread wird auch immer ordentlich beendet (kann man unter Windows im Ressourcen-Monitor pro Prozess sehen).

Währe super falls du das bei dir mit Active Perl und Strawberry Perl verifizieren könntest.

Vielen Dank und Gruß

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

ChrisW

hey cool das scheint zu klappen. Bisher 15 Minuten ohne Probleme :=)
Was mich noch etwas stört sind die Log einträge:
2013.02.05 08:28:20 1: Terminated -4648
2013.02.05 08:28:41 1: Terminated -9136
2013.02.05 08:29:02 1: Terminated -1216
2013.02.05 08:29:11 1: Terminated -7244
Raspberry PI3 mit allem möglichen.

ChrisW

Und hier gerade eben nach 20 Minuten kommt folgende Konsolen meldung Fhem läuft aber noch:

select: Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist. at C:/Perl64
/lib/Net/Ping.pm line 633.
ioctl failed: Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist. at ./F
HEM/73_PRESENCE.pm line 367.


Raspberry PI3 mit allem möglichen.

ChrisW

Na toll nach einer längeren Zeit folgendes in der Konsole:
Select error -1 (10038)
Error in PurgeComm at fhem.pl line 0.
Das Handle ist ung³ltig.
Error in GetCommTimeouts at fhem.pl line 0.
Error Closing handle 132 for \\.\com3
Das Handle ist ung³ltig.
Error closing Read Event handle 176 for \\.\com3
Das Handle ist ung³ltig.
Error closing Write Event handle 180 for \\.\com3
Das Handle ist ung³ltig.
Raspberry PI3 mit allem möglichen.

Markus Bloch

Zitat von: ChrisW schrieb am Di, 05 Februar 2013 08:31hey cool das scheint zu klappen. Bisher 15 Minuten ohne Probleme :=)
Was mich noch etwas stört sind die Log einträge:
2013.02.05 08:28:20 1: Terminated -4648
2013.02.05 08:28:41 1: Terminated -9136
2013.02.05 08:29:02 1: Terminated -1216
2013.02.05 08:29:11 1: Terminated -7244

Das sind Log-Meldungen durch Blocking.pm. Hier müsste man im Falle einer Negativen PID (Windows-Thread-ID) den Kill verhindern. Da muss ich noch einen Patch fertig machen und mit Rudi abstimmen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)