mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-09-03 14:36:37 +00:00
feat: add PVForecastHomeAssistant provider (#1258)
* feat: add PVForecastHomeAssistant provider
Reads a PV forecast time series directly from a Home Assistant entity
attribute (matching the {"forecast": [{"datetime", "watts"}]} shape
already exposed by common HA PV forecast integrations, e.g. Helios
Forecast and Solcast) and feeds it into pvforecast_ac_power, following
the same self-polling provider pattern as PVForecastVrm.
Closes #1232.
* fix: use MagicMock instead of monkeypatched Response for mypy
requests.Response().json is a typed bound method; reassigning it to a
lambda fails mypy's method-assign check. Use MagicMock(spec=...) instead,
which mocks the response without fighting its static type.
* fix: address PR review on PVForecastHomeAssistant provider
Fixes two issues raised in review on PR #1258:
- _update_data() left stale pvforecast_ac_power values in place when a
refreshed forecast was empty or shorter than a previous one; it now
clears the active forecast window before writing and raises instead
of silently no-op'ing when the response has no usable data.
- pvforecast.homeassistant.entity_id used a "select" widget with no
manual-entry fallback in EOSdash, leaving it unusable in standalone
mode where the entity list can't be resolved without SUPERVISOR_TOKEN;
switched to a plain text field.
Also fills in the config docs and openapi.json for the new
pvforecast.homeassistant.* fields, which were missing from the
original commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* fix: preserve retained forecast history when clearing stale entries
The previous fix cleared pvforecast_ac_power from start-of-day, but
PredictionProvider deliberately retains historical records back to
keep_datetime (prediction.historic_hours). Since Home Assistant
forecasts are future-only, that clear wiped out retained history
between midnight and the EMS start on every refresh.
Narrow the clear to [ems_start_datetime, end_datetime) - the actual
active forecast window, DST-adjusted - instead of the day boundary.
Addresses review feedback from @NormannK on PR #1258.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: Mathias <mathias@Mathiass-MacBook-Air.local>
Co-authored-by: Mathias <mathias@Mathiass-Air.localdomain>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
Mathias
Mathias
parent
ba76087db9
commit
7bafc8d02d
+96
-1
@@ -8,7 +8,7 @@
|
||||
"name": "Apache 2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
|
||||
},
|
||||
"version": "v0.3.0.dev2608221553448643"
|
||||
"version": "v0.3.0.dev2609011977897641"
|
||||
},
|
||||
"paths": {
|
||||
"/v1/admin/cache/clear": {
|
||||
@@ -10803,6 +10803,10 @@
|
||||
"$ref": "#/components/schemas/PVForecastVrmCommonSettings",
|
||||
"description": "Victron Remote Management (VRM) provider settings"
|
||||
},
|
||||
"homeassistant": {
|
||||
"$ref": "#/components/schemas/PVForecastHomeAssistantCommonSettings",
|
||||
"description": "Home Assistant provider settings"
|
||||
},
|
||||
"pvlib": {
|
||||
"$ref": "#/components/schemas/PVForecastPVLibCommonSettings",
|
||||
"description": "PVLib provider settings"
|
||||
@@ -10924,6 +10928,10 @@
|
||||
"$ref": "#/components/schemas/PVForecastVrmCommonSettings",
|
||||
"description": "Victron Remote Management (VRM) provider settings"
|
||||
},
|
||||
"homeassistant": {
|
||||
"$ref": "#/components/schemas/PVForecastHomeAssistantCommonSettings",
|
||||
"description": "Home Assistant provider settings"
|
||||
},
|
||||
"pvlib": {
|
||||
"$ref": "#/components/schemas/PVForecastPVLibCommonSettings",
|
||||
"description": "PVLib provider settings"
|
||||
@@ -11097,6 +11105,93 @@
|
||||
"title": "PVForecastForecastSolarCommonSettings",
|
||||
"description": "Common settings for the Forecast.Solar PV forecast provider."
|
||||
},
|
||||
"PVForecastHomeAssistantCommonSettings": {
|
||||
"properties": {
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"title": "Entity Id",
|
||||
"description": "Home Assistant entity providing the PV forecast.",
|
||||
"default": "sensor.pv_forecast",
|
||||
"examples": [
|
||||
"sensor.pv1_power_now"
|
||||
]
|
||||
},
|
||||
"attribute": {
|
||||
"type": "string",
|
||||
"title": "Attribute",
|
||||
"description": "Entity attribute holding the forecast list.",
|
||||
"default": "forecast",
|
||||
"examples": [
|
||||
"forecast"
|
||||
]
|
||||
},
|
||||
"datetime_key": {
|
||||
"type": "string",
|
||||
"title": "Datetime Key",
|
||||
"description": "Key for the timestamp in each forecast entry.",
|
||||
"default": "datetime",
|
||||
"examples": [
|
||||
"datetime"
|
||||
]
|
||||
},
|
||||
"value_key": {
|
||||
"type": "string",
|
||||
"title": "Value Key",
|
||||
"description": "Key for the AC power value in each forecast entry.",
|
||||
"default": "watts",
|
||||
"examples": [
|
||||
"watts"
|
||||
]
|
||||
},
|
||||
"value_unit": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"W",
|
||||
"kW"
|
||||
],
|
||||
"title": "Value Unit",
|
||||
"description": "Unit of the forecast value. Converted to W internally.",
|
||||
"default": "W",
|
||||
"examples": [
|
||||
"W",
|
||||
"kW"
|
||||
]
|
||||
},
|
||||
"base_url": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Base Url",
|
||||
"description": "Base URL of the Home Assistant instance. Only required when EOS is not running as a Home Assistant add-on (no SUPERVISOR_TOKEN available).",
|
||||
"examples": [
|
||||
"http://homeassistant.local:8123"
|
||||
]
|
||||
},
|
||||
"token": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Token",
|
||||
"description": "Long-lived access token for the Home Assistant instance. Only required when EOS is not running as a Home Assistant add-on.",
|
||||
"examples": [
|
||||
null
|
||||
]
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"title": "PVForecastHomeAssistantCommonSettings",
|
||||
"description": "Common settings for pvforecast data from a Home Assistant entity."
|
||||
},
|
||||
"PVForecastImportCommonSettings": {
|
||||
"properties": {
|
||||
"import_file_path": {
|
||||
|
||||
Reference in New Issue
Block a user