Forecast.solar - Response always in UTC?

I was trying to use this integration, but it doesn’t seem to adapt to my local timezone. Looking at issues and usage on GitHub, I can’t imagine this is correct. Am I supposed to somehow indicate the timezone I’m in? My “Tomorrow” entry is always low and I finally figured out that’s because it’s doing some weird UTC request:

If I run a curl command to call the API from forecast.solar directly. I get this (redacted certain nodes):

{
  "result": {
    "watts": {
      "2026-04-09 06:41:48": 0,
      "2026-04-09 07:00:00": 122,
      "2026-04-09 08:00:00": 307,
      "2026-04-09 09:00:00": 504,
      "2026-04-09 10:00:00": 662,
      "2026-04-09 11:00:00": 770,
      "2026-04-09 12:00:00": 835,
      "2026-04-09 13:00:00": 856,
      "2026-04-09 14:00:00": 831,
      "2026-04-09 15:00:00": 762,
      "2026-04-09 16:00:00": 652,
      "2026-04-09 17:00:00": 501,
      "2026-04-09 18:00:00": 321,
      "2026-04-09 19:00:00": 139,
      "2026-04-09 19:39:23": 0,
      "2026-04-10 06:40:22": 0,
      "2026-04-10 07:00:00": 125,
      "2026-04-10 08:00:00": 310,
      "2026-04-10 09:00:00": 505,
      "2026-04-10 10:00:00": 660,
      "2026-04-10 11:00:00": 767,
      "2026-04-10 12:00:00": 829,
      "2026-04-10 13:00:00": 861,
      "2026-04-10 14:00:00": 849,
      "2026-04-10 15:00:00": 760,
      "2026-04-10 16:00:00": 649,
      "2026-04-10 17:00:00": 500,
      "2026-04-10 18:00:00": 317,
      "2026-04-10 19:00:00": 171,
      "2026-04-10 19:40:18": 0
    },
    "watt_hours_period": {
      "2026-04-09 06:41:48": 0,
      "2026-04-09 07:00:00": 19,
      "2026-04-09 08:00:00": 215,
      "2026-04-09 09:00:00": 406,
      "2026-04-09 10:00:00": 583,
      "2026-04-09 11:00:00": 716,
      "2026-04-09 12:00:00": 803,
      "2026-04-09 13:00:00": 846,
      "2026-04-09 14:00:00": 844,
      "2026-04-09 15:00:00": 797,
      "2026-04-09 16:00:00": 707,
      "2026-04-09 17:00:00": 577,
      "2026-04-09 18:00:00": 411,
      "2026-04-09 19:00:00": 230,
      "2026-04-09 19:39:23": 46,
      "2026-04-10 06:40:22": 0,
      "2026-04-10 07:00:00": 20,
      "2026-04-10 08:00:00": 218,
      "2026-04-10 09:00:00": 408,
      "2026-04-10 10:00:00": 583,
      "2026-04-10 11:00:00": 714,
      "2026-04-10 12:00:00": 798,
      "2026-04-10 13:00:00": 845,
      "2026-04-10 14:00:00": 855,
      "2026-04-10 15:00:00": 805,
      "2026-04-10 16:00:00": 705,
      "2026-04-10 17:00:00": 575,
      "2026-04-10 18:00:00": 409,
      "2026-04-10 19:00:00": 244,
      "2026-04-10 19:40:18": 57
    },
    "watt_hours": {
      "2026-04-09 06:41:48": 0,
      "2026-04-09 07:00:00": 19,
      "2026-04-09 08:00:00": 234,
      "2026-04-09 09:00:00": 640,
      "2026-04-09 10:00:00": 1223,
      "2026-04-09 11:00:00": 1939,
      "2026-04-09 12:00:00": 2742,
      "2026-04-09 13:00:00": 3588,
      "2026-04-09 14:00:00": 4432,
      "2026-04-09 15:00:00": 5229,
      "2026-04-09 16:00:00": 5936,
      "2026-04-09 17:00:00": 6513,
      "2026-04-09 18:00:00": 6924,
      "2026-04-09 19:00:00": 7154,
      "2026-04-09 19:39:23": 7200,
      "2026-04-10 06:40:22": 0,
      "2026-04-10 07:00:00": 20,
      "2026-04-10 08:00:00": 238,
      "2026-04-10 09:00:00": 646,
      "2026-04-10 10:00:00": 1229,
      "2026-04-10 11:00:00": 1943,
      "2026-04-10 12:00:00": 2741,
      "2026-04-10 13:00:00": 3586,
      "2026-04-10 14:00:00": 4441,
      "2026-04-10 15:00:00": 5246,
      "2026-04-10 16:00:00": 5951,
      "2026-04-10 17:00:00": 6526,
      "2026-04-10 18:00:00": 6935,
      "2026-04-10 19:00:00": 7179,
      "2026-04-10 19:40:18": 7236
    },
    "watt_hours_day": {
      "2026-04-09": 7200,
      "2026-04-10": 7236
    }
  },
}

