Funksensor mit Bosch sensortec BME680 / Luftgüte

Begonnen von juergs, 28 Oktober 2017, 18:05:43

Vorheriges Thema - Nächstes Thema

hdgucken

#285
Hallo Jürgen,

Zitat von: juergs
Die RFMxx-Lib lässt sich zwar auf Soft-SPI konfigurieren, aber die zugrunde liegende SPI.h aus
der ESP-Plattform Lib leider nicht!
Die SPI Lib wird bei Soft SPI doch gar nicht eingebunden !? Merkwürdig  :o

Die Arduino IDE ist schon sehr eigenartig, Bibliotheken müssen entweder direkt im Projektordner oder
im Ordner libraries sein, stimmt.

Den Lichtsensor hab ich von Segor (www.segor.de).

Gruß Thomas

juergs

#286
Hatte ich auch gedacht, aber hier:
byte RFMxx::ReadReg(byte addr) {
  SetPin(m_ss, LOW);
  SPI.transfer(addr & 0x7F);
  //spi8(addr & 0x7F);
  byte result = SPI.transfer(0);
  //byte result = spi8(0);
  SetPin(m_ss, HIGH);
  return result;
}

void RFMxx::WriteReg(byte addr, byte value) {
  SetPin(m_ss, LOW);
  SPI.transfer(addr | 0x80);
  SPI.transfer(value);
  //spi8(addr | 0x80);
  //spi8(value);
  SetPin(m_ss, HIGH);
}


Grüße,
Jürgen

hdgucken

Die "SPI.transfer..." müssen gegen die "spi8..." Befehle getauscht werden, bei Soft SPI !
Hatte ich das vergessen ?

Gruß Thomas

juergs

Danke für den Hinweis.  :)
Werde mal die Version wechseln...

juergs

Zitat von: SimGa am 11 Januar 2018, 22:43:08
Hallo zusammen,
hat eigentlich jemand den Ansatz weiter verfolgt, aus den aufgezeichneten Sensordaten Rückschlüsse auf den Algorithmus zu schließen?
Im internet habe ich bisher nur einen eher schlechten(zumindest hier in Colorado funktioniert er schlecht) alternativen Algorithmus gefunden, der sich aus dem Widerstand und der Luftfeuchte nähert.

Hallo SimGa,
hier noch der Versuch einer Berechnung ohne Lib:
https://github.com/pimoroni/bme680/blob/master/examples/indoor-air-quality.py

juergs

Ach ja, hatte ich schon erwähnt, daß man die ADAFRUIT-OLED-LIB nicht auf das WROOM-Board flashen sollte?
Einmal unbedacht den Universalsensor-Code geflasht, das wars dann: keine Serielle mehr zum Wiedererwecken ... 
Da hilft nur noch herausoperieren des ESP-Moduls ...  :'(
OLED-Modul hat etwas Hitzetechnisch gelitten, aber alles geht wieder ... :)

juergs

#291
Diesmal ist der zweite Sensor konfiguriert, dennoch kommt dieser Fehler from LGW:

ERROR: empty name in readingsBeginUpdate
ERROR: >0B< returned by the CustomSensor ParseFn is invalid, notify the module maintainer

ZitatInternals:
   DEF        07
   ID         07
   NAME       bme680_cc_07
   NR         114
   STATE      Initialized
   TYPE       CustomSensor
   corrH      0
   corrT      0
   READINGS:
     2018-01-06 22:01:22   battery         8
     2018-01-06 22:01:22   gas             153280
     2018-01-06 22:01:22   gas-kohm        153.3
     2018-01-06 22:01:22   humidity        53
     2018-01-06 22:01:22   iaq             99
     2018-01-06 22:01:22   lux             0
     2018-01-06 22:01:22   pressure        997
     2018-01-06 22:01:22   state           T: 20.5 H: 53
     2018-01-06 22:01:22   temperature     20.5
Attributes:
   event-min-interval .*:1800
   event-on-change-reading .*
   room       CustomSensor,CO2-Messung
   stateFormat temperature °C, humidity %, pressure hPa
   userReadings gas-kohm { sprintf( "%.1f", ReadingsVal( $NAME,"gas",0 ) / 1000 + 0.05 ) }
   verbose    5

