OWX Next Generation

Begonnen von Prof. Dr. Peter Henning, 09 November 2016, 20:48:30

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Nachdem ich das eigentlich schon für Mai versprochen hatte, mir aber berufliche Dinge dazwischen geraten sind, kommt jetzt endlich der nächste Schritt.

Die Frontendmodule OWAD ... OWVAR sind alle schon für den Betrieb mit einer neuen asynchronen Variante von OWX ausgerüstet.

Diese neue Backendvariante besteht im Moment aus 3 Dateien:

00_OWX.pm, 11_OWX_SER.pm und 11_OWX_TCP.pm (alle 3 müssen ins FHEM-Modulverzeichnis) und unterstützt derzeit Busmaster über USB und TCP/IP, siehe Anhang.

Durch einfaches Setzen des Attributes asynchronous=1 wird die Busabfrage auf eine komplett asynchron ablaufende Queue ausgelagert - und zwar ohne die externen Module, die Norbert Truchsess in dem ab und zu noch verwendeten OWX_ASYNC benutzt hat.

Debugging der Queue wird ebenfalls durch ein Attribut gesteuert ("debug"), im Backend also nicht mehr über owx_debug.

Eigentlich sollte das alles stabil laufen - tut es zumindest in meiner Testinstallation. Unerwünschte Effekte sind aber nicht ausgeschlossen - vor der Installation in Produktivsystemen wird ausdrücklich gewarnt. Ich wäre aber an Testberichten hochgradig interessiert.

LG

pah


Edit: Download auf Seite 4

UweH

Hallo pah,

Danke, wird getestet.

Gruß
Uwe

C0mmanda

#2
Moin,

Nach einem ersten Schnelltest steigt FHEM beim Neustart aus, ich vermute hier einen Zusammenhang:

2016.11.10 07:33:25 1: PERL WARNING: shift on reference is experimental at ./FHEM/00_OWX.pm line 1257, <$fh> line 159.
Can't locate ./FHEM/11_OWX_FRM.pm in @INC (you may need to install the .::FHEM::11_OWX_FRM module) (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl ./FHEM ./FHEM/lib) at ./FHEM/00_OWX.pm line 220, <$fh> line 159.


Das Modul "11_OWX_FRM" gibt es bei mir nicht.

Habe einen Arduino Busmaster (per USB) neben einem DS9490R am laufen.

grtz
CmdA

Prof. Dr. Peter Henning

Wie man in meinem Post lesen kann, wird derzeit nur USB und TCP/IP unterstützt. Die Firmata-Schnittstelle noch nicht (wird aber kommen). Der DS9490 macht keine Serial Port Emulation, sondern geht über die HID-Schnittstelle, das geht also auch nicht (derzeit gar nicht mit OWX, auch nicht mit dem alten).

LG

pah

C0mmanda

Sorry, mein Fehler.
War mir nicht bewusst.
Dann warte ich noch  8)

grtz
CmdA

krueuw

Ich hab die neuen Module in meine Testinstallation mit einem DS2480B seriell port to 1-wire-line (Basis für DS9097 Series)  aus dem Fuchs-Shop und ca 60 Sensoren DS1820 und DS2438 auf Rasbian (Pi1) kopiert. Danach habe ich das Attribut asynchronous auf eins gesetzt. Bisher normales Verhalten, auch das Log zeigt keine Auffälligkeiten :-) Ich lasse die Module jetzt in Betrieb, bis mir was auffällt.

Prof. Dr. Peter Henning

Hurra, Fingers crossed.

LG

pah

UweH

Hallo pah,

ich lasse seit gestern über ein paar DOIFs alle paar Minuten Schaltvorgänge ablaufen, dabei kam vorhin Folgendes:

