Leistungsprognose für Wechselrichter

Begonnen von ch.eick, 18 Januar 2021, 08:35:46

Vorheriges Thema - Nächstes Thema

sn0000py

Ah okay die funktion hat sich geändert :D

Wäre es möglich irgendwie eine Möglichkeit zu schaffen (oder gibt es eh schon was wie man das am besten machen kann) das ich meine Werte für Cloud/rain/temperatur einspeisen kann?

Ich verwende ja die DWD DAten für die rad1h werte und den openweathermap für die restlichen Daten (Da die für meinen Standort existieren)
im moment mache ich das ganz primitv so
(Beim openweaterhmap fangen die stündlichen Daten immer bei 1 an für die aktuelle stunde)

  my $openWeatherIdx = 1;
  my $openweatherTS = ReadingsVal($openweather, "hourly_01_dt", "");
  my ($ow_sec,$ow_min,$ow_hour,$ow_mday,$ow_mon,$ow_year,$ow_wday,$ow_yday,$ow_isdst) = localtime($openweatherTS); $ow_year += 1900; $ow_mon += 1;
      for ($i = 7; $i <= 19; $i++) {
        $timestring = time_str2num($year."-".$mon."-".$mday." ".$i.":00:00")+$fc*24*60*60;
        $timestamp  = POSIX::strftime("%Y-%m-%d %H:00:00",localtime($timestring)) ;

$openweatherTS = ReadingsVal($openweather, "hourly_".sprintf("%0.2d", $openWeatherIdx)."_dt", "");
Log 1, $timestamp."  OpenWeatherID : ".$openweatherTS." ... ".$openWeatherIdx." ... ".sprintf("%0.2d", $openWeatherIdx)." ... ".$timestring;
while ((($openweatherTS+30*60) < $timestring) && ($openWeatherIdx < 24)) {
$openWeatherIdx++;
$openweatherTS = ReadingsVal($openweather, "hourly_".sprintf("%0.2d", $openWeatherIdx)."_dt", "");
}
...
if ( (($openweatherTS+20*60) > $timestring) && (($openweatherTS-20*60) < $timestring) && ($openWeatherIdx < 24)) {
Log 1, "Use OpenWeatherID : ".$openWeatherIdx;
            $Solar_Temp           = ReadingsVal($openweather, "hourly_".sprintf("%0.2d", $openWeatherIdx)."_temp" ,0) + 10;
            $Solar_Cloud          = ReadingsVal($openweather, "hourly_".sprintf("%0.2d", $openWeatherIdx)."_cloud" ,0);
$Solar_Rain   = 0;
}



ch.eick

#211
Zitat von: sn0000py am 25 Februar 2021, 11:38:46
Ah okay die funktion hat sich geändert :D

Wäre es möglich irgendwie eine Möglichkeit zu schaffen (oder gibt es eh schon was wie man das am besten machen kann) das ich meine Werte für Cloud/rain/temperatur einspeisen kann?

Ich verwende ja die DWD DAten für die rad1h werte und den openweathermap für die restlichen Daten (Da die für meinen Standort existieren)
im moment mache ich das ganz primitv so
(Beim openweaterhmap fangen die stündlichen Daten immer bei 1 an für die aktuelle stunde)
1.) Das beste wäre, wenn Du einen DUMMY erstellst, der die gültigen Daten beinhaltet.

2.) Oder Du nimmst aus dem DWD Device alle readings raus, die für Dich keine Gültigkeit haben.
   Danach ersetzt Du aus deiner Quelle die readings, mit dem Namen, den sie beim DWD gehabt hätten.

EDIT: DWD mit den nötigsten readings

defmod DWD_Forecast DWD_OpenData
attr DWD_Forecast DbLogExclude .*
ttr DWD_Forecast event-on-change-reading Rad1h,TTT,Neff,R600
attr DWD_Forecast forecastDays 1
attr DWD_Forecast forecastProperties Rad1h,TTT,Neff,R600
attr DWD_Forecast forecastResolution 1
attr DWD_Forecast forecastStation P0178
attr DWD_Forecast group PV Leistungsprognose
attr DWD_Forecast icon weather_rain_fog
attr DWD_Forecast room Informationen->Wetter,Strom->Photovoltaik
attr DWD_Forecast sortby 07
attr DWD_Forecast verbose 0
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#212
Zitat von: sn0000py am 25 Februar 2021, 11:38:46
Ich verwende ja die DWD DAten für die rad1h werte und den openweathermap für die restlichen Daten (Da die für meinen Standort existieren)
Okay, dann beim DWD nur diesen Wert lesen.

Zitat
im moment mache ich das ganz primitv so
(Beim openweaterhmap fangen die stündlichen Daten immer bei 1 an für die aktuelle stunde)
Mit userreadings die openweaterhmap Daten auf das DWD Device Mappen und damit die readings erzeugen.
Ich würde das nicht mit einer eigenen myUtils Funktion machen, sondern im userreadings den Code mit im DWD Device einbauen,
dann sieht man sofort, das es manipuliert ist und Du kannst die Solar_forecst() Funktion im Original behalten.
So hast Du die Möglichkeit schnell den Updates zu folgen.

Hier ein Beispiel für Perl im userreading aus einem anderen Device

Statistic_EnergyHomePvSum_Day:Statistic_EnergyHomePv_Day.* {round( (ReadingsVal("$NAME","Statistic_EnergyHomeBat_Day", "0")+ReadingsVal("$NAME","Statistic_EnergyHomePv_Day", "0")) ,2)}
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

sn0000py

ok danke für die Tipps, ich werde es aber dann vermutlich doch eher mit ienem Dummy "DWD_Forecast" device machen.

Da mir die zuordnung der stündlichen werte zu umständlich wird per userreadings

DWD hat ja fix fc0_7_TTT ist immer FIX Temperatur um 7 Uhr am aktuellen Tag
beim openweatermap ist hourly_06_temp um 1 Uhr die Temperatur von 7 Uhr
und um 7Uhr dann heisst die varaible dann hourly_01_temp

ch.eick

Zitat von: sn0000py am 25 Februar 2021, 12:33:47
ok danke für die Tipps, ich werde es aber dann vermutlich doch eher mit ienem Dummy "DWD_Forecast" device machen.

Da mir die zuordnung der stündlichen werte zu umständlich wird per userreadings

DWD hat ja fix fc0_7_TTT ist immer FIX Temperatur um 7 Uhr am aktuellen Tag
beim openweatermap ist hourly_06_temp um 1 Uhr die Temperatur von 7 Uhr
und um 7Uhr dann heisst die varaible dann hourly_01_temp
Du kannst ja den Code dafür ins userreading integrieren.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

sn0000py

Hallo habe nun mal den aktuellen Vergleich der zwei kurven

Kann ich bei diesem zeitlichen versatz noch was optimieren?
Oder soll ich es mal so lassen?

ch.eick

Zitat von: sn0000py am 25 Februar 2021, 17:33:50
Hallo habe nun mal den aktuellen Vergleich der zwei kurven

Kann ich bei diesem zeitlichen versatz noch was optimieren?
Oder soll ich es mal so lassen?
Wie gesagt, das ist kein zeitlicher Versatz!
Das sieht bereits sehr gut aus.
Der nächste Schritt wäre die Autokorrektur, die dann die Abweichung am Nachmittag noch etwas anheben würde, wenn das im Durchschnitt der letzten Tage immer so wäre.

Dafür kannst Du der Beschreibung folgen und es mit Device und reading in Das Device Deines WR einfügen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo,
ich hatte beim Solar_Forecast Modul meine Inverter Werte mit der falschen Einheit konfiguriert, wie kann ich das jetzt zurücksetzen?
Gruß Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

ESXi@NUC+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

ch.eick

Zitat von: DS_Starter am 01 März 2021, 16:40:06
set <> currentInverterDev ...  ?
Genau das habe ich geändert, aber die Werte haben sich noch nicht verringert.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Zusätzlich noch

set <> reset pvHistory
set <> reset pvCorrection

um historische Werte / Korrekturen zu löschen wenn nötig.
ESXi@NUC+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

ch.eick

Zitat von: DS_Starter am 01 März 2021, 16:45:52
Zusätzlich noch

set <> reset pvHistory
set <> reset pvCorrection

um historische Werte / Korrekturen zu löschen wenn nötig.
Okay, jetzt sieht es besser aus. Nun kann der Vergleich starten :-)
Kannst Du mir nochmal das Attribut für die readings nennen, um die ohne Einheit ins DbLog zu schreiben? Dann würde ich die Kurve noch mit ins Diagramm aufnehmen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Das kannst du mit etwas Code in DbLogValueFn bzw. valueFn erledigen.
Generell muss ich noch eine kleine Funktion dafür implementieren um es zu automatisieren.
ESXi@NUC+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

papa

Ich benutze logProxy, um mir den Forecast direkt in meine Anzeige zu malen.
Code zur Bereitstellung der Daten ist:
sub solarFC($$$) {
  my ($dev,$from,$to) = @_;
  my $data = $from." 0\n";
  my $start = substr($from,0,11);
  for( my $i=1; $i < 24; ++$i ) {
    my $h = $i < 10 ? "0".$i : "".$i;
    my $h0 = ($i-1) < 10 ? "0".($i-1) : "".($i-1);
    $data .= $start;
    $data .= $h0.":59:00 ".ReadingsNum($dev,"Today_Hour".$h."_PVforecast","0")."\n";
  }
  $data .= $to." 0\n";
  return $data;
}

Das sieht dann wie im angehängten Bild aus - die gelbe Line. Rot ist Bezug, Grün ist PV-Production und Blau ist Einspeisung.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Wzut

Zitat von: papa am 01 März 2021, 19:18:34
for( my $i=1; $i < 24; ++$i ) {
WOW , wievel machst du so im Schnitt bei völliger Dunkelheit ? :)
Ich habe etwas ähnliches, allerdings "nur" 5..22
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher