FHEM Forum

FHEM => Automatisierung => Thema gestartet von: freetz am 11 August 2021, 09:05:22

Titel: Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 11 August 2021, 09:05:22
Hallo zusammen und erst einmal ein großes Danke an @herrmannj für dieses klasse Modul! Das wird mir in Zukunft so einige Geräteabfragen vereinfachen.

Im Moment stehe ich vor einem etwas komplexeren Problem:
Ich möchte für die vorhersagebasierte Ladung der Batterie meiner Photovoltaik-Anlage die Solareinstrahlung von SolCast abrufen. Das Problem dabei ist, dass bei den Vorhersagedaten generell die nächsten 168 Halbstundenvorhersagen kommen, das entsprechende Datum wird dann auf untergeordneter Ebene mitgeliefert. Verkürzt sieht das Ganze dann so aus:
{
  "forecasts": [
    {
      "pv_estimate": "9.5",
      "pv_estimate10": "6",
      "pv_estimate90": "13.8",
      "period_end": "2018-01-01T01:00:00.00000Z",
      "period": "PT30M"
    },
    {
      "pv_estimate": "10",
      "pv_estimate10": "8",
      "pv_estimate90": "12",
      "period_end": "2018-01-01T12:30:00.00000Z",
      "period": "PT30M"
    }
  ]
}

Für die Vorhersage für den heutigen Solarertrag müsste ich also $.forecasts[0], $.forecasts[1] bis $.forecasts
Für die Tagessumme müssten dann alle Werte des Tages aus pv_estimate (Werte in kWh) addiert werden und durch (60 / period) geteilt werden, weil die Werte nicht stündlich, sondern halbstündlich (bei kostenpflichtigen Paketen auch in noch geringeren Abständen) ausgegeben werden.

Am Ende sollte dann ein (halb-)stündlich aktualisierter Wert stehen, der den voraussichtlich noch zu erwartenden Solarertrag ausgibt. Anhand dessen könnte man dann die Ladung der Batterie oder das Einschalten anderer Verbraucher steuern.

Meine Frage ist jetzt, ob sich das irgendwie mit JsonMod umsetzen lässt, oder ob ich dafür doch ein eigenes Modul stricken muss. Momentan habe ich ein selbstgestricktes Python-Programm am Laufen, das das oben genannte macht, vielleicht hilft das noch zum Verständnis:
https://github.com/fredlcore/SolarEdge_Predictive_Charging/

Da ich sonst aber alles mit FHEM steuere, würde ich mich sehr freuen, wenn ich diese Funktionalität nicht auslagern müsste.

Danke schon einmal für jeden Hinweis!
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: frober am 11 August 2021, 09:30:22
Du kannst Python direkt mit Fhem nutzen, vielleicht ist das eine Alternative
https://forum.fhem.de/index.php/topic,63816.60.html (https://forum.fhem.de/index.php/topic,63816.60.html)
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 11 August 2021, 10:05:14
Ah, das ist schon mal ein guter Hinweis! Aber "nativ" wäre natürlich noch schöner :).
Ich habe jetzt mit
multi(jsonPath('$.forecasts[*]'), concat('pv_estimate_', index()), property('pv_estimate'));eine Liste aller über 300 Einträge mit den jeweiligen Ertragsvoraussagen bekommen.
Wenn ich hier jetzt statt index() den Inhalt von period_end einsetzen könnte, dann ließen sich die Readings schon mal nach dem jeweiligen Tag filtern, und dann wäre das mit der Summierung auch schon mal einen guten Schritt einfacher...

EDIT: jsonPath('$.forecasts[index()].pv_period') anstelle von index() gibt leider einen Syntax Error
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 11 August 2021, 10:23:56
Yay, mit
multi(jsonPath('$.forecasts[*]'), concat('pv_estimate_', property('period_end')), property('pv_estimate'));hat's geklappt - sehr schön :).
Ich denke, jetzt komme ich weiter, werde das Ergebnis dann aber gerne hier bei Interesse noch posten...
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: MadMax-FHEM am 11 August 2021, 11:28:59
Du kannst Python direkt mit Fhem nutzen, vielleicht ist das eine Alternative
https://forum.fhem.de/index.php/topic,63816.60.html (https://forum.fhem.de/index.php/topic,63816.60.html)

Ah, das ist schon mal ein guter Hinweis! Aber "nativ" wäre natürlich noch schöner :).

Evtl. eine (weitere) Alternative: https://forum.fhem.de/index.php/topic,115230.msg1094931.html#msg1094931

Gruß, Joachim
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 11 August 2021, 12:33:56
Sehr cool! ich bin mit Python an sich aber noch am Fremdeln (auch, weil ich seit über 20 Jahren Perl als erste Wahl beim Programmieren verwende), insofern würde ich erst einmal schauen, ob ich es auch mit "Bordmitteln" hinbekomme. Aber als Backup ist das eine sehr coole Option!
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 11 August 2021, 23:57:13
So sieht die (für diesen Teil) fertige Lösung aus, für alle, die es interessiert:
attr SolCast readingList multi(jsonPath('$.forecasts[*]'), concat('pv_estimate_', property('period_end')), property('pv_estimate'));;\
single(jsonPath('$.forecasts[0].period'),'period','');;
attr SolCast userReadings forecast_today {\
  my $total=0;;\
  my $period = ReadingsVal("SolCast", "period", 0);;\
  $period =~ s/.*(\d\d).*/$1/;;\
  my ($date, $time) = split(" ", FmtDateTime(time()));;\
  my $hash = $defs{$NAME};;\
  my $readings = $hash->{READINGS};;\
  foreach my $reading ( keys %{$readings} ) {\
    if ($reading =~ /$date/) {\
      my $val = ReadingsVal($NAME,$reading,0);;\
      $total += $val/(60/$period);;\
    }\
  }\
  return $total;;\
}
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: xerion am 13 August 2021, 08:43:56
Bzgl. Solarprognose kann ich dir dieses Modul auch empfehlen, dann brauchst du nicht alles selber machen, was es schon gibt ;-)
https://forum.fhem.de/index.php/topic,117864.1155.html
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 13 August 2021, 09:09:53
Danke, ich glaube, da war ich bei meiner Recherche auch schon darauf gestoßen, aber das scheint alles auf DWD-Daten zu basieren. Der Punkt bei mir ist, dass die DWD-Daten im Tagesverlauf nur alle sechs Stunden aktualisiert werden, SolCast hingegen aktualisiert alle 30 Minuten. So sind die Werte für den gesamten Tag am Morgen noch relativ identisch, aber zum Nachmittag hin kommen doch Abweichungen von bis zu 20 Prozent zustande (bei mir zumindest). Das ist gerade für mein Anwendungsziel, wo ich die Batterie so spät wie möglich am Tag laden möchte, ein no-go, so dass ich DWD nur als Backup einsetzen würde, falls SolCast irgendwann auch für kleinere Installationen kostenpflichtig wird.

Da sich die Tagesprognose für SolCast dank JsonMod mit den oben genannten wenigen Zeilen in FHEM einbinden lässt, war der Aufwand zum Glück auch überschaubar. Vielleicht wäre das umgekehrt etwas, was die Modul-Maintainer übernehmen wollen würden, um mehrere Datenbasen anbieten zu können.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: xerion am 13 September 2021, 15:55:29
Es wäre vielleicht ganz hilfreich wenn du deine komplette Definition zur Verfügung stellen könntest damit haben es dann die nächsten Einsteiger einfacher.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 13 September 2021, 20:08:58
Was meinst Du mit "kompletter Definition"? Welche DbLogExcludes, interval etc. ich da noch verwende, ist ja von Fall zu Fall unterschiedlich und verwirrt gerade Einsteiger vielleicht dahingehend, was denn nun das Relevante ist. Oder meinst Du alle damit zusammenhängenden Devices (DOIFs, SolCast Reporting, Max Eco Schalter zum vorzeitigen Batterieladen, Wechselrichter-Batterie-Anbindung)? Auch das ist ja am Ende ziemlich speziell auf meine Situation hier zugeschnitten.
Aber ich teile gerne, was sinnvoll erscheint...
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: xerion am 14 September 2021, 08:05:57
Als grundsätzlich meinte ich die defmod von dem JsonMod, das würde ja schon helfen wie ein Anfänger es definieren muss bzgl. der API. Dann wäre natürlich interessant wie du mit den den ganzen Daten (Readings)  weiter umgehst. Was berechnest du wie, auch wenn es auf dein System zugeschnitten hilft es m.E. um das System zu verstehen und sich ggf. selber davon Use Cases ableiten zu können.
Es gibt auch "halbe" Beispiele" über HTTPMOD. Du hast dich ja jetzt für JsonMod entschieden und bestimmt einen Grund dafür gehabt.