2016.11.10 20:09:33 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/21_OWSWITCH.pm line 525.
2016.11.10 20:09:33 1: stacktrace:
2016.11.10 20:09:33 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (525)
2016.11.10 20:09:33 1:     main::OWSWITCH_Get                  called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (1688)
2016.11.10 20:09:33 1:     main::CommandGet                    called by fhem.pl (1085)
2016.11.10 20:09:33 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:09:33 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (728)
2016.11.10 20:09:33 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:09:33 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (672)
2016.11.10 20:09:33 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/21_OWSWITCH.pm line 525.
2016.11.10 20:09:33 1: stacktrace:
2016.11.10 20:09:33 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (525)
2016.11.10 20:09:33 1:     main::OWSWITCH_Get                  called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (1688)
2016.11.10 20:09:33 1:     main::CommandGet                    called by fhem.pl (1085)
2016.11.10 20:09:33 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:09:33 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (728)
2016.11.10 20:09:33 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:09:33 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (672)
2016.11.10 20:09:33 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/21_OWSWITCH.pm line 525.
2016.11.10 20:09:33 1: stacktrace:
2016.11.10 20:09:33 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (525)
2016.11.10 20:09:33 1:     main::OWSWITCH_Get                  called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (1688)
2016.11.10 20:09:33 1:     main::CommandGet                    called by fhem.pl (1085)
2016.11.10 20:09:33 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:09:33 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (728)
2016.11.10 20:09:33 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:09:33 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (672)
2016.11.10 20:09:33 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/21_OWSWITCH.pm line 525.
2016.11.10 20:09:33 1: stacktrace:
2016.11.10 20:09:33 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (525)
2016.11.10 20:09:33 1:     main::OWSWITCH_Get                  called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (1688)
2016.11.10 20:09:33 1:     main::CommandGet                    called by fhem.pl (1085)
2016.11.10 20:09:33 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:09:33 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (728)
2016.11.10 20:09:33 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:09:33 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:09:33 1:     main::CallFn                        called by fhem.pl (672)
2016.11.10 20:10:08 1: OWX_TCP: Trying second reset on bus 1wire_1, state is opened
2016.11.10 20:10:08 1: PERL WARNING: substr outside of string at ./FHEM/21_OWSWITCH.pm line 1351.
2016.11.10 20:10:08 1: stacktrace:
2016.11.10 20:10:08 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (1351)
2016.11.10 20:10:08 1:     main::OWXSWITCH_SetState            called by ./FHEM/21_OWSWITCH.pm (816)
2016.11.10 20:10:08 1:     main::OWSWITCH_Set                  called by fhem.pl (3256)
2016.11.10 20:10:08 1:     main::CallFn                        called by fhem.pl (1624)
2016.11.10 20:10:08 1:     main::DoSet                         called by fhem.pl (1656)
2016.11.10 20:10:08 1:     main::CommandSet                    called by fhem.pl (1085)
2016.11.10 20:10:08 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:10:08 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (765)
2016.11.10 20:10:08 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:10:08 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:10:08 1:     main::CallFn                        called by fhem.pl (672)
2016.11.10 20:10:08 1: PERL WARNING: Use of uninitialized value in ord at ./FHEM/21_OWSWITCH.pm line 1351.
2016.11.10 20:10:08 1: stacktrace:
2016.11.10 20:10:08 1:     main::__ANON__                      called by ./FHEM/21_OWSWITCH.pm (1351)
2016.11.10 20:10:08 1:     main::OWXSWITCH_SetState            called by ./FHEM/21_OWSWITCH.pm (816)
2016.11.10 20:10:08 1:     main::OWSWITCH_Set                  called by fhem.pl (3256)
2016.11.10 20:10:08 1:     main::CallFn                        called by fhem.pl (1624)
2016.11.10 20:10:08 1:     main::DoSet                         called by fhem.pl (1656)
2016.11.10 20:10:08 1:     main::CommandSet                    called by fhem.pl (1085)
2016.11.10 20:10:08 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2264)
2016.11.10 20:10:08 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (765)
2016.11.10 20:10:08 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (456)
2016.11.10 20:10:08 1:     main::FW_Read                       called by fhem.pl (3261)
2016.11.10 20:10:08 1:     main::CallFn                        called by fhem.pl (672)


Das waren bisher die einzigen Einträge im Logfile...

Gruß
Uwe

Alexander Bauer

Hallo pah,

danke für die neue Version. Versuche es hier mit TCP/IP im asynchronen Modus.

2016.11.10 20:27:30 1: OWX: Performing define and low level init of device
2016.11.10 20:27:30 1:  OWX_TCP::Init called for bus OWio1, state is ???
2016.11.10 20:27:30 3: Opening OWio1 device 192.168.154.55:26
2016.11.10 20:27:30 3: OWio1 device opened
2016.11.10 20:27:30 1: OWX_Init called for bus OWio1 with interface state opened, now going for detect
2016.11.10 20:27:40 2: OWio1: first attempt to read timed out, trying to close and open the device.
2016.11.10 20:27:40 3: Opening OWio1 device 192.168.154.55:26
2016.11.10 20:27:40 3: OWio1 device opened
2016.11.10 20:27:40 1: OWX_TCP::Detect 1-Wire bus OWio1: interface master DS2480 detected for the first time
....
2016.11.10 20:39:52 1: OWX_TCP: Trying second reset on bus OWio1, state is Active
2016.11.10 20:39:52 2: Attempt to write to Active device.
2016.11.10 20:39:52 3: OWX_TCP: Reset_TCP failure on bus OWio1
2016.11.10 20:39:52 2: Attempt to write to Active device.
2016.11.10 20:39:52 1: OWX_TCP: Trying second reset on bus OWio1, state is Active
2016.11.10 20:39:52 2: Attempt to write to Active device.
2016.11.10 20:39:52 3: OWX_TCP: Reset_TCP failure on bus OWio1
....


