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

grappa24

#4
hier mal meine aktuelle EVCC Konfiguration für die Solar-Vorhersage nach neuen UI-Standard und Zugriff auf das jsonReading aus SF:

tariff: solar
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
  jq: |
    map({
      "start": .start,
      "end": .end,
      "value": .power
    }) | tostring

Die EVCC-Syntax Prüfung läuft durch, es wird aber keine Graphik erzeugt.
Wenn man "tostring" weglässt kommt der Fehler "invalid character 'm' looking for beginning of value".

Der Input (das jsonReading) sieht eigentlich gut aus:
[
   {
      "start" : "2026-03-27T22:00:00Z",
      "end" : "2026-03-27T23:00:00Z",
      "value" : 0
   },
   {
      "value" : 0,
      "start" : "2026-03-27T23:00:00Z",
      "end" : "2026-03-28T00:00:00Z"
   },
   {
      "end" : "2026-03-28T01:00:00Z",
      "start" : "2026-03-28T00:00:00Z",
      "value" : 0
   },
   {
      "value" : 0,
      "start" : "2026-03-28T01:00:00Z",
      "end" : "2026-03-28T02:00:00Z"
   },
   {
      "end" : "2026-03-28T03:00:00Z",
      "start" : "2026-03-28T02:00:00Z",
      "value" : 0
   },
   {
      "value" : 0,
      "start" : "2026-03-28T03:00:00Z",
      "end" : "2026-03-28T04:00:00Z"
   },
   {
      "value" : 0,
      "end" : "2026-03-28T05:00:00Z",
      "start" : "2026-03-28T04:00:00Z"
   },
   {
      "value" : 27,
      "end" : "2026-03-28T06:00:00Z",
      "start" : "2026-03-28T05:00:00Z"
   },

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

DS_Starter

Probiert mal:

tariff:
  solarforecast:
    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
    jq: |
      map({
        "start": .start,
        "end": .end,
        "power": .value
      })

Veränderte Syntax und ohne tostring am Ende.
Falls das neue UI dennoch keine Grafik zeigt, wäre ein Blick in die EVCC-Logs (evcc --log debug) hilfreich – dort sieht man, ob die Daten ankommen und ob das Format akzeptiert wird.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

grappa24

Zitat von: DS_Starter am 28 März 2026, 07:57:54Probiert mal:

tariff:
  solarforecast:
    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
    jq: |
      map({
        "start": .start,
        "end": .end,
        "power": .value
      })

Veränderte Syntax und ohne tostring am Ende.
Falls das neue UI dennoch keine Grafik zeigt, wäre ein Blick in die EVCC-Logs (evcc --log debug) hilfreich – dort sieht man, ob die Daten ankommen und ob das Format akzeptiert wird.
das geht leider auch nicht, werde dann mal einen Blick in die Logs werfen, danke
cannot create tariff type 'custom': decoding failed due to the following error(s): 'tariff' expected type 'api.TariffType', got unconvertible type 'map[string]interface {}'Diese (yaml-)Syntax ist brutal  :'(  noch schlimmer als perl  ;)
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