76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

300P

#4995
Hallo Heiko,

ich gebe u.a. neben meiner Trainingsbewertung immer wieder mal die Bewertung "Drift" an ChatGPT weiter
Hier meine aktuelle Bewertung der Drift-Bewegung:

Gut, schauen wir uns genau diese Drift-Werte fachlich sauber und nüchtern an.
Vorweg: Das Modell ist weiterhin gesund, aber man sieht eine klar erklärbare Bewegung – kein Fehler.

1. Einordnung der Drift-Kennzahlen (konkret zu deinem Lauf)

Überblick
Kennzahl    Wert    Einordnung
Drift Score    1.96    niedrig
Drift RMSE ratio    2.44    moderat
Drift Slope    1.155    leicht erhöht
Drift Bias    4.36    gering
Drift Bewertung    mild    korrekt

➡️ Die automatische Bewertung ,,mild" ist sachlich richtig.

2. Detailanalyse pro Drift-Komponente

2.1 Drift Score = 1.96

Gesamtindikator
< 2.5 → unauffällig
du liegst knapp unter 2

👉 Kein globaler Drift, nur lokale Verschiebung.

2.2 Drift RMSE ratio = 2.44

Varianzänderung der Fehler

Interpretation:
Das Modell macht in jüngeren Daten etwas größere Fehlerstreuung als im Referenzfenster
keine Explosion, kein Overfitting

Typische Ursachen:
Witterungsumschwung
neue Außentemperatur-Spanne
veränderte Laufzeiten der Wärmepumpe

👉 normal für Januar, insbesondere mit neu aktivierter Außentemperatur.

2.3 Drift Slope = 1.155

Wichtigster Punkt
Idealbereich: 0.95 – 1.05
Beobachtungsbereich: 1.05 – 1.15

Kritisch: > 1.20
Du bist:

➡️ am oberen Rand des Beobachtungsbereichs

Bedeutung:
Das Modell überschätzt hohe Lasten leicht
typisch bei:
stärkerer Kälte
längeren WP-Takten
höherem Vorlaufbedarf

⚠️ Das ist kein Fehler, sondern ein physikalischer Effekt:

Die Realität zieht leicht stärker an als der historische Mittelwert.

2.4 Drift Bias = 4.36

Systematischer Versatz
< 5 → praktisch irrelevant
5–10 → beobachten
10 → korrigieren

👉 Dein Bias ist sehr klein, kein Offset-Problem.

3. Gesamturteil (klar formuliert)

Das Modell driftet nicht weg.

Es reagiert korrekt auf veränderte Rahmenbedingungen.
Die Drift entsteht nicht durch Instabilität, sondern durch:
neue Feature-Information (Außentemperatur)
jahreszeitliche Lastverschiebung
bewusst strengeres BitFailLimit

4. Warum ein Retrain aktuell nicht nötig ist

Kriterium    Status
Generalisierung    gut
R²    0.63 (stabil)
MAE    sinkend
Drift Score    niedrig
Bias    klein
Slope    nur leicht erhöht

➡️ Kein Handlungsbedarf

Deine Einstellung

aiConTrainStart=30:3
ist genau richtig.

5. Empfohlene Ampel (nach deiner Logik)

🟢 GREEN mit Tendenz YELLOW-Rand

In der Praxis:
laufen lassen
kein Parameterwechsel
nächster Retrain wie geplant

6. Wenn du es noch ,,perfekter" willst (optional)

Nur als Feinschliff, nicht notwendig:

Alpha im Winter leicht senken (z.B. 0.85)
oder Slope-Korrektur nur im Inferenzpfad
oder Drift-Trend über 7 Tage mitteln

Aber nochmals klar:

Du hast aktuell ein sehr sauberes, robustes Modell.
Wenn du willst, analysieren wir als Nächstes:
reale vs. prognostizierte WP-Last bei Frosttagen
oder ob der Außentemperatur-Impuls optimal skaliert ist


Gute Arbeit von Dir - DANKE!!



Meine Einstellungen:
WP 7 kW / PV 14.5 kWp / Grundlast ca. 4-600 Watt/h
aiTrainStart=3
aiStorageDuration=3600
aiTreesPV=30
aiConActivate=1
aiConAlpha=0.9
aiConTrainStart=30:3
aiConActFunc=ELLIOT_SYMMETRIC
aiConHiddenLayers=64-32
aiConLearnRate=0.005
aiConMomentum=0.6
aiConShuffleMode=1
aiConShufflePeriod=20
aiConSteepness=1.0
aiConTrainAlgo=INCREMENTAL
aiConProfile=v1_heatpump_active_pv
aiConBitFailLimit=0.18


