76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

Parallix

Zitat von: kask am 31 Dezember 2024, 09:09:56ACHTUNG! ACHTUNG! Hiermit Informiere ich den Maintainer!
Die Module sagen aber das alles i.O. wäre.
Gerade das offizielle Update gezogen gehabt.

2024.12.31 09:03:20 1: ForecastSolarAPI - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:20 1: ForecastSolarAPI - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteoEnsemble - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteoEnsemble - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteoWorld - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteoWorld - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastDWD - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastDWD - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastVictronVRM - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastVictronVRM - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: Forecast - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: Forecast - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteo - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.31 09:03:21 1: ForecastOpenMeteo - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform


Sieht sehr nach den oben von Heiko beschriebenen ggf. erforderlichen manuellen Arbeiten aus. Bei mir läuft alles unauffällig.
FHEM: Debian/Testing BananaPro - AVM: 7490 (7.59) und 7591 (8.02) - Goodwe: GW25K-ET (DSP V10 / ARM V12) - BYD: 2 x HVS 5.1 (BMS V3.29-A, BMU V3.23-A) - EnOcean - Z-Wave - FS20/HMS

kask

Jepp, die ctrlStatisticReadings Attribute werden nicht mit umgeschrieben. Sonst wird ja für gewöhnlich alles erdenkliche vollautomatisch umbenannt wenn es neue Namen gibt.
Da war ich doch zu verwöhnt oder DS_Starter hatte es nicht auf dem Schirm.

DS_Starter

Moin,

doch hatte ich auf dem Schirm. 😉

Die Meldung sagt:
Set the attribute again or inform Maintainer

Hast du den ersten Teil gemacht und das Attr ctrlStatisticReadings neu gesetzt? Die Auswahl der verfügbaren Optionen hat sich geändert. Einfach in dem Attr die obsoleten Werte wie todayBatIn abwählen und speichern.

LG
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

300P

Zitat von: DS_Starter am 29 Dezember 2024, 23:43:15Hallo zusammen,

die Änderungen für ein Multi Batteriesystem sind recht umfangreich.
Ich checke Teilanpassungen ein um schrittweise voranzukommen. Morgen früh ist wieder ein Update verfügbar:

 * im Attr ctrlStatisticReadings sind Anpassungen vorhanden: daysUntilBatteryCare -> daysUntilBatteryCare_01,
  todayBatIn -> todayBatIn_01, todayBatOut -> todayBatOut_01

Falls ihr diese Readings über ctrlStatisticReadings generieren lasst, müsst ihr das Attribut neu setzen.
Im Log gibt es sonst sinngemäß folgende Fehler:

2024.12.29 23:12:08.545 1: SolCast - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatIn' has no Parameter or default value set. Set the attribute again or inform Maintainer.
2024.12.29 23:12:08.546 1: SolCast - ERROR in Application - attribute ctrlStatisticReadings KPI 'todayBatOut' has no Parameter or default value set. Set the attribute again or inform Maintainer.

LG

Wohl doch zu verwöhnt  ;) bzw. evtl. ein Update übersprungen    O:-)


PS:
Allen hier einen Guten Rutsch..
.. und einen besonderen Dank an Heiko =>> der "fast alles" möglich macht....

Gruß
300P




Nachsatz:
Sorry - irgendwie ist mal wieder alles bei mir zeitverzögert - hatte Heikos "vor"-Post noch nicht bei mir sichtbar
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

kask

Jepp, wohl eins oder mehrere übersprungen. Turbulente Zeiten momentan bei mir.
Viele andere Projekte und momentan läuft das PV-Gemüse auf Stand ohne weitere optimierungen.
Ist ja wieder ienmal, wie jedes Jahr, das Tal der Tränen angesagt.

Und sicher habe ich das natürlich gemacht. Sonst hätte ich ja folgendes nicht gewusst.

ZitatJepp, die ctrlStatisticReadings Attribute werden nicht mit umgeschrieben.

münster

