SolarForecast - PV-Vorhersage an evcc übertragen geht nicht

Begonnen von dieter114, 21 März 2026, 16:36:44

Vorheriges Thema - Nächstes Thema

dieter114

Hallo Zusammen,

im WIKI SolarForecast - Solare Prognose (PV Erzeugung) und Verbrauchersteuerung steht im Abschnitt https://wiki.fhem.de/wiki/SolarForecast_-_Solare_Prognose_(PV_Erzeugung)_und_Verbrauchersteuerung#Praxisbeispiele_und_L%C3%B6sungsans%C3%A4tze_f%C3%BCr_Steuerungen
ein Beispiel wie die SolarForecast-Vorhersagedaten per API von evcc abgerufen werden können.
Wenn ich das wie im WIKI beschrieben mache stürzt evcc ab bzw. läuft nicht hoch.
Ausgangslage: fhem und evcc laufen auf gleichem RPI5.
Der zusätzliche Web-Server:
efine WEBapi FHEMWEB 8089
attr WEBapi csrfToken none
ist eingerichtet. Die UserReadings mit den JSON Daten werden erzeugt und sehen auch irgendwie plausibel aus.
Der evcc-Konfig unter tariffs läßt sich "nur" über die YAML Datei erstellen.
Die Version direkt über die Konfig in der Webseite geht überhaupt nicht.
Hat noch Jemand Erfahrungen damit gesammelt?
LG WDS
RPi II+III+V,OWX,div.1W Module,HM Zisterne,div. CUL, sduino MAPLESDuino(adv), div ESPEasy, div Tasmota, MQTT2Server,WU-Upload,TabletUI,Poolsteuerung mit fhem, Fronius, BYD Solaranlage

grappa24

Hallo Dieter,
bei mir funktioniert die Einbindung der SF Solarprognose in EVCC

solar: # list of pv generation forecast (additive)
  type: custom
  interval: 2m   
  forecast:
    source: http
    uri:  http://192.168.178.44:8086/fhem?cmd=%7BReadingsVal%28%27solErtrag%27%2C%27jsonReading%27%2C%27%27%29%7D&XHR=1
Gruß, Dieter
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

grappa24

#2
oder meinst du die Konfiguration für den neuen UI-Konfig-Editor?  DAMIT habe ich nun auch Schwierigkeiten, bin aber dran.

## PV production forecast
tariff: solar
forecast: # hourly solar production forecast (W)
  source: js
  script: |
    var rates = [];
    var now = new Date();
    for (var i = 0; i < 48; i++) {
      var start = new Date(now.getTime() + i * 3600000);
      rates.push({
        start: start.toISOString(),
        end: new Date(start.getTime() + 3600000).toISOString(),
        value: 2000 // W
      });
    }
    JSON.stringify(rates);

## HTTP example (uncomment to use)

#forecast: # hourly solar production forecast (W)
#  source: http
#  uri: https://example.com/api/solar
#  jq: |
#    map({
#      "start": .start,
#      "end": .end,
#      "value": .power
#    }) | tostring
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

grappa24

#3
Zitat von: grappa24 am 26 März 2026, 00:03:53bei mir funktioniert die Einbindung der SF Solarprognose in EVCC
wie gesagt, zunächst auch (nur) mit der evcc.yaml.

Aber mir ist da noch etwas eingefallen, ich hab die "Befüllung" des jsonReading in ein sub ausgelagert:

Definition als userReading:
jsonReading:nextCycletime.* { main::forecast_json() }
Hier die sub:
#####################################################################################################################
#  Wandelt die Forecast-Werte in JSON und ins UTC-Zeitformat um, zur Verwendung durch evcc
#  Für die Kommunikation wird der Webserver WEBapi benutzt (8086, kein HTTPS, kein csrfToken)
#  evcc.yaml siehe tariffs: solar: ...
#  uri: http://192.168.178.44:8086/fhem?cmd=%7BReadingsVal%28%27[b]<SF-Device>[/b]%27%2C%27jsonReading%27%2C%27%27%29%7D&XHR=1
#####################################################################################################################

sub forecast_json {

    my $hour = 0;
    my @output;

    # Parser für Datum mit CET/CEST
    my $parser = DateTime::Format::Strptime->new(
        pattern   => '%Y-%m-%d %H:%M:%S',
        time_zone => 'Europe/Berlin',
    );

    # Alle NextHour-Daten durchsuchen
    while ($hour < 100) {
        my $hour_str = sprintf('NextHour%02d', $hour);
        my $start_str = FHEM::SolarForecast::NexthoursVal ('solErtrag', $hour_str, 'starttime', 'na');
        my $pvfc = FHEM::SolarForecast::NexthoursVal ('solErtrag', $hour_str, 'pvfc', 'na');

        # Schleife beenden, wenn keine Werte mehr vorhanden sind
        last if $start_str eq 'na' or $pvfc eq 'na';

        # parse und konvertiere Zeit
        my $start_dt = $parser->parse_datetime($start_str);
        my $end_dt   = $start_dt->clone->add(hours => 1);

        # nach UTC konvertieren
        $start_dt->set_time_zone('UTC');
        $end_dt->set_time_zone('UTC');

        push @output, {
            start => $start_dt->iso8601() . 'Z',
            end   => $end_dt->iso8601() . 'Z',
            value => 0 + $pvfc,
        };
       
        $hour++;
    } 

    # Ausgabe als JSON
    my $json = JSON->new->utf8->pretty->encode(\@output);
    return $json;
}
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye