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.
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.
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.
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
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.