Firmata mit TSL2561

Begonnen von eitschdie, 09 September 2015, 15:54:56

Vorheriges Thema - Nächstes Thema

jensb

Hallo Stefan

ZitatHabe mich gerade gefragt, ob es hier sinnvoll wäre, direkt durch einen Attribut-Wechsel eine Messung auszulösen?
Das ist Geschmackssache, nicht jeder mag das, weil man dann nicht mehrere Attribute gleichzeitig ändern kann, ohne eine Messung auszulösen, die ja durchaus mehr als eine 1 Sekunde benötigen kann. Gerade wenn man Perl-Code (notify, DOIF) zur Abfrage nutzt, ist das nicht so gut. Als User vor dem Webfrontend muss man nur auf den Update-Knopf drücken.

Zitat... dass es im IR-Kanal zu unregelmäßigen Fehlmessungen kommt, bzw. dieser gelegentlich Null-Werte liefert.
Dieses Verhalten ist nicht typisch für den Sensor. Ich habe keine Aufzeichnung für meinen Firmata-Testaufbau, aber in der Langzeitaufzeichnung meines Sensor, der direkt am RPi hängt, kann ich keine Null-Messwerte für IR sehen, außer es ist wirklich dunkel - auch nicht mit der neuen Modulversion in den letzten Stunden.

Da kommen mehrere Dinge als Ursachen in Frage, z.B. der Sensor selbst (defekt?, Umgebungseinflüsse?) und die Übertragung über Firmata. Bei Erstem hilft ein 2. Sensor, bei Zweitem kann verbose=5 beim FRM- und I2C-TSL2561 helfen.

Da ich in meinem Testaufbau sowohl einen BMP180 als auch einen TSL2561 verwende, ist mir aufgefallen, dass es vorkommen kann, dass 2 Module kurz nacheinander ein I2C-Read absetzten und die Antworten dann gleichzeitig in einem Paket eintreffen können. Der FHEM-Protokollhandler kann das z.T. nicht dekodieren (es gibt entsprechende Logs) - wegen Implementierungsschwächen oder weil die Antworten nicht spezifikationsgemäß sind. Wenn du mehr als ein I2C-Device an Firmata hast, könntest du die anderen vorübergehend abhängen.

