76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

300P

Meist ist es in den Steuerung inzwischen bereits so vorgesehen das - wenn keine externe Steuerungsbefehle mehr für xx Mintuten oder Sekunden kommen - fällt die WP in den Standartmodus ,,Normalmodus" ohne externe Steuerung zurück.(war bei meiner Brennstoffzelle auch schon so)

Ich kenne aber auch Berichte das nach Ausfall der externen Steuerung die WP-Steuerung einfach so bleibt wie sie ist.

Das ist dann schon sehr suboptimal im täglichen Betrieb............. >:(

Erst nach einen komplettem WP-OFF - etwas warten - ON gehen einige der WP-Steuerungen dann erst wieder in den ,,Normalbetrieb.
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.

TheTrumpeter

Zitat von: 300P am 27 November 2025, 22:08:58Meist ist es in den Steuerung inzwischen bereits so vorgesehen das - wenn keine externe Steuerungsbefehle mehr für xx Mintuten oder Sekunden kommen - fällt die WP in den Standartmodus ,,Normalmodus" ohne externe Steuerung zurück.(war bei meiner Brennstoffzelle auch schon so)
Zitat von: 300P am 27 November 2025, 22:08:58Meist ist es in den Steuerung inzwischen bereits so vorgesehen das - wenn keine externe Steuerungsbefehle mehr für xx Mintuten oder Sekunden kommen - fällt die WP in den Standartmodus ,,Normalmodus" ohne externe Steuerung zurück.(war bei meiner Brennstoffzelle auch schon so)

Ich kenne aber auch Berichte das nach Ausfall der externen Steuerung die WP-Steuerung einfach so bleibt wie sie ist.

Das ist dann schon sehr suboptimal im täglichen Betrieb............. >:(

Erst nach einen komplettem WP-OFF - etwas warten - ON gehen einige der WP-Steuerungen dann erst wieder in den ,,Normalbetrieb.
Zitat von: 300P am 27 November 2025, 22:08:58Erst nach einen komplettem WP-OFF - etwas warten - ON gehen einige der WP-Steuerungen dann erst wieder in den ,,Normalbetrieb.
Bei meiner WP ist vom Hersteller keine "externe Steuerung" vorgesehen, das gute Stück ist aus 2012.

Glücklicherweise lassen sich aber alle Parameter über die Diagnoseschnittstelle verändern, sodass es ein FHEM-Modul dafür gibt.
Meine "Steuerung" besteht also aus Umschalten des Betriebsmodus (Tag/Nacht/Automatik/Hand/Standby), über den verschiedene Sollwerte für Raum- und WW-Temperatur angefahren werden.
Zusätzlich ändere ich teilweise die Parameter direkt, was ich aber versuche möglichst zu vermeiden, um Seiteneffekte durch nicht-erfolgtes Rücksetzen zu verhindern.
Wenn ein Parameter mal geschrieben ist, bleibt der so, weil direkt im EEPROM der Wärmepumpe abgelegt.


Zitat von: ch.eick am 27 November 2025, 15:26:16läuft meine WP bereits ohne FHEM ziemlich optimal in einem Fenster von 10-16 Uhr mit der angesprochenen Tagesanhebung/Nachtabsenkung.
Das entspricht im Wesentlichen meiner Betriebsstrategie zwischen 0845 und 1500.
Wenn sich die WP wg. extremer Kälte bereits vor 0845 einschaltet, schalte ich über FHEM auf "Tagbetrieb", weil sonst das Wärmeintegral in der Wärmepumpe mit der Absenktemperatur berechnet wird und zu früh abgeschaltet würde. Und wenn die WP kurz vor 1500 noch läuft und das Wärmeintegral noch nicht annähernd voll ist, schalte ich ebenfalls auf Tagbetrieb, um den Heizzyklus fortzuführen.

Zitat von: ch.eick am 27 November 2025, 15:26:16Damit spart man sich die ganze Energiekalkulation und den Abgleich mit SF. Die Trefferquote für PV ist sehr hoch.
Jein.
Für kalte Tage gebe ich Dir Recht, denn da läuft die Anlage im obigen Zeitraum typischerweise durch. Damit ist es völlig egal wann die Sonne scheint, die WP "nimmt" das maximal mögliche mit.
Wenn es aber wärmer ist (bei mir mit Sonne über ca. 2-3 °C bzw. ohne Sonne über ca. 4-5 °C), sind die nötigen Laufzeiten kürzer, ebenso außerhalb der 8 kürzesten Wochen des Jahres. An solchen Tagen wäre es durchaus sinnvoll den Einschaltzeitpunkt abhängig von der PV-Prognose zu setzen.

Natürlich ist das individuell vom Haustyp, der eingesetzte Wärmepumpe und den generellen Umweltbedingungen abhängig, sodass man - sofern man das machen möchte - über eine individuelle "Laufzeit-Prognose" der Wärmepumpe nicht umhin kommen wird.

Zitat von: ch.eick am 27 November 2025, 15:26:16Der PV-Modus mit dem Überheizen und WW mit 60°C wird nur verwendet, wenn es heute Überschuss gibt und es morgen zuwenig PV gibt.
Das ist auch so eine Sache... "Überheizen" bringt nur dann was, wenn dadurch tatsächlich insgesamt mehr Eigenstrom verbraucht werden kann (oder bei dynamischen Stromtarifen). Wenn die Wärmepumpe wg. Heizbetrieb ohnehin schon von Sonnenauf- bis Untergang läuft, kann durch eine längere WW-Unterbrechung auch nicht mehr Eigenstrom verbraucht werden. Im Gegenteil sinkt der Wirkungsgrad durch die höhere Vorlauftemperatur, sodass das eigentlich kontraproduktiv ist.
Das einzige was in so einem Szenario sinnvoll wäre, ist die Laufzeit zu verkürzen, was bei PV-Überschuss durch den gezielten Einsatz des Heizstabs erreicht werden könnte, egal ob im Heiz- oder WW-Betrieb. (An Tagen mit kürzerem Heizbedarf verhält es sich natürlich anders.)
Im Heizbetrieb lässt sich bei meiner WP der Heizstab-Einsatz nicht sinnvoll erzwingen, im WW-Betrieb auch erst nach einer Mindestwartezeit von 20 Minuten & ausschließlich durch Manipulation von EEPROM-Parametern, die ich (automatisiert) möglichst vermeiden will.

Wenn ich die Gelegenheit "sehe", mache ich solche Spielchen manchmal händisch, aber damit erwische ich natürlich nur einen Bruchteil der möglichen Zeitpunkte.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

300P

Ja - das größte Problem ist und bleibt niemand erspart.....  O:-)
->>> PV-Energie im Winter ist halt wenig im Winter vorhanden in unserer Gegend. ::)
Just genau dann wenn man "viel" davon in der WP nutzen möchte. ;)

