Git Product home page Git Product logo

oh3-solarforecast-drops's Introduction

SolarForecast Binding

This binding provides data from Solar Forecast services. Use it to estimate your daily production, plan electric consumers like Electric Vehicle charging, heating or HVAC. Look ahead the next days in order to identify surplus / shortages in your energy planning.

Supported Services

Display Power values of Forecast and PV Inverter items

Display Energy values of Forecast and PV inverter items Yellow line shows Daily Total Forecast.

Supported Things

Each service needs one xx-site for your location and at least one photovoltaic xx-plane.

Name Thing Type ID
Solcast service site definition sc-site
Solcast PV Plane sc-plane
Forecast Solar site location fs-site
Forecast Solar PV Plane fs-plane

Solcast Configuration

Solcast service requires a personal registration with an e-mail address. A free version for your personal home PV system is available in Hobbyist Plan You need to configure your home photovoltaic system within the web interface. The resourceId for each PV plane is provided afterwards.

In order to receive proper timestamps double check your time zone in openHAB - Settings - Regional Settings. Correct time zone is necessary to show correct forecast times in UI.

Solcast Bridge Configuration

Name Type Description Default Required Advanced
apiKey text API Key N/A yes no
timeZone text Time Zone of forecast location empty no yes

apiKey can be obtained in your Account Settings

timeZone can be left empty to evaluate Regional Settings of your openHAB installation. See DateTime section for more information.

Solcast Plane Configuration

Name Type Description Default Required Advanced
resourceId text Resource Id of Solcast rooftop site N/A yes no
refreshInterval integer Forecast Refresh Interval in minutes (0 = disable automatic refresh) 120 yes no

resourceId for each plane can be obtained in your Rooftop Sites

refreshInterval of forecast data needs to respect the throttling of the Solcast service. If you have 25 free calls per day, each plane needs 2 calls per update a refresh interval of 120 minutes will result in 24 calls per day.

With refreshInterval = 0 the forecast data will not be updated by binding. This gives the user the possibility to define an own update strategy in rules. See manual update rule example to update Solcast forecast data

  • after startup
  • every 2 hours only during daytime using Astro Binding

Solcast Channels

Each sc-plane reports its own values including a json channel holding JSON content. The sc-site bridge sums up all attached sc-plane values and provides total forecast for your home location.

Channels are covering today's actual data with current, remaining and today's total prediction. Forecasts are delivered up to 6 days in advance. Scenarios are clustered in groups:

  • average scenario
  • pessimistic scenario: 10th percentile
  • optimistic scenario: 90th percentile
Channel Type Unit Description Advanced
power-estimate Number:Power W Power forecast for next hours/days no
energy-estimate Number:Energy kWh Energy forecast for next hours/days no
power-actual Number:Power W Power prediction for this moment no
energy-actual Number:Energy kWh Today's forecast till now no
energy-remain Number:Energy kWh Today's remaining forecast till sunset no
energy-today Number:Energy kWh Today's forecast in total no
json String - Plain JSON response without conversions yes

ForecastSolar Configuration

ForecastSolar service provides a public free plan. You can try it without any registration or other preconditions.

ForecastSolar Bridge Configuration

Name Type Description Default Required
location text Location of Photovoltaic system. empty no
apiKey text API Key N/A no

location defines latitude, longitude values of your PV system. In case of empty the location configured in openHAB is obtained.

apiKey can be given in case you subscribed to a paid plan.

ForecastSolar Plane Configuration

Name Type Description Default Required Advanced
refreshInterval integer Forecast Refresh Interval in minutes 30 yes false
declination integer Plane Declination: 0 for horizontal till 90 for vertical declination N/A yes false
azimuth integer Plane Azimuth: -180 = north, -90 = east, 0 = south, 90 = west, 180 = north N/A yes false
kwp decimal Installed Kilowatt Peak N/A yes false
dampAM decimal Damping factor of morning hours 0 no true
dampPM decimal Damping factor of evening hours 0 no true
horizon text Horizon definition as comma separated integer values N/A no true

refreshInterval of forecast data needs to respect the throttling of the ForecastSolar service. 12 calls per hour allowed from your caller IP address so for 2 planes lowest possible refresh rate is 10 minutes.

Advanced Configuration

