Calculate (and display) absolute humidity calculated from sensor for relative humidity

How would I calculate the absolute humidity using sensor values of relative humidity (and maybe pressure for more accuracy)?
And how could I display such calculated values?

The formulas to calculate Absolute Humidity from RH and Temperature are fairly complicated computations and will most likely required a python script of some sort.
I haven’t seen those formulas in years (12 or so) but I could help you write the python script.

Jardi.

1 Like

This custom sensor calculates absolute humidity:

3 Likes

This is awesome!

That’s really a nice offer!
But no more necessary :stuck_out_tongue_winking_eye:

here is how I calculate abs. humidity. input is sensor_temp_3 and sensor.hum_3. change these 2 names in the function call absolute_humidity(). pressure is not taken into account.

sensor:
  - platform: template
    sensors:
       hum_abs_3:
         entity_id: sensor.temp_3,sensor.hum_3
         value_template: >-
           {% macro absolute_humidity(temp,hum) -%}
            {% if states(hum)|float==0 or states(temp)=='unknown' -%}
              'unknown'
            {%- else %}
                {{ (states(hum)|float * 6.112 * 2.1674 * e**((states(temp)|float*17.67)/(states(temp)|float+243.5)) / (states(temp)|float+273.15))|round(2) }}
            {% endif %}
           {%- endmacro %}
           {{ absolute_humidity('sensor.temp_3', 'sensor.hum_3') }}
         unit_of_measurement: 'g/m³'
         friendly_name: 'abs. humidity'

interesting thing is: if I put the sensor in the fridge, the relative humidity is higher then in my flat. but the absolut is much lower.

Buy Me A Coffee

4 Likes

That’s physics… :stuck_out_tongue_winking_eye:

No, thats nature.
Physics is only the art of modeling the nature into a human understandable thing.

Why use a macro here? Adds unnecessary code and you’re converting strings all over the place. Also, when you do this you can drop the entity_id list because the entities are inside the states() method which the parser looks for.

sensor:
  - platform: template
    sensors:
       hum_abs_3:
         value_template: >-
           {% set h, t = states('sensor.hum_3') | float, states('sensor.temp_3') %}
           {% if not h or t == 'unknown' -%}
             'unknown'
           {%- else %}
            {% set t = t | float %}
            {{ (h*6.112*2.1674*e**((t*17.67)/(t+243.5))/(t+273.15))|round(2) }}
           {% endif %}
         unit_of_measurement: 'g/m³'
         friendly_name: 'abs. humidity'
8 Likes

I use a macro because I convert more than 1 sensor. And when I use a macro, the system needs the entity_id.

but macro’s don’t span multiple value_templates, you still need to copy/paste… You’d just be editing in 4 places verses 2 without the macro. To each his own I guess.

1 Like