76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo Gerd,

Zitatwas ich meine ist die Frage ob es, jenseits der batsocforecast_xx (SOC-Prognose) und batsocconsumtion_xx (real eingetretener Wert), noch einen Parameter mit 'gewichteten' Durchschnittswert über alle Batterien für jeden der beiden o.g. Zustände geben kann (analog der Darstellung in der Grafik (screen von 22:09) - wo ja die Batterie auch nur einmal mit einem Wert zu sehen ist - gleichgültig wie viele Bat-devices definiert sind.
Jetzt weiß ich was du meinst. Das muss ich mir erst durchdenken.
Ich werde erstmal das Attr graphicControl fertig einführen und mich dann mit den zusätzlichen Contentmöglichkeiten befassen. Mal schauen was ich alles ermöglichen kann.

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

Wolle02

Hallo Heiko, bei mir wurde letzte Woche meine PV-Anlage installiert und in Betrieb genommen. Durch das FHEM-Wiki bin ich auf dieses Hammer-Modul aufmerksam geworden und bin seit dem an der Konfiguration und Erforschung was hier alles möglich ist dran. Das ist ja wirklich was ganz Großes was du hier erschaffen hast und da wollte ich einfach mal DANKE sagen.
Ich bin gespannt was man hier alles zaubern kann.  ;D

Medel

Hallo,

1. bei mir scheint etwas mit den Wetterdaten nicht zu stimmen. Gestern wurde durchgehend Sonne angezeigt. Heute wieder bis zu 100% bewölkt obwohl tatsächlich durchgehend Sonne, siehe Anhang

2. meine Verbrauchprognose ist viel zu hoch, sollten so was um 25kWh sein - wo ist der Fehler

welche Daten soll ich noch schicken für die Fehlersuche

DS_Starter

#2658
Hallo Wolle02,

ich freue mich über dein Dankeschön :) ... nehme es gern auch für diejenigen Nutzer entgegen, die mich über eine bereits lange Zeit mit Ideen und auch Code-Zuarbeiten unterstützt haben.
Wünsche dir viel Spaß und auch einen persönlichen Mehrwert mit dem Modul!

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

300P

@Medel:

Das sieht nach fehlerhaften Daten aus.
Hast du schon im Log nach zutreffenden Fehlermitteilungen geschaut ?

FHEM 6.4|RPi und QNAP-Container|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|Buderus-MQTT_EMS|MariaDB|
JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_edge|ESP32CAM

DS_Starter

Hallo Medel,

bei dem Wetter kommt es darauf an welchen Dienst du nutzt. Möglicherweise ist für deinen Standort ein anderer Dienst bzw. eine andere Wetterstation besser geeignet.

Bzgl. Verbrauchsprognose könnte eine fehlerhafte Angabe Wh/kWh eines Verbrauchers eine Ursache sein.
Debug einschalten mit ctrlDebug=consumption. An den Ausgaben erkennt man wahrscheinlich schon eine Spur zum Übeltäter.

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

DS_Starter

@300P,

ich habe den Ansatz in #2646 noch etwas geändert, sonst würde dieser Code auch nach 9:00 in deine Consumersteuerung dauerhaft reinsteuern.
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

#2662
EDIT
@Heiko:
hat sich grade überschnitten - schaue es mir an ;)



Hallo zusammen,

ich stelle hier den vorerst letzten Stand (mit vielen Erläuterung) für mein WW-Heater als "ctrlUserExitFn" zur weiteren Nutzung zur Verfügung.

{
################################
#  Wenn es später als 04:00 Uhr ist (>=4)
#  und
#  früher als 08:00 Uhr ist (<8) (also bis "7:59")
#  und
#  der SoC-Wert (über alle Batterien) >30 (%) ist
#  und
#  die restliche PV-Prognose von heute höher als die benötigte Ladeenergie aller Batterien ist (in Wh)
#  schaltet sich der Heater-ConsumerXX ein
#
#  andernfalls
#
#  wenn es später als 02:00 Uhr ist (>=4)
#  und
#  früher als 08:00 Uhr ist (<8)
#  und
#  wenn
#  der SoC-Wert über alle Batterien <40 (%) ist  ->>> oder <<<- die restliche PV-Prognose von heute niedriger als die benötigte Ladeenergie aller Batterien ist (in Wh)
#  schaltet sich der Heater-ConsumerXX aus
################################

  my $dt    = timestringsFromOffset (time, 0);
  my $hour  = $dt->{hour};                                                 # aktuelle Stunde in 24h format (00-23)

  # hier anpassen !!!
  my $timestart = 2;  # ab welcher Uhrzeit soll es sein
  my $timeend = 8;   # bis wieviel Uhr soll es sein
  # hier anpassen !!!

if (int $hour >= $timestart && int $hour < $timeend ) {
          # Nur zwischen xy:00 bis max. xy:59 (!!!! $timeend -1 Stunde !!!!)  Uhr

   # hier anpassen !!!
   my $minsocbat = 30;   # nur bis mindesten XY SoC aller Batterien
   my $heater  = (split " ", AttrVal ($name, 'consumer06', ''))[0];    # ConsumerXX (Heater) zur Ermittlung des Namens immer !!!! hier angeben
   # hier anpassen !!!

   my $soctotal = CurrentVal ($name, 'batsoctotal', 0);                # SoC über alle Bat als Durchschnitt
   my $pvtot =  ReadingsNum ($name, 'RestOfDayPVforecast', 0);         # Restliche PV Prognose total heute in Wh
   # war my $pvtot = ReadingsNum ($name, 'Today_PVforecast', 0);       # PV Prognose total heute in Wh
   my $caps  = CurrentVal ($name, 'batcapsum', 0);                     # Summe installierte Bat Wh
   my $need  = $caps - ($soctotal/100 * $caps);                        # benötigte Ladeenergie Bat bis 100% Ladung


   Log3 ($name, 5, qq{$name - userFn -> WWHeater Reading ist = $heater - aktuelle Stunde = $hour   aus $dt erzeugt });
   Log3 ($name, 5, qq{$name - userFn -> WWHeater StartZeit ist von $timestart Uhr bis $timeend Uhr und mindestens ein SoC von $minsocbat % muss in den vorhandenen Batterien gegeben sein });
   Log3 ($name, 5, qq{$name - userFn -> Der PV-Tages-Restertrag betraegt $pvtot Wh >>>???mehr???<<< als die fehlende Ladeenergie in den®  Batterie(n) von $need Wh});

     if ($soctotal >= $minsocbat && $pvtot > $need) { 
        # Wenn die % SoC-Vorgabe erfüllt und der PV-Tages-Rest-Ertrag > 100% Batteriekapazitaet

        if (ReadingsVal($heater,"state","") ne "on") {
           # send "on"-Kommando an Heater Device if(ne "on");
           fhem ("set $heater on");
           Log3 ($name, 2, qq{$name - userFn -> $name Consumer $heater in $name set to --on--});
        }
     }

     else {
        if (($soctotal < $minsocbat) || ($pvtot <= $need)) { 
           # ab xy:00 bis max. xy:59 (!!!! $timeend -1 Stunde !!!!) Uhr
           # und
           # (die SoC-Vorgabe unterschritten !!!!! oder derTages-Rest-Ertrag < 100% Batteriekapazitaet)
           # danach sollte der Heater-ConsumerXY wieder nach "seinen" Regeln steuern...

           if (ReadingsVal($heater,"state","") ne "off") {
              # send "off"-Kommando an Heater Device if(ne "off");
              fhem ("set $heater off");
              Log3 ($name, 2, qq{$name - userFn -> $name Consumer $heater in $name set to --off--});
           }
        }
     }
  }
}

Heute Nacht wird es wohl bei mir damit klappen, denn meine Test tagsüber haben geklappt.(PS: hat geklappt)

Gruß
300P



EDIT 29.04.2025 - Anmerkung von Heiko eingebaut

positives Ergebnis in der Folgenacht:
2025.04.29 02:00:04 2: Forecast - userFn -> Forecast Consumer FBDECT_fbahahttp_E8_DF_70_07_42_0B in Forecast set to --on--
2025.04.29 02:00:13 2: Forecast - userFn -> Forecast Consumer FBDECT_fbahahttp_E8_DF_70_07_42_0B in Forecast set to --on--
2025.04.29 02:00:28 2: Forecast - Consumer '_WP_Heizstab_WW' was external switched on
2025.04.29 05:47:28 2: Forecast - userFn -> Forecast Consumer FBDECT_fbahahttp_E8_DF_70_07_42_0B in Forecast set to --off--
2025.04.29 05:47:44 2: Forecast - Consumer '_WP_Heizstab_WW' was external switched off
FHEM 6.4|RPi und QNAP-Container|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|Buderus-MQTT_EMS|MariaDB|
JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_edge|ESP32CAM

Medel

Zitatbei dem Wetter kommt es darauf an welchen Dienst du nutzt. Möglicherweise ist für deinen Standort ein anderer Dienst bzw. eine andere Wetterstation besser geeignet.

OpenMeteo

ZitatBzgl. Verbrauchsprognose könnte eine fehlerhafte Angabe Wh/kWh eines Verbrauchers eine Ursache sein.
Debug einschalten mit ctrlDebug=consumption. An den Ausgaben erkennt man wahrscheinlich schon eine Spur zum Übeltäter.

Siehe Anhang

Habe keinen Verbraucher eingetragen, ist das vielleicht der Fehler

Medel

Hier mal die aktuellen Daten von Heute:
    99 => pvfc: 157813, pvrl: 94775, pvrlvd: -, rad1h: -
            pvrl01: 44671, pvrl02: 37766, pvrl03: 2807, pvrl04: 9531
            pprl01: -, pprl02: -, pprl03: -
            confc: 439795, con: 19034, gcons: 220, conprice: -
            gfeedin: 78940, feedprice: -
            DoN: -, sunaz: -, sunalt: -
            batin01: 0, batin02: 0, batin03: -
            batout01: 0, batout02: 0, batout03: -
            batmaxsoc01: 50.00, batmaxsoc02: 100.0, batmaxsoc03: -
            batsetsoc01: -, batsetsoc02: -, batsetsoc03: -
            dayname: Mo,

Wechelrichter Daten:
P: 319 W, Pheute: 44.570 kWh, Ptotal: 87827.975 kWh
P: 8155 W, Pheute: 37.898 kWh, Ptotal: 30617.216 kWh
P: 309 W, Pheute: 2.757 kWh, Ptotal: 1938.546 kWh
P: 92 W, Pheute: 9.582 kWh, Ptotal: 25.016 kWh

Zählerdaten
P: -6846 W, Verbrauch_heute: 0.220 kWh, Einspeisung_heute: 78.380 kWh

DS_Starter

ZitatHabe keinen Verbraucher eingetragen, ist das vielleicht der Fehler
Nein, definitv nicht.

Offensichtlich wird zumindest aktuell der Verbrauch richtig erfasst ->

            confc: 439795, con: 19034, gcons: 220, conprice: -
            gfeedin: 78940, feedprice: -
            DoN: -, sunaz: -, sunalt: -

19,034 kWh deckt sich mit deiner Angabe. Der Forecast von 439,795 kWh kommt aus den hohen Werten:

2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 08: 11539 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 09: 17442 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 10: 21098 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 11: 25303 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 12: 27685 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 13: 43426 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 14: 64984 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 15: 63856 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 16: 70521 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 17: 53323 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 18: 15390 Wh, Considered value numbers: 60
2025.04.28 18:00:04 1: solarforcast DEBUG> estimated cons of Hour 19: 14040 Wh, Considered value numbers: 60
....

Die hohen Werte stehen vermutlich im Schlüssel pvCircular->con_all der Stunden 08-19. Ein
"get ... pvCircular" zeigt dir die Werte. Hier ein Beispiel für die Stunde 10

10 => pvapifc: 2536, pvaifc: -, pvfc: 2536, aihit: 0, pvrl: 2861
      batin01: 0, batin02: 0, batin03: -
      batout01: 0, batout02: 0, batout03: -
      confc: 449, gcon: 0, gfeedin: 3303, wcc: 0, rr1c: 0.00
      temp: 12.00, wid: 0, wtxt: Bewölkungsentwicklung nicht beobachtet
      pprl01: 0, pprl02: -, pprl03: -
      pvcorrf: 10.00=1.88 10.05=1.50 10.100=0.69 10.15=2.00 10.20=1.50 10.25=1.76 10.40=1.50 10.45=2.00 10.50=1.50 10.55=2.00
               10.60=0.59 10.65=1.14 10.70=1.50 10.75=1.03 10.80=1.60 10.85=1.00 10.90=1.78 10.95=1.39 15.00=1.30 15.100=0.86
               15.25=1.86 15.30=1.19 15.35=2.72 15.40=1.50 15.45=1.31 15.50=0.68 15.55=0.98 15.60=0.80 15.65=0.81 15.70=1.91
               15.75=1.16 15.80=1.14 15.85=2.49 15.90=0.85 15.95=1.03 20.00=1.17 20.100=0.99 20.15=0.87 20.40=1.75 20.45=1.90
               20.65=1.63 20.70=2.25 20.85=0.97 20.90=1.75 20.95=1.05 25.00=1.21 25.100=0.36 25.35=1.10 25.40=1.33 25.50=1.22
               25.55=1.26 25.60=0.58 25.75=1.10 25.85=0.53 25.90=1.63 25.95=0.80 30.00=1.04 30.100=0.40 30.30=1.12 30.45=0.89
               30.50=0.26 30.55=1.20 30.60=1.28 30.65=0.88 30.75=0.77 30.80=0.58 30.85=0.47 35.00=0.88
               simple=1.27
      quality: 10.00=0.53 10.05=0.30 10.100=0.55 10.15=0.39 10.20=0.16 10.25=0.57 10.40=0.29 10.45=0.29 10.50=0.50 10.55=0.45
               10.60=0.00 10.65=0.79 10.70=0.43 10.75=0.97 10.80=0.63 10.85=0.99 10.90=0.51 10.95=0.56 15.00=0.77 15.100=0.84
               15.25=0.54 15.30=0.73 15.35=0.35 15.40=0.44 15.45=0.62 15.50=0.00 15.55=0.98 15.60=0.52 15.65=0.77 15.70=0.52
               15.75=0.86 15.80=0.88 15.85=0.40 15.90=0.58 15.95=0.97 20.00=0.86 20.100=0.99 20.15=0.85 20.40=0.34 20.45=0.53
               20.65=0.58 20.70=0.24 20.85=0.97 20.90=0.46 20.95=0.95 25.00=0.82 25.100=0.00 25.35=0.91 25.40=0.75 25.50=0.82
               25.55=0.79 25.60=0.27 25.75=0.91 25.85=0.12 25.90=0.62 25.95=0.76 30.00=0.96 30.100=0.00 30.30=0.89 30.45=0.87
               30.50=0.00 30.55=0.83 30.60=0.78 30.65=0.86 30.75=0.70 30.80=0.28 30.85=0.00 35.00=0.86
               simple=0.79
      pvrlsum: simple=278354
      pvfcsum: simple=218695
      dnumsum: simple=211
      con_all => Sa  @ 2113 469 2252 722 1720 1600 284 274
                 So  @ 2137 732 717 4870 3447 3447 1558 757 162 96 2285
                 Fr  @ 608 1137 1307 551 6 1483 783
                 Do  @ 208 983 3155 1083 1127 693 81 435 446 627
                 Mi  @ 280 561 3304 825 486 381 350 348 326 161
                 Di  @ 2784 865 865 3209 827 182 301 427 563 9 645 6
                 Mo  @ 2596 161 498 2798 1174 449 2 359 161
      .....

Zeige uns mal bitte diesen Auszug von dir.
Dann sehe ich dass
            batin01: 0, batin02: 0,
            batout01: 0, batout02: 0

Zwei Batterien hast du, aber bei keiner etwas rein oder raus. Ist das richtig?
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

Medel


DS_Starter

Ja, man sieht hier in der Stunde 08 zum Beispiel der resultierende Wert über alle Wochentage durchaus bei den im Debug angegebenen 11539 Wh liegt.

08 => ...
      con_all => Sa  @ 11439 18904 14029 12239 6174 12590 7904 15467 2209
                 Di  @ 0 5695 20210 21725 14992 17117 16942 10843 13244
                 Do  @ 6000 14976 9093 13328 17219 6502 18679 3009 11146
                 Mi  @ 1 14873 10007 13645 14130 19165 9861 20532 19677
                 Fr  @ 0 13151 6026 19051 14205 7668 8928 17078 11154
                 So  @ 6674 7886 12137 8168 8283 7802 9006 29915 2014
                 Mo  @ 7803 7309 11639 13365 11050 15886 8846 9154 2865

Ich gehe davon aus, dass die Werte richtig sind. Hast du ein E-Auto was geladen wird?
Wenn ja, kannst du mit der Einstellung:

   plantControl->consForecastIdentWeekdays=1
   plantControl->consForecastLastDays=4  (oder evtl. noch kleiner)

versuchen gegenzusteuern.
Zum Beispiel liegst du an einem Montag zwischen 2865 Wh - 15886 Wh für die Stunde 08:

  Mo  @ 7803 7309 11639 13365 11050 15886 8846 9154 2865

Passt das soweit? Oder gab es in der Vergangenheit eine Fehlkonfiguration in deren Folge so hohe Werte aufgezeichnet wurden?
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

Medel

E-Auto habe ich nicht. Aber es war ein Kommafehler in einer Erzeugung, ich glaube ich habe ihn am Sa geändert. Momentan habe ich noch einen Fehler in der Batterie 1 bei der Beladung festgestellt. Weiß aber noch nicht wie ich den richtigen Wert bekomme. Geht da auch PIN=-POUT

DS_Starter

ZitatGeht da auch PIN=-POUT
Ja, so wie es in der Hilfe zu setupBatteryDevXX beschrieben steht:


Sonderfälle: Sollte das Reading für pin und pout identisch, aber vorzeichenbehaftet sein, können die Schlüssel pin und pout wie folgt definiert werden:

    pin=-pout    (ein negativer Wert von pout wird als pin verwendet)
    pout=-pin    (ein negativer Wert von pin wird als pout verwendet)

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