OWX asynchron überarbeitet

Begonnen von ntruchsess, 30 Juni 2013, 00:55:59

Vorheriges Thema - Nächstes Thema

hexenmeister

Hallo Norbert,
danke für die neue Version!

Habe sie eingespielt. Es läuft, keine Abstürze mehr, keine Fehlermeldungen. Aber irgfendwie werden nur Devices an einem der Controller aktualisiert...

Habe versucht, testweise einen Controller zu löschen. Prompt war FHEM weg:

Can't locate object method "exit" via package "OWX_DS2480" at ./FHEM/00_OWX_ASYNC.pm line 297.


Zieht man den Controller ab, läuft FHEM Amok:
2014.07.16 21:20:03.702 2: OWX: Error initializing OWio2: OWX_ASYNC_Init failed: OWX_SER: Serial device /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0@9600 not defined: No such file or directory
2014.07.16 21:20:03.816 3: Opening OWio2 device /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
2014.07.16 21:20:03.819 3: Can't open /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0: No such file or directory

Immer und immer wieder die gleiche Meldung. Dafür waren plötzlich wieder die Geräte an dem ersten aktualisiert. Einmalig. dann wieder nichts.
Wieder einstecken, Reconnect funktioniert, die Devices an dem zweiten refreshed. Der erste will weiterhin nicht.

Zurück zu der synchronen Version. Devices werden wieder alle aktualisiert.
Mir scheint es so, dass es noch Proleme mit multiplen Controllern gibt.
Noch ein Unterschied ist mir aufgefallen. Die synchrone Version beachtet die gesetzte Intervalle, die asynchrone ignoriert sie (zählt nur das Intervall im Controller?)

LG,

Alexander

det.

Hallo Norbert,
gute Arbeit! Auf RPI mit USB9097 (dem blauen aus dem China Shop) läuft OWX_ASYNC mit OWLCD und OWAD offenbar ohne Probleme und auf RPI mit USB 2480 (Eigenbau) macht es mit OWCOUNT und OWSWITCH auch was es soll.
Ich werde hier mal beobachten, was die User noch evtl. finden und dann am Wochenende mal wieder das Produktivsystem opfern.
An einem Testsystem ist läuft parallel noch OWX Sync wegen COC mit einem DS1820, das will nicht so richtig: 
ERRCOUNT
7
LG
det.

cwagner

Hallo Norbert,

im Modul 21_OWSWITCH.pm  erlaubt bisher die Outputkanäle A...H mit Klarnamen zu versehen. Das habe ich auch erfolgreich benutzt - der Einfachkeihalber habe ich in komplizierten Konstrukten zur Verkürzung dann doch den Namen A...H statt des gemappten Namen verwendet.

Nach Umstellung von OWX auf OWX_ASYNC funktioniert nur der output-Name A...H, wenn kein gemappter Name festgelegt ist. Ansonsten muss ich offenbar den gemappten Namen verwenden.

Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

hexenmeister

Hi!

Das korrekte Auslesen meiner DS1820 war nicht von Dauer. Mit den neuen Versionen tat auch die synchrone Variante nicht sehr lange. Die Werte werden irgendwann nicht mehr aktualisiert.

im Log Hunderte von solchen Meldungen:

Use of uninitialized value $m in addition (+) at ./FHEM/00_OWX.pm line 1517.
Use of uninitialized value $string_part in concatenation (.) or string at ./FHEM/00_OWX.pm line 1519.
Use of uninitialized value $m in addition (+) at ./FHEM/00_OWX.pm line 1517.
Use of uninitialized value $string_part in concatenation (.) or string at ./FHEM/00_OWX.pm line 1519.
Use of uninitialized value $m in addition (+) at ./FHEM/00_OWX.pm line 1517.
Use of uninitialized value $string_part in concatenation (.) or string at ./FHEM/00_OWX.pm line 1519.
Use of uninitialized value $m in addition (+) at ./FHEM/00_OWX.pm line 1517.
...

Entweder mache ich etwas grundlegend falsch, oder es ist noch ein Wurm drin...