gerade im Bezug auf den Titel des Threads "Anwendungsbeispiel" fehlt mir der Kontext um aus diesen Einträgen ein komplettes Anwendungsbeispiel ableiten zu können.
Bitte nicht falsch verstehen, aber mit den Informationen könnte man kein Anwendungsbeispiel für SolCast ableiten. Hier geht es eher darum wie man ein usereading in JsonMod definiert.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 14 September 2021, 08:41:14
Ich weiß nicht, ob das defmod wirklich den großen Unterschied macht, denn das besteht ja nur aus der URL, aber bitte:
defmod SolCast JsonMod https://api.solcast.com.au/rooftop_sites/xxx/forecasts?format=json&api_key=yyyWobei xxx durch die Site-ID und yyy durch den API Key ersetzt werden muss. Wer dies nicht direkt im Device speichern möchte, findet hier Alternativen:
https://forum.fhem.de/index.php/topic,109398.0.html

Wie man mit den Readings umgeht, ist ja eben sehr auf den Anwendungskontext zugeschnitten, das userReading "forecast_today" gibt zurück, wie viel prognostizierte Sonnenenergie für den Tag noch erwartet wird. Die Info kann mir schon reichen, wenn ich einfach nur Graphen pflegen will, ich kann damit die Ladung meines E-Autos aktivieren oder wie in meinem Fall das Aufladen des PV-Speichers zu einem bestimmten Zeitpunkt starten.

Insofern entspricht der Titel exakt dem, was das userReading macht: Es ruft über JsonMod die SolCast Solar-Vorhersage ab, und stellt diese für weitere Zwecke zur Verfügung, allerdings kumuliert für den Tag und nicht halbstundenweise, wie die Daten "roh" ankommen. Insofern ist es schon mehr, als nur ein userReading in JsonMod.

Im Endeffekt ist es so, wie bei Proplanta oder einem anderen Wetter-Modul auch. Da gibt es ja ebenfalls viele Einsatzmöglichkeiten, die sehr unterschiedlich ausfallen können, aber auch der Wert alleine (insbesondere, wenn er wie hier als kumuliertem Tageswert nicht direkt abrufbar ist) ist an sich schon aussagekräftig. Alles weitere, was ich damit mache, sind verschiedene DOIFs die basierend auf diesem Wert Aktionen starten. Da gibt es schon sehr viele, sehr gute Tutorials, als dass ich da noch etwas Sinnvolles beitragen könnte.

JsonMod habe ich gegenüber HTTPMOD bevorzugt, weil ich Readings generieren muss, deren Bezeichnung aus abgerufenen Werten bestehen und die dann wiederum einen anderen abgerufenen Wert zugewiesen bekommen. Konkret: Der Zeitstempel eines Wertes wird Teil des Namens des Readings, der eigentliche Solarertrag dann der Wert des Readings, und das für alle Einträge des Tages.
Kann gut sein, dass man das in HTTPMOD (was ich sonst auch gerne verwende) auch irgendwie hinbekommen hätte, aber so ist es mit einer attr-Zeile möglich, die Readings in die richtige Form zu bekommen. Das eigentliche userReading würde mit HTTPMOD genau so funktionieren, wenn man damit eine JSON-Struktur abgerufen und entsprechend umbenannt bekommt.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: xerion am 14 September 2021, 10:57:08
Danke für deine ausführliche Rückmeldung. Ich habe das jetzt mal mit den Informationen aus diesem Thread versucht aufzubauen und bekomme bei den userReading immer folgenden Fehler:

