OWDevice reading asynchron

Begonnen von jko, 11 März 2018, 11:35:29

Vorheriges Thema - Nächstes Thema

jko

Hallo,

ich habe OWDevice/OWServer auf einem Rasperrypi mit einem DS2482-800 am laufen. Perfmon meckert bei jedem read über delays von ca. 1.5sec. Also habe ich mir OWDevice einmal angesehen und das auf "BlockingCall" umgestellt. Die Version anbei läuft seit einigen Wochen bei mir stabil.
Vielleicht können die Profis sich das einmal ansehen?

viele Grüße
Jürgen

Dr. Boris Neubert

Hallo und vielen Dank.

Ich habe mir die Version gespeichert, werde aber voraussichtlich frühestens nächstes Wochenende dazu kommen, mir Deine Version anzusehen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

eldrik

Hi,

ich habe mir die Version einmal testweise gezogen, was auffällt, in dem bereitgestellten File fehlt der Verweis auf Blocking.pm weshalb diese direkt zu einem aussteigen von FHEM führt wenn die sub BlockingCall aufgerufen wird.

use Blocking;

Des weiteren werden bei meinem Sensoren nun unplausible Rückgaben beim get (Intervalle liegen bei 120 - 300 Sekungen je nach Sensor DS2450, DS2438, DS18B20) geliefert bei diversen DS18B20 (aber auch bei den anderen aufgeführten Sensoren) taucht nun z.B. ein Werte auf wie

/alarm/20.5DFA07000000,/alarm/20.3C4304000000,

oder Temperaturwerte von um die 6000 Grad, bei  einem darauffolgenden Abfrageintervall dann aber auch wieder durchaus korrekte Werte.

Woran das liegt kann ich nicht beurteilen, aber so ist die angehängte Version nicht nutzbar.

@Boris Neubert, in neueren Versionen von OWFS werden nun auch weitere Abfragen zu Ermittlung von HUM für den HIH-5030 direkt über den DS2438  unterstützt, ich fahre bei mir deshalb eine Version die diesen Wert noch abfragt.

qw(HIH5030/humidity),

Vielleicht berücksichtigst du diesen auch noch in einem zukünftigen Update?

Greetz
Eldrik

jko

Zitat von: eldrik am 12 März 2018, 09:12:42
Hi,

ich habe mir die Version einmal testweise gezogen, was auffällt, in dem bereitgestellten File fehlt der Verweis auf Blocking.pm weshalb diese direkt zu einem aussteigen von FHEM führt wenn die sub BlockingCall aufgerufen wird.

use Blocking;

Des weiteren werden bei meinem Sensoren nun unplausible Rückgaben beim get (Intervalle liegen bei 120 - 300 Sekungen je nach Sensor DS2450, DS2438, DS18B20) geliefert bei diversen DS18B20 (aber auch bei den anderen aufgeführten Sensoren) taucht nun z.B. ein Werte auf wie

/alarm/20.5DFA07000000,/alarm/20.3C4304000000,

oder Temperaturwerte von um die 6000 Grad, bei  einem darauffolgenden Abfrageintervall dann aber auch wieder durchaus korrekte Werte.

Woran das liegt kann ich nicht beurteilen, aber so ist die angehängte Version nicht nutzbar.

@Boris Neubert, in neueren Versionen von OWFS werden nun auch weitere Abfragen zu Ermittlung von HUM für den HIH-5030 direkt über den DS2438  unterstützt, ich fahre bei mir deshalb eine Version die diesen Wert noch abfragt.

qw(HIH5030/humidity),

Vielleicht berücksichtigst du diesen auch noch in einem zukünftigen Update?

Greetz
Eldrik
Hm, seltsam, vor allem das fehlende use müsste doch bei mir auch knallen... Ist Deine Installation aktuell?

Viele Grüße
Jürgen

eldrik

Zitat von: jko am 13 März 2018, 18:56:20
Hm, seltsam, vor allem das fehlende use müsste doch bei mir auch knallen... Ist Deine Installation aktuell?

Viele Grüße
Jürgen

Hi,

ich habe jetzt für die abgesetzte 1W Fhem Instanz ein Update durchgeführt, danach das use Blocking auskommentiert und beim Restart von Fhem, verabschiedet sich Fhem weiterhin mit der Meldung

Undefined subroutine &main::BlockingCall called at ./FHEM/11_OWDevice.pm line

In den im Wiki aufgeführten Modulen, die auch Blocking verwenden finde ich jeweils die entsprechende use Blocking, vielleicht hast du dies an einer anderen Stelle definiert/eingebaut dass es bei dir nicht knallt anders kann ich mir das Verhalten nicht erklären.

Ferner treten auch nach einem Update weiterhin die Zustände auf, dass einfach falsche Werte ausgelesen werden oder die Werte jenseits von Gut und Böse sind (vierstellige Temperaturwerte, oder bei den DS2450 Volt Werte die im Bereich von 1,14 Volt liegen müssten geben beim auslesen auf einmal den Wert 25 aus oder 1W Counter Werte haben auf einmal eine Nachkommastelle lesen /alarm/ Werte aus etc.).

Mit welchen Sensoren wurde denn die Version getestet?

Die Fhem 1W Instanz die ich hier behandele hat 56 DS18B20 Sensoren, 6 DS2423 und 3 DS2450 Definitionen, die sich über vier einzelne, in der owfs.conf, definierte Busmaster verteilen.

Hier mal ein Log Auszug:

2018.03.14 07:42:54.079 5: createNotifyHash
2018.03.14 07:42:54.082 5: End notify loop for DS2450_3C4304000000
2018.03.14 07:42:54.082 4: WEB: /fhem?detail=DS2450_3C4304000000&dev.getDS2450_3C4304000000=DS2450_3C4304000000&cmd.getDS2450_3C4304000000=get&arg.getDS2450_3C4304000000=volt.D&val.getDS2450_3C4304000000=&XHR=1&addLinks=1&fw_id=319 / RL:39 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2018.03.14 07:43:11.001 4: BlockingCall (OWDevice_UpdateValuesAsync): created child (18788), uses telnetPort to connect back
2018.03.14 07:43:11.005 4: Connection accepted from telnetPort_127.0.0.1_58463
2018.03.14 07:43:11.006 5: Cmd: >{BlockingRegisterTelnet($cl,158)}<
2018.03.14 07:43:11.007 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D989000001','counters.A','18.5')}<
2018.03.14 07:43:11.007 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000001 Reading:counters.A Val:18.5
2018.03.14 07:43:11.008 5: Starting notify loop for DS2423_A2D989000001, 2 event(s), first is counters.A: 18.5
2018.03.14 07:43:11.008 5: End notify loop for DS2423_A2D989000001
2018.03.14 07:43:11.009 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D989000001','counters.B','/alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000')}<
2018.03.14 07:43:11.009 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000001 Reading:counters.B Val:/alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:11.010 5: Starting notify loop for DS2423_A2D989000001, 1 event(s), first is counters.B: /alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:11.010 5: End notify loop for DS2423_A2D989000001
2018.03.14 07:43:11.011 5: Starting notify loop for DS2423_A2D989000001, 3 event(s), first is counters.A: 18.5
2018.03.14 07:43:11.011 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D989000001','state','counters.A: 18.5  counters.B: /alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000')}<
2018.03.14 07:43:11.012 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000001 Reading:state Val:counters.A: 18.5  counters.B: /alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:11.013 5: End notify loop for DS2423_A2D989000001
2018.03.14 07:43:11.013 5: Cmd: >{BlockingStart('158')}<
2018.03.14 07:43:11.014 5: Cmd: >{OWDevice_UpdateValuesAsync_Done('DS2423_A2D989000001')}<
2018.03.14 07:43:35.001 4: BlockingCall (OWDevice_UpdateValuesAsync): created child (19089), uses telnetPort to connect back
2018.03.14 07:43:35.004 4: Connection accepted from telnetPort_127.0.0.1_58483
2018.03.14 07:43:35.004 5: Cmd: >{BlockingRegisterTelnet($cl,159)}<
2018.03.14 07:43:35.005 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D989000002','counters.B','21')}<
2018.03.14 07:43:35.006 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000002 Reading:counters.B Val:21
2018.03.14 07:43:35.007 5: Starting notify loop for DS2423_A2D989000002, 7 event(s), first is counters.B: 21
2018.03.14 07:43:35.007 5: End notify loop for DS2423_A2D989000002
2018.03.14 07:43:35.008 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D989000002','state','counters.A: 0  counters.B: 21')}<
2018.03.14 07:43:35.009 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000002 Reading:state Val:counters.A: 0  counters.B: 21
2018.03.14 07:43:35.011 5: Starting notify loop for DS2423_A2D989000002, 7 event(s), first is counters.B: 21
2018.03.14 07:43:35.011 5: End notify loop for DS2423_A2D989000002
2018.03.14 07:43:35.012 5: Cmd: >{BlockingStart('159')}<
2018.03.14 07:43:35.013 5: Cmd: >{OWDevice_UpdateValuesAsync_Done('DS2423_A2D989000002')}<
2018.03.14 07:43:36.002 4: BlockingCall (OWDevice_UpdateValuesAsync): created child (19102), uses telnetPort to connect back
2018.03.14 07:43:36.004 4: Connection accepted from telnetPort_127.0.0.1_58484
2018.03.14 07:43:36.005 5: Cmd: >{BlockingRegisterTelnet($cl,160)}<
2018.03.14 07:43:36.006 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D987000001','counters.A','/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000')}<
2018.03.14 07:43:36.006 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D987000001 Reading:counters.A Val:/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:36.008 5: Starting notify loop for DS2423_A2D987000001, 7 event(s), first is counters.A: /alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:36.008 5: End notify loop for DS2423_A2D987000001
2018.03.14 07:43:36.010 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D987000001','counters.B','28.5')}<
2018.03.14 07:43:36.011 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D987000001 Reading:counters.B Val:28.5
2018.03.14 07:43:36.014 5: Starting notify loop for DS2423_A2D987000001, 5 event(s), first is counters.B: 28.5
2018.03.14 07:43:36.015 5: Starting notify loop for DS2423_A2D987000001, 8 event(s), first is counters.A: /alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000
2018.03.14 07:43:36.015 5: End notify loop for DS2423_A2D987000001
2018.03.14 07:43:36.016 5: End notify loop for DS2423_A2D987000001
2018.03.14 07:43:36.016 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D987000001','state','counters.A: /alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000  counters.B: 28.5')}<
2018.03.14 07:43:36.017 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D987000001 Reading:state Val:counters.A: /alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000  counters.B: 28.5
2018.03.14 07:43:36.021 5: Cmd: >{BlockingStart('160')}<
2018.03.14 07:43:36.021 5: Cmd: >{OWDevice_UpdateValuesAsync_Done('DS2423_A2D987000001')}<
2018.03.14 07:43:37.001 4: BlockingCall (OWDevice_UpdateValuesAsync): created child (19117), uses telnetPort to connect back
2018.03.14 07:43:37.003 4: BlockingCall (OWDevice_UpdateValuesAsync): created child (19118), uses telnetPort to connect back
2018.03.14 07:43:37.005 4: Connection accepted from telnetPort_127.0.0.1_58486
2018.03.14 07:43:37.006 5: Cmd: >{BlockingRegisterTelnet($cl,162)}<
2018.03.14 07:43:37.006 5: Cmd: >{OWDevice_readingsSingleUpdateByName('DS2423_A2D986000001','counters.A','/alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000')}<
2018.03.14 07:43:37.007 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D986000001 Reading:counters.A Val:/alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000