Grüße an alle und vielen Dank für das Modul, das ich wirklich toll finde!

Ich habe einen Wechselrichter (Solaredge) mit einer Batterie, die in DC angeschlossen ist, während der Hausverbrauch in AC ist.

Leider gibt mir der Wechselrichter die Informationen in AC, ohne zwischen PV und Batterie zu unterscheiden, und gibt mir keine Informationen über die Energie, die derzeit in der Batterie ist (außer als Prozentsatz der Ladung).

Ich habe einige UserReadings erstellt, wollte aber um Rat fragen, wie ich das System am besten konfigurieren kann.

Startpunkt: setupInverterDev01 etotal eingestellt als X_PV_Energy (Gesamtenergie in AC).
Negative Auswirkungen: Erzeugung von ,,Phantom"-PV, wenn Energie aus der Batterie entnommen wird. Keine Informationen über batin und batout.
Positive Auswirkungen: Der Verbrauch wird genau berechnet.

Aktueller Stand: setupInverterDev01 etotal mit einem UserReading gesetzt, das X_PV_Energy minus die gesamte aus der Batterie entnommene Energie (in DC) berechnet.
Negative Auswirkungen: Der Verbrauch, wenn die PV nicht produziert, ist falsch, etwa 1,5~2 mal. Der Verbrauch während des Tages ist sogar negativ.
Positive Auswirkungen: Keine Erzeugung durch PV in der Nacht.

Der DC-AC-Wandlungswirkungsgrad der Batterie lag in der letzten Stunde bei über 90 % (und die Verbrauchsdifferenz ist wie oben). Ich ändere gerade das Userreading, um diesen Koeffizienten einzubeziehen, aber ich glaube nicht, dass es sich wesentlich ändern wird.
Ich habe auch festgestellt, dass ich die tagsüber in die Batterie eingespeiste Energie hinzurechnen muss, um einen negativen Verbrauch zu vermeiden (aber nochmals: sie wird in den DC eingespeist!).

Wenn ich es richtig verstehe, werden für die Verbrauchszählung nicht die Werte von pin/pout/pv verwendet, sondern die Energiewerte (intotal/outtotal/etotal), ist das richtig? In meinem Fall ist intotal = X_Battery_Stored_Energy, outtotal = X_Battery_Taken_Energy, etotal = X_PV_Net_Energy

Hat jemand eine ähnliche Situation wie ich und kann mir einen Rat geben, wie ich die Messwerte einstellen kann, um korrektere Werte zu erhalten? Unten sind einige meiner UserReadings, wenn ihr mehr braucht, kann ich sie natürlich gerne teilen.

Einen guten Start ins neue Jahr und vielen Dank!


X_Battery_Current_Energy:Battery_1_SOE.* {
return ReadingsVal($name,"Battery_1_Rated_Energy_WH",0) * ReadingsVal($name,"Battery_1_SOE",0) / 100;;
},
X_Battery_Taken_Energy:X_Battery_Current_Energy.* {
my $total_taken = ReadingsVal($name, "X_Battery_Taken_Energy", 0);;
my $previous_value = OldReadingsVal($name, "X_Battery_Current_Energy", 0);;
my $current_value = ReadingsVal($name,"X_Battery_Current_Energy",0);;
my $battery_efficiency = ReadingsVal($name,"X_Battery_AC_Efficiency",0);;
if( $current_value < $previous_value) {
return $total_taken + abs($current_value - $previous_value) * $battery_efficiency;;
}
return $total_taken;;
},
X_Battery_Stored_Energy:X_Battery_Current_Energy.* {
my $total_stored = ReadingsVal($name, "X_Battery_Stored_Energy", 0);;
my $previous_value = OldReadingsVal($name, "X_Battery_Current_Energy", 0);;
my $current_value = ReadingsVal($name,"X_Battery_Current_Energy",0);;
if( $current_value > $previous_value) {
return $total_stored + ($current_value - $previous_value);;
}
return $total_stored;;
},
X_Battery_AC_Efficiency:Battery_1_Instantaneous_Power_W.*|I_DC_Power.* {
    my $i1_age = ReadingsAge($name, "I_DC_Power", 0);
    my $b1_age = ReadingsAge($name, "Battery_1_Instantaneous_Power_W", 0);
    my $i1_dc_power = ReadingsVal($name,"I_DC_Power",0);;
    my $b1_dc_power = abs(min(0,ReadingsVal($name,"Battery_1_Instantaneous_Power_W",0)));;
    my $previous_value = ReadingsVal($name, "X_Battery_AC_Efficiency", 0);;

    if ($b1_age > $i1_age && $b1_dc_power != 0) {
        return $previous_value;;
    }
   
    my $inverter_effectiveness = ReadingsVal($name,"solar_inverter_effectiveness",0);;
    my $result = 1;;

    if ($b1_dc_power == 0) {
        $result = 1;;
    } elsif ($i1_dc_power > $b1_dc_power) {
        $result = 1;;
    } else {
        $result = (1-(($b1_dc_power - $i1_dc_power) / $b1_dc_power));;
    }
   
    return $result * $inverter_effectiveness;
},
X_PV_Net_Energy:X_PV_Energy.* {
return ReadingsVal($name,"X_PV_Energy",0) - abs(ReadingsVal($name,"X_Battery_Taken_Energy",0)) + ReadingsVal($name,"X_Battery_Stored_Energy",0);;
},

DS_Starter

#1446
Hallo zusammen und ein gesundes neues Jahr!

Ich habe die Zeit genutzt und einen weiteren Schritt zum Multi Batterie System umgesetzt.
Das Update wird morgen früh ausgerollt.

* das Attribut ctrlBatSocManagement wird automatisch in ctrlBatSocManagement01 umbenannt.
  Ihr braucht nichts zu tun.

@münster,
ich habe zwar kein solches System wie du, werde mir aber morgen mal genauer ansehen was du geschrieben hast.
Hatte heute keine richtige Gelegenheit dazu.
Vllt. gibt es auch User mit einer ähnlichen Konfiguration, was noch hilfreicher wäre.

LG,
Heiko
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

Max_Meyer

Zitat von: münster am 31 Dezember 2024, 19:03:03Hat jemand eine ähnliche Situation wie ich und kann mir einen Rat geben, wie ich die Messwerte einstellen kann, um korrektere Werte zu erhalten? Unten sind einige meiner UserReadings, wenn ihr mehr braucht, kann ich sie natürlich gerne teilen.

Guten Morgen und an alle ein frohes neue Jahr
Auch ich bin gerade dabei einen Hybridwechselrichter einzubinden - allerdings von SMA und nicht von SE - habe dabei ähnlich Probleme festgestellt - ich binde das über Modbus ein - ist auch bei SE möglich (https://knowledge-center.solaredge.com/sites/kc/files/sunspec-implementation-technical-note.pdf) dort stehen u.a. die folgenden (Batterie-) Parameter zur Verfügung
Batterie > Batterieentladung > Batterieentladung            in kWh
Batterie > Batterieladung > Batterieladung                    in kWh
Batterie > Batterieentladung > Momentane Batterieentladung    in W
Batterie > Batterieladung > Momentane Batterieladung            in W

Batterie > Batterie > Ladezustand    in %

und - genau wie von @münster beschrieben - die intern berechneten Parameter
AC-Seite > Messwerte > Gesamtertrag    kWh (32 Bit)
AC-Seite > Messwerte > Tagesertrag    kWh (32 Bit)
AC-Seite > Netzmessungen > Leistung    W
In meinem derzeitigen Status habe ich von der Gesamtenergie (kWh) die Batterie(ent-)ladung abgezogen und erhalte somit nur die durch PV gewandelte Energie
Bei der Leistung bin ich ähnlich vorgegangen und habe die Gesamtleistung  (W) mit den entsprechenden Batterieparametern in Beziehung gesetzt

Das Ganze ist derzeit ,mangels dauerhafter Sonne, ungetestet.

Gruß Gerd

münster

Zitat von: Max_Meyer am 02 Januar 2025, 09:20:07Guten Morgen und an alle ein frohes neue Jahr
Auch ich bin gerade dabei einen Hybridwechselrichter einzubinden - allerdings von SMA und nicht von SE - habe dabei ähnlich Probleme festgestellt - ich binde das über Modbus ein - ist auch bei SE möglich (https://knowledge-center.solaredge.com/sites/kc/files/sunspec-implementation-technical-note.pdf) dort stehen u.a. die folgenden (Batterie-) Parameter zur Verfügung

Hallo zusammen, ich hätte erwähnen sollen, dass ich auch Modbus-Integration für meinen Wechselrichter verwende (https://github.com/pejonp/FHEM---SolarEdge).

Mit den letzten Änderungen (die ich oben gepostet habe) habe ich wieder eine Phantomproduktion über Nacht. Das Seltsame daran ist, dass die Produktion ungefähr gleich dem Verbrauch ist (der in der Tat ungefähr auf dem richtigen Niveau ist).

Ich sehe in der Solaredge-Monitoring, dass ich nachts einen Verbrauch von etwa 270Wh hatte. Heute Nacht (mit dem obigen Code) habe ich einen Verbrauch von etwa 270Wh (OK!), aber ich habe auch eine Phantomproduktion von etwa der gleichen Menge. (02: 276 verbraucht, 274 produziert, 03: 273 verbraucht, 272 produziert, usw.).

Ich fange an zu denken, dass ich von Anfang an neu beginnen muss :)

minierm

Zitat von: DS_Starter am 30 Dezember 2024, 22:35:56Hallo zusammen,

morgen früh wird es ein weiteres Update geben. Es ist ein weiterer Schritt auf dem Weg zum Multi Battery System.

Diese Update ist für den User unter Umständen mit Aktivitäten verbunden weil Readingnamen geändert wurden:

Hallo Heiko,
wäre es nicht sinnvoll, die bisherigen Readings als Gesamtsumme zu behalten? (Nicht SoC, aber alles mit Watt)

minierm

Hallo Heiko,
könntest du bei der Fehlermeldung (im Log gefunden) bitte noch die Werte anzeigen lassen?
Ich versteh die Meldung leider auch nicht ganz, welche erzeugte Energie, Stunde, Tag oder gesamt? Es läuft auch noch alles, hab auch nix geändert.
In der Anlagenkonfigurationsprüfung seh ich leider auch nicht die verwendete Modulversion - ist von gestern - aber es gibt natürlich schon eine Neuere...

PVForecastDach - WARNING - The generated PV of Inverter 'Strom_PV_All_Aktuell' is much more higher than inverter capacity. It seems to be a failure and Energy Total is reinitialized.

FYI:
Strom_PV_All_Aktuell pv=PVALL:kW etotal=All_Total:kWh capacity=10600

01 => ialias => PV
      ietotal => 16052000
      ifeed => default
      igeneration => 7
      ilimit => 100
      iname => Strom_PV_All_Aktuell
      invertercap => 10600

cpet

ändere mal das "pv=PVALL:kW" in "pv=PVALL:W" ab

Gruß
Christian
RPI 3 mit 1x SCC 868MHz für FS20; 1x SCC 433MHz SlowRF; 1x SCC 868MHz Homematic;
Rollladen-/Markisensteuerung, Fußboden-Heizungssteuerung 
diverse Licht-/Schaltungssteuerungen
ALEXA-Integration;
Statusmeldungen über  Fernseher

grappa24

Hat schon mal jemand das "Batterie SOC und Max. Ladestrom Management" für einen Symo Gen24 mit BYD HVS umgesetzt?

Ich hab zwar via EVCC Zugriff via MQTT auf meinen Speicher (https://docs.evcc.io/docs/integrations/mqtt-api), aber das "Minimale Ladelimit" z.B. kann ich damit nicht setzen, da fängts schon an ...

############################################################################
#  Batterie SOC und Max. Ladestrom Management
############################################################################
sub batSocChargeMgmnt {
  my $name = shift;
  my $hash = $defs{$name};
 
  my $vebus   = 'MQTT2_cerboGX_c0619ab34e08_vebus';                            # Victron Vebus Device
  my $vicsets = 'MQTT2_cerboGX_c0619ab34e08_settings';                         # Victron Einstellungen

  my $maxcspc = 105;                                                           # max. Ladestrom (A) Victron MPII Verbund
  my $actmcc  = ReadingsNum ($vebus, 'MaxChargeCurrent', undef);               # akt. Ladestromeinstellung
  my $load    = $actmcc // $maxcspc;                                           # Soll-Ladestrom (A)

  ## Battery SoC Management
  ###########################
  my $ubsm = AttrVal ($name, 'userFn_BatterySoCManagement', 'aus');
 
  if ($ubsm eq 'ein') {
    my $bcrq = ReadingsNum ($name,    'Battery_ChargeRequest',     0);
    my $csoc = ReadingsNum ($vicsets, 'MinimumSocLimit',          10);        # akt. SoC
    my $osoc = ReadingsNum ($name,    'Battery_OptimumTargetSoC', 10);        # Soll-SoC
    my $surp = ReadingsNum ($name,    'Current_Surplus',           0);        # aktueller PV-Überschuß

    if ($csoc != $osoc) {
      CommandSet (undef, "$vicsets MinimumSocLimit $osoc");
      Log3 ($name, 3, qq{$name - userFn SoCMgmnt -> MinimumSocLimit in $vicsets set to $osoc %});
    }
                                           
    if ($bcrq && $surp < 1000) {                                              # max. Strom b. Battery_ChargeRequest
      $load = 21;
    }
else {
  $load = $maxcspc;
}
  }
 
  ## Batterie Einstellung MaxChargeCurrent
  ##########################################
  if ($load != $actmcc) {
    CommandSet (undef, "$vebus MaxChargeCurrent $load");

    Log3 ($name, 3, qq{$name - userFn ChargeMgmnt -> MaxChargeCurrent in $vebus set }.
                    qq{from old $actmcc A to $load A});
  }
 
  readingsSingleUpdate ($hash, 'userFn_Bat_MaxChargeCurrent_set', $load, 0);
 
return;
}
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

@minierm,

Zitatwäre es nicht sinnvoll, die bisherigen Readings als Gesamtsumme zu behalten? (Nicht SoC, aber alles mit Watt)
Das betrifft m.M. nach nur die Readings Current_PowerBatIn_XX und Current_PowerBatOut_XX.
Beide Varianten (getrennt vs. gemeinsamer Wert aller Batterien) hat seine Vor- und Nachteile.
Der Vorteil der Trennung ist zunächst der genauere Blick darauf was momentan mit der Bat passiert, ob z.B. eventuelle Steuerungsmaßnahmen den Erfolg bringen der beabsichtigt ist. Auch kann man später in der Grafik diskrete Werte mit darstellen.
Der Nachteil ist ein Paar Readings mehr bzw. wenn man eine Summe möchte muß man die erst erstellen.

Welchen Vorteil würdest du in der Gesamtsumme sehen?

@grappa24,
Zitat... aber das "Minimale Ladelimit" z.B. kann ich damit nicht setzen.
Was meinst du damit? Wahrscheinlich das MinimumSocLimit, also den SoC der nicht unterschritten werden soll, oder?
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 02 Januar 2025, 17:25:11@grappa24,
Zitat... aber das "Minimale Ladelimit" z.B. kann ich damit nicht setzen.
Was meinst du damit? Wahrscheinlich das MinimumSocLimit, also den SoC der nicht unterschritten werden soll, oder?
genau das ...
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