Advanced configuration parameters are available to fine tune your forecast data. Read linked documentation in order to know what you're doing.

Damping factors for morning and evening.

Horizon information as comma-separated integer list. This configuration item is aimed to expert users. You need to understand the horizon concept. Shadow obstacles like mountains, hills, buildings can be expressed here. First step can be a download from PVGIS tool and downloading the terrain shadows. But it doesn't fit 100% to the required configuration. Currently there's no tool available which is providing the configuration information 1 to 1. So you need to know what you're doing.

ForecastSolar Channels

Each fs-plane reports its own values including a json channel holding JSON content. The fs-site bridge sums up all attached fs-plane values and provides the total forecast for your home location.

Channels are covering today's actual data with current, remaining and total prediction. Forecasts are delivered up to 3 days for paid personal plans.

Channel Type Unit Description Advanced
power-estimate Number:Power W Power forecast for next hours/days no
energy-estimate Number:Energy kWh Energy forecast for next hours/days no
power-actual Number:Power W Power prediction for this moment no
energy-actual Number:Energy kWh Today's forecast till now no
energy-remain Number:Energy kWh Today's remaining forecast till sunset no
energy-today Number:Energy kWh Today's forecast in total no
json String - Plain JSON response without conversions yes

Thing Actions

All things sc-site, sc-plane, fs-site and fs-plane are providing the same Actions. Channels are providing actual forecast data and daily forecasts in future. Actions provides an interface to execute more sophisticated handling in rules. You can execute this for each xx-plane for specific plane values or xx-site to sum up all attached planes.

See Date Time section for more information. Double check your time zone in openHAB - Settings - Regional Settings which is crucial for calculation.

getForecastBegin

Returns Instant of the earliest possible forecast data available. It's located in the past, e.g. Solcast provides data from the last 7 days. Instant.MAX is returned in case of no forecast data is available.

getForecastEnd

Returns Instant of the latest possible forecast data available. Instant.MIN is returned in case of no forecast data is available.

getPower

Parameter Type Description
timestamp Instant Timestamp of power query
mode String Choose average, optimistic or pessimistic to select forecast scenario. Only Solcast.

Returns QuantityType<Power> at the given Instant timestamp. Respect getForecastBegin and getForecastEnd to get a valid value.

Check log or catch exceptions for error handling

  • IllegalArgumentException thrown in case of problems with call arguments
  • SolarForecastException thrown in case of problems with timestamp and available forecast data

getDay

Parameter Type Description
date LocalDate Date of the day
mode String Choose average, optimistic or pessimistic to select forecast scenario. Only Solcast.

Returns QuantityType<Energy> at the given localDate. Respect getForecastBegin and getForecastEnd to avoid ambiguous values.

Check log or catch exceptions for error handling

  • IllegalArgumentException thrown in case of problems with call arguments
  • SolarForecastException thrown in case of problems with timestamp and available forecast data

getEnergy

Parameter Type Description
startTimestamp Instant Start timestamp of energy query
endTimestamp Instant End timestamp of energy query
mode String Choose optimistic or pessimistic to get values for a positive or negative future scenario. Only Solcast.

Returns QuantityType<Energy> between the timestamps startTimestamp and endTimestamp. Respect getForecastBegin and getForecastEnd to avoid ambiguous values.

Check log or catch exceptions for error handling

  • IllegalArgumentException thrown in case of problems with call arguments
  • SolarForecastException thrown in case of problems with timestamp and available forecast data

Date Time

Each forecast is bound to a certain location which automatically defines the time zone. Most common use case is forecast and your location are matching the same time zone. Action interface is using Instant as timestamps which enables you translating to any time zone. This allows you with an easy conversion to query also foreign forecast locations.

Examples are showing

  • how to translate Instant to ZonedDateTime objects and
  • how to translate ZonedDateTime to Instant objects

Example

Example is based on Forecast.Solar service without any registration. Exchange the configuration data in thing file and you're ready to go.

Thing file

Bridge solarforecast:fs-site:homeSite   "ForecastSolar Home" [ location="54.321,8.976"] {
         Thing fs-plane homeSouthWest   "ForecastSolar Home South-West" [ refreshInterval=15, azimuth=45, declination=35, kwp=5.5]
         Thing fs-plane homeNorthEast   "ForecastSolar Home North-East" [ refreshInterval=15, azimuth=-145, declination=35, kwp=4.425]
}