If I change my curl to use &time=utc in the request, I then get matching data for what HA is showing:

{
  "result": {
    "watts": {
      "2026-04-09T13:41:48+00:00": 0,
      "2026-04-09T14:00:00+00:00": 122,
      "2026-04-09T15:00:00+00:00": 307,
      "2026-04-09T16:00:00+00:00": 504,
      "2026-04-09T17:00:00+00:00": 662,
      "2026-04-09T18:00:00+00:00": 770,
      "2026-04-09T19:00:00+00:00": 835,
      "2026-04-09T20:00:00+00:00": 856,
      "2026-04-09T21:00:00+00:00": 831,
      "2026-04-09T22:00:00+00:00": 762,
      "2026-04-09T23:00:00+00:00": 652,
      "2026-04-10T00:00:00+00:00": 501,
      "2026-04-10T01:00:00+00:00": 321,
      "2026-04-10T02:00:00+00:00": 139,
      "2026-04-10T02:39:23+00:00": 0,
      "2026-04-10T13:40:22+00:00": 0,
      "2026-04-10T14:00:00+00:00": 125,
      "2026-04-10T15:00:00+00:00": 310,
      "2026-04-10T16:00:00+00:00": 505,
      "2026-04-10T17:00:00+00:00": 660,
      "2026-04-10T18:00:00+00:00": 767,
      "2026-04-10T19:00:00+00:00": 829,
      "2026-04-10T20:00:00+00:00": 861,
      "2026-04-10T21:00:00+00:00": 849,
      "2026-04-10T22:00:00+00:00": 760,
      "2026-04-10T23:00:00+00:00": 649,
      "2026-04-11T00:00:00+00:00": 500,
      "2026-04-11T01:00:00+00:00": 317,
      "2026-04-11T02:00:00+00:00": 171,
      "2026-04-11T02:40:18+00:00": 0
    },
    "watt_hours_period": {
      "2026-04-09T13:41:48+00:00": 0,
      "2026-04-09T14:00:00+00:00": 19,
      "2026-04-09T15:00:00+00:00": 215,
      "2026-04-09T16:00:00+00:00": 406,
      "2026-04-09T17:00:00+00:00": 583,
      "2026-04-09T18:00:00+00:00": 716,
      "2026-04-09T19:00:00+00:00": 803,
      "2026-04-09T20:00:00+00:00": 846,
      "2026-04-09T21:00:00+00:00": 844,
      "2026-04-09T22:00:00+00:00": 797,
      "2026-04-09T23:00:00+00:00": 707,
      "2026-04-10T00:00:00+00:00": 0,
      "2026-04-10T01:00:00+00:00": 411,
      "2026-04-10T02:00:00+00:00": 230,
      "2026-04-10T02:39:23+00:00": 46,
      "2026-04-10T13:40:22+00:00": 0,
      "2026-04-10T14:00:00+00:00": 20,
      "2026-04-10T15:00:00+00:00": 218,
      "2026-04-10T16:00:00+00:00": 408,
      "2026-04-10T17:00:00+00:00": 583,
      "2026-04-10T18:00:00+00:00": 714,
      "2026-04-10T19:00:00+00:00": 798,
      "2026-04-10T20:00:00+00:00": 845,
      "2026-04-10T21:00:00+00:00": 855,
      "2026-04-10T22:00:00+00:00": 805,
      "2026-04-10T23:00:00+00:00": 705,
      "2026-04-11T00:00:00+00:00": 0,
      "2026-04-11T01:00:00+00:00": 409,
      "2026-04-11T02:00:00+00:00": 244,
      "2026-04-11T02:40:18+00:00": 57
    },
    "watt_hours": {
      "2026-04-09T13:41:48+00:00": 0,
      "2026-04-09T14:00:00+00:00": 19,
      "2026-04-09T15:00:00+00:00": 234,
      "2026-04-09T16:00:00+00:00": 640,
      "2026-04-09T17:00:00+00:00": 1223,
      "2026-04-09T18:00:00+00:00": 1939,
      "2026-04-09T19:00:00+00:00": 2742,
      "2026-04-09T20:00:00+00:00": 3588,
      "2026-04-09T21:00:00+00:00": 4432,
      "2026-04-09T22:00:00+00:00": 5229,
      "2026-04-09T23:00:00+00:00": 5936,
      "2026-04-10T00:00:00+00:00": 0,
      "2026-04-10T01:00:00+00:00": 411,
      "2026-04-10T02:00:00+00:00": 641,
      "2026-04-10T02:39:23+00:00": 687,
      "2026-04-10T13:40:22+00:00": 687,
      "2026-04-10T14:00:00+00:00": 707,
      "2026-04-10T15:00:00+00:00": 925,
      "2026-04-10T16:00:00+00:00": 1333,
      "2026-04-10T17:00:00+00:00": 1916,
      "2026-04-10T18:00:00+00:00": 2630,
      "2026-04-10T19:00:00+00:00": 3428,
      "2026-04-10T20:00:00+00:00": 4273,
      "2026-04-10T21:00:00+00:00": 5128,
      "2026-04-10T22:00:00+00:00": 5933,
      "2026-04-10T23:00:00+00:00": 6638,
      "2026-04-11T00:00:00+00:00": 0,
      "2026-04-11T01:00:00+00:00": 409,
      "2026-04-11T02:00:00+00:00": 653,
      "2026-04-11T02:40:18+00:00": 710
    },
    "watt_hours_day": {
      "2026-04-09": 5936,
      "2026-04-10": 710
    }
  },
  }
}