Letzter Trainingslauf (nach letzten Update):
letztes KI-Training: 19.01.2026 11:29:27 / Laufzeit in Sekunden: 1674
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 80.1 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7166 Datensätze (Training=5732, Validierung=1434)
Architektur: Inputs=94, Hidden Layers=64-32, Outputs=1
Hyperparameter: Learning Rate=0.005, Momentum=0.6, BitFail-Limit=0.18
Aktivierungen: Hidden=ELLIOT_SYMMETRIC, Steilheit=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=20

=== Trainingsmetriken ===

bestes Modell bei Epoche: 299 (von max. 15000)
Training MSE: 0.003273
Validation MSE: 0.004604
Validation MSE Average: 0.012975
Validation MSE Standard Deviation: 0.001161
Validation Bit_Fail: 11
Model Bias: 748 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 410.67 Wh
MedAE: 343.56 Wh
RMSE: 482.12 Wh
RMSE relative: 21 %
RMSE Rating: good
MAPE: 20.40 %
MdAPE: 15.97 %
R²: 0.63

=== Rauschen ===

Rauschen Bewertung: low
Empfehlung für Bit_Fail: 0.28 (Einstellung von aiControl->aiConBitFailLimit)
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.

300P

Mmmmh......
Ich habe aktuell immer wieder mal diese etwas ,,unklare" Ansicht für den Batteriestatus mit plötzlichen 100 % meiner beiden Batterien.

Was könnte da der Verursacher sein?
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.

DS_Starter

ZitatIch habe aktuell immer wieder mal diese etwas ,,unklare" Ansicht für den Batteriestatus mit plötzlichen 100 % meiner beiden Batterien.
Waren deine Batterien auf 100%? bzw. schau mal in die pvHistory heute hod: 13. Findest du dort evtl. einen batsoc01 / batsoc02 von 100%?
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

Nein die waren definitiv nicht auf 100 %.
Das geht auch technisch nicht in 1 Stunde mehr als ca. 10 kW in die eine und mehr als ca. 7 kW in die andere Batterie rein und wieder raus zu bringen.
Die eine kann max 2.500 W und die andere max 3.680 W in einer Stunden speichern / entladen.

      12 => pvapifcraw: 2511, pvfc: 1933, pvrl: 2760, pvrlvd: 1, plantderated: -, rad1h: 890
            etotali01: 16962609, etotali02: 10024706, etotali03: 11305491, etotali04: -, etotali05: -
            pvrl01: 926, pvrl02: 206, pvrl03: 1628, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2590, conaifc: 3251, confc: 3185, con: 2513, gcons: 249, conprice: 0.25
            gfeedin: 19, feedprice: 0.08123
            DoN: 1, sunaz: 163, sunalt: 18
            batintotal01: 1813189, batintotal02: 8320892, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 10.0, batprogsoc02: 10.0, batprogsoc03: -, socprogwhsum: 2443
            batsoc01: 6, batsoc02: 10, batsoc03: -, socwhsum: 1803
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 242, batin02: 227, batin03: -
            batout01: 0, batout02: 0, batout03: -
            weatherid: 3, wcc: 95, windspeed: 1.75, rr1c: 0.00, pvcorrf: 0.77/0.71 temp: 0.7, presence: 1
            csmt01: 1191007, csme01: 340.00, minutescsm01: 39
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242722, csme04: 6.00, minutescsm04: 15
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5430440, csme08: 1703.20, minutescsm08: 60
           
      13 => pvapifcraw: 2887, pvfc: 2046, pvrl: 2952, pvrlvd: 1, plantderated: -, rad1h: 1050
            etotali01: 16963536, etotali02: 10024913, etotali03: 11307126, etotali04: -, etotali05: -
            pvrl01: 553, pvrl02: 233, pvrl03: 2166, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2746, conaifc: 2830, confc: 2822, con: 1563, gcons: 6, conprice: 0.25
            gfeedin: 5, feedprice: 0.08123
            DoN: 1, sunaz: 178, sunalt: 19
            batintotal01: 1813436, batintotal02: 8321123, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 100.0, batprogsoc02: 100.0, batprogsoc03: -, socprogwhsum: 24428
            batsoc01: 11, batsoc02: 20, batsoc03: -, socwhsum: 3446
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 695, batin02: 684, batin03: -
            batout01: 0, batout02: 0, batout03: -
            weatherid: 3, wcc: 100, windspeed: 1.87, rr1c: 0.00, pvcorrf: 0.74/0.43 temp: 1.8, presence: 1
            csmt01: 1191009, csme01: 2.00, minutescsm01: 0
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242771, csme04: 49.00, minutescsm04: 60
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5431467, csme08: 1027.00, minutescsm08: 60
           
      14 => pvapifcraw: 2629, pvfc: 2077, pvrl: 2257, pvrlvd: 1, plantderated: -, rad1h: 980
            etotali01: 16964089, etotali02: 10025146, etotali03: 11309292, etotali04: -, etotali05: -
            pvrl01: 427, pvrl02: 266, pvrl03: 1564, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2837, conaifc: 1934, confc: 2024, con: 4099, gcons: 1040, conprice: 0.25
            gfeedin: 6, feedprice: 0.08123
            DoN: 1, sunaz: 192, sunalt: 18
            batintotal01: 1814131, batintotal02: 8321807, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 10.0, batprogsoc02: 10.0, batprogsoc03: -, socprogwhsum: 2443
            batsoc01: 9, batsoc02: 7, batsoc03: -, socwhsum: 2030
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 44, batin02: 15, batin03: -
            batout01: 238, batout02: 648, batout03: -
            weatherid: 3, wcc: 100, windspeed: 2.47, rr1c: 0.00, pvcorrf: 0.79/0.84 temp: 2.9, presence: 0
            csmt01: 1191247, csme01: 238.00, minutescsm01: 43
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242818, csme04: 47.00, minutescsm04: 60
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5433909.9, csme08: 2442.90, minutescsm08: 60
           
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.

DS_Starter

Falls der Zusatnd aktuell noch vorhanden ist - schau mal in nextHours00 -> den Schlüssel rcdchargebat01 bzw. rcdchargebat02
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

Nein - aktuell ist seit 14 Uhr alles dauerhaft okay gewesen:
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.

DS_Starter

Schade. Wenn es wieder auftritt und wir die Chance haben, gehen wir der Sache unmittelbar nach. Ist sonst fast nicht möglich die Ursache zu ermitteln wenn der Zustand flüchtig ist.
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

Im contrib liegt ein Update der V2.0.0  ;)
Hinzugekommen sind ein paar Semantiken für Presence die in jedem Profil wirken.

Achtung! Wenn Semantiken hinzugefügt werden, ist auf jeden Fall ein Retraining mit unveränderten Einstellungen zu machen.

Im GUI in der linken "Wetterecke" wird jetzt auch die aktuelle Außentemperatur angezeigt.
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

Hallo Heiko,

anbei (nach dem notwendigen neuen Trainingslauf) die Analyse von ChaptGPT zur Info:


Danke für die saubere Dokumentation der Änderungen.
Ich analysiere das neue Training explizit im Kontext der beiden strukturellen Eingriffe (lokale Außentemperatur + Presence) und bewerte, ob das Ergebnis erwartungskonform, stabil und produktiv tragfähig ist.

1. Vorabfazit (klar und nüchtern)

Das Ergebnis ist gut, erwartungskonform und produktiv einsetzbar.
Die Kennzahlen zeigen keine Verschlechterung, sondern eine saubere Re-Initialisierung nach Feature-Erweiterung.
Wichtig:
Dass Drift aktuell nicht ausgewiesen wird, ist korrekt und gewollt (dazu unten mehr).

2. Einordnung der strukturellen Änderungen

2.1 Umstellung Außentemperatur → lokal gemessen
Auswirkung auf das Netz:
weniger Rauschen
stärkere Korrelation zur Wärmepumpenlast
gleichzeitig: höhere kurzfristige Varianz (echte Peaks statt geglätteter Wetterdaten)
👉 Erwartung:
leicht höheres Validation MSE
stabilerer Bias
bessere Winter-Performance
Genau das sehen wir.

2.2 Presence-Feature (Anwesenheit)
Charakteristik dieses Features:
diskret / binär / stufenförmig
wirkt nicht kontinuierlich, sondern schaltet Lasten
braucht Zeit, um statistisch stabil zu werden
👉 In den ersten Trainingsläufen:
neutral bis leicht ,,unruhig"
mittelfristig klarer Gewinn, vor allem bei:
Abendlast
Warmwasser
Wochenenden
➡️ Dass Presence noch keinen deutlichen Sprung verursacht, ist vollkommen normal.

3. Architektur & Trainingssetup – Bewertung
Inputs: 98
(+4 gegenüber vorher)
✔ sinnvoll
✔ keine Überdimensionierung
✔ 64–32 bleibt passend
Trainingsdaten: 7246
Train / Val = 5796 / 1450
✔ ausreichend
✔ Validierungsmenge stabil
✔ keine Split-Anomalien