aus der fhem.cfg
define OWio1 OWX 192.168.154.55:26
attr OWio1 asynchronous 1
attr OWio1 room Haussteuerung,OWX
attr OWio1 verbose 3


Mit der "alten" Async Version gab es solche Fehler nicht. 
--

Fhem auf Cubietruck mit Debian Wheezy und Homematic und 1-Wire

Prof. Dr. Peter Henning

Danke, muss ich jetzt erst mal ansehen.

LG

pah

Prof. Dr. Peter Henning

@UweH: Ah, OK - da ist noch einFehler im gegenwärtigen OWSWITCH-Modul, der nur beim DS2406 und nur im asynchronen Modus auftritt. Muss ich bei Gelegenheit beheben, mit dem asynchronen OWX hat das nicht direkt zu tun.

@Alexander Bauer: Das sind aber keine Fehlermeldungen, sondern nur Statusanzeigen - die werden demnächst weg sein.

Aktuelle Version ist 6.0beta2, angehängt an den ersten Post.

LG

pah




UweH

Zitat von: Prof. Dr. Peter Henning am 12 November 2016, 18:37:15
@UweH: Ah, OK - da ist noch einFehler im gegenwärtigen OWSWITCH-Modul, der nur beim DS2406 und nur im asynchronen Modus auftritt. Muss ich bei Gelegenheit beheben, mit dem asynchronen OWX hat das nicht direkt zu tun.
OK, Danke  :)

Prof. Dr. Peter Henning

Irgendeinen Eindruck von der Performance ? Die Queue-Verwaltung schluckt zwar ein paar Ressourcen, aber ein Blockieren anderer Aufgaben sollte nicht mehr vorkommen.

LG

pah

UweH

Da ich keine Vorher/Nachher-Messung gemacht habe, kann ich nur einen subjektiven Eindruck wiedergeben...keine Bremse im System :)
Ich hatte mit ein paar DOIFs massenhaft Schaltvorgänge auf 6 1-Wire-Aktoren ausgelöst, den Intervall für 3 Temperatursensoren auf 1 Sekunde gesetzt und über ein 1-Wire-Poti einen Dimmer Disco machen lassen, 24h lang. Bis auf die eine Meldung waren keine Aussetzer zu verzeichnen.

Beim Unterbrechen der LAN-Verbindung zum Interface schmiert FHEM nicht ab, anders als bisher. Nach dem Reconnect wird der Status des Interfaces wieder brav auf "opened" gesetzt und der Busmaster findet auch die angeschlossenen Devices, Schaltvorgänge werden aber nicht mehr ausgeführt. Ein "get...temperature" bei einem DS1820 bringt folgende Meldung:



Gruß
Uwe

cwagner

Auf meiner Installation (Raspi 2, Interface FT232RL (USB-UART converter) und DS2480B Dallas-Maxim (RS232-One Wire converter) gibt es mit dem Modul 11_OWX_SER in der heutigen Beta 2 grundsätzliche Probleme schon beim Restart:
2016.11.12 19:27:42 1: PERL WARNING: shift on reference is experimental at ./FHEM/00_OWX.pm line 1270.
2016.11.12 19:27:42 1: OWX: Performing define and low level init of bus OWio1
2016.11.12 19:27:42 3: Opening OWio1 device /dev/ttyUSB0
2016.11.12 19:27:42 3: Setting OWio1 serial parameters to 9600,8,N,1
2016.11.12 19:27:42 3: OWio1 device opened
2016.11.12 19:27:42 1: OWX_SER: Can't open serial device /dev/ttyUSB0: Nicht erlaubter Seek
2016.11.12 19:27:42 1: OWX_Init called for bus OWio1 with interface state opened, now going for detect
Can't call method "baudrate" on an undefined value at ./FHEM/11_OWX_SER.pm line 705.


Der Start wird abgebrochen - wenn ich das Modul Ser-Modul aus dem Trunk nehme, läuft es wieder - natürlich ohne ASYNC.

Herzliche Grüße

Christian
PI 2B+/3B+ 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