There is no code in the driver to stop sending those values if they are 0. The only time something like that would happen is if the API itself did not provide the data field back (it is null). The driver just goes through each observation and puts it in the attribute. I have seen nulls when the fields previously worked if the sensor stopped reporting a value (my sensor's wind/lux/and other parts died, leaving only temperature and humidity if I recall).
Can you capture a couple Traces (one that starts with "Device Data" and one that starts with "Weather Data") from when this is happening? They might help determine what is happening.
I am also worried about applying values (0s) when there is not data provided to indicate that.
For some reason the Tempest weather station does not send 0 lux readings for Illuminance.
Their app shows < 2 lux when 2 lux is the last reading above 0.
In the log file, you can see the 0 lux readings in the raw data, but nothing in the json data.
The other light based readings UV and Solar Radiation have 0 readings in both raw and json data. I'm not at all sure why Tempest does not report Illuminance readings at 0 lux.
Edit: I don't want 0 readings for all missing values, only for those corroborated by UV and Solar Radiation.
I am seeing a 0 value for illuminance (brightness) in my log at this time (Weather Data or Obs data raw response). It is 8pm local time, and it is dark out. 0 is returned for the brightness, UV is 0.0, and solar_radiation is 0. These are matched by the station observation data (Device ###### response).
I double checked through the logs you sent and I do not see any null for it in the returned data. Assuming you are getting to evening soon, can you capture a Trace with the null that is sent back? Curious if any other fields are coming back null and whether this is a battery-saving mode or something reducing "unnecessary" readings that they might have implemented at some point (or removed).
Added a Preference to be able to control what unit of measurement is used for wind variables. This used to be based on the overall measurement standard someone selected and provided people with mph or m/s (depending on Imperial or Metric). Now, it will allow you to select from m/s, mph, km/h, or knots. If you want to use this, select the unit in the parent device's preferences and then Save Preferences. If you do not, it should default to whatever the measurement standard was set to before (so you should not see any change to what you have now). Thanks to @msncookie for asking for the km/h unit, which also made me look up what other ones are common and added knots.