No history recording for some values of an air quality sensor

I’m using OpenHAB 4.3.5 running on an amd64 Linux system (although the issue occurred with previous versions as well).

I have an air quality sensor that is connected via Zigbee2MQTT. The current values for all values are transferred correctly from Zigbee2MQTT to OpenHAB, that is, I’m seeing the same measurements in OpenHAB as in the Zigbee2MQTT UI. For the temperature and humidity reading, I can access “the usual” recording of the fluctuations over time. However, for the PM25, VOC and Formaldehyde sensor, I’m only seeing a “flatline” value of 0 being recorded. The CO2 recording jumps between 0 and 0.001, which is far from the actual values being shown.

I assume I need to take some additional steps to configure the channels or items, but I can’t seem to find the issue. The Thing is currently configured like this:

Thing mqtt:topic:Office_SensorAirQuality "Luftsensor" (mqtt:broker:mosquitto) @ "Keller Büro" {
    Channels:
        Type number: Temperature "Temperatur" 
            [ 
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/temperature", 
                unit = "°C"
            ]
        Type number: Humidity "Luftfeuchtigkeit"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/humidity", 
                unit = "%"
            ]
        Type number: CO2 "CO₂"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/co2",
                unit = "ppm"
            ]
        Type number: Formaldehyde "Formaldehyd"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/formaldehyd",
                unit = "µg/m³"
            ]
        Type number: VOC "flüchtige organische Verbindungen"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/voc",
                unit = "ppb"
            ]
        Type number: PM25 "Feinstaub PM 2,5"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/pm25",
                unit = "µg/m³"
            ]
        Type number: LinkQuality "Verbindungsqualität"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/linkquality"
            ]
        Type datetime: LastSeen "letzter Kontakt"
            [
                stateTopic = "zigbee2mqtt/Office_SensorAirQuality/last_seen"
            ]
}

and the corresponding item is

Number:Temperature Office_AirTemperature "Lufttemperatur [%.1f °C]" <temperature> 
    (Office) ["Temperature"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:Temperature" }
Number:Dimensionless Office_AirHumidity "Luftfeuchtigkeit [%.1f %%]" <humidity> 
    (Office) ["Humidity"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:Humidity" }
Number:Dimensionless Office_CO2Concentration "CO₂ [%.0f ppm]" 
    (Office) ["CO2"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:CO2" }
Number:Density Office_FormaldehydeConcentration "Formaldehyd [%.0f µg/m³]"  
    (Office) ["Gas"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:Formaldehyde" }
Number:Dimensionless Office_VOCConcentration "flüchtige organische Verbindungen [%.0f ppb]" 
    (Office) ["Gas"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:VOC" }
Number:Density Office_PM25Concentration "Feinstaub PM 2,5 [%.0f µg/m³]" 
    (Office) ["Gas"] 
    { channel = "mqtt:topic:Office_SensorAirQuality:PM25" }

Do you have any hints where I might have configured something wrong?

You need to set the unit metadata on the Items to be the units you want the item to represent. As of OH 4, the units in the label are no longer used to convert the state to that unit.

Without a unit, the Item’s state is converted to the system default unit for that type. For Number:Dimensionless the default is a ratio (i.e 57 % becomes 0.57).

For more details, see the release announcement for 4.0.