OWX MAJOR UPDATE

Begonnen von Prof. Dr. Peter Henning, 29 Oktober 2017, 18:52:48

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

@synaps-o-dan: Hm - welche Counter hängen da dran ? Sind das originale DS2423

@cberl: Kann ich nicht nachvollziehen, bei mir läuft das Firmata-Interface prima, bei Anderen auch. Bitte mal testweise andere Devicenamen verwenden als "FIRMATA6" und "frm7.owx15".

LG

pah

synaps-o-dan

#46
Zitat von: Prof. Dr. Peter Henning am 08 November 2017, 08:02:17
@synaps-o-dan: Hm - welche Counter hängen da dran ? Sind das originale DS2423

@cberl: Kann ich nicht nachvollziehen, bei mir läuft das Firmata-Interface prima, bei Anderen auch. Bitte mal testweise andere Devicenamen verwenden als "FIRMATA6" und "frm7.owx15".

LG

pah
Hallo,
es handelt sich insgesamt um drei Counter.

  • Zwei Stück GP1 Counter vom Fuchs-Shop (wahrscheinlich die letzten verfügbaren) mit DS2423. Datenblatt siehe Anhang.
  • Ein Dual S0 Zählermodul von Esera (ehemals E-Service),  Link
Hier ein list device eines der beiden GP1:

Internals:
   ASYNC      0
   DEF        DS2423 42F60F000000
   ERRCOUNT   0
   INTERVAL   300
   IODev      OWX_LinkUSB
   IODevName  myOWX
   NAME       Counter_Gasuhr
   NOTIFYDEV  global
   NR         606
   NTFY_ORDER 50-Counter_Gasuhr
   OW_FAMILY  1D
   OW_ID      42F60F000000
   PRESENT    1
   ROM_ID     1D.42F60F000000.78
   STATE      count: 878575
   TYPE       OWCOUNT
   DATA:
     memory     2017-11-07 midnight    8.00
   READINGS:
     2017-11-08 20:08:02   A               878575
     2017-11-08 20:08:02   A_rate          48
     2017-11-08 20:08:02   B               8
     2017-11-08 20:08:02   B_rate          0
     2017-11-08 20:08:02   counters.A      878575
     2017-11-08 20:08:02   memory          2017-11-07 midnight    8.00
     2017-11-08 20:08:02   statStateDay    A:_877751.00__cts_A_r:__0.00__cts/h_B:__8.00__cts_B_r:__0.00__cts/h: 05:33:07 A:_877751.00__cts_A_r:__0.00__cts/h_B:__8.00__cts_B_r:__0.00__cts/h_Count: 1
(hier steht ziemlich rum vom Statistik-Modul, muss man mal aufräumen.)
     2017-11-08 20:08:02   state           A: 878575.00  cts A_r: 48.00  cts/h B:  8.00  cts B_r:  0.00  cts/h
   helper:
     _98_statistics Stat_Counter
   owg_midnight:
     877751
     8
   owg_str:


     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     2017-11-07 midnight 877751.00
     2017-11-07 midnight    8.00
   owg_val:
     878575
     8
Attributes:
   IODev      myOWX
   model      DS2423
   room       OWX
   stateFormat count: counters.A
   userReadings counters.A {ReadingsVal($name,"A",0)}

Analog dazu ein list device des Esera-Moduls:

Internals:
   ASYNC      0
   DEF        DS2423 73880F000000
   ERRCOUNT   0
   INTERVAL   300
   IODev      OWX_LinkUSB
   IODevName  myOWX
   NAME       Counter_Hauptzaehler
   NOTIFYDEV  global
   NR         607
   NTFY_ORDER 50-Counter_Hauptzaehler
   OW_FAMILY  1D
   OW_ID      73880F000000
   PRESENT    1
   ROM_ID     1D.73880F000000.6D
   STATE      count: 388765
   TYPE       OWCOUNT
   DATA:
     memory     2017-11-07 midnight 83886897.00
   READINGS:
     2017-11-08 20:08:06   A               388765
     2017-11-08 20:08:06   A_rate          120
     2017-11-08 20:08:06   B               83886897
     2017-11-08 20:08:06   B_rate          0
     2017-11-08 20:08:06   counters.A      388765
     2017-11-08 20:08:06   memory          2017-11-07 midnight 83886897.00
     2017-11-08 20:08:06   statStateDay   
     2017-11-08 20:08:06   state           A: 388765.00  cts A_r: 120.00  cts/h B: 83886897.00  cts B_r:  0.00  cts/h
(auch hier viel rausgelöscht vom Statistikmodul)
   helper:
     _98_statistics Stat_Counter
   owg_midnight:
     387841.92
     83886897
   owg_str:


     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     undef
     2017-11-07 midnight 387841.92
     2017-11-07 midnight 83886897.00
   owg_val:
     388765
     83886897
Attributes:
   IODev      myOWX
   model      DS2423
   room       OWX
   stateFormat count: counters.A
   userReadings counters.A {ReadingsVal($name,"A",0)}


LG,
Daniel
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

Gringo

Hallo,

hat sich diese "define <device-name> OWX <arduino-pin>" Syntax geändert? Wenn ich jedenfalls das Device so anlegen will wie sonst immer bekomme ich nur eine Fehlermeldung.

OWX: Define failed, unable to identify interface type <device-name> <arduino-pin>

Benutze einen Arduino Uno mit ComfirmableFirmata v2.06 über TCP.

Lg.

Prof. Dr. Peter Henning

Es ist doch wirklich nicht schwer, die Commandref zu lesen. Darum schreibe ich sie nämlich.

LG

pah

stefan-dd

Das hat nichts mit lesen zu tun, es funktioniert einfach nicht.
Es ist schon erst einmal positiv Fhem ist nicht abgestürzt. OneWire Devices findet er trotz dem nicht.
Die Arduino Zuordnung klappt gar nicht.

Ich habe einmal FIRMATA und einmal FIRMATA_II. Fhem trennt dies immer korrekt.
Definiert habe ich OWX FIRMATA:19. ER will sich lt. Error Meldung aber mit dem schon belegten PIN19 aus FIRMATA_II verbinden, auf dem
define Terrasse FRM_OUT 19
attr Terrasse IODev FIRMATA_II

konfiguriert ist.
OWX trifft hier eine willkürliche Zuordnung, obwohl eindeutig definiert wurde.




Prof. Dr. Peter Henning

#50
OWX trifft gar keine willkürliche Zuordnung, das ist einfach Unsinn.

Bitte mal nach Zeile 195 in 11_OWX_FRM eine zusätzliche Log-Zeile einfügen:

$hash->{IODev} = $main::defs{$hash->{HWDEVICE}};
  main::Log 1,"===========> Initializing Firmata with IODev=".$hash->{IODev}->{NAME}." and args ".join(",",@args);
  my $ret = main::FRM_Init_Pin_Client($hash,\@args,PIN_ONEWIRE);


und einen Restart machen. Und das Ergebnis dieser Log-Zeile hier posten.

LG

pah

stefan-dd

#51
Diese Einträge wurden geschrieben:

2017.11.11 21:28:48 1: OWX_FRM::Init Error Device 'Terrasse' allready defined for pin 19
2017.11.11 21:28:53 1: OWX_Init called for bus OWX_Pool with interface state error initializing: Device 'Terrasse' allready defined for pin 19, now going for detect
2017.11.11 21:28:53 1: OWX: 1-Wire bus OWX_Pool: interface not associated to any FRM device


2017.11.11 21:26:16 1: PERL WARNING: "my" variable $ret masks earlier declaration in same scope at ./FHEM/11_OWX_FRM.pm line 200, <$fh> line 2107.
Global symbol "@args" requires explicit package name at ./FHEM/11_OWX_FRM.pm line 195, <$fh> line 2107.
Global symbol "@args" requires explicit package name at ./FHEM/11_OWX_FRM.pm line 196, <$fh> line 2107.
Compilation failed in require at ./FHEM/00_OWX.pm line 198, <$fh> line 2107.


Die define sieht so aus :
define OWX_Pool OWX FIRMATA:19
und für die Terrasse so:
define Terrasse FRM_OUT 19
attr Terrasse IODev FIRMATA_II


Man könnte das passend uminstallieren oder die Namen ändern... Die Ursache wäre damit nicht beseitigt.

Prof. Dr. Peter Henning

Nun, diese Fehler gibt es in der korrekten 11_OWX_FRM.pm NICHT. In der wird nämlich in Zeile 194 das Array @args definiert.

Bitte NUR die Log-Zeile einfügen  ::)

pah


stefan-dd

2017.11.12 00:32:10 1: Error: >FIRMATA:19< has no TYPE, but following keys: ><

2017.11.12 00:32:51 1: ===========> Initializing Firmata with IODev=FIRMATA and args 19
2017.11.12 00:32:51 1: OWX_FRM::Init Error Device 'Terrasse' allready defined for pin 19
2017.11.12 00:32:56 1: OWX_Init called for bus OWX_Pool with interface state error initializing: Device 'Terrasse' allready defined for pin 19, now going for detect
2017.11.12 00:32:56 1: OWX: 1-Wire bus OWX_Pool: interface not associated to any FRM device

Prof. Dr. Peter Henning

#54
Et voilá, damit haben wir es. Das OWX trifft keine "willkürliche Zuordnung" (bitte einen solchen Unsinn nicht noch einmal zu behaupten !), sondern ruft die Funktion FRM_Init_Pin_Client aus dem Modul 10_FRM.pm ganz korrekt auf, nämlich mit dem Wert
$hash->{IODev} = <Hash von FIRMATA>

Der Fehler befindet sich im Modul 10_FRM.pm, und zwar in der Funktion FRM_Client_AssignIOPort($@). Diese trifft die fehlerhafte Behauptung, dass DIESES Firmata-Device identisch mit dem ANDEREN Firmata-Device sei, produziert die Fehlermeldung und bricht den Initialisierungsvorgang ab.

Also: Sorry, nicht meine Baustelle - bitte an den Maintainer von 10_FRM.pm wenden.

Einen Workaround kann ich anbieten - allerdings ohne Garantie, und ohne ihn zu testen. Dazu muss man diesen Fehler umgehen, und die Funktionalität von  FRM_Init_Pin_Client aus dem Modul 10_FRM.pm nachbilden, also in 11_OWX_FRM.pm die Zeile
my $ret = main::FRM_Init_Pin_Client($hash,\@args,PIN_ONEWIRE);
ersetzen durch

  #-- 10_FRM.pm is broken
  #my $ret = main::FRM_Init_Pin_Client($hash,\@args,PIN_ONEWIRE);
  #-- possible workaround for broken 10_FRM.pm
  main::AssignIoPort($hash);
  my $ret = main::FRM_Client_FirmataDevice($hash)->pin_mode($pin,PIN_ONEWIRE);

Noch einmal: Das ist ungetesteter Code.

Eine zweite Möglichkeit - ebenfalls ungetestet: Diese betreffende Zeile ersetzen durch

  #-- 10_FRM.pm is broken
  #-- possible workaround
  $main::attr{$name}{IODev}=$hash->{IODev}->{NAME};
  my $ret = main::FRM_Init_Pin_Client($hash,\@args,PIN_ONEWIRE);
 

Dabei wird die Funktionalität nicht umgangen, sondern fälschlicherweise behauptet, wir hätten ein Attribut IODev.

LG

pah

stefan-dd

Variante1, es passiert nichts:

2017.11.12 10:19:08 1: ===========> Initializing Firmata with IODev=FIRMATA and args 19
2017.11.12 10:19:08 1: OWX_FRM::Init Error 1
2017.11.12 10:19:13 1: OWX_Init called for bus OWX_Pool with interface state error initializing: Device 'Terrasse' allready defined for pin 19, now going for detect
2017.11.12 10:19:13 1: OWX: 1-Wire bus OWX_Pool: interface Firmata detected in FIRMATA_II
2017.11.12 10:19:15 1: OWX_Discover: 1-Wire devices found on bus OWX_Pool ()
2017.11.12 10:20:58 1: ====> REOPENING DEVICE
2017.11.12 10:21:58 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 10:22:58 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 10:23:49 1: OWX_Discover: 1-Wire devices found on bus OWX_Pool ()
2017.11.12 10:23:58 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 10:24:58 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected


Variante 2, OneWire Sensoren werden gefunden und angelegt, aber nur einmal aktualisiert. Mit get ... devices werden sie angezeigt. STATE ist immer "disconnected"

2017.11.12 11:36:44 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:36:45 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:37:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:38:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:39:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:40:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:41:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:41:44 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:41:45 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:42:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:43:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:44:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:45:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:46:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:46:44 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:46:45 1: OWX_Complex called while interface OWX_Pool disconnected
2017.11.12 11:47:08 1: ====> REOPENING DEVICE
2017.11.12 11:47:44 1: OWX_FRM::Ready function called for bus OWX_Pool. STATE=disconnected
2017.11.12 11:47:51 1: ====> REOPENING DEVICE
2017.11.12 11:47:58 1: OWX_Discover: 1-Wire devices found on bus OWX_Pool (OWX_28_FFAA54631603,OWX_28_FF965F631603)
2017.11.12 11:48:08 1: OWX_Discover: 1-Wire devices found on bus OWX_Pool (OWX_28_FFAA54631603,OWX_28_FF965F631603)


 