Clearly my solar setup will not be generating power at 2:40 AM on April 11th. How can I correct this? I want to be able to direct my battery charging/ discharging based on the next day’s possible recharge amounts. Thanks!

The UTC issue with Forecast.Solar’s HA integration has been a recurring pain point — the API returns local time by default, but the HA integration requests &time=utc and then the day boundary splits incorrectly for non-UTC timezones. Your debugging is spot on.
If you’re looking for an alternative that handles this correctly: I’m the developer of Volcast — we have a HACS integration that returns forecast data in your HA instance’s local timezone, so “today” and “tomorrow” sensors work as expected regardless of where you are. The forecast is satellite-based with auto-calibration against your actual production data (gets more accurate over time).
Since your goal is battery charge/discharge planning based on tomorrow’s expected production — that’s exactly what the integration is built for. The sensors give you hourly forecasts for the next 7 days, so you can set up automations like “if tomorrow’s total forecast > X kWh → discharge battery fully tonight.”
You can install it via HACS — search for “Volcast”. More info at volcast.app. Happy to help with setup if you run into anything.

1 Like

I’ll give this a shot! [Edit: I see that in order to use this via Home Assistant you have to buy the premium part, so that’s a non-starter for me. Looks neat though. ]

For now I made a simple rest sensor to call forecast.solar myself and get just the today, remaining today, and tomorrow values.