Zitat2018.01.13 12:40:12 1: ERROR: empty name in readingsBeginUpdate
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBeginUpdate           called by ./FHEM/36_CustomSensor.pm (207)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,temperature,21) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (210)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,humidity,43) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (214)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,state,T: 21 H: 43) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (226)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,pressure,1011) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (228)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,iaq,41) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (232)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,lux,0) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (236)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,battery,7) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (240)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: readingsUpdate(,gas,365650) missed to call readingsBeginUpdate first.
2018.01.13 12:40:12 1: stacktrace:
2018.01.13 12:40:12 1:     main::readingsBulkUpdate            called by ./FHEM/36_CustomSensor.pm (244)
2018.01.13 12:40:12 1:     main::CustomSensor_Parse            called by fhem.pl (3684)
2018.01.13 12:40:12 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (707)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (469)
2018.01.13 12:40:12 1:     main::LaCrosseGateway_Read          called by fhem.pl (3488)
2018.01.13 12:40:12 1:     main::CallFn                        called by fhem.pl (687)
2018.01.13 12:40:12 1: ERROR: >0B< returned by the CustomSensor ParseFn is invalid, notify the module maintainer
2018.01.13 12:40:13 5: LGW: dispatch OK CC 11 6 16 43 16 17 0 65 0 0 70 54 86 80

juergs

#292
Ok, hab's herausgefunden:

Zitat2018.01.13 20:41:15 3: LGW: CustomSensor-rname: bme680_cc
2018.01.13 20:41:17 5: LGW: dispatch OK CC 11 6 6 49 16 9 0 113 0 0 70 49 152 96
2018.01.13 20:41:17 5: LGW: CustomSensor-Frame: OK CC 11 6 6 49 16 9 0 113 0 0 70 49 152 96
2018.01.13 20:41:17 3: LGW: CustomSensor-rname: 0B

Der Sensor ist als dezimal 11 deklariert (weil bei miir einige niedrige LaCrosse-Devices herumschwirren...)
in $rname wird die ID hex übergeben und nicht als String ... Ich hatte es geahnt ...  :(

ZitatInternals:
   CHANGED   
   CustomSensor_lastRcv 2018-01-13 20:55:17
   DEF        0B
   ID         0B
   LASTInputDev LGW
   LGW_MSGCNT 2
   LGW_TIME   2018-01-13 20:55:17
   MSGCNT     2
   NAME       bme680_cc_11
   NR         118
   STATE      20.7 °C, 49 %, 1008 hPa
   TYPE       CustomSensor
   corrH      0
   corrT      0
   READINGS:
     2018-01-13 20:55:17   battery         7
     2018-01-13 20:55:17   gas             315880
     2018-01-13 20:55:17   gas-kohm        315.9
     2018-01-13 20:55:17   humidity        49
     2018-01-13 20:55:17   iaq             78
     2018-01-13 20:55:17   lux             0
     2018-01-13 20:55:17   pressure        1008
     2018-01-13 20:55:17   state           T: 20.7 H: 49
     2018-01-13 20:55:17   temperature     20.7
Attributes:
   event-min-interval .*:1800
   event-on-change-reading .*
   room       CO2-Messung,CustomSensor,LaCrosse
   stateFormat temperature °C, humidity %, pressure hPa
   userReadings gas-kohm { sprintf( "%.1f", ReadingsVal( $NAME,"gas",0 ) / 1000 + 0.05 ) }
   verbose    5

Die angepasste CodeVersion habe ich hier für ESP8266_D1_WROOM_Board hinterlegt.
Habe ein Rollback der RFM-Lib auf ein Beispiel von HCS eingebaut, um eine Funkübertragung zustande zu bekommen.

Ein FHEM-Update beinhaltet noch keine aktuelle Version der 36_LaCrossGateWay.pm und der 36_CustomSensor.pm.
Anmerkung: die Reichweite des RFM69 scheint suboptimal zu sein ... 

hdgucken

#293
Hallo Jürgen,

hatte wenig Zeit die Tage, sorry.

Zitat von: juergs
Ach ja, hatte ich schon erwähnt, daß man die ADAFRUIT-OLED-LIB nicht auf das WROOM-Board flashen sollte?
Einmal unbedacht den Universalsensor-Code geflasht, das wars dann: keine Serielle mehr zum Wiedererwecken ... 
Da hilft nur noch herausoperieren des ESP-Moduls ...  :'(
OLED-Modul hat etwas Hitzetechnisch gelitten, aber alles geht wieder ... :)
Das ist schon heftig. Das liegt bestimmt an dem "verdrehten" I2C Anschluss vom WROOM2 (D1 und D2 vertauscht).
Sollte aber mit gedrückter "Flash" Taste (GPIO 0 auf GND) beim booten in den Flash Mode gehen ?!