Greetz
Eldrik

jko

Hallo eldrik,

Zitat2018.03.14 07:43:11.009 4: OWDevice_readingsSingleUpdateByName: Dev:DS2423_A2D989000001 Reading:counters.B Val:/alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000

aus dieser Zeile Deines log folgt, dass
- $reading = counter.B
- $value = /alarm/20.5DFA07000000,/alarm/20.3C4304000000,/alarm/20.FAF807000000,/alarm/29.C85F04000000,/alarm/29.4F6904000000

ist. Der original-Code ruft mit diesen Werten nun

ZitatreadingsBulkUpdate($hash,$reading,$value) if(defined($value));

auf. Ich habe das geändert in (leicht vereinfacht):

ZitatBlockingInformParent("OWDevice_readingsSingleUpdateByName", [$hash->{NAME}, $reading, $value], 0) if(defined($value));
readingsSingleUpdate($hash, $readingName, $readingVal, 1);

Warum das nun zu unterschiedlichen Ergebnissen führt erschließt sich mir noch nicht so ganz... :-(
Kannst Du mal bitte ein

Zitatlist DS2423_A2D989000001

posten?

viele Grüße
Jürgen

eldrik

Hi,

na klar:

Internals:
   DEF        1D.A2D989000001 30
   IODev      myOWFS_KG
   LAST_READ_FAILED 0
   NAME       DS2423_A2D989000001
   NOTIFYDEV  global
   NR         63
   NTFY_ORDER 50b-DS2423_A2D989000001
   STATE      counters.A: 506502  counters.B: 127103
   TYPE       OWDevice
   READINGS:
     2018-03-14 20:05:08   counters.A      506502
     2018-03-14 20:05:08   counters.B      127103
     2018-03-14 20:05:08   gasleistung     11.0188955005465
     2018-03-14 20:05:08   state           counters.A: 506502  counters.B: 127103
   fhem:
     address    1D.A2D989000001
     alerting   0
     bus        bus.0
     interfaces counter
     interval   30
     getters:
       address
       counters.A
       counters.ALL
       counters.B
       crc8
       family
       id
       locator
       memory
       pages/count.0
       pages/count.1
       pages/count.10
       pages/count.11
       pages/count.12
       pages/count.13
       pages/count.14
       pages/count.15
       pages/count.2
       pages/count.3
       pages/count.4
       pages/count.5
       pages/count.6
       pages/count.7
       pages/count.8
       pages/count.9
       pages/page.0
       pages/page.1
       pages/page.10
       pages/page.11
       pages/page.12
       pages/page.13
       pages/page.14
       pages/page.15
       pages/page.2
       pages/page.3
       pages/page.4
       pages/page.5
       pages/page.6
       pages/page.7
       pages/page.8
       pages/page.9
       r_address
       r_id
       r_locator
       type
     polls:
       counters.A
       counters.B
     setters:
       memory
       pages/page.0
       pages/page.1
       pages/page.10
       pages/page.11
       pages/page.12
       pages/page.13
       pages/page.14
       pages/page.15
       pages/page.2
       pages/page.3
       pages/page.4
       pages/page.5
       pages/page.6
       pages/page.7
       pages/page.8
       pages/page.9
     state:
       counters.A
       counters.B
Attributes:
   IODev      myOWFS_KG
   event-min-interval counters.A:30,counters.B:30,gas.*:30
   event-on-change-reading counters.A,counters.B,gasleistung
   event-on-update-reading .*
   gasbrennwert 9.794
   gasctsperm3 100
   gaszwert   0.9655
   model      DS2423
   polls      counters.A,counters.B
   room       OWDevice
   userReadings gasleistung differential { gasenergie('DS2423_A2D989000001',ReadingsVal("DS2423_A2D989000001","counters.A",0));}


Greetz
Eldrik