Hier noch eine Möglichkeit: Über Firmata kann man scheinbar auch dann I2C-Register auslesen, wenn das Device nicht mehr am I2C-Bus angeschlossen ist (z.B. nach Hot-Unplug). Es gibt zwar einen Vorschlag, um von Firmata einen I2C-Busfehler an den Host zu melden (siehe http://firmata.org/wiki/Proposals), aber dieses Telegramm ist in FHEM noch nicht implementiert, und ich weiß auch nicht, ob es schon von StandardFirmata bzw. ConfigurableFirmata genutzt wird. Die Werte, die dann geliefert werden, sind jedenfalls nicht immer die letzten gelesenen Werte. Also kommt auch ein Verdrahtungsproblem zwischen Arduino und den I2C-Devices in Frage.

Viel Erfolg beim Suchen,
Jens

FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Hallo,

da es keine weiteren Rückmeldungen zum Betriebsverhalten des Moduls gab, hier der RC1 für die neue Version des 51_I2C_TSL2561.

Viel Spaß,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

thymjan

#77
Hallo Jens,

hatte ja im vorigen Post das Problem beschrieben, dass es bei mir gelegentlich im Channel 1 zu nicht validen Daten kommt.

Hier das log dazu:
2015.12.28 02:59:04 5: FRM:>f076770074012e00f7
2015.12.28 02:59:04 5: FRM:>f076770876010200f7
2015.12.28 02:59:04 5: FRM:>f076770074013400f7
2015.12.28 02:59:04 5: FRM:>f076770876010300f7
2015.12.28 02:59:04 5: FRM:<f077770076014f005d00f7
2015.12.28 02:59:04 5: onI2CMessage address: '119', register: '246' data: [79,93]
2015.12.28 02:59:04 5: FRM:<f077770076012a016c010000f7
2015.12.28 02:59:04 5: onI2CMessage address: '119', register: '246' data: [170,236,0]

2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:02:37 5: I2C_TSL2561_Enable: start
2015.12.28 03:02:37 5: FRM:>f076390000010300f7
2015.12.28 03:02:37 5: FRM:>f076390800010100f7
2015.12.28 03:02:37 5: I2C_TSL2561_Enable: end
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 2
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.4 s
2015.12.28 03:02:37 5: FRM:<f077390000010300f7
2015.12.28 03:02:37 5: onI2CMessage address: '57', register: '128' data: [3]
2015.12.28 03:02:37 5: Lichtsensor RX register 0, 1 byte: 3
2015.12.28 03:02:37 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:02:37 5: FRM:>f07639082c010200f7
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:02:37 5: FRM:<f07739002c0161010000f7
2015.12.28 03:02:37 5: onI2CMessage address: '57', register: '172' data: [225,0]
2015.12.28 03:02:37 5: Lichtsensor RX register 12, 2 byte: 225 0
2015.12.28 03:02:37 5: I2C_TSL2561_I2CRcvChan0 225
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 6
2015.12.28 03:02:37 5: FRM:>f07639082e010200f7
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:02:37 5: FRM:<f07739002e010e000000f7
2015.12.28 03:02:37 5: onI2CMessage address: '57', register: '174' data: [14,0]
2015.12.28 03:02:37 5: Lichtsensor RX register 14, 2 byte: 14 0
2015.12.28 03:02:37 5: I2C_TSL2561_I2CRcvChan1 14
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 7
2015.12.28 03:02:37 5: I2C_TSL2561_Disable: start
2015.12.28 03:02:37 5: FRM:>f076390000010000f7
2015.12.28 03:02:37 5: I2C_TSL2561_Disable: end
2015.12.28 03:02:37 5: I2C_TSL2561_GetLuminosity: calc state 2 acqui state 0
2015.12.28 03:02:37 5: I2C_TSL2561_Poll: 300 s

2015.12.28 03:04:04 5: FRM:>f076770074012e00f7
2015.12.28 03:04:04 5: FRM:>f076770876010200f7
2015.12.28 03:04:04 5: FRM:>f076770074013400f7
2015.12.28 03:04:04 5: FRM:>f076770876010300f7
2015.12.28 03:04:05 5: FRM:<f077770076014f005c00f7f077770076012a016b010000f7
2015.12.28 03:04:05 5: onI2CMessage address: '119', register: '246' data: [79,92]
2015.12.28 03:04:05 5: onI2CMessage address: '119', register: '246' data: [170,235,0]

2015.12.28 03:07:37 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:37 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:07:37 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:07:37 5: I2C_TSL2561_Enable: start
2015.12.28 03:07:37 5: FRM:>f076390000010300f7
2015.12.28 03:07:37 5: FRM:>f076390800010100f7
2015.12.28 03:07:38 5: I2C_TSL2561_Enable: end
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 2
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.4 s
2015.12.28 03:07:38 5: FRM:<f077390000010300f7
2015.12.28 03:07:38 5: onI2CMessage address: '57', register: '128' data: [3]
2015.12.28 03:07:38 5: Lichtsensor RX register 0, 1 byte: 3
2015.12.28 03:07:38 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:07:38 5: FRM:>f07639082c010200f7
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: FRM:<f07739002c0161010000f7
2015.12.28 03:07:38 5: onI2CMessage address: '57', register: '172' data: [225,0]
2015.12.28 03:07:38 5: Lichtsensor RX register 12, 2 byte: 225 0
2015.12.28 03:07:38 5: I2C_TSL2561_I2CRcvChan0 225
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 6
2015.12.28 03:07:38 5: FRM:>f07639082e010200f7
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: FRM:<f07739002e010e000000f7
2015.12.28 03:07:38 5: onI2CMessage address: '57', register: '174' data: [14,0]
2015.12.28 03:07:38 5: Lichtsensor RX register 14, 2 byte: 14 0
2015.12.28 03:07:38 5: I2C_TSL2561_I2CRcvChan1 14
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 7
2015.12.28 03:07:38 5: I2C_TSL2561_Disable: start
2015.12.28 03:07:38 5: FRM:>f076390000010000f7
2015.12.28 03:07:38 5: I2C_TSL2561_Disable: end
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 2 acqui state 0
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 300 s

2015.12.28 03:09:05 5: FRM:>f076770074012e00f7
2015.12.28 03:09:05 5: FRM:>f076770876010200f7
2015.12.28 03:09:05 5: FRM:>f076770074013400f7
2015.12.28 03:09:05 5: FRM:>f076770876010300f7
2015.12.28 03:09:05 5: FRM:<f077770076014f005e00f7
2015.12.28 03:09:05 5: onI2CMessage address: '119', register: '246' data: [79,94]
2015.12.28 03:09:05 5: FRM:<f077770076012a0165010000f7
2015.12.28 03:09:05 5: onI2CMessage address: '119', register: '246' data: [170,229,0]

2015.12.28 03:12:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:38 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:12:38 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:38 5: I2C_TSL2561_Enable: start
2015.12.28 03:12:38 5: FRM:>f076390000010300f7
2015.12.28 03:12:38 5: FRM:>f076390800010100f7
2015.12.28 03:12:38 5: I2C_TSL2561_Enable: end
2015.12.28 03:12:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 2
2015.12.28 03:12:38 5: I2C_TSL2561_Poll: 0.4 s
2015.12.28 03:12:39 5: FRM:<f077390000010300f7
2015.12.28 03:12:39 5: onI2CMessage address: '57', register: '128' data: [3]
2015.12.28 03:12:39 5: Lichtsensor RX register 0, 1 byte: 3
2015.12.28 03:12:39 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:12:39 5: FRM:>f07639082c010200f7
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5 <--- warum auch immer, hier dauert's etwas länger
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: state machine stuck, aborting
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 3 acqui state 5 <--- die Geduld ist vorzeitig am Ende
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: error, aborting
2015.12.28 03:12:39 5: I2C_TSL2561_Disable: start   <-------------------------------- Sensor wird ausgeknipst ...
2015.12.28 03:12:39 5: FRM:>f076390000010000f7
2015.12.28 03:12:39 5: I2C_TSL2561_Disable: end
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 300 s
2015.12.28 03:12:40 5: FRM:<f07739002c0162010000f7 <----------------------------- ohje, es kommt doch noch die Antwort von Chan0 ...
2015.12.28 03:12:40 5: onI2CMessage address: '57', register: '172' data: [226,0]
2015.12.28 03:12:40 5: Lichtsensor RX register 12, 2 byte: 226 0
2015.12.28 03:12:40 5: I2C_TSL2561_I2CRcvChan0 226
2015.12.28 03:12:40 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:40 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 6
2015.12.28 03:12:40 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:40 5: FRM:>f07639082e010200f7 <-------------------------------- Sensor ist off, Chan0 soll ausgelesen werden 8-0
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: state machine stuck, aborting
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 3 acqui state 5
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: error, aborting
2015.12.28 03:12:41 5: I2C_TSL2561_Disable: start <------------------------- Sensor wird nochmal ausgeknipst, aber er schläft ja schon
2015.12.28 03:12:41 5: FRM:>f076390000010000f7
2015.12.28 03:12:41 5: I2C_TSL2561_Disable: end
2015.12.28 03:12:41 5: I2C_TSL2561_Poll: 300 s
2015.12.28 03:12:41 5: FRM:<f07739002e0100000000f7 <------------------- Inhalt von Chan0, wenn keine Messung durchgeführt wurde
2015.12.28 03:12:41 5: onI2CMessage address: '57', register: '174' data: [0,0]
2015.12.28 03:12:41 5: Lichtsensor RX register 14, 2 byte: 0 0
2015.12.28 03:12:41 5: I2C_TSL2561_I2CRcvChan1 0
2015.12.28 03:12:41 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 7
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:12:41 5: I2C_TSL2561_Disable: start <-------------------- und zum 3. Mal ausknipsen
2015.12.28 03:12:41 5: FRM:>f076390000010000f7
2015.12.28 03:12:41 5: I2C_TSL2561_Disable: end
2015.12.28 03:12:41 5: I2C_TSL2561_GetLuminosity: calc state 2 acqui state 0
2015.12.28 03:12:41 5: I2C_TSL2561_Poll: 300 s

2015.12.28 03:14:05 5: FRM:>f076770074012e00f7
2015.12.28 03:14:05 5: FRM:>f076770876010200f7
2015.12.28 03:14:05 5: FRM:>f076770074013400f7
2015.12.28 03:14:05 5: FRM:>f076770876010300f7
2015.12.28 03:14:05 5: FRM:<f077770076014f005d00f7
2015.12.28 03:14:05 5: onI2CMessage address: '119', register: '246' data: [79,93]
2015.12.28 03:14:05 5: FRM:<f077770076012a0168010000f7
2015.12.28 03:14:05 5: onI2CMessage address: '119', register: '246' data: [170,232,0]

2015.12.28 03:17:41 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: starting new measurement <--- Alles neu macht der Mai. Aber ohne enable????
2015.12.28 03:17:41 5: FRM:>f07639080a010100f7 <------ Sensor wie ist dein Name? ID wird ausgelesen...
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 1
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: calc state 3 acqui state 8
2015.12.28 03:17:41 5: I2C_TSL2561_GetLuminosity: error, aborting
2015.12.28 03:17:41 5: I2C_TSL2561_Disable: start
2015.12.28 03:17:41 5: FRM:>f076390000010000f7 <----- böser Sensor, da wirst du zum 4. Mal ausgeknipst
2015.12.28 03:17:41 5: I2C_TSL2561_Disable: end
2015.12.28 03:17:41 5: I2C_TSL2561_Poll: 300 s
2015.12.28 03:17:41 5: FRM:<f07739000a015000f7 <----- ui, was kommt denn da? Mein Name ist Hase ...
2015.12.28 03:17:41 5: onI2CMessage address: '57', register: '138' data: [80]
2015.12.28 03:17:41 5: Lichtsensor RX register 10, 1 byte: 80
2015.12.28 03:17:41 5: I2C_TSL2561_I2CRcvID: sensorId TSL2561 Package T/FN/CL Rev. 0 <--- Ach Du bist's... Jetzt wird neu initialisiert!
2015.12.28 03:17:41 5: I2C_TSL2561_SetTimingRegister: time 2, gain 16
2015.12.28 03:17:41 5: FRM:>f076390001011200f7
2015.12.28 03:17:41 5: FRM:>f076390801010100f7
2015.12.28 03:17:42 5: FRM:<f077390001011200f7
2015.12.28 03:17:42 5: onI2CMessage address: '57', register: '129' data: [18]
2015.12.28 03:17:42 5: Lichtsensor RX register 1, 1 byte: 18
2015.12.28 03:17:42 5: I2C_TSL2561_I2CRcvTiming: time 2, gain 16
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: starting new measurement <---- und jetzt ist alles wieder beim Alten. Jippi!
2015.12.28 03:17:42 5: I2C_TSL2561_Enable: start
2015.12.28 03:17:42 5: FRM:>f076390000010300f7
2015.12.28 03:17:42 5: FRM:>f076390800010100f7
2015.12.28 03:17:42 5: I2C_TSL2561_Enable: end
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 2
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.4 s
2015.12.28 03:17:42 5: FRM:<f077390000010300f7
2015.12.28 03:17:42 5: onI2CMessage address: '57', register: '128' data: [3]
2015.12.28 03:17:42 5: Lichtsensor RX register 0, 1 byte: 3
2015.12.28 03:17:42 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:17:42 5: FRM:>f07639082c010200f7
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:17:42 5: FRM:<f07739002c0161010000f7
2015.12.28 03:17:42 5: onI2CMessage address: '57', register: '172' data: [225,0]
2015.12.28 03:17:42 5: Lichtsensor RX register 12, 2 byte: 225 0
2015.12.28 03:17:42 5: I2C_TSL2561_I2CRcvChan0 225
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 6
2015.12.28 03:17:42 5: FRM:>f07639082e010200f7
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:17:42 5: FRM:<f07739002e010e000000f7
2015.12.28 03:17:42 5: onI2CMessage address: '57', register: '174' data: [14,0]
2015.12.28 03:17:42 5: Lichtsensor RX register 14, 2 byte: 14 0
2015.12.28 03:17:42 5: I2C_TSL2561_I2CRcvChan1 14
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 7
2015.12.28 03:17:42 5: I2C_TSL2561_Disable: start
2015.12.28 03:17:42 5: FRM:>f076390000010000f7
2015.12.28 03:17:42 5: I2C_TSL2561_Disable: end
2015.12.28 03:17:42 5: I2C_TSL2561_GetLuminosity: calc state 2 acqui state 0
2015.12.28 03:17:42 5: I2C_TSL2561_Poll: 300 s

2015.12.28 03:19:05 5: FRM:>f076770074012e00f7
2015.12.28 03:19:05 5: FRM:>f076770876010200f7
2015.12.28 03:19:05 5: FRM:>f076770074013400f7
2015.12.28 03:19:05 5: FRM:>f076770876010300f7
2015.12.28 03:19:05 5: FRM:<f077770076014f005d00f7
2015.12.28 03:19:05 5: onI2CMessage address: '119', register: '246' data: [79,93]
2015.12.28 03:19:05 5: FRM:<f077770076012a0166010000f7
2015.12.28 03:19:05 5: onI2CMessage address: '119', register: '246' data: [170,230,0]

2015.12.28 03:22:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:22:42 5: I2C_TSL2561_GetLuminosity: calc state 0 acqui state 0
2015.12.28 03:22:42 5: I2C_TSL2561_GetLuminosity: starting new measurement
2015.12.28 03:22:42 5: I2C_TSL2561_Enable: start
2015.12.28 03:22:42 5: FRM:>f076390000010300f7
2015.12.28 03:22:42 5: FRM:>f076390800010100f7
2015.12.28 03:22:42 5: I2C_TSL2561_Enable: end
2015.12.28 03:22:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 2
2015.12.28 03:22:42 5: I2C_TSL2561_Poll: 0.4 s
2015.12.28 03:22:42 5: FRM:<f077390000010300f7
2015.12.28 03:22:42 5: onI2CMessage address: '57', register: '128' data: [3]
2015.12.28 03:22:42 5: Lichtsensor RX register 0, 1 byte: 3
2015.12.28 03:22:42 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:22:42 5: I2C_TSL2561_Poll: start
2015.12.28 03:22:42 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:22:42 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: start
2015.12.28 03:22:43 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:22:43 5: FRM:>f07639082c010200f7
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:22:43 5: FRM:<f07739002c0161010000f7
2015.12.28 03:22:43 5: onI2CMessage address: '57', register: '172' data: [225,0]
2015.12.28 03:22:43 5: Lichtsensor RX register 12, 2 byte: 225 0
2015.12.28 03:22:43 5: I2C_TSL2561_I2CRcvChan0 225
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: start
2015.12.28 03:22:43 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 6
2015.12.28 03:22:43 5: FRM:>f07639082e010200f7
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:22:43 5: FRM:<f07739002e010e000000f7
2015.12.28 03:22:43 5: onI2CMessage address: '57', register: '174' data: [14,0]
2015.12.28 03:22:43 5: Lichtsensor RX register 14, 2 byte: 14 0
2015.12.28 03:22:43 5: I2C_TSL2561_I2CRcvChan1 14
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: start
2015.12.28 03:22:43 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 7
2015.12.28 03:22:43 5: I2C_TSL2561_Disable: start
2015.12.28 03:22:43 5: FRM:>f076390000010000f7
2015.12.28 03:22:43 5: I2C_TSL2561_Disable: end
2015.12.28 03:22:43 5: I2C_TSL2561_GetLuminosity: calc state 2 acqui state 0
2015.12.28 03:22:43 5: I2C_TSL2561_Poll: 300 s


Bin grad in der Bahn, später mehr...

Grüße,
Stefan

01.01.2016 17:30 Kommentare hinzugefügt...

thymjan

... noch was anderes:

Kannst Du mal bei Dir folgendes versuchen:

Sensor in Dunkelheit.
Messung 1 auslösen (update)
Licht einschalten
Messung 2 auslösen
Messung 3 auslösen

Wird bei Dir in Messung 2 schon der hellere Wert gemessen, oder erst in Messung 3?

jensb

Hallo Stefan,

das Log belegt meine letzten Vermutungen:

Normaler Ablauf:
Zitat
2015.12.28 03:07:38 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:07:38 5: FRM:>f07639082c010200f7
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: start
2015.12.28 03:07:38 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:07:38 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:07:38 5: FRM:<f07739002c0161010000f7
2015.12.28 03:07:38 5: onI2CMessage address: '57', register: '172' data: [225,0]
2015.12.28 03:07:38 5: Lichtsensor RX register 12, 2 byte: 225 0
2015.12.28 03:07:38 5: I2C_TSL2561_I2CRcvChan0 225

Empfangs-Timeout:
Zitat
2015.12.28 03:12:39 5: I2C_TSL2561_I2CRcvControl: is enabled
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.403 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 3
2015.12.28 03:12:39 5: FRM:>f07639082c010200f7
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: 0.03 s
2015.12.28 03:12:39 5: I2C_TSL2561_Poll: start
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 1 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: state machine stuck, aborting
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: calc state 3 acqui state 5
2015.12.28 03:12:39 5: I2C_TSL2561_GetLuminosity: error, aborting

Im Gut-Ablauf siehst du kurz vor Ende "2015.12.28 03:07:38 5: FRM:<f07739002c0161010000f7", das ist die Antwort auf "2015.12.28 03:07:38 5: FRM:>f07639082c010200f7". Im Fehlerfall fehlt die Antwort und wird auch nicht empfangen, obwohl das I2C_TSL2561-Modul mit "I2C_TSL2561_Poll: 0.03" mehrfach zusätzliche Wartezeiten spendiert.

In einem solchen Fall kann das I2C_TSL2561-Modul nichts mehr machen, als mit Fehler abzubrechen.

Den Test
Zitat
Sensor in Dunkelheit.
Messung 1 auslösen (update)
Licht einschalten
Messung 2 auslösen
Messung 3 auslösen

Wird bei Dir in Messung 2 schon der hellere Wert gemessen, oder erst in Messung 3?
habe ich für die Entwicklung auch verwendet und zwar in beiden Richtungen. Bereits mit der vorletzten vorgestellten Modulversion hat der Test plausible Werte geliefert und zwar sofort mit der nächsten Messung (also hier bei Messung 2).

Du hast definitiv ein Problem im Arduino-Umfeld und nicht im FHEM-Umfeld. Sieh dir bitte meine Hinweise zur Fehlersuche aus http://forum.fhem.de/index.php/topic,40875.msg378768.html#msg378768 noch einmal an. Es hat wahrscheinlich etwas mit deiner Hardware zu tun. Also überprüfe die Verdrahtung und tausche Komponenten.

In wie weit die Firmata-Firmware eine Rolle spielt, kann ich nicht sicher sagen. StandardFirmataEthernet 2.5 funktioniert auf einem Pro Mini 16 MHz mit W5100-LAN einwandfrei. ConfigurableFirmata 2.8 funktioniert auf einem Pro Mini 16 MHz mit W5100-LAN bzw. auf einem Teensy LC mit mit W5100-LAN oder ENC28J60-LAN problemlos, wenn man dazu FHEM modifiziert (siehe http://forum.fhem.de/index.php/topic,44525.0.html). Das ENC28J60-LAN habe ich auf einem Pro Mini nicht ausprobiert, da es mir aufgrund der Ressourcenwarnung des Compilers nicht sinnvoll erschien.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

thymjan

Hallo Jens,

an was für Verdrahtungsprobleme denkst Du?
Der Sensor liefert ja zu 99% richtige Werte.
Habe wie Du einen BMP180 am I2C-Bus und zwei LEDs 1x PWM und 1x OUT zum Testen.
Wie Du im log siehst werden da die Register ja fehlerfrei ausgelesen.
Allerdings fällt mir gerade ein, dass ich beim BMP180 das Oversampling runterdrehen musste, da es sonst auch zu Fehlern kam.
Auf welchem Wert hast Du das i2c-config im FRM-Device stehen?

Gruß,
Stefan

jensb

Zitatan was für Verdrahtungsprobleme denkst Du?
Kabellängen können eine Rolle spielen, aber vielleicht hast du auch ein schwächelndes I2C-Modul. Bitte unbedingt mal alles auseinander nehmen und auf kürzestem Weg nur den TSL2561 anschließen und nur diesen über FHEM abfragen, und, falls dann in Ordnung, schrittweise die anderen Funktionen wieder dazu nehmen. Besser wäre es noch, wenn du Tauschkomponenten hast.

ZitatAuf welchem Wert hast Du das i2c-config im FRM-Device stehen?
Ein Wert von 30000 ermöglicht 3faches Oversampling beim BMP180. Der Wert von i2c-config wirkt sich aber nicht auf das TSL2561 aus.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Hallo Stefan,

wg. meinen Firmata-Experimenten baue ich mein Breadboard momentan öfter um. Gestern hatte ich auch einen merkwürdigen Effekt mit dem TSL2561. Er war am Bus und hat geantwortet, aber der Messwert war immer Null. Abziehen, Power-Cycle, nichts half - bis ich die Pins am TSL2561-Board noch einmal nachgelötet habe. Allerdings hat es dann nur ein paar Minuten funktioniert, danach war der Messwert wieder nur Null. Wahrscheinlich hat die Wärme durch das Löten das Betriebsverhalten leicht in Richtung gut verschoben.

Versuche jetzt herauszufinden, wo die Ursache liegt. Momentan ändere ich den I2C-Bustakt des Arduino. In I2CFirmat.h hinter "Wire.begin();" "Wire.setClock(50000L); // bitrate, default 100 kHz, max. 400 kHz" einfügen. Schlüssig sind die bisherigen Ergebnisse aber nicht, aber ich habe zumindest wieder Messwerte.

Sollte das nichts bringen, werde ich mir noch mal Modultiming vornehmen. Möglicherweise ist der Jitter bei der Übertragung viel größer als von mir angenommen, dann reichen die vorgesehen Reserven nicht (immer). Vielleicht kannst du ja mal überprüfen, ob deine Null-Messerte z.B. eher bei eine IntegrationTime von 402 ms auftreten und bei 13 ms nie, das wäre ein Indikator.

Grüße und einen Guten Rutsch,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

thymjan

Hallo Jens,

kannst Du Dir mein log vom 28. nochmal ansehen. Habe es jetzt farblich unterlegt. Mir scheint (bedingt durch Netzwerkverkehr?), dass das Modul doch nicht lange genug auf die Antwort wartet. Schliesst ja mit "Poll: 300 s" einen Vorgang ab, und danach kommen dann trotzdem noch Antworten.
Oder verstehe ich da was falsch?

Wünsche Dir ebenfalls einen Guten Start ins Neue Jahr!

Viele Grüße,
Stefan

p.s. was mir neulich bei den (einfachen) Breadboards aufgefallen ist: die Federn verbiegen recht schnell. Steckt man Bauteile mit unterschiedlichen "Beinchen"-Durchmessern kann's da schon mal 'nen schlechten Kontakt geben. Habe etwas Erfahrung mit dem Löten, kalte Lötstellen kann ich bei mir eigentlich ausschliessen. Meinen Sensor betreibe ich momentan im dunklen Keller, deshalb ist die Integration-Time grundsätzlich im worst-case Bereich 402ms. Werde auch nochmals experimentieren.

jensb

Hallo Stefan,

kann im Log nichts neues finden, es fehlen die Antworten - trotz automatisch verlängerten Wartezeiten. Bei mir ist das anders gewesen, da sind die Antworten gekommen aber die Werte waren Null.

Wenn du den türkis markierten Bereich meinst, z.B.:
Zitat2015.12.28 03:19:05 5: FRM:>f076770074012e00f7
dann solltest du folgendes berücksichtigen: ein normales Firmata-Telegramm fängt mit f0 an, dann kommt ein Kommando-Byte, hier 76, und dann bei I2C-Zugriffen die Geräteadresse. 77 ist dein BMP180, während 39 der TSL2561 ist (siehe auch http://firmata.org/wiki/V2.3ProtocolDetails). Im türkis markierten Bereich wurde also der BMP180 abgefragt.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

thymjan

Gutes Neues Jahr, Jens!

habe jetzt nochmals über dem log gebrütet. Schau Dir meine (nicht ganz ernst gemeinten) Kommentare an.
Wenn ich's richtig verstehe, ist die State-Machine über die längere Wartezeit etwas pikiert und reagiert nicht ganz rational.
Das Modul versucht ab da eine Messung beim ausgeschalteten Sensor auszulösen was dann im Chaos endet.
Erst nach der verzögerten Neuinitialisierung gelingt die Messung wieder.

Kannst Du der State-Machine etwas mehr Geduld einräumen?

Grüße,
Stefan

jensb

Hallo Stefan,

auch dir ein frohes neues Jahr!

Das ist eine super Logauswertung. Die Abläufe scheinen bei dir z.T. doppelt solange zu brauchen, wie zu erwarten wäre. Natürlich könnte man mehr Wartezeit spendieren - dadurch würde aber die ganze Messung doppelt so lange dauern und davon wären alle Anwender betroffen und nicht nur die mit Firmata. Das ist noch nicht die richtige Lösung. Ein Seitenaspekt ist auch, das die State-Machine nicht gegen Out-Of-Order-Receives geschützt ist - dadurch fängt sie sich nicht ganz so schneller wieder wie theoretisch möglich wäre.

Solange die Ursache für den zusätzlichen Zeitbedarf unbekannt ist, bleibt unklar, welche max. Verzögerung tatsächlich gebraucht wird. Was hast du für einen Arduino und mit welchem Takt arbeitet er? Ist dein Netzwerk am RPi ausgelastet (USB-Ethernet) - oder vielleicht der USB-Port des BCM2835, weil du mehrere USB-Geräte hast, die ständig viel IO machen?

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

thymjan

Hi Jens,

vermute, dass der höhere Zeitbedarf an meiner etwas komplexeren Netzwerkstruktur liegt. Wobei die ganze Schose im Durchschnitt nur zweimal am Tag auftritt (bei Messung alle 5 Minuten ist das bei 0,7% der Messungen). Würde ich auch eher als Out-of-Order-Receive bezeichnen.

Der Sensor hängt momentan an einem original Nano 3.0 (16Mhz) und ist per ENC28J60 am Ethernet angeschlossen. Von dort gehts über eine Powerline-Strecke (100MBit) über drei Stockwerke zum Raspi 2B. An dem hängt ein CUL, ein JeeLink und die Raspi-Kamera ist mit motion-control aktiviert. Der Raspi ist zu ca. 60% (bzw. load 1,5) ausgelastet.

Wobei ich nicht richtig verstehe warum dir ein längerer Timeout Kopfzerbrechen macht. Dies erzeugt ja nicht jedesmal eine längere Messung sondern rettet eher eine verunglückte. Wichtig ist doch nur, dass der Sensor nicht vor Ablauf der IntegrationTime abgefragt wird, ob die Antwort dann 180ms früher oder später eintritt fällt m.E. nicht so sehr ins Gewicht. Du schickst die Messwert-Anfrage ans FRM-Modul, dann kann das TSL-Modul ja die Blockung aufgeben. Aufgerufen wird es doch direkt nach Eintreffen des Messwertes wiederum vom FRM-Modul.
Bin auch der Meinung, dass Du die Chan0- und Chan1-Abfrage direkt hintereinander abschicken kannst, ohne zuerst auf die Antwort vom Chan0 warten zu müssen. Aber da steckst Du wahrscheinlich momentan tiefer drin als ich...

Grüße,
Stefan

jensb

#88
Hi Stefan,

du hast bei deiner Bewertung den Firmata-Ablauf vor Augen. Drehe ich einfach nur an der Wartezeit, ändert sich tatsächlich nicht viel für Firmata, denn sobald das Antwort-Telegramm kommt, geht es weiter. Bei den blockenden I2C-APIs ist das aber anders. Da kommt nichts vom I2C-Bus wenn man nicht wieder etwas macht. Also wartet man da solange, bis die max. Wartezeit abgelaufen ist. Habe aber inzwischen eine Idee, wie ich das berücksichtigen kann. Vermeiden möchte ich aber nach Möglichkeit einen Firmata-Timing-Parameter im Modul. Auch was die "gleichzeitige" Abfrage der beiden Register betrifft hast du prinzipiell recht, aber auch da muss ich erst prüfen, wie das im Nicht-Firmata-Fall aussieht.

Melde mich, sobald ich das Modul angepasst habe.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Hallo,

anbei der Release Candidate 2 mit einer weiteren Optimierung des Timing bei asynchronem I2C-Bus-IO, getestet mit Firmata over LAN. Das Timeout für das Abfragen der Messwerte ist nun um den Faktor 10 höher, um bei stärkeren Telegramm-Laufzeitschwankungen einen Messabbruch zu vermeiden. Außerdem wird aus dem gleichen Grund länger gewartet, bevor nach dem Messstart mit dem Abfragen der Messwerte begonnen wird.

Eine relevante Änderung bei synchronem I2C-Bus-IO (RPII2C, etc.) sollte es nicht geben. Ein Test durch einen freiwilligen Tester wäre wünschenswert.

Im RC2 ist nun auch der Hotfix vom 26.12.2015 enthalten. Dadurch ändern sich die absoluten Helligkeitswerte unter gleichen Bedingungen, wenn floatArithmetics verwendet wird.

Viel Spaß,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb