{"id":35132811,"url":"https://github.com/sxdjt/ha-windspeed-heatmap","last_synced_at":"2026-03-12T10:11:46.719Z","repository":{"id":329538006,"uuid":"1119420398","full_name":"sxdjt/ha-windspeed-heatmap","owner":"sxdjt","description":"Home Assistant card displaying wind speed history as a color-coded heatmap","archived":false,"fork":false,"pushed_at":"2026-01-24T02:04:12.000Z","size":159,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-24T13:29:38.935Z","etag":null,"topics":["hacs","heatmap","home-assistant","homeassistant","lovelace-custom-card","weather","windspeed"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sxdjt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-19T08:43:50.000Z","updated_at":"2026-01-24T02:04:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sxdjt/ha-windspeed-heatmap","commit_stats":null,"previous_names":["sxdjt/ha-windspeed-heatmap"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/sxdjt/ha-windspeed-heatmap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxdjt%2Fha-windspeed-heatmap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxdjt%2Fha-windspeed-heatmap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxdjt%2Fha-windspeed-heatmap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxdjt%2Fha-windspeed-heatmap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sxdjt","download_url":"https://codeload.github.com/sxdjt/ha-windspeed-heatmap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxdjt%2Fha-windspeed-heatmap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28829255,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T23:29:49.665Z","status":"ssl_error","status_checked_at":"2026-01-27T23:25:58.379Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacs","heatmap","home-assistant","homeassistant","lovelace-custom-card","weather","windspeed"],"created_at":"2025-12-28T07:04:43.768Z","updated_at":"2026-03-12T10:11:46.703Z","avatar_url":"https://github.com/sxdjt.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Windspeed Heatmap Card\n\n![GitHub Release](https://img.shields.io/github/v/release/sxdjt/ha-windspeed-heatmap?style=for-the-badge)\n[![AI Assisted](https://img.shields.io/badge/AI-Claude%20Code-AAAAAA.svg?style=for-the-badge)](https://claude.ai/code)\n![GitHub License](https://img.shields.io/github/license/sxdjt/ha-windspeed-heatmap?style=for-the-badge)\n\nA custom Home Assistant Lovelace card that displays wind speed data as a color-coded heatmap, showing hourly patterns across multiple days.\n\n## Features\n\n- Color-coded heatmap visualization of wind speed history\n- Visual configuration editor for easy setup\n- Default colors based on the official Beaufort wind scale (Force 0-12)\n- Auto-selects appropriate thresholds for multiple units (mph, km/h, m/s, knots)\n- Color interpolation with multiple methods (RGB, HSL, LAB, Gamma)\n- Configurable time periods and intervals\n- Configurable card sizing: compact mode, specify cell height/width, etc.\n- Optional wind direction display (arrows, cardinal directions, or degrees)\n- Customizable color thresholds based on wind speed\n- Min/Max/Avg statistics\n- Auto-refresh with configurable intervals\n- **Pairs well with the [Temperature heatmap card](https://github.com/sxdjt/ha-temperature-heatmap)**\n\n\u003cimg width=\"505\" height=\"733\" alt=\"example\" src=\"https://github.com/user-attachments/assets/a37a02da-7e3c-4242-ba5d-04c58a98a09b\" /\u003e\n\n\n## Installation\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=sxdjt\u0026repository=ha-windspeed-heatmap)\n\n## Configuration\n\n### Minimal Configuration\n\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\n```\n\n### Full Configuration\n\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ndirection_entity: sensor.wind_direction\ntitle: \"Wind History\"\ndays: 7\ntime_interval: 2\ntime_format: \"24\"\nunit: mph\nshow_direction: true\ndirection_format: arrow\nshow_entity_name: true\nshow_legend: true\nrefresh_interval: 300\nclick_action: tooltip\nrounded_corners: true\ndata_source: auto\nstatistic_type: max\n```\n\n## Configuration Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `entity` | string | **Required** | Wind speed sensor entity ID |\n| `cell_font_size` | number/string | `11` | Cell font size (6-24 pixels) |\n| `cell_gap` | number/string | `2` | Gap between cells (0-20 pixels) |\n| `cell_height` | number/string | `36` | Cell height (10-200 pixels) |\n| `cell_padding` | number/string | `2` | Padding inside cells (0-20 pixels) |\n| `cell_width` | number/string | `\"1fr\"` | Column width (1fr, auto, 60px, 25%, etc.) |\n| `click_action` | string | `\"more-info\"` | Cell click action: \"more-info\", \"tooltip\", or \"none\" |\n| `color_interpolation` | string | `\"hsl\"` | Interpolation method: \"rgb\", \"gamma\", \"hsl\", or \"lab\" |\n| `color_thresholds` | array | See below | Color mapping for wind speeds |\n| `compact` | boolean | `false` | Enable compact mode (overrides cell sizing properties) |\n| `compact_header` | boolean | `false` | Reduce title size, header/footer padding, and nav arrow size |\n| `data_source` | string | `\"auto\"` | Data source: \"auto\", \"history\", or \"statistics\" |\n| `days` | number | `7` | Number of days to display (1-30) |\n| `direction_entity` | string | `null` | Wind direction sensor entity ID (optional) |\n| `direction_format` | string | `\"arrow\"` | Direction format: \"arrow\", \"cardinal\", or \"degrees\" |\n| `fill_gaps` | boolean | `false` | Forward-fill last known value into empty buckets (use with caution - estimates missing data) |\n| `interpolate_colors` | boolean | `false` | Enable smooth color interpolation between thresholds |\n| `refresh_interval` | number | `300` | Data refresh interval in seconds |\n| `rounded_corners` | boolean | `true` | Enable rounded corners on cells (set to false for flat grid) |\n| `show_direction` | boolean | `true` | Show wind direction in cells |\n| `show_entity_name` | boolean | `false` | Show entity friendly name in footer |\n| `show_month_year` | boolean | `true` | Show month/year label above the grid |\n| `show_legend` | boolean | `false` | Show color scale legend bar below footer |\n| `statistic_type` | string | `\"max\"` | Statistic to use for statistics data: \"max\", \"mean\", or \"min\" |\n| `time_format` | string | `\"24\"` | Time format: \"12\" or \"24\" |\n| `time_interval` | number | `2` | Hours per row: 1, 2, 3, 4, 6, 8, 12, or 24 |\n| `title` | string | `\"Wind Speed History\"` | Card title |\n| `unit` | string | auto-detect | Unit of measurement: \"mph\", \"km/h\", \"m/s\", \"kn\"/\"kt\"/\"knots\" |\n\n### Default Color Thresholds\n\nThe default color scale uses the official [Beaufort wind scale colors](https://htmlpreview.github.io/?https://github.com/sxdjt/ha-windspeed-heatmap/blob/main/beaufort_colors.html).\n\nThe card automatically selects the appropriate threshold values based on the detected or configured unit of measurement:\n\n| Unit | Supported Formats | Example Threshold Range |\n|------|-------------------|-------------------------|\n| Miles per hour | `mph` | 0-73+ mph |\n| Kilometers per hour | `km/h`, `kph`, `kmh` | 0-118+ km/h |\n| Meters per second | `m/s`, `mps` | 0-32.7+ m/s |\n| Knots | `kn`, `kt`, `kts`, `knot`, `knots` | 0-64+ kn |\n\nThe unit is auto-detected from your wind speed entity's `unit_of_measurement` attribute. You can also explicitly set it using the `unit` configuration option.\n\nYou can customize these thresholds to match your local wind conditions and preferred color scheme.\n\n## Color Interpolation\n\nBy default, cell colors are determined by finding the highest threshold that the wind speed meets or exceeds. This creates distinct color bands.\n\nEnable `interpolate_colors: true` to smoothly blend colors between thresholds for a gradient effect:\n\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ninterpolate_colors: true\ncolor_interpolation: hsl\n```\n\n### Interpolation Methods\n\n| Method | Description |\n|--------|-------------|\n| `rgb` | Linear RGB interpolation - simple but can produce muddy intermediate colors |\n| `gamma` | Gamma-corrected RGB - perceptually more uniform than linear RGB |\n| `hsl` | HSL color space (default) - produces vibrant intermediate colors, takes shortest hue path |\n| `lab` | LAB color space - perceptually uniform, best for scientific visualization |\n\n**Recommendation:** Use `hsl` (default) for most cases. Use `lab` when perceptual uniformity is important.\n\n## Wind Direction Formats\n\n### Arrow Format (default)\n\nDisplays directional arrows: ↑ ↗ → ↘ ↓ ↙ ← ↖\n\n```yaml\ndirection_format: arrow\n```\n\n### Cardinal Format\n\nDisplays cardinal directions: N, NE, E, SE, S, SW, W, NW\n\n```yaml\ndirection_format: cardinal\n```\n\n### Degrees Format\n\nDisplays numeric degrees: 0°, 45°, 90°, etc.\n\n```yaml\ndirection_format: degrees\n```\n\n## Cell Sizing Customization\n\nControl the visual density of the heatmap with individual sizing properties or compact mode.\n\n### Individual Properties\n\nCustomize cell dimensions with specific size values:\n\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ncell_height: 40           # Cell height in pixels (default: 36)\ncell_width: \"1fr\"         # Column width - 1fr (default), auto, 60px, 25%, etc.\ncell_padding: 3           # Padding inside cells (default: 2)\ncell_gap: 3               # Gap between cells (default: 2)\ncell_font_size: 12        # Wind speed font size (default: 11)\n```\n\n#### Size Value Formats\n\n- Numbers automatically convert to pixels: `cell_height: 40` becomes \"40px\"\n- Strings pass through as-is: `cell_width: \"1fr\"`, `cell_width: \"25%\"`\n- Valid ranges:\n  - `cell_height`: 10-200 pixels\n  - `cell_padding`: 0-20 pixels\n  - `cell_gap`: 0-20 pixels\n  - `cell_font_size`: 6-24 pixels\n\n### Compact Mode\n\nFor a denser display with smaller cells:\n\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ncompact: true             # Overrides individual sizing properties\n```\n\nCompact preset values:\n- Cell height: 24px (vs 36px default)\n- Cell padding: 1px (vs 2px default)\n- Cell gap: 1px (vs 2px default)\n- Font size: 9px (vs 11px default)\n\n### Width Considerations\n\n**Responsive (recommended):**\n```yaml\ncell_width: \"1fr\"         # Auto-sizes to fill width (default)\ncell_width: \"25%\"         # Percentage-based responsive sizing\n```\n\n**Fixed width:**\n```yaml\ncell_width: 60            # Fixed 60px width per column\n```\n\nNote: Fixed widths may cause horizontal scrolling on narrow screens, especially with many days displayed.\n\n### Example Configurations\n\n**Larger cells for better readability:**\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ncell_height: 50\ncell_padding: 4\ncell_font_size: 14\ndays: 5\n```\n\n**Very compact display for dashboards:**\n```yaml\ntype: custom:windspeed-heatmap-card\nentity: sensor.wind_speed\ncompact: true\ndays: 14\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\nFor issues, feature requests, or contributions, please visit the [GitHub repository](https://github.com/sxdjt/ha-windspeed-heatmap).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsxdjt%2Fha-windspeed-heatmap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsxdjt%2Fha-windspeed-heatmap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsxdjt%2Fha-windspeed-heatmap/lists"}