There seems to be something wrong with the way the Thingy 2.1.0 firmware manages CCS811 calibration.
I've set up several Thingies next to each other in a interior space several meters from a forced air heating vent, connected to a central that receives temperature and humidity every 15 s and gas readings every 10 s and logs the readings to OpenTSDB. The image below covers about 19 hours and demonstrates that the TVOC readings are correlated with temperature with an implausibly high gain.

The data collection started about 16 hours prior to the data displayed in the image with three devices located in three different rooms spanning 8 m maximum distance with no doors blocking air exchange. All devices started at zero TVOC, then rose with slightly different slopes not obviously correlated with the differences in ambient temperature. (Several devices had been used for short periods with the Android app and I suspect the difference was due to previous gas sensor collections.)
The first couple hours in the image show waves in TVOC that rise at times when a forced-hot-air gas furnace was running, and fall when it was off. Use of the furnace explains variation in TVOC, but the magnitude of the reading differences is implausible.
Around 16:00 I moved two devices to location of the device with the lowest magnitude TVOC. This area was about 0.5 Cel warmer than the others which may partly explain the initial ramp-up; around 16:30 the set temperature of the furnace increased, providing an additional significant rise stabilizing around 17:00, after which temperature and magnitude TVOC remained steady for a couple hours.
Around 19:00 I added a fourth device with virtually no prior on-time, which required that the central be restarted. On reconnection all readings dropped to zero, then rose linearly at a rate proportional to their relative difference prior to restart, then at 30 minute jumped significantly. The newly added device, which had no significant prior run-time, read zero for most of this period.
The set temperature for the environment dropped about 5 Cel at 22:00, which is masked by a steady drop after the sudden jump up at 16:30, then rose again around 04:00, with pulses again correlating to furnace activity. During this period the newly-added device (shown in detail in the right column) showed large increases in TVOC gain as temperature.
While all readings are still within the nominal 48-hour burn-in, the trends are not good. The jump at 30 min after connection to a central, as well as the correlation of gain with temperatures, suggest something done by the firmware. The two devices with lowest readings had some burn-in time with firmware 1.1.0; the two with highest readings were delivered with firmware 2.0.0 and immediately updated to 2.1.0.
In short, the as-implemented behavior is horribly wrong. I'll keep this running for a while longer to see if it converges to consistency, but I'm not hopeful. I'm aware of issue #11 which might contribute to fixing this, but I suspect there's something wrong with the on-going maintenance of the BASELINE register as well as absence of specific calibration support. (Both notes on page 11 of the datasheet appear relevant.)
There seems to be something wrong with the way the Thingy 2.1.0 firmware manages CCS811 calibration.
I've set up several Thingies next to each other in a interior space several meters from a forced air heating vent, connected to a central that receives temperature and humidity every 15 s and gas readings every 10 s and logs the readings to OpenTSDB. The image below covers about 19 hours and demonstrates that the TVOC readings are correlated with temperature with an implausibly high gain.
The data collection started about 16 hours prior to the data displayed in the image with three devices located in three different rooms spanning 8 m maximum distance with no doors blocking air exchange. All devices started at zero TVOC, then rose with slightly different slopes not obviously correlated with the differences in ambient temperature. (Several devices had been used for short periods with the Android app and I suspect the difference was due to previous gas sensor collections.)
The first couple hours in the image show waves in TVOC that rise at times when a forced-hot-air gas furnace was running, and fall when it was off. Use of the furnace explains variation in TVOC, but the magnitude of the reading differences is implausible.
Around 16:00 I moved two devices to location of the device with the lowest magnitude TVOC. This area was about 0.5 Cel warmer than the others which may partly explain the initial ramp-up; around 16:30 the set temperature of the furnace increased, providing an additional significant rise stabilizing around 17:00, after which temperature and magnitude TVOC remained steady for a couple hours.
Around 19:00 I added a fourth device with virtually no prior on-time, which required that the central be restarted. On reconnection all readings dropped to zero, then rose linearly at a rate proportional to their relative difference prior to restart, then at 30 minute jumped significantly. The newly added device, which had no significant prior run-time, read zero for most of this period.
The set temperature for the environment dropped about 5 Cel at 22:00, which is masked by a steady drop after the sudden jump up at 16:30, then rose again around 04:00, with pulses again correlating to furnace activity. During this period the newly-added device (shown in detail in the right column) showed large increases in TVOC gain as temperature.
While all readings are still within the nominal 48-hour burn-in, the trends are not good. The jump at 30 min after connection to a central, as well as the correlation of gain with temperatures, suggest something done by the firmware. The two devices with lowest readings had some burn-in time with firmware 1.1.0; the two with highest readings were delivered with firmware 2.0.0 and immediately updated to 2.1.0.
In short, the as-implemented behavior is horribly wrong. I'll keep this running for a while longer to see if it converges to consistency, but I'm not hopeful. I'm aware of issue #11 which might contribute to fixing this, but I suspect there's something wrong with the on-going maintenance of the BASELINE register as well as absence of specific calibration support. (Both notes on page 11 of the datasheet appear relevant.)