Items file

// channel items
Number:Power            ForecastSolarHome_Actual_Power      "Power prediction for this moment"              { channel="solarforecast:fs-site:homeSite:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
Number:Energy           ForecastSolarHome_Actual            "Today's forecast till now"                     { channel="solarforecast:fs-site:homeSite:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Remaining         "Today's remaining forecast till sunset"        { channel="solarforecast:fs-site:homeSite:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Today             "Today's total energy forecast"                 { channel="solarforecast:fs-site:homeSite:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }   
// calculated by rule                                                                        
Number:Energy           ForecastSolarHome_Tomorrow          "Tomorrow's total energy forecast"              { stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           

Number:Power            ForecastSolarHome_Actual_Power_NE   "NE Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeNorthEast:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }   
Number:Energy           ForecastSolarHome_Actual_NE         "NE Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Remaining_NE      "NE Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Today_NE          "NE Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeNorthEast:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           

Number:Power            ForecastSolarHome_Actual_Power_SW   "SW Power prediction for this moment"           { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-actual", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
Number:Energy           ForecastSolarHome_Actual_SW         "SW Today's forecast till now"                  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-actual", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Remaining_SW      "SW Today's remaining forecast till sunset"     { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-remain", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Energy           ForecastSolarHome_Today_SW          "SW Today's total energy forecast"              { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-today", stateDescription=" "[ pattern="%.1f %unit%" ], unit="kWh" }                                                                           

// estimation items
Group influxdb
Number:Power            ForecastSolarHome_Power_Estimate        "Power estimations"                         (influxdb)  { channel="solarforecast:fs-site:homeSite:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
Number:Energy           ForecastSolarHome_Energy_Estimate       "Energy estimations"                        (influxdb)  { channel="solarforecast:fs-site:homeSite:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           
Number:Power            ForecastSolarHome_Power_Estimate_SW     "SW Power estimations"                      (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:power-estimate", stateDescription=" "[ pattern="%.0f %unit%" ], unit="W" }                                                                           
Number:Energy           ForecastSolarHome_Energy_Estimate_SW    "SW Energy estimations"                     (influxdb)  { channel="solarforecast:fs-plane:homeSite:homeSouthWest:energy-estimate", stateDescription=" "[ pattern="%.3f %unit%" ], unit="kWh" }                                                                           

Persistence file

// persistence strategies have a name and definition and are referred to in the "Items" section
Strategies {
        everyHour : "0 0 * * * ?"
        everyDay  : "0 0 0 * * ?"
}

/*
 * Each line in this section defines for which Item(s) which strategy(ies) should be applied.
 * You can list single items, use "*" for all items or "groupitem*" for all members of a group
 * Item (excl. the group Item itself).
 */
Items {
        influxdb* : strategy = restoreOnStartup, forecast
}

Actions rule

rule "Tomorrow Forecast Calculation"
    when
        Item ForecastSolarHome_Today received update
    then 
        val solarforecastActions = getActions("solarforecast","solarforecast:fs-site:homeSite")
        val energyState = solarforecastActions.getDay(LocalDate.now.plusDays(1))
        logInfo("SF Tests","{}",energyState)
        ForecastSolarHome_Tomorrow.postUpdate(energyState) 
end

Handle exceptions

import java.time.temporal.ChronoUnit

rule "Exception Handling"
    when
        System started
    then 
        val solcastActions = getActions("solarforecast","solarforecast:sc-site:3cadcde4dc")
        try {
            val forecast = solcastActions.getPower(solcastActions.getForecastEnd.plus(30,ChronoUnit.MINUTES))
        } catch(RuntimeException e) {
            logError("Exception","Handle {}",e.getMessage)
        }
end

Actions rule with Arguments

import java.time.temporal.ChronoUnit

rule "Solcast Actions"
    when
        Time cron "0 0 23 * * ?" // trigger whatever you like
    then 
        // Query forecast via Actions
        val solarforecastActions = getActions("solarforecast","solarforecast:sc-site:homeSite")
        val startTimestamp = Instant.now
        val endTimestamp = Instant.now.plus(6, ChronoUnit.DAYS)
        val sixDayForecast = solarforecastActions.getEnergy(startTimestamp,endTimestamp)
        logInfo("SF Tests","Forecast Average 6 days "+ sixDayForecast)
        val sixDayOptimistic = solarforecastActions.getEnergy(startTimestamp,endTimestamp, "optimistic")
        logInfo("SF Tests","Forecast Optimist 6 days "+ sixDayOptimistic)
        val sixDayPessimistic = solarforecastActions.getEnergy(startTimestamp,endTimestamp, "pessimistic")
        logInfo("SF Tests","Forecast Pessimist 6 days "+ sixDayPessimistic)

        // Query forecast TimesSeries Items via historicStata
        val energyAverage =  (Solcast_Site_Average_Energyestimate.historicState(now.plusDays(1)).state as Number)
        logInfo("SF Tests","Average energy {}",energyAverage)
        val energyOptimistic =  (Solcast_Site_Optimistic_Energyestimate.historicState(now.plusDays(1)).state as Number)
        logInfo("SF Tests","Optimist energy {}",energyOptimistic)
end

Solcast manual update

rule "Daylight End"
    when
        Channel "astro:sun:local:daylight#event" triggered END
    then
        PV_Daytime.postUpdate(OFF) // switch item holding daytime state        
end

rule "Daylight Start"
    when
        Channel "astro:sun:local:daylight#event" triggered START
    then
        PV_Daytime.postUpdate(ON)           
end

rule "Solacast Updates"
    when 
        Thing "solarforecast:sc-plane:homeSouthWest" changed to INITIALIZING or // Thing status changed to INITIALIZING
        Time cron "0 30 0/2 ? * * *" // every 2 hours at minute 30 
    then
        if(PV_Daytime.state == ON) {
            val solarforecastActions = getActions("solarforecast","solarforecast:sc-plane:homeSouthWest")
            solarforecastActions.triggerUpdate
        } // reject updates during night
end

oh3-solarforecast-drops's People

Contributors

weymann avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

oh3-solarforecast-drops's Issues

Site power estimate replaced by plane power estimate on midnight

After midnight, past day's power estimation is significantly changed, replaced by a plane's forecast.
power-estimate (overall estimation of bridge thing) becomes the timeseries of a single plane's estimation, in my case the 1st of 2 planes in my fs-site thing. The planes keep their earlier information, no changes. This results in bridge's site estimation not presenting the planes' sum, bridge's estimate equals one of the plane's estimates.
As an effect, bridge's energy-estimate is calculated to a false value, roughly half the original value in case of about same production of both planes.
The estimation is working correctly over the day. First item update after midnight lets past day's estimation change. Timeseries of power and energy estimations are persisted and shown in any past day's view. All past site estimations for power and energy are wrong.

I understand that persisting a forecast might not be of high value. Yet, the significant value change is wrong and invalidates the persisted data.

openHAB 4.2.0.M2
binding version 4.2.0 (OH4.2-1.1.1.rc), also saw this in earlier version.

getPower action not working

Hi, I am running your great binding on OH4.2, installed from Marketplace. Using Solcast service with two sc-planes.
And I am having trouble with getPower action used in rule:

"Script execution of rule with UID 'solcast-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.binding.solarforecast.internal.actions.SolarForecastActions.getPower(org.openhab.core.thing.binding.ThingActions,java.time.Instant,java.lang.String[]) on instance: null in solcast".

val solarforecastActions = getActions("solarforecast","solarforecast:sc-site:homeSite")     // this is definitely OK 
val granularityInMinutes = 30
var observedDateTime = LocalDateTime.now
val endDT = observedDateTime.plusDays(1)
endDT = endDT.minusMinutes(30)
  
var influx_content = ""
while (observedDateTime.isBefore(endDT)) {
     val powerAvg = solarforecastActions.getPower(observedDateTime).toString().replace(' kW', '')
     influx_content = influx_content + "solcast_power_estimate   value=" + powerAvg + " " + epoch +"\n"
     observedDateTime = observedDateTime.plusMinutes(granularityInMinutes)
}

I was using same code on OH3 and it works. I am using very similar script with getDay action with no problem on OH4.2.
Can you help me pls? Thanks.

Feature request: suspend API calls over night

Thanks for the great work on the binding. Saves me a ton of JSON fiddling! ;)

Would it be possible to define a period of no polling? So you could spare precious API calls over night, when there's no need to update information? Possible having the chance to either:

  1. define a switch-item, which tells the binding to do API-Calls or suspend them
  2. define Astro-binding items/channels which trigger local dusk/dawn periods?

ad 1
I could then use whatever means to turn that item ON or OFF (possibly using Astro-binding)

ad 2
I could then just use a fully configured Astro-binding to use for suspending

how to handle mutiple strings

first of all many thanks for providing your binding.
i actually have some js-script which do the job but would prefer to handle it by a binding
i do have 2 roofs with different azimute and peak power.
according to the description this would require to define an additional site.

the binding would support to create multiple sites but it would not allow to accumulate the data for the multiple sites reflecting actually a single site. It would be interesting to discuss how to us the binding but still get the summed forecast of my roofs at one site.

thx
peter

using persistence strategy forecast and forecast item state

Hello,

I tried this binding with solar forecast and it's working well. But I have two problems. I wonder if this might be a misconfiguration or a problem with the binding:

  • forecast items receives timeseries data on a regular bases. From oh logs I can see that the timeseries is processed ok. I can access the values via thing actions as described without problem. I'm using JDBC with mariadb backend. I created a group with persistence strategy forecast and the fc item is member of that group. I would expect that a table is created persisting the forecast values. But there is nothing - not even a table. Do you have any idea what could be wrong? I am on openhab 4.1.2.
  • from release notes of openhab 4.1 I have learned that items processing timeseries iterate through the values provided switching to the predicted states at the right time. This does not happen. Item state is null all the time. Any idea what could be wrong?

In case you need additional information let me know.

Thanks and best regards
humarf

Here is what I see in the logs:

15:45:03.319 [INFO ] [openhab.event.ItemTimeSeriesEvent ] - Item 'pv_gesamt_estimate_energy' shall process timeseries [Entry[timestamp=2024-04-30T03:35:32Z, state=0 kWh], Entry[timestamp=2024-04-30T04:00:00Z, state=0.005 kWh], Entry[timestamp=2024-04-30T05:00:00Z, state=0.128 kWh], Entry[timestamp=2024-04-30T06:00:00Z, state=0.719 kWh], Entry[timestamp=2024-04-30T07:00:00Z, state=2.719 kWh], Entry[timestamp=2024-04-30T08:00:00Z, state=6.9670000000000005 kWh], Entry[timestamp=2024-04-30T09:00:00Z, state=12.692 kWh], Entry[timestamp=2024-04-30T10:00:00Z, state=18.355 kWh], Entry[timestamp=2024-04-30T11:00:00Z, state=23.318 kWh], Entry[timestamp=2024-04-30T12:00:00Z, state=27.776 kWh], Entry[timestamp=2024-04-30T13:00:00Z, state=31.552 kWh], Entry[timestamp=2024-04-30T14:00:00Z, state=34.037 kWh], Entry[timestamp=2024-04-30T15:00:00Z, state=35.276 kWh], Entry[timestamp=2024-04-30T16:00:00Z, state=35.807 kWh], Entry[timestamp=2024-04-30T17:00:00Z, state=36.018 kWh], Entry[timestamp=2024-04-30T18:00:00Z, state=36.076 kWh], Entry[timestamp=2024-04-30T18:31:33Z, state=36.08 kWh], Entry[timestamp=2024-05-01T03:33:35Z, state=0 kWh], Entry[timestamp=2024-05-01T04:00:00Z, state=0.011 kWh], Entry[timestamp=2024-05-01T05:00:00Z, state=0.267 kWh], Entry[timestamp=2024-05-01T06:00:00Z, state=1.208 kWh], Entry[timestamp=2024-05-01T07:00:00Z, state=3.324 kWh], Entry[timestamp=2024-05-01T08:00:00Z, state=6.819 kWh], Entry[timestamp=2024-05-01T09:00:00Z, state=11.444 kWh], Entry[timestamp=2024-05-01T10:00:00Z, state=16.639 kWh], Entry[timestamp=2024-05-01T11:00:00Z, state=21.741999999999997 kWh], Entry[timestamp=2024-05-01T12:00:00Z, state=26.161 kWh], Entry[timestamp=2024-05-01T13:00:00Z, state=29.506999999999998 kWh], Entry[timestamp=2024-05-01T14:00:00Z, state=31.664 kWh], Entry[timestamp=2024-05-01T15:00:00Z, state=32.808 kWh], Entry[timestamp=2024-05-01T16:00:00Z, state=33.325 kWh], Entry[timestamp=2024-05-01T17:00:00Z, state=33.532000000000004 kWh], Entry[timestamp=2024-05-01T18:00:00Z, state=33.59 kWh], Entry[timestamp=2024-05-01T18:33:16Z, state=33.595 kWh]] 15:45:03.322 [INFO ] [nhab.event.ItemTimeSeriesUpdatedEvent] - Item 'pv_gesamt_estimate_energy' updated timeseries [Entry[timestamp=2024-04-30T03:35:32Z, state=0 kWh], Entry[timestamp=2024-04-30T04:00:00Z, state=0.005 kWh], Entry[timestamp=2024-04-30T05:00:00Z, state=0.128 kWh], Entry[timestamp=2024-04-30T06:00:00Z, state=0.719 kWh], Entry[timestamp=2024-04-30T07:00:00Z, state=2.719 kWh], Entry[timestamp=2024-04-30T08:00:00Z, state=6.9670000000000005 kWh], Entry[timestamp=2024-04-30T09:00:00Z, state=12.692 kWh], Entry[timestamp=2024-04-30T10:00:00Z, state=18.355 kWh], Entry[timestamp=2024-04-30T11:00:00Z, state=23.318 kWh], Entry[timestamp=2024-04-30T12:00:00Z, state=27.776 kWh], Entry[timestamp=2024-04-30T13:00:00Z, state=31.552 kWh], Entry[timestamp=2024-04-30T14:00:00Z, state=34.037 kWh], Entry[timestamp=2024-04-30T15:00:00Z, state=35.276 kWh], Entry[timestamp=2024-04-30T16:00:00Z, state=35.807 kWh], Entry[timestamp=2024-04-30T17:00:00Z, state=36.018 kWh], Entry[timestamp=2024-04-30T18:00:00Z, state=36.076 kWh], Entry[timestamp=2024-04-30T18:31:33Z, state=36.08 kWh], Entry[timestamp=2024-05-01T03:33:35Z, state=0 kWh], Entry[timestamp=2024-05-01T04:00:00Z, state=0.011 kWh], Entry[timestamp=2024-05-01T05:00:00Z, state=0.267 kWh], Entry[timestamp=2024-05-01T06:00:00Z, state=1.208 kWh], Entry[timestamp=2024-05-01T07:00:00Z, state=3.324 kWh], Entry[timestamp=2024-05-01T08:00:00Z, state=6.819 kWh], Entry[timestamp=2024-05-01T09:00:00Z, state=11.444 kWh], Entry[timestamp=2024-05-01T10:00:00Z, state=16.639 kWh], Entry[timestamp=2024-05-01T11:00:00Z, state=21.741999999999997 kWh], Entry[timestamp=2024-05-01T12:00:00Z, state=26.161 kWh], Entry[timestamp=2024-05-01T13:00:00Z, state=29.506999999999998 kWh], Entry[timestamp=2024-05-01T14:00:00Z, state=31.664 kWh], Entry[timestamp=2024-05-01T15:00:00Z, state=32.808 kWh], Entry[timestamp=2024-05-01T16:00:00Z, state=33.325 kWh], Entry[timestamp=2024-05-01T17:00:00Z, state=33.532000000000004 kWh], Entry[timestamp=2024-05-01T18:00:00Z, state=33.59 kWh], Entry[timestamp=2024-05-01T18:33:16Z, state=33.595 kWh]]

This is my item configuration:
Number:Energy pv_gesamt_estimate_energy "FC Gesamt Schätzung [%,.1f kWh]" (gForecast) {channel="solarforecast:fs-site:homeSite:energy-estimate", unit="kWh"}

This is my persistence configuration:
`
Items {

gEveryChange* : strategy = everyChange, restoreOnStartup

gEveryUpdate* : strategy = everyUpdate, restoreOnStartup

gHourPersist* : strategy = everyHour, restoreOnStartup

gDayPersist*  : strategy = everyDay, restoreOnStartup

gForecast*    : strategy = restoreOnStartup, forecast

}
`

Sources

Hi Bernd,
would be great if you also could publish the sources of the addon so everyone can contribute.

Thank you,
BR

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.