Psychrometric Card

Psychrometric Card for Home Assistant

corrgraphics/psychrometric-card: Lovelace card that will generate a live psychrometric chart updated in real time. Includes ASHRAE 55 comfort profiles, unlimited points and annual weather heatmap via .epw file import.

A native, lightweight Lovelace card that renders a live Psychrometric Chart using real-time entity data.

This card visualizes the state of air in your home against the ASHRAE 55 Comfort Zone. It features unlimited custom state points, color customization, and an innovative Annual Weather Heatmap layer driven by EPW climate files.

image

Features

  • Real-Time Visualization: Plot indoor, outdoor, and HVAC supply points dynamically.
  • ASHRAE 55 Comfort Zone: Calculates the comfort polygon based on metabolic rate, clothing level, and air velocity (PMV model).
  • Weather Heatmap: Import standard .epw (EnergyPlus Weather) files to render a historical frequency heatmap directly on the chart.
  • Zero Dependencies: Built with native SVG and HTML Canvas. No heavy libraries like D3.js or Chart.js.
  • Theme Aware: Automatically adapts to Home Assistant Light and Dark modes.
  • Mobile Friendly: Responsive design that scales to fit any dashboard column.
3 Likes

New Enhancements:

  • Full customization for chart element colors.
  • SVG point labels with real time data point details.
  • Weather File (.epw) data is now parsed into seasonal visualization with customizable (trailing / leading days)

Removed:

  • mdi icons as data points removed to improve accuracy. Now renders points with SVG circles.

1 Like

Another Couple Updates

0.7.4 - Added Features and (SI) unit compatibility

New Features

  • Added historical “ghost” trails to the Psych Chart (optional).
  • Added enthalpy trend graph to unused upper left portion of the Psych Chart (optional).
  • Added conversion to (SI) metric units to accommodate most of the world.

0.8.1 - Minor Tweaks and Readability Enhancements

  • Refined Comfort Zone to take into account high and low humidity conditions.
  • Added unit labels to enthalpy and humidity ratio for point detail flags.
  • Tweaked appearance and spacing to enhance readability.

1 Like

Pretty Close to being 100% ready for prime time.

0.9.3 - Label Handling and Enthalpy Trend Upgrades

  • Updated the way point label positions are handled. Should not see labels crossing or sitting in front of adjacent labels.
  • Enhanced the look of the Enthalpy Trend Graph.
  • Added a Loding Indicator while Weather Data, Point “Ghost” History, and Enthalpy Trends are being loaded.

Does anyone happen to have any experience trying to add a card to the default HACS repository?

1 Like

Hello and congratulations for the card, clean and complete.
I’m European, I also added the weather.epw file and everything seems to work fine. Even the view on my tablet adapts perfectly to the screen.
I have a suggestion and a question:

  • the ability to change the unit of measurement for the x axis ( from °F to C°) and edit the axis labels (from “Dry Bulb Temperature (°F)” to xxxxx, for example)
  • I adjusted the “altitude” value to that of my house (and convert from meters to feet in yaml config) but what about clothing_level,metabolic_rate and air_velocity parameters? I leave them to default?
    Keep developing the card, it’s great. Congratulations!

Hey, thanks for trying this out. I’m glad it’s working well for you.

I started this with imperial measurements only. I guess I need to clean up a few things for the chart labels. I will work on an update.

Good point on the altitude “I’ll change this to take an input in meters”

Yes, the default values of clothing_level, metabolic_rate and air_velocity are set to common conditions for a typical home. You can tweak these if you notice that you typically wear more or less clothing while at home, if you are standing or sitting more and if you have forced air heat, fans, etc for air velocity. These settings move the comfort zone around. You can experiment with things if you notice that you are comfortable, yet your points fall outside of the zone.

I took a look at what was happening and fixed the errors when in “SI” mode. Pushed an update to HACS. Let me know if you see what you expect.

I believe the elevation should have already been expecting meters as long as you have… unit_system: metric in your .yaml configuration. No need to convert to feet.

Cleaned up the JS code a little.

1.0.0 Released! – I hope you find it useful.

Let me know your thoughts or if you find a bug.
Also, if you have an idea for how to make this better, I am all ears.

Thanks for the update. I did some research and i think i understood clothing level,metabolic rate and air velocity parameters.
The only addition that I believe is necessary for users is the one proposed in the section “issues” of your Githhub repository about axis unit system conversion.
When you can, take a look at it. LINK
No rush take your time

I think I have this taken care of and pushed an update. Thanks for the input!

This is a very interesting plugin.
Can the author explain a bit more that “This card visualizes the state of air in your home against the ASHRAE 55 Comfort Zone”?

The ASHRAE 55 Standard is: Thermal Environmental Conditions for Human Occupancy.

The green box labeled “comfort zone” in the screenshots shown above is rendered based on inputs to your yaml config.

Air Velocity - The air moving around in your home. Do you have forced air hear or radiant heat. Fans, Poor Insulation, Etc.

  • .05 to .25 m/s - unnoticeably still
  • .3 to .5 m/s - pleasantly still
  • .55 to 1 m/s - pleasant but noticeable
  • 1.05 to 1.5 - slightly draughty
  • 1.55 to 2 - noticeably draughty

Clothing Level - When you are at home, what are you typically wearing?

  • 0 - Naked
  • .05 - Underwear Only
  • .1 to .15 - Shorts Only - No Shoes
  • .2 to .35 - Shorts and T-Shirt - No Shoes
  • .4 to .55 - Shorts and T-Shirt, Shoes
  • .6 to .75 - Pants, Shirt, Shoes
  • .8 to 1.15 - Pants, Shirt, Jacket, Shoes
  • 1.2+ - You are probably heading outside…

Metabolic Rate - The heat your body is producing

  • 0 - you are dead
  • .05 to .2 - approaching death
  • .25 to .4 - sleeping
  • .45 to .6 - resting
  • .65 to .8 - reclining and relaxed
  • .85 to .95 - seated and relaxed
  • 1 to 1.1 - seated w/ sedentary activity
  • 1.15 to 1.2 - standing and relaxed
  • 1.25 to 1.4 - seated with light activity
  • 1.45 to 1.6 - standing with light activity
  • 1.65 to 1.95 - walking
  • 2+ - working out

You can input these or leave them @ default. Or you can create input sensors in home assistant to dynamically change this. (ie, sleeping @ night, motion or presence sensors to detect motion, seasonal clothing changes, etc.) Just add the sensor entity to the corresponding yaml config.

2 Likes

THank you for the detailed description. Will check it.