Error evaluating SolCast userReading forecast_today: Experimental aliasing via reference not enabled at (eval 233678) line 2.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: xerion am 14 September 2021, 11:01:24
Fehler gefunden, leider Copy&Paste Fehler, ein / war noch versteckt ;-)
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 14 September 2021, 11:11:42
Prima, das freut mich - vielleicht mache ich für die Batteriesteuerung mal einen eigenen Thread auf, wenn es dafür Interesse gibt, das würde nämlich hier wirklich nicht mehr zum Topic passen, da das dann über ModbusAttr läuft.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: ansgru am 17 Oktober 2021, 10:55:47
Danke dir freetz für deine Arbeit! Ich habe diese etwas weiterentwickelt und zusätzlich noch ein UserReading für morgen erstellt sowie eine Funktion, welche bei jedem Aufruf die aktuellen Prognosewerte in einen dblog schreibt. Historische Werte werden dabei belassen, es werden nur die abgerufenen Werte überschrieben. Hintergrund: so kann ich mir einen Graphen plotten der mir eine Vorhersage liefert, aber auch einen Rückblick damit ich schauen kann, wie gut die Prognose stimmt. Das UserReading für morgen brauche ich um z.B. am Abend vorher gewisse Grossverbraucher mit dem günstigen Nachttarif laufen lassen zu können falls der prognostizierte Solarstrom nicht reichen sollte.

Hier das UserReading:

forecast_today {
my $total = 0;
my $period = ReadingsVal("SolCast", "period", 0);
$period =~ s/.*(\d\d).*/$1/;
my ($date, $time) = split(" ", FmtDateTime(time()));
my $hash = $defs{$NAME};
my $readings = $hash->{READINGS};
foreach my $reading ( keys %{$readings} ) {
if ($reading =~ /$date/) {
my $val = ReadingsVal($NAME,$reading,0);
$total += $val/(60/$period);
}
}
return $total;
},
forecast_tomorrow {
use Time::Piece ();
use Time::Seconds;

my $total = 0;
my $period = ReadingsVal("SolCast", "period", 0);
$period =~ s/.*(\d\d).*/$1/;
my ($date, $time) = split(" ", FmtDateTime(time()));
my $date = Time::Piece->strptime($date, '%Y-%m-%d');
$date += ONE_DAY;
$date = $date->strftime('%Y-%m-%d');
my $hash = $defs{"SolCast"};
my $readings = $hash->{READINGS};
foreach my $reading (keys %{$readings}) {
if ($reading =~ /$date/) {
my $val = ReadingsVal("SolCast", $reading, 0);
$total += $val/(60/$period);
}
}
return $total;
}

Und hier die Funktion um die Vorhersage im dblog zu speichern (gehört in MyUtils):

# Braucht 3 Argumente: $name = Name des "Solcast" Devices, $dblog und $dbrep Namen der dblog/dbrep Devices. Bei jedem Aufruf wird der Forecast für morgen sowie alle aktuellen Prognosewerte gespeichert. Die Prognosewerte werden dabei überschrieben, alte Werte bleiben bestehen
sub forecast_in_DB_speichern($$$) {
my ( $name, $dblog, $dbrep ) = @_;
my $val = ReadingsVal($name, "forecast_tomorrow", 0);
my $time = strftime('%Y-%m-%d %H:%M:%S', localtime(time + 86400));
fhem("set ".$dblog." addCacheLine $time|$name|JSONMOD|forecast|forecast|$val");
my %hash = %{$defs{$name}{READINGS}};
my @pv_estimates = sort grep /pv_estimate/, keys %hash;
# Max/Min Forecast Zeitpunkt ermitteln
$pv_estimates[-1] =~ m/pv_estimate_(.*)/;
my $max = str2time($1);
$pv_estimates[0] =~ m/pv_estimate_(.*)/;
my $min = str2time($1);
# Alle alten Werte löschen die aktualisiert werden sollen
fhem("set ".$dbrep." sqlCmd DELETE FROM `history` WHERE DEVICE = '".$name."' AND `TIMESTAMP` >= FROM_UNIXTIME(".$min.") AND `TIMESTAMP` <= FROM_UNIXTIME(".$max.")");

foreach my $reading (@pv_estimates) {
$reading =~ m/pv_estimate_(.*)/;
$time = strftime('%Y-%m-%d %H:%M:%S', localtime(str2time($1)));
$val = ReadingsVal($name, $reading, 0) * 1000;
fhem("set ".$dblog." addCacheLine $time|$name|JSONMOD|pv_estimate|pv_estimate|$val");
}
}

Die eigentliche Speicherung erfolgt dann in einem at:

defmod at_SolCast_Prognose_speichern at *22:00 {forecast_in_DB_speichern('SolCast','dblog','DB_Bereinigung_Kostal')}
Prognosen siehe Anhang. Es besteht noch Optimierungsbedarf, im Moment habe ich alle meine Module (O, S & W) zusammengefasst zu einer Anlage (Südausrichtung). Wenn ich Zeit und Lust habe, splitte ich das auf 3 Anlagen mit der korrekten Ausrichtung und Neigung und aktualisiere dann meinen Code. Was mir auch schon aufgefallen ist: Nebel/"grauer Himmel" wird nicht richtig prognostiziert, so ist z.B. bei uns im Moment Hochnebel und der PV Ertrag entsprechend gering, das spiegelt sich aber nicht in der SolCast Prognose wieder (siehe auch 10. Oktober, das war auch so ein Tag wo bis am Mittag Hochnebel herrschte). Die DWD Werte kann ich leider nicht benutzen da keine Station bei mir in der Nähe ist.

Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: DS_Starter am 25 Oktober 2021, 18:07:15
Hallo zusammen,

ich bin zufällig auf diesen Thread gestoßen.
Nur als Info ... ich hatte ursprünglich noch vor SolCast als weitere Datenquelle zu DWD in das SolarForecast Modul zu integrieren.
Mir war nur nicht klar ob es diesen Bedarf überhaupt gibt.

Meines Wissens können kostenfrei nur ca. 20 Abfragen bei SolCast pro Tag getätigt werden oder bin ich im Irrtum ?

Da das Modul Solarforecast ohne Datenbank arbeitet, benötigt es keine DbLog Definition. Dadurch ist es für die breite Masse der Nicht-DB User zugänglich was ein wesentliches Kriterium bei der Erstellung des Moduls war.
Vielleicht schaffe ich die Integration es über das Winterhalbjahr.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 25 Oktober 2021, 20:49:30
Es gibt da widersprüchliche Angaben, ich habe 50 Abfragen pro Tag, das reicht dicke, weil öfter als alle 30 Minuten eh' nicht aktualisiert wird, d.h. mit 48 käme man aus. Aber selbst die brauche ich nicht, weil die Sonne ja nicht 24 Stunden scheint. Selbst mit 20 Abfragen käme man im Sommer gut durch, wenn man einmal pro Stunde abfragt. Ich finde die Werte deutlich genauer als DWD, das ich vorher im Einsatz hatte.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: DS_Starter am 25 Oktober 2021, 20:59:30
Zitat
... weil die Sonne ja nicht 24 Stunden scheint
Ja, stimmt natürlich. Es reicht ja von Sonnenauf- bis untergang. Die Angaben ziehe ich z.Z. aus dem DWD Device.
Benötigt man zur Abschätzung des Ertrages bei Verwendung von SolCast auch noch die Angaben zu Bewölkung bzw. Regen aus DWD oder sind diese Faktoren bei SolarCast schon mit berücksichtigt ?
Ich vermute SolCast liefert auch nur die Globalstrahlung ?

Meine Idee ist die Strahlungswerte von SolCast zu holen und natürlich noch die Bewölkung / Niederschlag als reduzierende Faktoren einzubeziehen wie es jetzt auch mit dem DWD Device funktioniert.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 25 Oktober 2021, 21:11:08
SolCast hat alles schon mit drin und die Ergebnisse sind wie gesagt deutlich präziser, weil man nicht auf die nächstgelegene DWD-Station angewiesen ist. Am besten, Du schaust Dir die API direkt auf deren Seiten mal an, dann wird es am deutlichsten.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: ansgru am 01 November 2021, 21:27:42
@freetz: mich würde wunder nehmen, wie du die Präzision der SolCast Vorhersagen ermittelst? Schaust du am Ende des Tages wie gross die Abweichung ist? Oder im Tagesverlauf? Wie oft frägst du die Werte ab?

Als Vergleich: ich lasse einmal am Abend um 21:45 die Prognose abrufen um den morgigen Tag planen zu können. Manchmal sind die Prognosen extrem genau, manchmal liegen sie ordentlich daneben. Das scheint - wie weiter oben von mir bereits geschrieben - immer dann der Fall zu sein, wenn Bewölkung auftritt. Im Anhang habe ich einen Screenshot welcher den tatsächlichen Ertrag (grün) mit dem prognostizierten (gelb) vergleicht (für die letzten 8 Tage, mehr habe ich bisher nicht).
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 01 November 2021, 21:34:07
Wenn Du SolCast selber nutzt, weißt Du ja, dass es da direkt im Backend die Möglichkeit die Vorhersage mit den Estimated Actuals zu vergleichen. Darüber hinaus übermittele ich auch meine vom WR ermittelten Erträge an SolCast, so dass da noch mal eine Optimierung stattfindet. Da sehe ich das dann noch mal genauer.

Und klar, SolCast kann nicht 24h hellsehen, deswegen frage ich die Werte auch alle halbe Stunde ab. Die können sich dann schon mal ändern, so wie beim DWD auch, nur ist SolCast meiner Erfahrung nach da deutlich genauer. Ich merke das ganz konkret daran, dass ich es mit SolCast schaffe, meine Batterie aufgrund der Prognose zum spätmöglichsten Zeitpunkt zu laden und sie dann in den allermeisten Fällen trotzdem noch voll wird. Beim DWD hat das so gut wie nie geklappt.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: ansgru am 02 November 2021, 07:51:22
Ah danke dir, wusste nicht, dass man die tatsächlichen Erträge senden kann. Habe irgendwo gelesen, dass es das Tuning nicht mehr gibt und mich daher gar nie mehr damit beschäftigt. Auf https://articles.solcast.com.au/en/articles/2442084-send-rooftop-site-measurements-via-our-api (https://articles.solcast.com.au/en/articles/2442084-send-rooftop-site-measurements-via-our-api) steht beschrieben, wie's geht.

Meine Frage an dich: hättest du zufälligerweise eine Skript oder FHEM Code wie du die Daten des WRs an SolCast sendest? Hätte jetzt spontan gesagt, ich sende jede Stunde den Stundenertrag etwa in so:

{
my $Stand_jetzt = ReadingsVal("WR","Total_yield",undef);
my $Letzter_Stand = ReadingsVal("WR","Total_yield_Stand_vorher_Wh",undef);
my $Zeitdauer = ReadingsAge("WR","Total_yield_Stand_vorher_Wh",undef);
fhem("setreading WR Total_yield_Stand_vorher_Wh ".$Stand_jetzt);
my $Ertrag_seit_letztem_Stand = $Stand_jetzt - $Letzter_Stand;
# $Zeitdauer in ISO8601 umrechnen und alles an SolCast senden
}

Man könnte auch "oldreadings" verwenden, so ist es aber transparenter für mich...