meine Definitionen dürften nicht ungewöhnlich sein:
# Controllers
#
#define OWio1 OWX_ASYNC /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A703DCZ6-if00-port0
define OWio1 OWX /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A703DCZ6-if00-port0
attr OWio1 alias 1wire Controller 1
attr OWio1 dokick 1
attr OWio1 group IO
attr OWio1 interval 60
attr OWio1 room IO_Devices
#
#define OWio2 OWX_ASYNC /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
define OWio2 OWX /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
attr OWio2 alias 1wire Controller 2
attr OWio2 dokick 1
attr OWio2 group IO
attr OWio2 interval 60
attr OWio2 room IO_Devices

define NN_TE_OWTS01.1W_Controller_Box1 OWTHERM DS18B20 FB3E06050000
attr NN_TE_OWTS01.1W_Controller_Box1 IODev OWio1
attr NN_TE_OWTS01.1W_Controller_Box1 alias 1wire Controller Gehaeuse
attr NN_TE_OWTS01.1W_Controller_Box1 event-on-change-reading temperature
attr NN_TE_OWTS01.1W_Controller_Box1 group 1wire Controller
attr NN_TE_OWTS01.1W_Controller_Box1 model DS1822
attr NN_TE_OWTS01.1W_Controller_Box1 room Technik
attr NN_TE_OWTS01.1W_Controller_Box1 tempConv onkick
attr NN_TE_OWTS01.1W_Controller_Box1 tempHigh 75
attr NN_TE_OWTS01.1W_Controller_Box1 tempLow 70
...


Grüße,

Alexander

ntruchsess

Hallo Alexander,

Zitat von: hexenmeister am 16 Juli 2014, 23:28:16
im Log Hunderte von solchen Meldungen:

Use of uninitialized value $m in addition (+) at ./FHEM/00_OWX.pm line 1517.
Use of uninitialized value $string_part in concatenation (.) or string at ./FHEM/00_OWX.pm line 1519.
...


das spuckt OWX aus, wenn vom Busmaster beim Versuch zu lesen nix zurückkommt.

Zitat von: hexenmeister am 16 Juli 2014, 21:37:29
Habe versucht, testweise einen Controller zu löschen. Prompt war FHEM weg:

Can't locate object method "exit" via package "OWX_DS2480" at ./FHEM/00_OWX_ASYNC.pm line 297.

[...]

danke für diesen Hinweis. Fehlt im OWX_DS2480 wirklich, im OWX_FRM hab ich das drin.

Zitat von: hexenmeister am 16 Juli 2014, 23:28:16
Mir scheint es so, dass es noch Proleme mit multiplen Controllern gibt.

ja, scheint mir auch so. Und da das auch mit dem synchronen OWX auftritt, kann es eigentlich nur was mit der Initialisierung über die NotifyFn zu tun
haben, die ich in alle OWX-Clients eingebaut-habe. Ansonsten sind die beim synchronen OWX benutzten codepfade unverändert. Multiple Controller hatte ich nicht auf meinem Testplan (primär, weil mein Testaufbau nur einen Bus mit wechselnden Busmastern hat, das muss ich wohl dringend mal ändern...)

Zitat von: hexenmeister am 16 Juli 2014, 23:28:16
Noch ein Unterschied ist mir aufgefallen. Die synchrone Version beachtet die gesetzte Intervalle, die asynchrone ignoriert sie (zählt nur das Intervall im Controller?)

das soll so sein (beim OWX_ASYNC). Es hängt vom dokick-Attribut am Busmaster plus tempConv=onkick beim OWTHERM ab. Letzteres funktioniert mit dem synchronen OWX bisher nicht - und ich habe es bisher nur im asynchronen Code gefixed. Ich sehe keinen Sinn darin, bei tempConv=onkick noch zusätzlich die Aktualisierungen im Interval des OWTHERM-devices zu machen, wenn dabei sowieso kein Trigger der Temperaturmessung gemacht, sondern nur das letzte Ergebnis ausgelesen wird.

Gruß,

Norbert
while (!asleep()) {sheep++};

hexenmeister

Hallo Norbert,

ich habe erstmal die älteren Versionen aus Backup eingespielt (vor-vor-letzten müssten es sein. läuft jetzt synchron). Da gibt es keine Probleme mit mehreren Controllern.

Zitatdas spuckt OWX aus, wenn vom Busmaster beim Versuch zu lesen nix zurückkommt.
ah, ok. Wäre natürlich schöner, wenn eine sprechende Meldung dabei käme.