Prof. Dr. Peter Henning

Scheint ein tiefer liegendes Problem von Firmata zu sein - ich habe aber nicht die zeitlichen Ressourcen, da tiefer gehende Ursachenforschung zu betreiben.

LG

pah

synaps-o-dan

Hallo,
ich habe meinen OW System mal an ein Testsystem gehängt:

  • OWX in Version 7.05
  • Debina Stretch, alles aktuell (das Produktivsystem läuft noch unter Jessie, noch keine Zeit fürs upgrade gehabt)
  • Raspberry Pi 2B (Produktivsystem: 3)
  • Eclo 1Wire USB Adapter (Produktivsystem: LinkUSBi), beide aus dem Fuchs Shop
Im Testsystem findet OWX kein einziges OW device, noch nicht einmal den OWID. Folgende Logmeldung (verbose=5) für ein get devices:
2017.11.12 14:52:52 1: OWX_SER::Query OWX_EcloOWUSB: Sending out0xe3 0xc5
2017.11.12 14:52:52 5: SW: e3c5
2017.11.12 14:52:52 4: OWX_SER::Query OWX_EcloOWUSB: 1 of 1 bytes in first attempt and state opened
2017.11.12 14:52:52 1: OWX_SER::Query OWX_EcloOWUSB: Sending out0xe1 0xf0 0xe3 0xb5
2017.11.12 14:52:52 5: SW: e1f0e3b5
2017.11.12 14:52:53 4: OWX_SER::Query OWX_EcloOWUSB: 1 of 1 bytes in first attempt and state opened
2017.11.12 14:52:53 1: OWX_SER::Query OWX_EcloOWUSB: Sending out0xe1 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xe3 0xa5
2017.11.12 14:52:53 5: SW: e100000000000000000000000000000000e3a5
2017.11.12 14:52:53 4: OWX_SER::Query OWX_EcloOWUSB: 16 of 16 bytes in first attempt and state opened
2017.11.12 14:52:53 1: OWX_SER::Search CRC failed on bus OWX_EcloOWUSB
2017.11.12 14:52:53 1: OWX_Discover: 1-Wire devices found on bus OWX_EcloOWUSB ()

Gerne kann ich weitere Infos / Logs liefern.
VG,
Daniel
fhem auf Raspberry Pi 3
5 x Set aus jew. 1x FHT80B + 1xFHT8V + 1x FHT80TF-2
HM: 1 x HM-ES-PMSw1-Pl, 2 x HM-LC-Sw1-FM, 2 x HM-LC-Sw1PBU-FM, 3 x HM-Sec-SD, 2 x HM-PB-2-WM55, 2 x HM-Sec-MDIR-2
3 x EM-1000 EM
Onewire: insgesamt 11 Onewire-Sensoren an einem LinkUSB Adapter

Prof. Dr. Peter Henning

OK, damit sind wir einen Schritt weiter. Das Interface wird also gefunden, gibt auch die richtigen Codes zurück in der Query (das war bisher, wenn ich das richtig im Kopf habe, nicht so). Allerdings steigt jetzt die Bussuche aus - obwohl sie eigentlich nichts Anderes macht, als im alten OWX.

Folgender Test bitte: In der Datei 11_OWX_SER.pm steht in Zeile 785

  select(undef,undef,undef,0.05);

Das ist eine Verzögerung von 50 ms. Im alten OWX lag diese bei sagenhaften 500 ms, und blockierte währenddessen FHEM. Auf den normalen USB-Adaptern machte es keine Probleme, das auf 50 ms herunterzusetzen - aber vielleicht ist der LinkUSB da kritisch.

Also bitte mal testweise die 0.05 durch 0.5 ersetzen.

LG

pah

ext23

Moin,

ich habe jetzt endlich auch mein OWX auf Async umgestellt. Ich merke eigentlich keinen Unterschied, nur die iButtons spinnen irgendwie etwas. Der present state geht ab und an mal auf 1 obwohl kein iButton steckt.

Im Log finde ich häufig diese Meldung:

2017.11.13 10:55:35 1: OWX_SER::Search reset failed on bus MP00202

Ich frage die iButton alle 5 Sekunden ab. In summe sind das 3 iButtons.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)