Problem/Fehler mit 00_OWX.pm

Begonnen von doubh, 16 Mai 2015, 11:26:49

Vorheriges Thema - Nächstes Thema

doubh

Hallo,

ich verwende einen CUNO im Netzwerk, an den zwei 1-Wire DS2438 angeschlossen sind.
Beim Start des FHEM Servers schlägt die Initialisierung des OWX-Moduls regelmäßig fehl.

Ich hab folgende Erklärung dafür:
In Zeile 221 in 00_OWX.pm
      #-- reset the 1-Wire system in COC/CUNO
      CUL_SimpleWrite($owx_hwdevice, "Oi");

wird ein Reset durchgeführt, was zur Folge hat, dass der CUNO die angeschlossenen Geräte zurückmeldet:
Oi
R:CF00000140ABB826
R:8800000140B8F826


Anschließend wird in Zeile 230 OWX_Start() aufgerufen, was zu Beginn gleich OWX_Detect() aufruft (Zeile 238).

In OWX_Detect() wird eine Versionsabfrage initiert:
    #-- type of interface
    CUL_SimpleWrite($owx_hwdevice, "V");
    select(undef,undef,undef,0.01);
    my ($err,$ob) = OWX_ReadAnswer_CCC($owx_hwdevice);


Da die Antwort des Resets noch nicht gelesen wurde, matcht die Regex
    #-- CUNO
    }elsif( $ob =~ m/.*CUNO.*/){

für den CUNO nicht und die Initialisierung schlägt fehl.


Ich schlage vor, vor der Versionsabfrage einen Flush durchzuführen...!?



Hier ein Auszug aus dem Log:
2015.05.01 09:37:05 4: CUL_send:  CUNOV     
2015.05.01 09:37:05 5: CUL/RAW (ReadAnswer): R:CF00000140ABB826
R:8800000140B8F826
D: 2
OK

2015.05.01 09:37:05 1: OWX: 1-Wire bus owCUNO: interface in CUNO could not be addressed, return was R:CF00000140ABB826
R:8800000140B8F826
D: 2
OK

Prof. Dr. Peter Henning

Das hat damit nichts zu tun, die Sequenzierung wird im CUL-Modul vorgenommen.

LG

pah

doubh

#2
Zitat von: Prof. Dr. Peter Henning am 16 Mai 2015, 12:34:44
Das hat damit nichts zu tun, die Sequenzierung wird im CUL-Modul vorgenommen.
Leider kann ich damit rel. wenig anfangen.

Der 1-Wire Reset führt zu den genannten Meldungen (Auflistung der vorhandenen Devices), die bei nächsten Read-Aufruf korrekt zum 00_OWX.pm Modul durchgereicht werden.
Was ist daran falsch?


Der Aufruf OWX_ReadAnswer_CCC() returned immediately, weil die Antwortdaten des 1-Wire Resets bereits anstehen.
Bis die Antwortdaten der Versionsabfrage "lesebereit" sind, dauert es zwar nur wenige 10ms, aber zu diesem Zeitpunkt hat der Aufruf OWX_ReadAnswer_CCC() schon returned - eben ohne, dass die Antwortdaten der Versionsabfrage enthalten sind.

Ergo, init schlägt fehl und, da es (mW) keine Reopen/Reinit Möglichkeit gibt, muss der Server neugestartet werden.