Zitatdas soll so sein (beim OWX_ASYNC)
ok, auch gut ;)

Danke und Grüße,

Alexander

ntruchsess

also was ich bisher reproduzieren konnte:

A) 1. Busmaster OWX_ASYNC an FRM über Ethernet
   2. Busmaster OWX an DS2480
-> Devices an OWX werden nach dem Start einmalig korrekt ausgelesen, danach nur noch Fehler. Devices an OWX_ASYNC funktionieren sauber.

B) 1. Busmaster OWX_ASYNC an FRM über Ethernet
   2. Busmaster OWX_ASYNC an DS2480
-> läuft.

Andere Busmaster(kombinationen) habe ich grade nicht zur Hand, die liegen zu Hause.

D.h. ich bearbeite erst mal Fall A)...

Gruß,

Norbert
while (!asleep()) {sheep++};

ntruchsess

#247
und schon behoben :-)

Da am DS2480 nur ein OWTHERM hängt, teste ich jetzt noch mal die umgekehrte Kombi:

OWX an FRM over Ethernet + OWX_ASYNC an DS2480

(Am FRM hängt der ganze Zoo an OW-devices, am DS2480 grade nur ein DS18B20)

EDIT: bis darauf, dass das Webinterface beim Repeat-interval von 5 Sek an 8 synchronen OWX-devices recht zäh läuft, scheint alles zu gehen. D.h. ich warte jetzt wieder auf Euer Feedback zum Fix...

Gruß,

Norbert
while (!asleep()) {sheep++};

hexenmeister

Genau diese Kombination habe ich wiederum nicht. Aber zwei ds2480 kann ich heute Abend ausprobieren.

Danke und Grüße,

Alexander

det.

Hallo Norbert,
auf den zwei RPI siehe Antwort #242 läuft es jetzt ohne Probleme sowohl der Mix aus OWX (COC) und OWX_ASYNC wie auch OWX_ASYNC und OWDevice. Morgen abend versuche ich es auf dem CUBIE2 mit 2xUSB 2480 und 26 div. 1-wire Devices - falls es hier nicht viel Gegenteiliges gibt.
LG
det.

hexenmeister

#250
Habe gerade getestet. Leider werden nur die Geräte auf dem zweiten (der Reihenfolge in der cfg nach) Controller aktualisiert.

LG,

Alexander

P.S. Im synchronen Modus scheint es zu funktionieren...

ntruchsess

Hallo Detlef,

top, danke :-)

Hallo Alexander,

danke auch dir.. Gib'ts denn logmeldungen? (mit verbose=5 am OWX_ASYNC-device, das nicht aktualisiert). Config wie oben? zählt der Error-count an den nicht aktualisierenden DS18B20 hoch?

Gruß,

Norbert
while (!asleep()) {sheep++};

hexenmeister

Hi!

Config ist der gleiche. Mit Log 4 sah ich keine Meldungen, stelle jetzt mal auf 5. Das ist dann aber kaum beherschbar. Kann ich nach OWX o.ä. filtern?

Gerade mit async neu gestartet, melde mich in paar minuten...

hexenmeister

so...
ErrorCount wird nicht hochgezählt (ist immer noch 0).
Auf der Err-Console ist nichts. Errors im Log kann ich auch nicht entdecken.