PS: Ah und einfach damit es irgenwo festgehalten ist falls mal jemand danach suchen sollte: ich habe auch noch mit "Forecast.Solar" rumgespielt (https://forecast.solar/ (https://forecast.solar/)), das taugt nun gar nix, dort wird Tag für Tag ein Ertrag von ca. 9.5kWh +-400W prognostiziert mit keinem erkennbaren Zusammenhang zum tatsächlichen Ertrag.
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: ansgru am 02 November 2021, 08:09:19
Sorry, es ist früh am Morgen ;D Steht ja ganz oben auf der Seite geschrieben, dass es das Tuning nicht mehr gibt und es daher keinen Sinn macht, die Daten zu senden. Jetzt stehe ich gerade völlig auf dem Schlauch. Was genau sendest du denn an SolCast und welchen Effekt hat das?
Titel: Antw:Anwendungsbeispiel JsonMod - SolCast Solar-Vorhersage abrufen
Beitrag von: freetz am 02 November 2021, 17:07:00
Ja, da steht, dass es das Tuning (schon länger) nicht mehr gibt, aber angeblich für Bestandskunden weiter angeboten wird. Ich bin aber erst seit Juli dabei, also nach der Ankündigung von oben und kann sagen, dass bei mir zuerst da stand, dass noch zu wenige Daten da sind, aber nach einiger Zeit gab's dann den grünen Haken (s. Anhang).
Ist aber letztlich für die Fragestellung egal, denn das Tuning soll ja eher so Faktoren wie Verschattung etc. berücksichtigen. Das fällt i.d.R. aber nicht so extrem ins Gewicht, zumindest nicht so deutlich wie die Unterschiede zwischen DWD und SolCast Vorhersage auch ohne Tuning schon waren.

Mit Deinem Schnipsel kann ich jetzt auf die Schnelle nichts anfangen, hier ist meine entsprechende FHEM Config:

defmod SolCast_Reporting HTTPMOD https://api.solcast.com.au/rooftop_sites/... 0
attr SolCast_Reporting bodyDecode utf-8
attr SolCast_Reporting extractAllJSON 1
attr SolCast_Reporting replacement01Mode expression
attr SolCast_Reporting replacement01Regex {{([^}]+)}}
attr SolCast_Reporting replacement01Value ReadingsVal($name, $1, "")
attr SolCast_Reporting room Solar
attr SolCast_Reporting set01Data {"measurement": {"period_end": "{{period_end}}","period": "{{reporting_interval_ISO8601}}","total_power": $val}}
attr SolCast_Reporting set01Name pvProduction
attr SolCast_Reporting setHeader1 Content-Type: application/json
attr SolCast_Reporting setHeader2 Accept: */*
attr SolCast_Reporting stateFormat [SolCast_Reporting:value]
attr SolCast_Reporting userReadings reporting_interval {ReadingsVal($NAME, "reporting_interval", 300)},\
reporting_interval_ISO8601 {return "PT" . ReadingsVal($NAME, "reporting_interval", 300) / 60 . "M"},\
period_end {return strftime('%Y-%m-%dT%H:%M:%SZ', gmtime(time))}\

defmod di_reset_production DOIF ([+[SolCast_Reporting:reporting_interval]]) \
(setreading SolCast_Reporting period_end {strftime('%Y-%m-%dT%H:%M:%SZ', gmtime(time))},\
set SolCast_Reporting pvProduction {(ReadingsVal("BydBattery","avg_production","N/A")/1000)},\
setreading BydBattery avg_production_counter 0,\
setreading BydBattery avg_production 0,\
setreading BydBattery avg_production_sum 0)

Und hier noch der Ausschnitt aus dem userReading des Batterie-Devices "BydBattery":

avg_production_counter:Meter_Power.* {
  ReadingsVal($NAME,"avg_production_counter",0)+1;
},

avg_production_sum:Meter_Power.* {
  ReadingsVal($NAME,"avg_production_sum",0) + ReadingsVal($NAME, "pvProduction",0);
},

avg_production:Meter_Power.* {
  my $aps = ReadingsVal($NAME,"avg_production_sum",0);
  my $apc = ReadingsVal($NAME, "avg_production_counter", 0);
  if ($apc > 0) {
    return sprintf("%.1f", $aps/$apc);
  } else {
    return 0;
  }
}

Ich hoffe, das hilft weiter...