I'm new to using the Apexcharts cards (and JS) and loving them so far. However, I've been struggling with getting the datagenerator working correctly for weather forecast data for OpenWeatherMaps.
I've been trying to follow the examples from others on the forums (e.g.: Apexcharts and Openweathermap Forecast examples, Filter a response from openweathermap.get_minute_forecast based on timestamps), but I'm stuck with the card just showing "Loading..."
This is the code that I am using to generate my chart
type: custom:apexcharts-card
graph_span: 1h
span:
start: minute
now:
show: true
label: now
series:
- entity: sensor.openweathermap_minutebyminute_forecast
type: column
color: "#4275b8"
data_generator: |
return entity.attributes.forecast_data.map((entry) => {
return [new Date(entry.datetime).getTime(), parseFloat(entry.precipitation)];
});
I have this template entity to gather the minute-by-minute forecast from OpenWeatherMaps when there is rain forecasted in the next two hours.
- trigger:
- platform: time_pattern
minutes: "/2"
condition:
- condition: numeric_state
entity_id: sensor.precipitation_probability_in_next_two_hours
above: 0.20 #Note: I have not been able to find docs whether this should be fractional or %
action:
- action: openweathermap.get_minute_forecast
target:
entity_id: weather.openweathermap
response_variable: next_hour_forecast
sensor:
- name: "OpenWeatherMap MinuteByMinute Forecast"
unique_id: openweathermap_minute_forecast_data_sensor
state: "{{ next_hour_forecast['weather.openweathermap']['forecast'][0]['precipitation'] }}"
unit_of_measurement: mm
attributes:
forecast_data: "{{ next_hour_forecast['weather.openweathermap']['forecast'] }}"
This entity seems to be working roughly as intended, and has the following states (note at time of writing all 0 precipitation, but I've tested with the developed tools writing non-zero values with no effect)
forecast_data: >-
[{'datetime': datetime.datetime(2026, 6, 7, 12, 43,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 44, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 45,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 46, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 47,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 48, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 49,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 50, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 51,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 52, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 53,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 54, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 55,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 56, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 57,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 12, 58, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 12, 59,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 0, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 1,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 2, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 3,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 4, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 5,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 6, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 7,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 8, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 9,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 10, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 11,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 12, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 13,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 14, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 15,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 16, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 17,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 18, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 19,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 20, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 21,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 22, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 23,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 24, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 25,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 26, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 27,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 28, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 29,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 30, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 31,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 32, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 33,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 34, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 35,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 36, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 37,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 38, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 39,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 40, tzinfo=datetime.timezone.utc),
'precipitation': 0}, {'datetime': datetime.datetime(2026, 6, 7, 13, 41,
tzinfo=datetime.timezone.utc), 'precipitation': 0}, {'datetime':
datetime.datetime(2026, 6, 7, 13, 42, tzinfo=datetime.timezone.utc),
'precipitation': 0}]
unit_of_measurement: mm
friendly_name: OpenWeatherMap MinuteByMinute Forecast
I've tried searching further through the Apexcards documentation to no avail, and it seems like the most likely issue is potentially with the entity itself (or how I'm trying to parse it with JS). Gemini's suggestion was that potentially there's an issue with how JS parses the datetime objects, but manually setting that to strings with the developer tool did not rectify the issue. Any help is greatly appreciated.