I’ve gone naked, and the results are in. I’m getting much more plausible readings to send to Luftdaten with no temp or humidity compensation necessary. Basically, I’ve removed the Enviro+ and have directly connected a stand-alone BME280 (ironically, a Pimoroni module) and directly connected the PMS5003.
The temperature is pretty-well bang on, and the humidity isn’t far off either. I also got in to the BME280 driver and mauled all of the settings to align it with the recommendations in the BME280 data sheet for weather monitoring: IRR Off, Force mode, x1 oversampling, and 1s sampling rates.
In my weather enclosure, the BME280 module is about 20 cm away from the Pi Zero, so it’s not going to get any heat soak from anywhere except the atmosphere. I also throttled-back the measurement loop to 20 seconds.
I’ve got a few more BME280 modules on the slow boat from China, and a PMS7003 as well. When they turn up I’m going to use the Circuitpython drivers and fiddle with the script to start sending Luftdaten the mean of the previous measurement cycles rather than just the raw data of the last measurement.
So, I’m happy now that I’ve got plausible readings to send up to Luftdaten (I imagine they’re be happier too) but a bit disappointed that the Enviro+ module has some design challenges, especially considering its price.