[gelöst] DevIo.pm Timeout beim lesen

Begonnen von Noname, 09 Juni 2015, 22:13:48

Vorheriges Thema - Nächstes Thema

Noname

Hallo,
wer kann mir weiterhelfen.

Ich nutze DevIo.pm in einem Modul um SMSen von einem
GSM Modem oder UMTS Stick zu versenden und zu empfangen.

fhem ist auf einer Fritzbox 7490 installiert.

Sporadisch hängt die Kommunikation mit dem GSM Modem, ich
denke DevIo_SimpleRead liefert keine Modemantworten mehr.

Nach einem Timeout wird das Modem 3x im Abstand von 10 Sekunden
abgefragt, wird keine Antwort mehr empfangen, wird DevIo_Disconnected
in Zeile 430 aufgerufen und die Schnittstelle wird danach wieder geöffnet.
Allerdings hat das keine Auswirkung auf die Kommunikation.
Nur nach einem Neustart von fhem kann die Kommunikation mit dem Device
wieder aufgenommen werden.

Nach dem Neustart werden alte Modemantworten gelesen, deswegen gehe ich davon
aus das DevIo_SimpleWrite im Fehlerhaften Zustand noch funktioniert, aber DevIo_SimpleRead
keine Daten mehr liefert.

Wie könnte ich einen Reset der Kommunikation (DevIo) ausführen ohne fhem
neu zu starten?

Einen ähnlichen Beitrag fand ich hier, allerdings komme ich damit nicht weiter.
http://forum.fhem.de/index.php/topic,37524.msg297904.html#msg297904

Auszug aus dem Log:
2015-06-09_20:13:14 ZTEMF190 error
2015-06-09_20:13:14 ZTEMF190 DISCONNECTED
2015-06-09_20:13:14 ZTEMF190 CONNECTED
2015-06-09_20:14:24 ZTEMF190 error
2015-06-09_20:14:25 ZTEMF190 DISCONNECTED
2015-06-09_20:14:25 ZTEMF190 CONNECTED
2015-06-09_20:15:35 ZTEMF190 error
2015-06-09_20:15:35 ZTEMF190 DISCONNECTED
2015-06-09_20:15:35 ZTEMF190 CONNECTED
2015-06-09_20:16:45 ZTEMF190 error
2015-06-09_20:16:46 ZTEMF190 DISCONNECTED

Zeile 430 in 70_GSMSMS aktiviert und einen reload
ausgeführt #{fhem ("shutdown restart")};
Danach läuft wieder alles bin zur nächsten Timeouterkennung.

(Ist allerdings nicht die feine Art!)

2015-06-09_20:17:33 ZTEMF190 From: +491..........
2015-06-09_20:17:33 ZTEMF190 Timestamp: 2015-06-09 12:20:09
2015-06-09_20:17:33 ZTEMF190 Message: Status
2015-06-09_20:17:34 ZTEMF190 delete space 0
2015-06-09_20:17:36 ZTEMF190 send trial
2015-06-09_20:17:39 ZTEMF190 sent out

Ich denke hier kann mir nur Rudolf König weiterhelfen.
Danke bereits im Voraus.


rudolfkoenig

Eigentlich sollten zwischen DISCONNECTED und CONNECTED 5 Sekunden liegen, um OS und/oder Geraet Zeit fuer Initialisieren zu bieten, dafuer sorgt DevIoJustClosed. Deswegen vermute ich, dass das gezeigte Log nicht genau mit dem angehaengten Quellen generiert wurde. Ob das relevant ist, weiss ich nicht.

Wie wird das GSMSMS Geraet definiert: mit @Baudrate? Werden Module verwendet, die fork() durchfuehren?

Noname

#2
Ups,
ich hatte mit so einer schnellen Antwort nicht gerechnet.

fork()  wird nicht verwendet

Der Aufruf erfolgt bei mir so (1&1 UMTS Stick):
# GSM Modem für SMS Versand
#define ZTEMF190 GSMSMS /dev/ttyUSB1@9600
define ZTEMF190 GSMSMS /var/gsm/ttyCONTROL@9600
#define ZTEMF190 GSMSMS /var/gsm/ttyDATA@9600
#define ZTEMF190 GSMSMS /var/gsm/ttyVOICE@9600
attr ZTEMF190 GSMSMS_CNTD 5
attr ZTEMF190 GSMSMS_EN 1
attr ZTEMF190 GSMSMS_MSG ZTEMF190 Test!
attr ZTEMF190 GSMSMS_NR +49172........
attr ZTEMF190 GSMSMS_PIN 9999
attr ZTEMF190 GSMSMS_SMSC +491770610000
attr ZTEMF190 room Alarm

Wie gesagt hab schon alles mögliche probiert, konnte das Problem
aber nicht finden.

2015-06-09_20:15:35 ZTEMF190 error
2015-06-09_20:15:35 ZTEMF190 DISCONNECTED
2015-06-09_20:15:35 ZTEMF190 CONNECTED

Stimmt die 5 Sekunden werden irgendwie nicht eingehalten. Das Gerät
wird nach dem beenden sofort wieder geöffnet, konnte ich nachvollziehen.



rudolfkoenig

Sorry, keine zuendende Idee. Ich wuerde es mit strace debuggen, allerdings ist das Interpretieren der Zeilen auch nicht jedermanns Sache, und ob man dabei was findet ist auch nicht sicher.

Noname

#4
Hallo rudolfkoenig,

ich habe vor einem DevIo_OpenDev ein  sleep(10) eingebaut.
(rein zum Test, wegen Blockierung von fhem)
leider hat dies auch nicht geholfen.

Was mir aufgefallen ist:
Wird nach dem Auftreten eines Timeouts ein "USB Scan" ausgeführt geht wieder alles
ohne fhem neu starten zu müssen.

Was passiert bei USB Scan. Kann man dadurch irgendwie den Fehler finden,
oder könnte ich Code von USB Scan in mein Modul Übernehme um die Schnittstelle
wieder ansprechen zu können?

rudolfkoenig

ZitatWas passiert bei USB Scan.

Alle Geraete in /dev werden mit @usbtable/matchList verglichen, und falls eine passende Datei zu finden ist, dann wird per request/response geprueft, ob das Geraet von einem FHEM Modul unterstuetzt wird. Ausnahme sind Dateien, die bereits in FHEM konfiguriert sind, diese werden nicht angefasst.

Nachzulesen in FHEM/98_autocreate.pm/CommandUsb()

Noname

#6
Danke für die Info,

mir ist jetzt noch folgendes aufgefallen.

Der UMTS Stick wird von der Fritzbox 7490 automatisch von
der AVM Firmware verlinkt  ttyUSB1 nach var/gsm/ttyCONTROL
(ln -f -s "$TTYUSB"1 /var/gsm/ttyCONTROL)
auf  ttyUSB1 kann nicht direkt zugegriffen werden!

Der Aufruf in meinem Modul erfolgt deswegen mit --> define ZTEMF190 GSMSMS /var/gsm/ttyCONTROL@9600

usb scan findet aber für ZTEMF190 ttyUSB1:
### ttyUSB1: checking if it is a TCM_ESP3
already used by the fhem device ZTEMF190

Kann das eventuell sein dass devio irgendwie sporadisch nicht mehr auf  /var/gsm/ttyCONTROL sondern auf  ttyUSB1 zugreift?



rudolfkoenig

usb scan liest auch symlinks aus, deswegen weiss er vom ZTEMF190.
DevIo hat keine solche Intelligenz, es oeffnet nur die angegebene Datei.

Noname

#8
Danke für die Info,

ich habe zum Test den Link var/gsm/ von AVM gelöscht
und in fhem ttyUSB1 verwendet.

Vielleicht liegt es am Link der Fritzbox, momentan läuft es,
abwarten ob es durchläuft.