Home Assistant Home Assistant integration is here
All posts
· 6 min read ·Darwin Daume

The official pvnode integration for Home Assistant is here

Forecasts per site and per roof surface, a curve in the Energy Dashboard, setup via HACS in two steps - and polling that takes care of your plan on its own.

The official pvnode integration for Home Assistant is here

If you run your PV system with Home Assistant, you are already orchestrating your wallbox, heat pump, battery and household appliances there. What is missing for good decisions is the answer to one question: how much sun is coming over the next few hours? That is exactly what the official pvnode integration is for. It uses the V2 API, creates a device for every site and every roof surface, and feeds the Energy Dashboard.

TL;DR

  • Setup in two steps: paste your API key, pick a site from a list. There is nothing else to configure.
  • More than 20 sensors per site, plus separate sub-devices per roof surface - including a clearsky reference, weather and irradiance data.
  • The integration handles polling itself: it fetches exactly when a new calculation is available, and survives a restart without a single extra request.
  • Switching from Forecast.Solar takes a few minutes with the mapping table below.

1. Installation via HACS

The integration is not part of the HACS default catalogue yet, so it is added as a custom repository:

  1. Install HACS if you have not already.
  2. HACS → Integrations → ⋮ → Custom repositories
  3. Add https://github.com/darwindaume/ha-pvnode with the category Integration.
  4. Install pvnode, then restart Home Assistant.

If you have My Home Assistant set up, this button opens the repository directly in your instance:

Open in Home Assistant

Prefer doing it by hand? Copy custom_components/pvnode from the repository into your config/custom_components/ directory and restart. HACS is just the convenient route - and the one that tells you about updates.

2. Setup

  1. Settings → Devices & services → Add integration → pvnode
  2. Paste your API key (create one here).
  3. Pick a site from the list. With only one site, this step is skipped.

That is it. Location, orientation and module surfaces are already configured in pvnode, and the integration pulls everything through the site_id. For every additional site, add the integration again.

What you get in Home Assistant

Every site becomes a device, every roof surface its own sub-device.

At site level you get the power forecast for the current 15-minute slot as well as for the next 30 minutes and the next hour, peak power today and tomorrow including the time it occurs, the energy forecast for today, tomorrow and the following days, the remaining yield for today, and the energy for this and the next hour. Plus temperature and weather code for the location.

Disabled by default, but individually enabled in the entity registry: wind speed, relative humidity, precipitation, snow water equivalent as well as global, diffuse and direct irradiance. Depending on your plan, power and energy also arrive as a (min)/(max) pair - the uncertainty band, which you can use as a risk buffer in your automations.

Per roof surface you get the current power forecast, the energy forecast for today and tomorrow, and the plane-of-array irradiance before and after shading. For east/west systems this is the real win: two separate curves instead of one averaged one.

Three diagnostic sensors show when the forecast was calculated, when the next update is due, and how many requests you have left. The request counter is account-wide, not per site.

Forecast in the Energy Dashboard

pvnode can supply the forecast curve for a solar panel in the Energy Dashboard:

  1. Settings → Dashboards → Energy
  2. Add your production sensor under Solar panels.
  3. Select pvnode under Forecast.

This requires an actual production meter, typically from your inverter. For "solar production" the Energy Dashboard expects a cumulative energy sensor (state_class: total or total_increasing) - a forecast is not a meter and cannot fill that field.

After that the forecast appears as a curve above your actual production. It is fetched live on every page load and not historised: looking back, you always see the current forecast, not the one from back then.

Plotting the forecast curve

Home Assistant does not ship a built-in card for forecast curves. The usual way is the ApexCharts card from HACS. Every power sensor carries its full time series in the forecast attribute, so the chart builds itself straight from the sensor.

Replace sensor.my_site_... with your own entity IDs, which you will find under Developer tools → States with the filter pvnode:

type: custom:apexcharts-card
graph_span: 2d
span:
  start: day
now:
  show: true
  label: Now
header:
  show: true
  title: PV forecast
series:
  - entity: sensor.my_site_clearsky_power_now
    name: Clearsky
    type: area
    opacity: 0.15
    stroke_width: 1
    color: "#cccccc"
    data_generator: |
      return entity.attributes.forecast.map((e) => {
        return [new Date(e.datetime).getTime(), e.watts_clearsky];
      });
  - entity: sensor.my_site_power_forecast_now
    name: Forecast
    type: area
    opacity: 0.4
    stroke_width: 2
    data_generator: |
      return entity.attributes.forecast.map((e) => {
        return [new Date(e.datetime).getTime(), e.watts];
      });

The grey area is the clearsky curve, the coloured one the actual forecast. The gap between them is the expected loss from cloud cover.

Switching from Forecast.Solar

If you already use Forecast.Solar, remove that integration first, then set up pvnode and adjust your automations. Forecast.Solar assigns fixed entity IDs, so you can search your YAML for them. With pvnode the entity ID is built from your site name - "North House" becomes something like sensor.north_house_energy_forecast_today.

Forecast.Solar - entity ID pvnode - sensor name
sensor.energy_production_today Energy forecast today
sensor.energy_production_tomorrow Energy forecast tomorrow
sensor.energy_production_today_remaining Remaining yield today
sensor.power_production_now Power forecast now
sensor.power_production_next_hour Power forecast in 1 hour
sensor.power_highest_peak_time_today Peak power time today
sensor.power_highest_peak_time_tomorrow Peak power time tomorrow
sensor.energy_current_hour Energy this hour
sensor.energy_next_hour Energy next hour

On top of that you get values that had no equivalent before: clearsky power and energy, weather and irradiance data, dedicated sensors per roof surface and - depending on your plan - the uncertainty band.

One detail not to forget: you need to select the forecast source in the Energy Dashboard once more. It is tied to the config entry, not to the entities.

Why there is no polling interval to set

Thanks to a few additions to the API, the Home Assistant integration can work out on its own how many updates per day your plan gives you. The polling schedule is derived from that automatically.

If you switch plans, the forecast horizon and the uncertainty band adjust themselves on the next fetch. The band sensors appear after the first forecast update, not immediately. If you would rather not wait, press "Update forecast now" on the pvnode device. Home Assistant's own Reload does not help here: it deliberately falls back to the stored forecast as long as that one is still current.

Getting started

Every new account starts with a 14-day trial without a credit card: 144 forecast updates per day, 7 forecast days, the uncertainty band and up to 8 solar surfaces. That is enough to test the integration in full before you commit to a plan.

Create an account, configure your site, generate an API key - and the forecast is in Home Assistant. The full documentation lives here.

We are happy to take feedback through the feedback button in the dashboard or as an issue in the repository. And if you have built a nice dashboard or a clever automation on top of the pvnode sensors: show us, we would love to share the best examples with the community.