# 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

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.

3 Likes

That’s physics…

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'
``````
5 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