Heatmap card in lovelace?

I just realized that I can look at each of my solar inverter’s power generation. They each show up as a sensor value. This begs to be displayed in a heatmap; something like the Envoy system presents in its mobile app:

image

I’d also like to do this with my ESPHome devices that I’ve enabled around the house since each one gives off a WiFi strength measurement.

Does anyone know if there’s a Lovelace card implemented that can do a heatmap style representation?

Thanks,
-Greg

hey
did you ever work this out?

Nope. AFAIK, it doesn’t exist.

maybe in Grafana

This is what I’ve done so far using a tab for a single panel with that panel being a grid. I then approximated the positions of the panels within the grid using Gauge cards and used Entities cards with no entities specified as my “spacers”. Bit of a hack but it does give me visibility over how the panels are performing. It just isn’t readable on mobile because it squishes up too much.

A heatmap card would be amazing though.

1 Like

Apexcharts has nice heatmap plotting options, which could be used with a daily_utility_meter.

Still, I have not been able to make it work yet using:
GitHub - RomRider/apexcharts-card: 📈 A Lovelace card to display advanced graphs and charts based on ApexChartsJS for Home Assistant.

Plotting as a stacked bar chart of my per solar pannel utility meters works
image

But not when trying to use a custom config with heatmaps.

type: custom:apexcharts-card
apex_config:
  chart:
    type: heatmap
graph_span: 14d
span:
  end: day
show:
  last_updated: true
series:
  - entity: sensor.inverter_xxxx_energy_daily
    group_by:
      func: max
      duration: 1d
  - entity: sensor.inverter_xxxx_energy_daily
    group_by:
      func: max
      duration: 1d
...

The following is the result, Y and X axis change to what is expected, but the data is still plotted as a line:
image

I thought I should update this topic since a google search on this topic brings up my gauge card abomination above. I have found a better way to achieve a good-looking solar panel heat map using the Picture Elements card, though it’s a bit convoluted.

Screenshot 2024-06-19 095849

I wanted power levels to be represented in 10 colour steps, so I created a template sensor for each solar panel which broke down the output level from the panel into a 10-step range. My inverters are rated for up to 345 watts so I divided that up into 38 watts per step making 9 steps and the 10th essentially being “max power”. I’m no expert so I’m sure this template code could be better but it works:

{% set x = "0" %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 0 %}{% set x = "1" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 39 %}{% set x = "2" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 77 %}{% set x = "3" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 115 %}{% set x = "4" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 153 %}{% set x = "5" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 191 %}{% set x = "6" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 229 %}{% set x = "7" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 267 %}{% set x = "8" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 305 %}{% set x = "9" %}{% endif %}{% if states('sensor.envoy_redacted_inverter_redacted')| float > 343 %}{% set x = "10" %}{% endif %}{{x}}

I then created 10 colour step images in both vertical and horizontal orientations and overlayed them on a Picture Elements card with this configuration:

type: picture-elements
image: /local/Solar-panels.jpg
elements:
  - type: image
    entity: sensor.solar_panel_7129
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 31%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_1709
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 37%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7563
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 43%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_6569
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 49%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_1374
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 55%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7698
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 61%
      left: 20%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7312
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 19%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_1706
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 25%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_4560
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 31%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7928
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 37%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7504
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 43%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7689
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 49%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_5872
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 55%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_3898
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 61%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7974
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 67%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_8835
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 73%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_2637
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 79%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_4884
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 85%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_4885
    tap_action:
      action: none
    image: /local/solar-panel-power-horz-0.jpg
    state_image:
      '1': /local/solar-panel-power-horz-1.jpg
      '2': /local/solar-panel-power-horz-2.jpg
      '3': /local/solar-panel-power-horz-3.jpg
      '4': /local/solar-panel-power-horz-4.jpg
      '5': /local/solar-panel-power-horz-5.jpg
      '6': /local/solar-panel-power-horz-6.jpg
      '7': /local/solar-panel-power-horz-7.jpg
      '8': /local/solar-panel-power-horz-8.jpg
      '9': /local/solar-panel-power-horz-9.jpg
      '10': /local/solar-panel-power-horz-10.jpg
    style:
      top: 91%
      left: 9%
      width: 9%
  - type: image
    entity: sensor.solar_panel_7930
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 11%
      left: 21%
      width: 5%
  - type: image
    entity: sensor.solar_panel_7640
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 11%
      left: 27%
      width: 5%
  - type: image
    entity: sensor.solar_panel_5234
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 11%
      left: 33%
      width: 5%
  - type: image
    entity: sensor.solar_panel_4583
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 44%
      width: 5%
  - type: image
    entity: sensor.solar_panel_5025
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 50%
      width: 5%
  - type: image
    entity: sensor.solar_panel_7794
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 56%
      width: 5%
  - type: image
    entity: sensor.solar_panel_7929
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 62%
      width: 5%
  - type: image
    entity: sensor.solar_panel_4581
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 68%
      width: 5%
  - type: image
    entity: sensor.solar_panel_3899
    tap_action:
      action: none
    image: /local/solar-panel-power-vert-0.jpg
    state_image:
      '1': /local/solar-panel-power-vert-1.jpg
      '2': /local/solar-panel-power-vert-2.jpg
      '3': /local/solar-panel-power-vert-3.jpg
      '4': /local/solar-panel-power-vert-4.jpg
      '5': /local/solar-panel-power-vert-5.jpg
      '6': /local/solar-panel-power-vert-6.jpg
      '7': /local/solar-panel-power-vert-7.jpg
      '8': /local/solar-panel-power-vert-8.jpg
      '9': /local/solar-panel-power-vert-9.jpg
      '10': /local/solar-panel-power-vert-10.jpg
    style:
      top: 53%
      left: 74%
      width: 5%

The only downside to this is clicking on a panel for more info just brings up the template sensor, not the actual panel sensor, so I’ve set the tap_action on each panel to none for now.

The template sensors wouldn’t be necessary if conditional elements could use numeric values with above and below thresholds but at this time it appears conditions are either equals or not equals.