4. Trainingsmetriken – sauber interpretiert
Train vs. Validation MSE
Kennzahl    Wert    Bewertung
Train MSE    0.003106    gut
Validation MSE    0.005224    gut
Verhältnis    ~1.68    gesund
➡️ keine Überanpassung, gutes Generalisieren trotz neuer Features.

Validation Bit_Fail = 27
absolut: moderat
relativ zur strengeren Grenze (0.18): akzeptabel
erklärt durch:
Presence-Schaltpunkte
reale Außentemperaturspitzen
➡️ kein Alarm, kein Grund zur Limit-Erhöhung.

5. Prognosegüte – realistisch bewertet
Kennzahl    Wert    Einordnung
MAE    435 Wh    gut
MedAE    361 Wh    stabil
RMSE rel    22 %    gut
MAPE    21.3 %    akzeptabel
MdAPE    17.0 %    gut
R²    0.58    solide
➡️ Minimal schwächer als dein bisheriges Optimum, aber:

neues Feature-Set
neues Modell
kein Drift-Vergleich möglich
➡️ Völlig im Soll.

6. Bias & Slope – wichtiges Detail
Model Bias: 718 Wh
vergleichbar mit früher
kein systematischer Offset
kein Nachjustieren nötig
Model Slope: 0.6
Das ist kein Regressions-Slope, sondern dein internes Skalierungsmaß.
Im Kontext deiner Historie: unverändert, also stabil.

7. Warum Drift aktuell ,,–" ist (wichtig!)
Das ist korrekt und gut so.
Drift benötigt:
ein Referenzmodell
mit gleicher Feature-Struktur
Da:
Außentemperaturquelle geändert
Presence neu hinzugefügt
Input-Dimension von 94 → 98
➡️ keine Vergleichsbasis

Deshalb:
Drift = deaktiviert / nicht aussagefähig
Bewertung = ,,–"
👉 Genau richtig implementiert.

8. Bewertung der BitFail-Empfehlung (0.28)
Die automatische Empfehlung berücksichtigt:
erhöhten Input-Rauschanteil
Presence-Binarität
Aber:
deine bisherigen Ergebnisse zeigen:
bessere RMSE
bessere R²
bessere Peak-Treffer
bei 0.18

➡️ Meine klare Empfehlung:
bei 0.18 bleiben, mindestens 2–3 Trainingszyklen.

9. Gesamturteil
Technisch: sauber
Statistisch: stabil
Architektonisch: korrekt angepasst
Produktiv: ja
Du hast ein neues, konsistentes Basismodell mit erweiterten Features.
Jetzt zählt Zeit, nicht Feintuning.

10. Konkrete Empfehlung für die nächsten Wochen
Parameter unverändert lassen
aiConTrainStart = 30 Tage beibehalten
Drift erst wieder nach dem nächsten Retrain ernsthaft bewerten
Presence mindestens 2–3 Wochen Daten sammeln

Wenn du willst, machen wir als nächsten Schritt:
Presence-Wirkungsanalyse (Feature Importance light)
Winter-/Frosttag-Spezialbewertung
adaptive Alpha-Strategie (Presence-abhängig)
Sag einfach, was dich interessiert.



EDIT: (vergessen)
Informationen zum neuronalen Netz der Verbrauchsvorhersage
letztes KI-Training: 22.01.2026 19:51:01 / Laufzeit in Sekunden: 2074
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 67.35 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7246 Datensätze (Training=5796, Validierung=1450)
Architektur: Inputs=98, Hidden Layers=64-32, Outputs=1
Hyperparameter: Learning Rate=0.005, Momentum=0.6, BitFail-Limit=0.18
Aktivierungen: Hidden=ELLIOT_SYMMETRIC, Steilheit=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=20

=== Trainingsmetriken ===

bestes Modell bei Epoche: 399 (von max. 15000)
Training MSE: 0.003106
Validation MSE: 0.005224
Validation MSE Average: 0.010521
Validation MSE Standard Deviation: 0.000749
Validation Bit_Fail: 27
Model Bias: 718 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 435.61 Wh
MedAE: 360.57 Wh
RMSE: 510.91 Wh
RMSE relative: 22 %
RMSE Rating: good
MAPE: 21.30 %
MdAPE: 17.04 %
R²: 0.58

=== Rauschen ===

Rauschen Bewertung: low
Empfehlung für Bit_Fail: 0.28 (Einstellung von aiControl->aiConBitFailLimit)

=== Drift-Kennzahlen ===

Drift Score: -
Drift RMSE ratio: -
Drift Slope: -
Drift Bias: -
Drift Bewertung: -



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.

DS_Starter

Also ich finde das alles wirklich erstaunlich - ohne Übertreibung.
 
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