Deshalb halte ich mich mit Eingriffen in die Steuerung noch sehr zurück - auch wenn es bei mir per Modbus / MQTT / EMS-Bus möglich ist.

Bisher nutzte ich den temperaturgesteuerten WW-E-Heater (2 kW) im WW-Speicher für eine Anhebung der Temperatur des WW im Winter (falls ich evtl. mal einspeisen "würde"  :o ) oder gleiches auch im Sommer, immer nur solange genügend Überschuss vorhanden ist.

Also:
An 365 Tagen passt SF bei mir auf, ob länger als 5 Minuten genügend PV-Überschuss vorhanden war/ist und nur dann wird (bzw. bleibt) der WW-E-Heater an bis hin zur max. WW-Temperatur von XY Grad.

Ansonsten macht die WP ihr "Ding" autark. ;)  O:-) 

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.

grappa24

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

#4594
Hallo zusammen,

kurze Info.
Nach anfänglichen Erfolgen hat sich mein NN als untauglich erwiesen. Meine bisherige Legacy Lösung bringt bessere und stabilere Prognosen für den Standardverbrauch auf kurzer Distanz. Ich werde einen neuen Anlauf mit dem Modul AI::FANN nehmen. Aber auch dieses Modell ist als FeedForeward eher ungeeignet langfristige Muster und saisonale Abhängigkeiten zu erkennen. Dafür braucht man ein LSTM Netz. Diese Architektur ist mit AI::MXNET gegeben. Allerdings braucht man dazu noch einen Python Server um damit MXNET einfach zu installieren. Alles machbar, aber das Gesamtkonstrukt wird natürlich komplexer. Um weitere Lernerfolge und Erfahrungen zu generieren, werde ich zunächst auf AI::FANN setzen.
Komme ich damit voran, würde ich dafür einen separaten Thread aufmachen damit interessierte Mitstreiter mitarbeiten können ohne diesen Thread zu sehr abdriften zu lassen.

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, seit gestern habe ich plötzlich ein Problemchen. Das einzige was ich bewusst geändert hatte war eine Erhöhung des Wertes UpSoc um 5% auf 60%. Seit dem wird mir ein viel zu hoher Wert im Consumption Forecast angezeigt. Es sind jetzt jeden Tag so um die 50 kWh; normal wäre zwischen 12 - 16 kWh.

Eine Debugeinstellung ergab, dass jeden Tag um 17 Uhr ein absurder Wert im confc steht. Hier mal ein Auszug:

2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> ################### Consumption forecast for the next day (new median) ###################
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> estimated cons Tomorrow: 54659 Wh, Individual hourly values considered: 720, exclude: 2038 Wh (avg of 72 entities)
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> ################### Store Consumption forecast values (new median) ###################
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour00' hod '13' confc: 1138, confcEx: 1138
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '13' confc: 1138
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour01' hod '14' confc: 1040, confcEx: 1040
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '14' confc: 1040
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour02' hod '15' confc: 834, confcEx: 834
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '15' confc: 834
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour03' hod '16' confc: 790, confcEx: 790
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '16' confc: 790
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour04' hod '17' confc: 38957, confcEx: 38957
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '17' confc: 38957
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour05' hod '18' confc: 853, confcEx: 853
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '18' confc: 853
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour06' hod '19' confc: 751, confcEx: 751
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '19' confc: 751
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour07' hod '20' confc: 705, confcEx: 705
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '20' confc: 705
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour08' hod '21' confc: 597, confcEx: 597
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '21' confc: 597
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour09' hod '22' confc: 517, confcEx: 517
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '22' confc: 517
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour10' hod '23' confc: 408, confcEx: 408
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '23' confc: 408
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour11' hod '24' confc: 378, confcEx: 378
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store circular/history hod '24' confc: 378
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour12' hod '01' confc: 365, confcEx: 365
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour13' hod '02' confc: 364, confcEx: 364
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour14' hod '03' confc: 359, confcEx: 359
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour15' hod '04' confc: 366, confcEx: 366
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour16' hod '05' confc: 371, confcEx: 371
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour17' hod '06' confc: 423, confcEx: 423
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour18' hod '07' confc: 547, confcEx: 547
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour19' hod '08' confc: 697, confcEx: 697
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour20' hod '09' confc: 683, confcEx: 683
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour21' hod '10' confc: 849, confcEx: 849
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour22' hod '11' confc: 1051, confcEx: 1051
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour23' hod '12' confc: 1226, confcEx: 1226
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour24' hod '13' confc: 1138, confcEx: 1138
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour25' hod '14' confc: 1040, confcEx: 1040
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour26' hod '15' confc: 834, confcEx: 834
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour27' hod '16' confc: 790, confcEx: 790
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour28' hod '17' confc: 38957, confcEx: 38957
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour29' hod '18' confc: 853, confcEx: 853
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour30' hod '19' confc: 751, confcEx: 751
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour31' hod '20' confc: 705, confcEx: 705
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour32' hod '21' confc: 597, confcEx: 597
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour33' hod '22' confc: 517, confcEx: 517
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour34' hod '23' confc: 408, confcEx: 408
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour35' hod '24' confc: 378, confcEx: 378
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour36' hod '01' confc: 365, confcEx: 365
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour37' hod '02' confc: 364, confcEx: 364
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour38' hod '03' confc: 359, confcEx: 359
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour39' hod '04' confc: 366, confcEx: 366
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour40' hod '05' confc: 371, confcEx: 371
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour41' hod '06' confc: 423, confcEx: 423
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour42' hod '07' confc: 547, confcEx: 547
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour43' hod '08' confc: 697, confcEx: 697
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour44' hod '09' confc: 683, confcEx: 683
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour45' hod '10' confc: 849, confcEx: 849
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour46' hod '11' confc: 1051, confcEx: 1051
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour47' hod '12' confc: 1226, confcEx: 1226
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour48' hod '13' confc: 1138, confcEx: 1138
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour49' hod '14' confc: 1040, confcEx: 1040
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour50' hod '15' confc: 834, confcEx: 834
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour51' hod '16' confc: 790, confcEx: 790
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour52' hod '17' confc: 38957, confcEx: 38957
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour53' hod '18' confc: 853, confcEx: 853
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour54' hod '19' confc: 751, confcEx: 751
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour55' hod '20' confc: 705, confcEx: 705
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour56' hod '21' confc: 597, confcEx: 597
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour57' hod '22' confc: 517, confcEx: 517
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour58' hod '23' confc: 408, confcEx: 408
2025.12.03 12:45:43 1: PV_Vorhersage DEBUG> store 'NextHour59' hod '24' confc: 378, confcEx: 378

Ein get pvHistory 04 (also für den heutigen Tag) ergibt folgendes:

04 => 01 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.099998546, etotali02: 1288495.13086885, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 365, con: 372, gcons: 819, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 8, sunalt: -63
            batintotal01: 1235767.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145911.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 10240
            batsoc01: 100.0, batsoc02: -, batsoc03: -, socwhsum: 10240
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 446, batin02: -, batin03: -
            batout01: 0, batout02: -, batout03: -
            weatherid: 101, wcc: 40, rr1c: 0.00, pvcorrf: 1.00/- temp: 25.40,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.729, csme04: 0.00, minutescsm04: 0
            csmt05: 142394.123, csme05: 1.26, minutescsm05: 60
            csmt06: 561837.621, csme06: 122.78, minutescsm06: 60
            csmt07: 31472.889, minutescsm07: 0
            csmt08: 8473.249, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      02 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.199998546, etotali02: 1288496.06909596, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 364, con: 339, gcons: 339, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 37, sunalt: -59
            batintotal01: 1236213.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145911.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 10240
            batsoc01: 100.0, batsoc02: -, batsoc03: -, socwhsum: 10240
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 0, batin02: -, batin03: -
            batout01: 1, batout02: -, batout03: -
            weatherid: 103, wcc: 89, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.20,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.729, csme04: 0.00, minutescsm04: 0
            csmt05: 142395.606, csme05: 1.47, minutescsm05: 60
            csmt06: 561962.226, csme06: 122.53, minutescsm06: 60
            csmt07: 31473.484, minutescsm07: 0
            csmt08: 8473.925, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      03 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.199998546, etotali02: 1288496.15093387, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 359, con: 377, gcons: 376, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 58, sunalt: -52
            batintotal01: 1236213.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145912.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 10120
            batsoc01: 98.9, batsoc02: -, batsoc03: -, socwhsum: 10127
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 0, batin02: -, batin03: -
            batout01: 1, batout02: -, batout03: -
            weatherid: 101, wcc: 70, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.60,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.729, csme04: 0.00, minutescsm04: 0
            csmt05: 142396.877, csme05: 1.26, minutescsm05: 60
            csmt06: 562087.894, csme06: 125.64, minutescsm06: 60
            csmt07: 31474.101, minutescsm07: 0
            csmt08: 8474.621, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      04 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.299998546, etotali02: 1288496.26391162, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 366, con: 371, gcons: 371, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 74, sunalt: -43
            batintotal01: 1236213.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145913.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 10110
            batsoc01: 98.8, batsoc02: -, batsoc03: -, socwhsum: 10117
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 0, batin02: -, batin03: -
            batout01: 0, batout02: -, batout03: -
            weatherid: 100, wcc: 0, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.70,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.938, csme04: 0.21, minutescsm04: 0
            csmt05: 142398.36, csme05: 1.47, minutescsm05: 60
            csmt06: 562212.638, csme06: 122.59, minutescsm06: 60
            csmt07: 31474.72, minutescsm07: 0
            csmt08: 8475.316, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      05 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.299998546, etotali02: 1288496.44077717, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 371, con: 356, gcons: 355, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 86, sunalt: -33
            batintotal01: 1236213.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145913.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 10100
            batsoc01: 98.7, batsoc02: -, batsoc03: -, socwhsum: 10107
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 0, batin02: -, batin03: -
            batout01: 1, batout02: -, batout03: -
            weatherid: 103, wcc: 100, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.70,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.938, csme04: 0.00, minutescsm04: 0
            csmt05: 142399.631, csme05: 1.26, minutescsm05: 60
            csmt06: 562337.071, csme06: 124.42, minutescsm06: 60
            csmt07: 31475.327, minutescsm07: 0
            csmt08: 8476.006, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      06 => pvapifcraw: 0, pvfc: 0, pvrl: 0, pvrlvd: 1, plantderated: -, rad1h: 0
            etotali01: 595807.399998546, etotali02: 1288496.63046579, etotali03: 3627039.34900022, etotali04: -, etotali05: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 423, con: 372, gcons: 32, conprice: -
            gfeedin: 0, feedprice: -
            DoN: 0, sunaz: 97, sunalt: -24
            batintotal01: 1236213.4, batintotal02: -, batintotal03: -
            batouttotal01: 1145914.1, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 9433
            batsoc01: 93.7, batsoc02: -, batsoc03: -, socwhsum: 9595
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: 0, batin02: -, batin03: -
            batout01: 340, batout02: -, batout03: -
            weatherid: 103, wcc: 98, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.90,
            csmt01: 162867.254, csme01: 0.00, minutescsm01: 0
            csmt02: 4359959.83999965, csme02: 0.00, minutescsm02: 0
            csmt03: 357718, csme03: 0.00, minutescsm03: 0
            csmt04: 77664.938, csme04: 0.00, minutescsm04: 0
            csmt05: 142400.479, csme05: 0.84, minutescsm05: 41
            csmt06: 562422.607, csme06: 85.52, minutescsm06: 41
            csmt07: 31475.746, minutescsm07: 0
            csmt08: 8476.469, minutescsm08: 0
            csmt09: 145423.779, minutescsm09: 0
           
      07 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 547, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 108, sunalt: -14
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 8804
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 95, rr1c: 0.00, pvcorrf: 1.00/- temp: -1.00,
           
      08 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 700, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 119, sunalt: -5
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 7999
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 93, rr1c: 0.00, pvcorrf: 1.00/- temp: -1.00,
           
      09 => pvapifcraw: 61, pvfc: 57, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 40
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 685, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 130, sunalt: 4
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 7277
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 92, rr1c: 0.00, pvcorrf: 1.37/0.73 temp: -1.00,
           
      10 => pvapifcraw: 302, pvfc: 302, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 200
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 844, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 142, sunalt: 10
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6654
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 90, rr1c: 0.00, pvcorrf: 1.00/- temp: -0.70,
           
      11 => pvapifcraw: 594, pvfc: 641, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 420
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 1066, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 155, sunalt: 15
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6165
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 89, rr1c: 0.00, pvcorrf: 1.00/- temp: 0.20,
           
      12 => pvapifcraw: 807, pvfc: 721, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 590
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 1245, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 169, sunalt: 18
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6144
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 85, rr1c: 0.00, pvcorrf: 0.89/0.87 temp: 1.00,
           
      13 => pvapifcraw: 899, pvfc: 1500, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 660
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 1158, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 184, sunalt: 19
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6442
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 83, rr1c: 0.00, pvcorrf: 1.15/0.72 temp: 2.20,
           
      14 => pvapifcraw: 891, pvfc: 1075, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 640
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 1059, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 198, sunalt: 17
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6456
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 82, rr1c: 0.00, pvcorrf: 1.00/- temp: 2.90,
           
      15 => pvapifcraw: 728, pvfc: 415, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 490
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 846, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 212, sunalt: 13
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6144
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 80, rr1c: 0.00, pvcorrf: 0.57/0.73 temp: 3.30,
           
      16 => pvapifcraw: 357, pvfc: 287, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 230
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 796, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 225, sunalt: 7
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 6144
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 80, rr1c: 0.00, pvcorrf: 1.00/- temp: 3.40,
           
      17 => pvapifcraw: 62, pvfc: 28, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 40
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 38947, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 1, sunaz: 236, sunalt: -0
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 3, wcc: 87, rr1c: 0.00, pvcorrf: 0.51/0.04 temp: 3.00,
           
      18 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 842, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 247, sunalt: -10
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 88, rr1c: 0.00, pvcorrf: 1.00/- temp: 2.60,
           
      19 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 775, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 258, sunalt: -19
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 92, rr1c: 0.00, pvcorrf: 1.00/- temp: 2.00,
           
      20 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 705, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 268, sunalt: -29
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 94, rr1c: 0.00, pvcorrf: 1.00/- temp: 1.50,
           
      21 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 611, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 280, sunalt: -39
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 94, rr1c: 0.00, pvcorrf: 1.00/- temp: 1.00,
           
      22 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 519, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 294, sunalt: -48
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 95, rr1c: 0.00, pvcorrf: 1.00/- temp: 0.90,
           
      23 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 411, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 313, sunalt: -56
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 95, rr1c: 0.00, pvcorrf: 1.00/- temp: 0.70,
           
      24 => pvapifcraw: 0, pvfc: 0, pvrl: -, pvrlvd: -, plantderated: -, rad1h: 0
            etotali01: -, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: -, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 380, con: -, gcons: -, conprice: -
            gfeedin: -, feedprice: -
            DoN: 0, sunaz: 338, sunalt: -62
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: 1024
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: 1, lcintimebat02: -, lcintimebat03: -
            strategybat01: smartPower, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 103, wcc: 97, rr1c: 0.00, pvcorrf: 1.00/- temp: 0.70,
           
      99 => pvapifcraw: -, pvfc: 5026, pvrl: 0, pvrlvd: -, plantderated: -, rad1h: -
            pvrl01: 0, pvrl02: 0, pvrl03: 0, pvrl04: -, pvrl05: -
            pprl01: -, pprl02: -, pprl03: -
            confc: 54384, con: 2187, gcons: 2292, conprice: -
            gfeedin: 0, feedprice: -
            DoN: -, sunaz: -, sunalt: -
            batin01: 446, batin02: -, batin03: -
            batout01: 343, batout02: -, batout03: -
            batmaxsoc01: 100.0, batmaxsoc02: -, batmaxsoc03: -
            batsetsoc01: 60, batsetsoc02: -, batsetsoc03: -
            dayname: Do,
            cyclescsm01: 0, csme01: 0.00
            cyclescsm02: 0, csme02: 0.00
            cyclescsm03: 0, csme03: 0.00
            cyclescsm04: 0, csme04: 0.21
            cyclescsm05: 1, csme05: 7.56, hourscsme05: 5.68, avgcycmntscsm05: 341.00
            cyclescsm06: 1, csme06: 703.48, hourscsme06: 5.68, avgcycmntscsm06: 341.00
            cyclescsm07: 0
            cyclescsm08: 0
            cyclescsm09: 0

Ich habe jetzt versucht mit set PV_Vorhersage reset consumptionHistory 04 17 und mit set PV_Vorhersage reset pvHistory 04 17 diesen zu hohen confc Wert wegzubekommen. Aber leider ohne Erfolg. Er bleibt erhalten und vererbt sich von Tag zu Tag.
Jetzt bin ich leider mit meinem Latein am Ende. Was kann ich noch tun?

DS_Starter

#4596
Guten Abend,

deine Verbrauchsprognose wird sich vermutlich auf vergangenge Werte in der pvhistory vor dem 04.12. stützen.
Du müsstest nachschauen, ab du in den aufgezeichneten vergangenen Tagen 16:00 (hod 17! (Stunde des Tages)) einen Ausreißer in der pvhistory findest. Den müßte man dann löschen mit:

set <name> reset consumptionHistory <Tag> <Stunde>
Vermutlich mußt du nicht weit zurück schauen, da das Problem erst seit kurzem besteht.

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

klaus.schauer

Zitat von: Max_Meyer am 26 November 2025, 08:43:41
Zitat von: DS_Starter am 14 November 2025, 16:48:10Für einen Consumertyp "HeatPump" könnte sich jemand ähnliche Gedanken machen wegen möglicher Besonderheiten
habe zum o.g. Topic mal meine Ideen und Erfahrungen aus 5 Jahren  WP-PV-Kopplung zusammengeschrieben. [...]
Unbedingt notwendig ist der prognostizierte 24h Energiebedarf der WP.
Zwei Varianten kann man unterscheiden. Die Steuerung der Batterieladung und der Wärmepumpe auf Basis von festen oder variablen Energiepreisen.