2014.07.17 23:21:41.921 5: OWX_ASYNC_Schedule master: OWio2, task: OWio2
2014.07.17 23:21:41.948 5: OWX_ASYNC_PT_Kick: kicking DS14B20 temperature conversion
2014.07.17 23:21:41.956 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:42.031 5: OWX_DS2480.query sending out: e1cc44
2014.07.17 23:21:42.035 5: OWX_ASYNC_RunTasks: OWio2 task schedule for timeout at 1405632103.952042
2014.07.17 23:21:42.046 5: OWX_DS2480 read: After loop no. 1 received: cdcc44
2014.07.17 23:21:43.067 5: OWX_ASYNC_PT_Kick: doing tempConv for DG_NN_OWTS01.Raum
2014.07.17 23:21:43.078 5: OWX_ASYNC_Schedule master: OWio2, task: DG_NN_OWTS01.Raum
2014.07.17 23:21:43.084 5: OWX_ASYNC_PT_Kick: doing tempConv for NN_TE_OWTS01.1W_Controller_Box2
2014.07.17 23:21:43.087 5: OWX_ASYNC_Schedule master: OWio2, task: NN_TE_OWTS01.1W_Controller_Box2
2014.07.17 23:21:43.102 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.178 5: OWX_DS2480.query sending out: e1f0e3b5
2014.07.17 23:21:43.183 5: OWX_DS2480.query sending out: e100000000000000000000000000000000e3a5
2014.07.17 23:21:43.187 5: OWX_ASYNC_RunTasks: OWio2 task schedule for timeout at 1405632105.095245
2014.07.17 23:21:43.225 5: OWX_DS2480 read: After loop no. 2 received: cdf08008262008028a80200000000000a088
2014.07.17 23:21:43.260 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.336 5: OWX_DS2480.query sending out: e1ece3b5
2014.07.17 23:21:43.342 5: OWX_DS2480.query sending out: e100000000000000000000000000000000e3a5
2014.07.17 23:21:43.346 5: OWX_ASYNC_RunTasks: OWio2 task schedule for timeout at 1405632105.253512
2014.07.17 23:21:43.374 5: OWX_DS2480 read: After loop no. 3 received: cdec8008262008028a80200000000000a088
2014.07.17 23:21:43.383 5: OWX_SER::Search: new alarm device found 28.45128B040000.AC
2014.07.17 23:21:43.392 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.468 5: OWX_DS2480.query sending out: e1ece3b5
2014.07.17 23:21:43.474 5: OWX_DS2480.query sending out: e180080a00000000000000000000000000e3a5
2014.07.17 23:21:43.500 5: OWX_DS2480 read: After loop no. 1 received: cdec80088e20020a8a802000000000008200
2014.07.17 23:21:43.509 5: OWX_SER::Search: new alarm device found 28.4B318B040000.09
2014.07.17 23:21:43.519 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.595 5: OWX_DS2480.query sending out: e1ece3b5
2014.07.17 23:21:43.600 5: OWX_DS2480.query sending out: e180080a00000000000000000000000000e3a5
2014.07.17 23:21:43.629 5: OWX_DS2480 read: After loop no. 3 received: cdec80088e20020a8a802000000000008200
2014.07.17 23:21:43.638 5:  Alarms = 28.45128B040000.AC 28.4B318B040000.09
2014.07.17 23:21:43.659 5: OWX_ASYNC_RunTasks: OWio2 task finished
2014.07.17 23:21:43.669 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.746 5: OWX_DS2480.query sending out: e1552845128b040000acbeffffffffffffffffff
2014.07.17 23:21:43.750 5: OWX_ASYNC_RunTasks: NN_TE_OWTS01.1W_Controller_Box2 task schedule for timeout at 1405632105.665828
2014.07.17 23:21:43.775 5: OWX_DS2480 read: After loop no. 1 received: cd552845128b040000acbe01024b467fff0f10a4
2014.07.17 23:21:43.784 5: T: 32.06 °C ▾
2014.07.17 23:21:43.786 5: OWX_ASYNC_RunTasks: NN_TE_OWTS01.1W_Controller_Box2 task finished
2014.07.17 23:21:43.794 5: OWX_DS2480.query sending out: e3c5
2014.07.17 23:21:43.871 5: OWX_DS2480.query sending out: e155284b318b04000009beffffffffffffffffff
2014.07.17 23:21:43.875 5: OWX_ASYNC_RunTasks: DG_NN_OWTS01.Raum task schedule for timeout at 1405632105.791124
2014.07.17 23:21:43.915 5: OWX_DS2480 read: After loop no. 1 received: cd55284b318b04000009beb1014b467fff0f108d
2014.07.17 23:21:43.922 5: T: 27.06 °C ▾
2014.07.17 23:21:43.925 5: OWX_ASYNC_RunTasks: DG_NN_OWTS01.Raum task finished


Sieht alles gut aus, nur taucht der erste Controller (OWio1) gar nicht erst auf (habe natürlich deutlich größeres Stück betrachtet, als der Auszug oben).

ntruchsess

Zitat von: hexenmeister am 17 Juli 2014, 23:26:08
Sieht alles gut aus, nur taucht der erste Controller (OWio1) gar nicht erst auf.

gar nicht heißt 'nicht mal die Meldung beim define'?
while (!asleep()) {sheep++};