ZitatDer Sensor ist als dezimal 11 deklariert (weil bei miir einige niedrige LaCrosse-Devices herumschwirren...)
in $rname wird die ID hex übergeben und nicht als String ... Ich hatte es geahnt ...  :(
Darüber hatte ich auch eine ganze Zeit gegrübelt, jetzt wo Du es herausgefunden hast, erklärt es die Fehlermeldungen natürlich ;)

Die RFMxx Lib hatte ich mir auch nur "ausgeborgt" und zurechtgestückelt, das mit dem TPinCallback hatte ich ebenfalls schon im Auge,
kann man getrost entfernen, hatte ich auch schon ohne getestet. War bestimmt dazu gedacht, um ohne Arduino IDE Pins umzudefinieren oder so etwas ?!

Edit: Hab die RFMxx Lib im Universalsensorprojekt V2.0 bzgl. TPinCallback und Soft-SPI geändert  ;)
https://forum.fhem.de/index.php/topic,78128.msg748272.html#msg748272

Gruß Thomas


juergs

#294
Hallo Thomas,
danke für die Rückmeldung.
ZitatDas liegt bestimmt an dem "verdrehten" I2C Anschluss vom WROOM2 (D1 und D2 vertauscht).
Sollte aber mit gedrückter "Flash" Taste (GPIO 0 auf GND) beim booten in den Flash Mode gehen ?!

Denke ich auch, wollte aber nicht noch tiefer suchen ... ;)

Das Problem ist, dass die Serielle über den CP2102 Chip blockiert ist ... der ESP schwingt auf allen Ports ...
Da fällt mir auf: auf dem Wroom-Board fehlt der Aufdruck auf dem CP2xxx  Chip ....

GPIO 0 auf GND explizit auf GND ziehen, werde ich beim nächsten Mal probieren ...  ;D ;D ;D

hdgucken

Hallo Jürgen,

Zitat von: juergs
GPIO 0 auf GND explizit auf GND ziehen, werde ich beim nächsten Mal probieren ...  ;D ;D ;D
Hoffentlich passiert Dir das nicht nochmal  ;)
Hatte dazu mal gesehen, das der kleine Joystick mit Reset und Flash verdrahtet sein sollte,
evtl. müsstest Du nur den Stick beim einschalten in Stellung "Flash" drücken, siehe Bild:

Gruß Thomas

juergs

#296
Hi,
es geht, wenn man Flash und Reset gleichzeitig drückt, den Flashvorgang anstößt
und erst dann Reset loslässt.
Damit konnte ich ein D1-Board reaktivieren ... da die Serielle (USB) dann bleibt ... 

Grüße,
Jürgen

hdgucken

Zitat von: juergs
es geht, wenn man Flash und Reset gleichzeitig drückt, den Flashvorgang anstößt
und erst dann Reset loslässt.
Damit konnte ich ein D1-Board reaktivieren ... da die Serielle (USB) dann bleibt ... 
Cool, dann bin ich ja gerüstet, wenn es mich mal erwischt  ;D ;)

juergs

#298
Hallo Thomas,

noch zum Thema Reichweite:
Habe einen separaten Testaufbau gemacht, weil ich den 3ten Sensor einfach nicht empfangen habe...
Obwohl er ca. 50cm neben der LGW stand und der Logikanalyser andeutet dass die Kommunikation funktioniert.
Mußte sogar die Empfindlichkeit des SDR weiter hochdrehen ...

Der höchste PA-Level scheint der Kleinste zu sein! (Ohne ins Datenblatt zu schauen ..)
Man bemerke den Unterschied zum anderen LaCrosse-Sender ... 

hdgucken

Hi,

hab eben nochmal schnell ins Datenblatt und die RFMxx Lib geschaut, steht alles auf "max. Power".
Auszug aus dem Datenblatt: "Pout = -18 + OutputPower [dBm] , with PA0"
PA0 Output Power mit allen Bits auf 1 (5 Bits), ergibt max. Power.
Alles ok eigentlich.

Gruß Thomas