Feste Energiekosten
Das vorliegende Konzept basiert auf festen Tarifen. Der Schwerpunkt liegt darauf, dass die Wärmepumpe auf Basis von Prognosen und direkten Eingriffen in die Wärmepumpensteuerung die erzeugte PV-Energie optimal abruft.

Im ersten Schritt sollte SolarForecast aber die Standardfunktionen wie die PV-Ready-Funktion der Wärmepumpen unterstützen. Neben der PV-Ready-Funktion zur Nachheizung, die allgemein verfügbar ist, ermöglichen z. B. die Vaillant Wärmpumpen ein stufenweises Nachheizen des Heizungspuffer- und Warmwasserspeichers. Deshalb wäre es sinnvoll, dafür zwei Steuerbefehle zur Einschaltung der Funktionen zur Verfügung zu stellen. Der optimale Zeitpunkt  zur Ansteuerung und die Dauer wird in diesem Fall innerhalb von SolarForecast berechnet. Falls man nur ein Steuersignal zur Verfügung stellen will, könnte man zwei getrennte virtuelle Wärmepumpen für Heizung und Warmwasser definieren. Optional könnte man parallel die aktuell zur Verfügung stehende Leistung bereitstellen.

Variable Energiekosten
Mit variable Tarifen kann man zusätzlich ein paar Euro sparen, wenn man zu Niedrigtarifzeiten Energie in die Batterie sowie die Heizungspuffer- und Warmwasserspeicher einbringt.
Einsparungen lassen sich insbesondere durch die reduzierten Netzentgelte nach § 14a EnWG, Modul 3 erzielen. Bei meinem Netzbetreiber sinkt in der Zeit von 0 bis 6 Uhr das Netzentgelt von 11,88 ct/kWh auf 1,19 ct/kWh. Das ist m. E. für PV-Anlagen-Betreiber in Verbindung mit einer Wärmepumpe planbarer und attraktiver als der EPEX Spot Day-Ahead Tarif.

Um die Batterie in den Nachtstunden mit Niedrigtarif optimal zu laden,  sollte die Verbrauchsprognose für die folgenden Stunden bis zur einsetzenden Ladung durch die PV-Elemente oder auch für den gesamten Tag stundenweise hinreichend genau sein.

Für die Energiebedarfsprognose einer Wärmepumpe reichen wenige deterministische Daten. Vom Gebäude sollten der Verlustkoeffizient H [W/K] aus Heizlastberechnung (DIN EN 12831), die Wärmekapazität des Gebäudes C [Wh/K] und COP-Wert der Wärmepumpe bekannt sein oder abgeschätzt werden. Als Wetterdaten werden die Prognosen für Außentemperatur und die Windgeschwindigkeit benötigt. Die Sollinnentemperatur kann über die hinterlegten Zeitfenster der Heizung abgebildet werden.  Aus diesen Daten lässt sich die benötigte Eingangsleistung und der Energiebedarf z. B. in Stundenintervallen abschätzen. Über die Wärmekapazität C und die Windgeschwindigkeit kann zusätzlicher dynamischer Energiebedarf beim Aufheizen und durch Infiltrationswärmeverluste berücksichtigt werden.

Auf Basis dieses deterministisch berechneten Energiewertes kann dann ein Prognoseverfahren insbesondere die angelernten nutzerspezifischen Besonderheiten über einen Korrekturfaktor einfließen lassen.

Zusätzlich zu der Steuerlogik, die für die Variante "Feste Energiekosten" verwendet wird, wäre  es bei bei variablen Energiekosten notwendig, dass SolarForecast in den Niedrigtarifzeiten eine Batterieladung  mit Angabe der benötigten - konstanten - Ladeleistung bzw. eine Entladesperre  signalisiert.

Weiterhin sollten in den Niedrigtarifzeiten Signale zum Nachheizen des Heizungspuffer- und Warmwasserspeichers oder auch einer Fahrzeugbatterie gegeben werden.

Als drittes Element sollte SolarForecast in Hochtarifzeiten ein Sperrsignal für steuerbare Verbraucher ausgeben, falls die Batterie die prognostizierten Verbräuche nicht abdecken könnte. So könnte man z. B. eine nicht dringend notwendig Aufladung des Warmwasserspeichers oder der Fahrzeugbatterie hinauszögern.

Ideensammlung und Umsetzung
Zur praktischen Erprobung und Visualisierung habe ich ein paar Hilfsroutinen erstellt, die zusätzliche Readings und Internals in SolarForecast bereitstellen:
   - aktueller Modus 3 Tarif: gridTariff
   - aktueller Modus 3 Energiepreis: gridEnergyFixedPrice
   - aktueller Modus 3 / EPEX Spot Day-Ahead Energiepreis: gridEnergySpotPrice
   - berechneter stündlicher Energiebedarf: consumer01_consumptionCalc_Current, consumer01_consumptionCalc_NextHourXX
   - berechneter dynamischer stündlicher Energiebedarf: consumer01_consumptionCalcDyn_Current, consumer01_consumptionCalcDyn_NextHourXX

Die EPEX Spot Day-Ahead Preise werden täglich abgerufen und für den aktuellen Tag und den Folgetag in Internals gespeichert, um diese in Prognoseverfahren ggf. zu berücksichtigen.

Derzeit nutze ich zur Berechnung der Nachladeenergie in der Niedrigtarifzeit die Steuergrößen Battery_OptimumTargetSoC_XX und gridTariff. Im ersten Schritt sollte es im Rahmen der laufenden Optimierung der Verbrauchsprognose ausreichen, den deterministisch berechneten Energiebedarf bei Wärmepumpen zu berücksichtigen. Das sollte ja entsprechend in  Battery_OptimumTargetSoC_XX einfließen.

Bei Interesse stelle ich die Routinen als Basis für eine individuelle Anpassung zur Verfügung.

Insgesamt sollte man aber realistisch sein, was die Prognosegenauigkeit auch bei der deterministischen Berechnung angeht. Die Berechnung mit Hilfe der Gebäude-, Geräte- und Wetterdaten fußt auf fachlich anerkannten Methoden, kann aber dennoch nur eine Näherung auf Basis von mehr oder weniger guten Annahmen sein.

Auch lassen sich die Energiekosten nur überschaubar senken. Theoretisch könnte ich bei mir durch vollständige Verlagerung des Verbrauchs in die Niedrigtarifzeit nach § 14a EnWG, Modul 3 max. ca. 250 € / a sparen. Das wird weder damit noch mit EPEX Spot Day-Ahead Tarifen auch nur  näherungsweise erreichbar sein. Also eher eine kleine Unterstützung der Energiewende.

Augenblickich hole ich mir die Prognosen zur Windgeschwindigkeit über das Modul DWD_OpenData. Könnte man die stündlichen Prognosen zur Windgeschwindigkeit (FF-Werte) auch intern in inSolarForecast (valCurrent, nextHours) zusätzlich zur Temperatur ablegen?

Wolle02

#4598
Zitat von: DS_Starter am 04 Dezember 2025, 18:12:11deine Verbrauchsprognose wird sich vermutlich auf vergangenge Werte in der pvhistory vor dem 04.12. stützen.
Du müsstest nachschauen, ab du in den aufgezeichneten vergangenen Tagen 16:00 (hod 17! (Stunde des Tages)) einen Ausreißer in der pvhistory findest. Den müßte man dann löschen mit:

set <name> reset consumptionHistory <Tag> <Stunde>
Vermutlich mußt du nicht weit zurück schauen, da das Problem erst seit kurzem besteht.


Ich habe jetzt die gesamte pvHistory durchgeschaut und der einzige Tag mit dem absurden Wert ist immer nur der aktuelle. Ich habe den gestrigen 17h Wert mit set <name> reset consumptionHistory <Tag> <Stunde> gelöscht, aber heute steht der Wert wieder drin; siehe Bild.
Ich habe jetzt nochmal den 03., 04. und 05. Tag den 17h Wert gelöscht. Am 03. und 04. fehlt der 17h Wert jetzt. Für den aktuellen Tag lässt er sich nicht löschen; steht für heute weiter drin und wird sich auf morgen wieder vererben.

Ich habe noch ein Debug consumption_log gemacht. (siehe Anhang)


Aber außer den hohen 17h Werten kann ich da nichts weiter rauslesen.