Autor Thema: Photovoltaik Eigenverbrauch,Bilanz,Prognose (Kostal Plenticore; KSEM; BYD HV)  (Gelesen 84491 mal)

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Nun ist mir aufgefallen, dass die Werte der drei Spalten 2 (heute), 3 (Monat) und 4 (Jahr) im WR_1_API nicht aktualisiert werden.
Hier wird ja der Timestamp z.B. des Autarkie per Tag Wertes ausgelesen und der steht bei mir aktuell immer noch auf dem 6.10.2022.

Alle SW_Statistic_EnergyHome* Readings werden nicht geupdatet.

Ich habe die URL, die hinter der Funktion liegt auch einmal per curl aufgerufen:
curl http://192.168.xxx.xxx/api/v1/processdata/scb:statistic:EnergyFlowUnd es kommt als Antwort:
[{"processdata":[],"moduleid":"scb:statistic:EnergyFlow"}]Das heißt, die Statistiken werden im Plenticore berechnet und dann abgerufen oder übermittelt?

Jedenfalls hat es ja am 6.10. schon mal funktioniert, aber seitdem nicht mehr.

Könnt ihr mir helfen herauszufinden, was hier das Problem ist?
Eingeloggt ist der User jetzt und der Account wird auch nicht mehr gesperrt.

Vielen Dank!
Hallo,

mit curl geht das nicht, da curl sich nicht am WR anmeldet.
Wenn Du das im WR_1_API unter get startest, dann sollte die Antwort, nach einem Browser refresh, im httpbody zu sehen sein.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo zusammen,
durch eine Anfrage von Dio habe ich mich mit der Battery_TimeControl nun weiter beschäftigt.

Beim set hat man nun die Möglichkeit
-  jeden Battery_TimeControl Tag separat zu setzen
-  jeder Tag wird hierbei in Stunden Blöcken innerhalb eines readings angezeigt
-  beim set kann man [0-2] auswählen, was dann wiederum einheitlich 96 mal geschrieben wird
-  Die Tage sind mit der Nummerierung im FHEM von [0-6] durchnummeriert, damit sie erstens sortiert sind
   und zweitens aus Funktionen direkt addressiert werden können (Regex)
-  Es ist im set ein Text auszuwählen, was dann versucht ein reading zu diesem Tag zu lesen
   ist das reading nicht vorhanden wird wiederum 96 mal 0 geschrieben, was einem abschalten innerhalb des Gerätes gleich kommt.

   Battery_TimeControl_0_So 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
   Battery_TimeControl_1_Mo 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
   ...
   Battery_TimeControl_6_Sa 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

-  Das jeweilige reading kann jedoch auch aus einem anderen Device in dieses geschrieben werden, was eine Formatierung des gesamten Strings mit [0-2] durch eine Funktion ermöglicht.

-  Sollte man die Battery_TimeControl mal wieder deaktivieren, dann ist zu beachten, dass der Plenticore die letzte Konfiguration der Zeiten gespeichert hat.
   Bei einem erneuten Aktivieren ist die alte Konfiguration wieder im Plenticore gültig.

-  Leider kann man im HTTPMOD nicht mit setList und readingList arbeiten :-(

Achtung, das get24* hat sich geändert, weil die Tage nicht korrekt eingelesen wurden und weil es jetzt formatiert wird

- Bedeutung der Werte [0-2]

   0  Keine Einschränkung (Farbe Weiss)
   1  Batterieladung gesperrt, Entladung bei Hausbedarf erlaubt (Farbe Azurblau)
   2  Batterieentladung gesperrt, Ladung bei Energieüberschuss erlaubt (Farbe Lila)

- Sollte man nur die interne Steuerung aktiv haben, so lassen sich diese Optionen trotzdem nutzen

  1. Möchte man z.B. den MaxSOC begrenzen
      Hierbei kann man im WR_1 den Act_state_of_charge verwenden und bei z.B. SOC 80 % ab diesem Zeitpunkt die Batterieladung sperren ( 1 )
      Die Freigabe sollte dann mit einer gewissen Hysterese beim Act_state_of_charge erfolgen

  2. Möchte man auf jeden Fall eine gewisse Reserve im Speicher behalten, wäre Batterieentladung gesperrt ( 2 ) eine Möglichkeit

  3. Bei einem zwei Tarif Model für den Zähler könnte man das ebenfalls anwenden, um einen entsprechenden Rythmus zu bekommen, der
      dann auch Tageweise wechseln kann.

- Für eine Steuerung der gewünschten Modi wird sicherlich die Planung der Zeiten eine Herausforderung sein,
  die dann über eine Funktion mit der Maskierung der 96 Zeitabschnitte übertragen werden müsste.
  Hierfür habe ich die readings Battery_TimeControl_[0-6]_[So-Sa] eingebaut,
  die dann das Ergebnis der Planung speichern und mit einem "set WR_1_API 24__[0-6]_Battery_TimeControl_[So-Sa] Battery_TimeControl_[0-6]_[So-Sa]" zum Plenticore
  übertragen. Ein einheitliches setzen für den ganzen Tag ist dann mit "set WR_1_API 24__[0-6]_Battery_TimeControl_[So-Sa] [0-2]" möglich.

- Wichtig ist das die "Intelligente Speicher Steuerung" deaktiviert ist sonst spielt es keine Rolle ob die "Zeitgesteuerte Batterienutzung" aktive ist oder nicht.
  Somit gibt es dort eine Wechselwirkung zwischen den Optionen und die "Intelligente Speicher Steuerung" überlagert die Zeitsteuerung. (Dank an Dio)


Und hier nun die Attribute für das RAW, die readings sind jedoch nicht dabei und müssten bei Bedarf nach dem obigen Muster erstellt werden.
Wenn Ihr noch alte [set|get]24* Attribute haben solltet, dann wäre es gut diese vorher zu entfernen.
Und denkt daran, eine Sicherung ist auch immer gut :-)
attr WR_1_API get24-1Name Battery_TimeControl_5
attr WR_1_API get24-1OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-2Name Battery_TimeControl_1
attr WR_1_API get24-2OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-3Name Battery_TimeControl_6
attr WR_1_API get24-3OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-4Name Battery_TimeControl_0
attr WR_1_API get24-4OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-5Name Battery_TimeControl_4
attr WR_1_API get24-5OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-6Name Battery_TimeControl_2
attr WR_1_API get24-6OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-7Name Battery_TimeControl_3
attr WR_1_API get24-7OExpr my @x = ( $val =~ m/.{4}/g );; my $x = $x[0];;for(my $i = 1;;$i < @x;;$i++) { $x = $x." ".$x[$i]};; $x
attr WR_1_API get24-8Name Battery_TimeControl
attr WR_1_API get24Header01 authorization: Session %auth_sessionId%
attr WR_1_API get24Header02 Content-type: application/json, Accept: application/json, Connection: keep-alive
attr WR_1_API get24JSON .._value
attr WR_1_API get24Name 24_Battery_TimeControl
attr WR_1_API get24URL http://%IP-WR%/api/v1/settings/devices:local/Battery:TimeControl:Enable,Battery:TimeControl:ConfMon,Battery:TimeControl:ConfTue,Battery:TimeControl:ConfWed,Battery:TimeControl:ConfThu,Battery:TimeControl:ConfFri,Battery:TimeControl:ConfSat,Battery:TimeControl:ConfSun


attr WR_1_API set2400Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:Enable","value":"$val"}]}]
attr WR_1_API set2400FollowGet 24_Battery_TimeControl
attr WR_1_API set2400Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2400Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2400Hint 0,1
attr WR_1_API set2400Method PUT
attr WR_1_API set2400Name 24_00_Battery_TimeControl
attr WR_1_API set2400URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2401Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfSun","value":"$val"}]}]
attr WR_1_API set2401FollowGet 24_Battery_TimeControl
attr WR_1_API set2401Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2401Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2401Hint 0,1,2,Battery_TimeControl_0_So
attr WR_1_API set2401IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2401Method PUT
attr WR_1_API set2401Name 24__0_Battery_TimeControl_So
attr WR_1_API set2401URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2402Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfMon","value":"$val"}]}]
attr WR_1_API set2402FollowGet 24_Battery_TimeControl
attr WR_1_API set2402Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2402Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2402Hint 0,1,2,Battery_TimeControl_1_Mo
attr WR_1_API set2402IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2402Method PUT
attr WR_1_API set2402Name 24__1_Battery_TimeControl_Mo
attr WR_1_API set2402URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2403Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfTue","value":"$val"}]}]
attr WR_1_API set2403FollowGet 24_Battery_TimeControl
attr WR_1_API set2403Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2403Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2403Hint 0,1,2,Battery_TimeControl_2_Di
attr WR_1_API set2403IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2403Method PUT
attr WR_1_API set2403Name 24__2_Battery_TimeControl_Di
attr WR_1_API set2403TextArg 1
attr WR_1_API set2403URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2404Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfWed","value":"$val"}]}]
attr WR_1_API set2404FollowGet 24_Battery_TimeControl
attr WR_1_API set2404Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2404Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2404Hint 0,1,2,Battery_TimeControl_3_Mi
attr WR_1_API set2404IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2404Method PUT
attr WR_1_API set2404Name 24__3_Battery_TimeControl_Mi
attr WR_1_API set2404TextArg 1
attr WR_1_API set2404URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2405Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfThu","value":"$val"}]}]
attr WR_1_API set2405FollowGet 24_Battery_TimeControl
attr WR_1_API set2405Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2405Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2405Hint 0,1,2,Battery_TimeControl_4_Do
attr WR_1_API set2405IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2405Method PUT
attr WR_1_API set2405Name 24__4_Battery_TimeControl_Do
attr WR_1_API set2405URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2406Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfFri","value":"$val"}]}]
attr WR_1_API set2406FollowGet 24_Battery_TimeControl
attr WR_1_API set2406Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2406Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2406Hint 0,1,2,Battery_TimeControl_5_Fr
attr WR_1_API set2406IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2406Method PUT
attr WR_1_API set2406Name 24__5_Battery_TimeControl_Fr
attr WR_1_API set2406URL http://%IP-WR%/api/v1/settings

attr WR_1_API set2407Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfSat","value":"$val"}]}]
attr WR_1_API set2407Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2407Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2407Hint 0,1,2,Battery_TimeControl_6_Sa
attr WR_1_API set2407IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2407Method PUT
attr WR_1_API set2407Name 24__6_Battery_TimeControl_Sa
attr WR_1_API set2407URL http://%IP-WR%/api/v1/settings

VG
   Christian
« Letzte Änderung: 13 Oktober 2022, 12:53:19 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline nisi80

  • New Member
  • *
  • Beiträge: 27
Hallo Christian,

Wenn Du das im WR_1_API unter get startest, dann sollte die Antwort, nach einem Browser refresh, im httpbody zu sehen sein.

Wenn ich die Funktion aufrufe kommt folgender Body:
[{"processdata":[
{"id":"Statistic:Autarky:Day","unit":"","value":29.6701186032},
{"id":"Statistic:Autarky:Month","unit":"","value":55.4207662845},
{"id":"Statistic:Autarky:Total","unit":"","value":50.3454500655},
{"id":"Statistic:Autarky:Year","unit":"","value":50.3692616562},
{"id":"Statistic:CO2Saving:Day","unit":"","value":862.6227999929},
{"id":"Statistic:CO2Saving:Month","unit":"","value":61638.4571676583},
{"id":"Statistic:CO2Saving:Total","unit":"","value":82776.9845724445},
{"id":"Statistic:CO2Saving:Year","unit":"","value":82770.3373146098},
{"id":"Statistic:EnergyChargeGrid:Day","unit":"","value":0.0042272727},
{"id":"Statistic:EnergyChargeGrid:Month","unit":"","value":1326.2926918956},
{"id":"Statistic:EnergyChargeGrid:Total","unit":"","value":2215.2984904846},
{"id":"Statistic:EnergyChargeGrid:Year","unit":"","value":2215.2984904846},
{"id":"Statistic:EnergyChargeInvIn:Day","unit":"","value":0.8065063039},
{"id":"Statistic:EnergyChargeInvIn:Month","unit":"","value":1493.4644193275},
{"id":"Statistic:EnergyChargeInvIn:Total","unit":"","value":2462.0378650436},
{"id":"Statistic:EnergyChargeInvIn:Year","unit":"","value":2462.0378650436},
{"id":"Statistic:EnergyChargePv:Day","unit":"","value":720.6548854983},
{"id":"Statistic:EnergyChargePv:Month","unit":"","value":46088.2990090918},
{"id":"Statistic:EnergyChargePv:Total","unit":"","value":57815.8318457365},
{"id":"Statistic:EnergyChargePv:Year","unit":"","value":57815.8318457365},
{"id":"Statistic:EnergyDischarge:Day","unit":"","value":623.4187493164},
{"id":"Statistic:EnergyDischarge:Month","unit":"","value":45154.4067252972},
{"id":"Statistic:EnergyDischarge:Total","unit":"","value":56481.5680871301},
{"id":"Statistic:EnergyDischarge:Year","unit":"","value":56481.5680871301},
{"id":"Statistic:EnergyDischargeGrid:Day","unit":"","value":1.3561015926},
{"id":"Statistic:EnergyDischargeGrid:Month","unit":"","value":113.884608165},
{"id":"Statistic:EnergyDischargeGrid:Total","unit":"","value":125.8675601086},
{"id":"Statistic:EnergyDischargeGrid:Year","unit":"","value":125.8675601086},
{"id":"Statistic:EnergyHome:Day","unit":"","value":4129.1504270449},
{"id":"Statistic:EnergyHome:Month","unit":"","value":150425.9881369346},
{"id":"Statistic:EnergyHome:Total","unit":"","value":224861.5642837081},
{"id":"Statistic:EnergyHome:Year","unit":"","value":224736.4123010893},
{"id":"Statistic:EnergyHomeBat:Day","unit":"","value":566.9988488812},
{"id":"Statistic:EnergyHomeBat:Month","unit":"","value":41577.9960206414},
{"id":"Statistic:EnergyHomeBat:Total","unit":"","value":51972.4582424067},
{"id":"Statistic:EnergyHomeBat:Year","unit":"","value":51972.4582424067},
{"id":"Statistic:EnergyHomeGrid:Day","unit":"","value":2906.3888644177},
{"id":"Statistic:EnergyHomeGrid:Month","unit":"","value":68480.5973796209},
{"id":"Statistic:EnergyHomeGrid:Total","unit":"","value":114060.2358023472},
{"id":"Statistic:EnergyHomeGrid:Year","unit":"","value":113944.7586533207},
{"id":"Statistic:EnergyHomeOwn:Total","unit":"","value":113207.5665628811},
{"id":"Statistic:EnergyHomePv:Day","unit":"","value":658.1270115653},
{"id":"Statistic:EnergyHomePv:Month","unit":"","value":41790.4759819993},
{"id":"Statistic:EnergyHomePv:Total","unit":"","value":61234.1876810692},
{"id":"Statistic:EnergyHomePv:Year","unit":"","value":61224.6948035763},
{"id":"Statistic:EnergyPv1:Day","unit":"","value":1002.3775168914},
{"id":"Statistic:EnergyPv1:Month","unit":"","value":70295.9552284258},
{"id":"Statistic:EnergyPv1:Total","unit":"","value":92798.1840023958},
{"id":"Statistic:EnergyPv1:Year","unit":"","value":92791.0145075332},
{"id":"Statistic:EnergyPv2:Day","unit":"","value":543.2122043153},
{"id":"Statistic:EnergyPv2:Month","unit":"","value":29518.9744284229},
{"id":"Statistic:EnergyPv2:Total","unit":"","value":41277.9276391308},
{"id":"Statistic:EnergyPv2:Year","unit":"","value":41274.256702151},
{"id":"Statistic:EnergyPv3:Day","unit":"","value":0.0},
{"id":"Statistic:EnergyPv3:Month","unit":"","value":0.0},
{"id":"Statistic:EnergyPv3:Total","unit":"","value":0.0},
{"id":"Statistic:EnergyPv3:Year","unit":"","value":0.0},
{"id":"Statistic:OwnConsumptionRate:Day","unit":"","value":99.416185187},
{"id":"Statistic:OwnConsumptionRate:Month","unit":"","value":94.6763877669},
{"id":"Statistic:OwnConsumptionRate:Total","unit":"","value":95.7334904181},
{"id":"Statistic:OwnConsumptionRate:Year","unit":"","value":95.7331486797},
{"id":"Statistic:Yield:Day","unit":"","value":1232.3182857042},
{"id":"Statistic:Yield:Month","unit":"","value":88054.9388109405},
{"id":"Statistic:Yield:Total","unit":"","value":118252.8351034922},
{"id":"Statistic:Yield:Year","unit":"","value":118243.3390208711}],
"moduleid":"scb:statistic:EnergyFlow"}]

Es sind aus meiner Sicht ja alle Daten vorhanden aber diese matchen nicht, um die Readings zu aktualisieren.
Kann es sein, dass hier die Reihenfolge bestimmend ist?
Diese passt ja nicht zu den Reading-Definitionen.


VG Denis
« Letzte Änderung: 12 Oktober 2022, 11:12:43 von nisi80 »
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo Christian,

Wenn ich die Funktion aufrufe kommt folgender Body:
[{"processdata":[
{"id":"Statistic:Autarky:Day","unit":"","value":29.6701186032},
< snip >
{"id":"Statistic:Yield:Year","unit":"","value":118243.3390208711}],
"moduleid":"scb:statistic:EnergyFlow"}]
Hallo Denis,
ein grober Vergleich mit meinem httpbody sieht gleich aus.

Das Scheduling läuft übrigens über das PV_Schedule Device, falls Du das noch nicht haben solltest.

Zitat
Es sind aus meiner Sicht ja alle Daten vorhanden aber diese matchen nicht, um die Readings zu aktualisieren.
Kann es sein, dass hier die Reihenfolge bestimmend ist?
Diese passt ja nicht zu den Reading-Definitionen.
Achtung, bei der Nummerierung ist 1-9 einstellig, was im Device anders sortiert wird.
« Letzte Änderung: 12 Oktober 2022, 12:27:43 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo zusammen,
das Thema Wärmepumpe ist jetzt ja mal wieder von Interesse.
Ich verwende eine LAD9 von Novelan und habe diese hier ja auch mit einem DOIF gekoppelt und optimiert.
In diesem Thread wird zur Luxtronik2 Steuerung diskutiert und es kam zu kleineren Anpassungen bei der Zusatzheizung.
Da auch eine Rückfrage zur PV-Ready Ansteuerung kam stell ich hier mal einige Bilder von Mir rein.
Legende zu den Bildern
1) ist das Heizelement mit 2/4/6 kW Leistung, die man mit zwei Lastrelais auch in diesen Stufen schalten könnte.
2) Zeigt die Einbauposition des Shelly im LAD Gehäuse
3) Hier habe ich Phase und Null abgegriffen
4) Dort wird das PV-Ready / SWT-Signal angeschlossen

Im Wiki ist das DOIF hier abgelegt.

VG    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Moin,
ich habe jetzt auch die Beispiele für den Eigenverbrauch vom Wärmepumpe, Waschmaschine und Pool auf den DOIF Perl Modus im Wiki aktualisiert.
Da jetzt meine SONOS Lautsprecher auch wieder mit Sprachausgabe funktionieren ist das ebenfalls für den Status der Geräte eingeflossen.

Viel Spaß beim Testen
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo zusammen,
vielen Dank an @Crawler, für das finden eines Copy/Past Fehlers, von dem nur die betroffen sind, die einen zweiten Wechselrichter haben.

Im Device WR_1_API müsstet Ihr bitte diese Zeile korrigieren
SW_Statistic_EnergyPv4_Day:Statistic_EnergyPv1_Day.* {round(ReadingsVal("WR_2_API","Statistic_EnergyPv1_Month",0),0)},\
Dort muss es anstelle von "Month" natürlich "Day" heißen
SW_Statistic_EnergyPv4_Day:Statistic_EnergyPv1_Day.* {round(ReadingsVal("WR_2_API","Statistic_EnergyPv1_Day",0),0)},\
Das Wiki ist bereits korrigiert.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Heute wird ein trauriger Tag und die Leistungsprognose hatte recht :-)
Gestern konnte ich aber das BEV noch auf 100% laden, nur wo will man bei dem Wetter hin.
« Letzte Änderung: 09 November 2022, 11:01:02 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Die dunkle Jahreszeit wirft ihre Schatten und straft im WR_1_API Device bei den userReadings mit einer Division durch Null :-)

Es geht um dieses reading "SW_Statistic_Autarky_Day"
SW_Statistic_Autarky_Day:SW_Statistic_EnergyHomePvSum_Day.* { my $SW_Statistic_EnergyHome_Day = ReadingsVal("$NAME","SW_Statistic_EnergyHome_Day",0) ;; ($SW_Statistic_EnergyHome_Day eq 0)? 0 : round(ReadingsVal("$NAME","SW_Statistic_EnergyHomePvSum_Day",0) / $SW_Statistic_EnergyHome_Day *100,0) },

VG   Christian
« Letzte Änderung: 10 November 2022, 11:59:32 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo zusammen,
da wir hier ja dauerhaft doch so einige Daten ins DbLog schreiben habe ich meinen Backup jetzt mal etwas aufgeteilt.

Ein Backup der MySQL Datenbank mache ich mit dem SQLBackupAndFTP. Das geht bisher ziemlich schnell und Komprimiert recht gut.
In der Backup Datei sind dann INSERT Statements zu finden.
Die Dump Datei wird allerdings zu groß und passt nicht mehr in einen Editor.

Heute habe ich die Möglichkeit einer WHERE Klausel beim Backup gefunden, das klappt im ersten Test für 2020 auch schon mal.
So kann man sich auch Incrementals machen :-)
--where="TIMESTAMP >= '2020-01-01 00:00:00' AND TIMESTAMP < '2021-01-01 00:00:00'"
VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Update: 20221118 12:40 Es funktioniert nun :-)

Hallo zusammen,
wie Ihr ja eventuell auch mitbekommen habt versuche ich vom FHEM aus dem KSEM einen Fake Wechselrichter unterzuschieben.

Der Hintergrund wäre, dass man von irgend wo her einen anderen Wechselrichter, oder ein Balkonmodul bekommen hat, was die Installation dann zu einem Schwarm erweitern würde.
Mit FHEM würde man dann die Messwerte dem KSEM als Fake Wechselrichter unterschieben, damit z.B. die gesamt Leistung wieder stimmt.

Natürlich könnte man dann auch ein Blockheizkraftwerk oder Windrad mit integrieren ;-)

EDIT:
Hier wäre nun die WR_3 Konfiguration, die dann mit Werten aus dem Fremd Wechselrichter aktualisiert werden kann.
Sobal sich ein reading ändert, werden die Werte vom KSEM abgeholt. Wie sich das innerhalb des KSEM dann genau auswirkt kann ich jedoch noch nicht sagen.

Sichtbar wirkt sich bisher anscheinend nur der Total_AC_Active_P Wert aus, der dann zu einem Ausschlag bei der erzeugten Leistung im KSEM führt.
Ich denke alle anderen Werte wie I/U könnte man entweder auch vom Fremdgerät holen, oder halt mit den bekannten Formeln berechnen.
defmod WR_3 ModbusAttr 71 slave < IP vom FHEM >:1502 TCP
attr WR_3 DbLogExclude .*
attr WR_3 comment Version 2022.11.18 12:40\
Fremder WR am KSEM
attr WR_3 dev-h-combine 20
attr WR_3 dev-h-defFormat %.2f
attr WR_3 dev-h-defLen 2
attr WR_3 dev-h-defRevRegs 1
attr WR_3 dev-h-defUnpack f>
attr WR_3 dev-type-STR-format %s
attr WR_3 dev-type-STR-len 8
attr WR_3 dev-type-STR-revRegs 0
attr WR_3 dev-type-STR-unpack a*
attr WR_3 disable 0
attr WR_3 group PV Eigenverbrauch
attr WR_3 icon sani_solar
attr WR_3 obj-h1066-reading Total_DC_P_sumOfAllPVInputs
attr WR_3 obj-h14-reading Inverter_serial_number
attr WR_3 obj-h14-type STR
attr WR_3 obj-h154-reading I_L1
attr WR_3 obj-h156-reading Active_P_L1
attr WR_3 obj-h158-reading U_L1
attr WR_3 obj-h160-reading I_L2
attr WR_3 obj-h162-reading Active_P_L2
attr WR_3 obj-h164-reading U_L2
attr WR_3 obj-h166-reading I_L3
attr WR_3 obj-h168-reading Active_P_L3
attr WR_3 obj-h170-reading U_L3
attr WR_3 obj-h172-reading Total_AC_Active_P
attr WR_3 obj-h172-set 1
attr WR_3 obj-h38-reading Software-Version_Maincontroller_MC
attr WR_3 obj-h38-type STR
attr WR_3 obj-h46-reading Software-Version_IO-Controller_IOC
attr WR_3 obj-h46-type STR
attr WR_3 obj-h514-len 1
attr WR_3 obj-h514-reading Battery_Actual_SOC
attr WR_3 obj-h56-format %.0f
attr WR_3 obj-h56-reading Inverter_state
attr WR_3 obj-h56-unpack N
attr WR_3 obj-h582-reading Actual_Battery_charge-discharge_P
attr WR_3 obj-h6-reading Inverter_Article_number
attr WR_3 obj-h6-type STR
attr WR_3 obj-h768-len 32
attr WR_3 obj-h768-reading Productname
attr WR_3 obj-h768-type STR
attr WR_3 room Strom->Photovoltaik
attr WR_3 sortby 311
attr WR_3 verbose 0

setstate WR_3 2022-10-27 12:19:25 Active_P_L1 0.00
setstate WR_3 2022-10-27 12:19:34 Active_P_L2 0.00
setstate WR_3 2022-10-27 12:19:40 Active_P_L3 0.00
setstate WR_3 2022-10-27 12:19:25 Actual_Battery_charge-discharge_P 0.00
setstate WR_3 2022-10-27 12:19:25 Battery_Actual_SOC 0.00
setstate WR_3 2022-10-27 15:43:17 I_L1 0.00
setstate WR_3 2022-10-27 15:43:26 I_L2 0.00
setstate WR_3 2022-10-27 15:43:34 I_L3 0.00
setstate WR_3 2022-10-27 10:56:32 Inverter_Article_number 12345678
setstate WR_3 2022-10-27 10:56:32 Inverter_serial_number 87654321
setstate WR_3 2022-10-27 10:56:32 Inverter_state 6
setstate WR_3 2022-10-27 10:59:21 Productname WR_3
setstate WR_3 2022-10-27 10:56:32 Software-Version_IO-Controller_IOC 4711
setstate WR_3 2022-10-27 10:56:32 Software-Version_Maincontroller_MC 0815
setstate WR_3 2022-11-18 12:27:13 Total_AC_Active_P 0
setstate WR_3 2022-10-27 12:19:25 Total_DC_P_sumOfAllPVInputs 0.00
setstate WR_3 2022-10-27 12:17:24 U_L1 230.00
setstate WR_3 2022-10-27 12:17:35 U_L2 230.00
setstate WR_3 2022-10-27 12:17:44 U_L3 230.00
Für den KSEM wird dann nun FHEM über den Port 1502 ein neuer ModBus Server (der Wechselrichter).
Die Konfiguration im KSEM unter "Wechselrichter" ist im Anhang zu sehen. Dort kann man jedoch nicht den Port auswählen,
wodurch somit nur ein fake Wechselrichter pro FHEM Installation möglich ist.


VG   Christian
« Letzte Änderung: 18 November 2022, 13:10:28 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hey Leute

ich habe mal wieder etwas gefunden, was aber nichts mit FHEM und der Steuerung hier zu tun hat.
Im Bild sind mal die Energieeffizienzklasseb abgebildet.

Ich komme da auf folgendes Ergebnis, was ich aus den Statistiken meiner Implementierung ableite. Der Jahresverbrauch wurde
um das E-Auto und den Wirlpool, die ja nichts mit dem Haus ansich zu tun haben, bereinigt.

2021
  6985 kWh Gesamtverbrauch (Haushalt, Warmwasser, Heizung 116 m², Heizung 64 m²)
  ==> 6985 kWh / 180 m² = 38,8 kWh/m² pro Jahr

Somit liegt mein Haus in der Mitte bei Energieeffizienzklasse A und das als Baujahr 1977 mit Kernsanierung 2016

2022
  6410 kWh (da fehlt noch der Dezember)
   483 kWh geschätzt vom November
  ==> 6893 kWh /180 m² = 38,3 kWh/m² pro Jahr

Der Energieberater ist durch seine Berechnungen ebenfalls für die Mietwohnung auf Energieeffizienzklasse A mit
einem Wert von 47,9 kWh/m² pro Jahr gekommen.
Der Gästebereich im Keller mit ca 34 m² wurde dabei noch nicht mal mit rein gerechnet, ansonsten liegt der Wert
bei 32,6 kWh/m² pro Jahr und somit schon fast bei A+ ;-)

Mein Resümee ist somit, Sanierung kann sich echt lohnen, auch wenn sich die Investition erst in vieleicht 10 Jahren amortisiert.

EDIT: Energie-Plus-Haus
Beim weiter Lesen wird es immer besser. Die PV-Anlage wird ja auch mit der Einspeisung berücksichtigt. Dann sieht es ja noch besser aus.

Einspeisung:
2021 12523 kWh
2022 15100 kWh ( in 2021 wurde die PV-Anlage aufgerüstet )

Somit ergibt sich folgendes Energie Plus in den Jahren

2021 12523 - 6985 = 5538 kWh
2022 15100 - 6893 = 8207 kWh


Wie sieht es bei Euch aus?

VG   Christian
« Letzte Änderung: 26 November 2022, 16:36:39 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Ein Aufruf zum Durchhalten :-) :-)
Auch im Winter kann PV an einzelnen Tagen was bringen. Heute ist der Anteil, der von der Wärmepumpe verwendet wird ziemlich hoch.

VG  Christian
« Letzte Änderung: 07 Dezember 2022, 19:12:36 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
EDIT: Ich habe es jetzt auch hier im Wiki abgelegt.

Ich habe mal versucht aus der Datenbank zu ermitteln, wieviel PV-Leistung für z.B. eine Wärmepumpe übrig bleibt.
Dabei habe ich den grundlegenden Hausverbrauch als erstes in Abzug gebracht und den Rest mit der WP verrechnet.
Natürlich kann man solch einen Report nur für einen Verbraucher verwenden, da man ja den Überschuss nur einem zuordnen kann.

EDIT:
Findet Ihr solch einen Report sinnvoll, oder interressant? Man hätte in einer Diskussion mal echte Daten :-)
Selbst im Winter finde ich die Unterstützung noch recht gut, gestern komme ich auf eine Durchschnittsuntertützung von 46,6 % und das bei nur kurzen Sonnenschein.
Heute habe ich die Sonne noch nicht gesehen, da sieht es bisher noch etwas schlechter aus. Allerdings ist der Haushalt ja bereits zu 100% abgedeckt.
Ich füge unten dann mal das SELECT Statement an.
2022-12-07
+------+-------------+------------------+--------------------------+------------+-----------+---------+
| HOUR | generator_P | Home_Consumption | PV_after_Home_Consumtion | consumer_P | from_Grid | Percent |
+------+-------------+------------------+--------------------------+------------+-----------+---------+
|    8 |       96.38 |          1210.60 |                     0.00 |   -1346.59 |   1346.59 |       0 |
|    9 |      525.20 |          1081.62 |                     0.00 |     -61.93 |     61.93 |       0 |
|   10 |     2142.27 |           616.15 |                  1526.12 |   -2677.54 |   1151.42 |      57 |
|   11 |     1335.65 |           567.72 |                   767.93 |   -1135.92 |    367.99 |      68 |
|   12 |     1624.61 |           650.44 |                   974.17 |   -2646.73 |   1672.56 |      37 |
|   13 |      546.83 |           520.85 |                    25.98 |     -55.98 |     30.00 |      46 |
|   14 |     1155.63 |           714.65 |                   440.98 |   -1774.13 |   1333.15 |      25 |
|   15 |      387.44 |           436.01 |                     0.00 |    -111.47 |    111.47 |       0 |
|   16 |       73.22 |           472.44 |                     0.00 |     -63.88 |     63.88 |       0 |
+------+-------------+------------------+--------------------------+------------+-----------+---------+

2022-12-08
+------+-------------+------------------+--------------------------+------------+-----------+---------+
| HOUR | generator_P | Home_Consumption | PV_after_Home_Consumtion | consumer_P | from_Grid | Percent |
+------+-------------+------------------+--------------------------+------------+-----------+---------+
|    8 |      187.00 |           638.44 |                     0.00 |     -58.41 |     58.41 |       0 |
|    9 |      455.44 |           648.36 |                     0.00 |     -63.90 |     63.90 |       0 |
|   10 |      891.86 |           527.20 |                   364.66 |   -2505.25 |   2140.59 |      15 |
|   11 |     1588.88 |           560.82 |                  1028.06 |   -2812.80 |   1784.74 |      37 |
|   12 |     2347.47 |           640.22 |                  1707.25 |   -2641.59 |    934.34 |      65 |
|   13 |      869.55 |           975.54 |                     0.00 |     -71.81 |     71.81 |       0 |
|   14 |     1351.78 |           513.16 |                   838.62 |   -1833.21 |    994.59 |      46 |
|   15 |      594.35 |           523.39 |                    70.96 |     -69.85 |         0 |     100 |
+------+-------------+------------------+--------------------------+------------+-----------+---------+

-- Hier mal ein Sommertag, die Fehlwerte in der Nacht scheinen Rundungsfehler zu sein :-)
SET @date:='2022-07-12';
+------+-------------+------------------+--------------------------+------------+-----------+---------+
| HOUR | generator_P | Home_Consumption | PV_after_Home_Consumtion | consumer_P | from_Grid | Percent |
+------+-------------+------------------+--------------------------+------------+-----------+---------+
|    0 |      311.71 |           267.67 |                    44.04 |     -46.95 |      2.91 |      94 |
|    1 |      333.86 |           262.13 |                    71.73 |     -52.64 |         0 |     100 |
|    2 |      281.81 |           223.69 |                    58.12 |     -52.71 |         0 |     100 |
|    3 |      446.37 |           400.72 |                    45.65 |     -52.89 |      7.24 |      86 |
|    4 |      454.35 |           387.41 |                    66.94 |     -57.83 |         0 |     100 |
|    5 |      553.94 |           480.12 |                    73.82 |     -72.11 |         0 |     100 |
|    6 |      988.25 |           319.47 |                   668.78 |     -76.69 |         0 |     100 |
|    7 |     2942.42 |           404.10 |                  2538.32 |     -91.19 |         0 |     100 |
|    8 |     5005.92 |           328.75 |                  4677.17 |     -91.93 |         0 |     100 |
|    9 |     7280.32 |           933.17 |                  6347.15 |     -94.61 |         0 |     100 |
|   10 |     7812.17 |          1255.93 |                  6556.24 |     -94.00 |         0 |     100 |
|   11 |    11421.43 |          1814.18 |                  9607.25 |     -64.01 |         0 |     100 |
|   12 |    12025.25 |          1556.05 |                 10469.20 |   -2104.53 |         0 |     100 |
|   13 |    12555.58 |          2634.29 |                  9921.29 |     -46.67 |         0 |     100 |
|   14 |    12299.73 |          1460.87 |                 10838.86 |     -46.70 |         0 |     100 |
|   15 |    11652.87 |           894.12 |                 10758.75 |     -46.55 |         0 |     100 |
|   16 |    10212.00 |           704.89 |                  9507.11 |     -46.48 |         0 |     100 |
|   17 |     7600.08 |           823.84 |                  6776.24 |     -47.12 |         0 |     100 |
|   18 |     5983.46 |           704.32 |                  5279.14 |     -60.46 |         0 |     100 |
|   19 |     2614.37 |           746.43 |                  1867.94 |     -52.85 |         0 |     100 |
|   20 |      930.12 |           621.92 |                   308.20 |     -58.05 |         0 |     100 |
|   21 |      586.85 |           511.25 |                    75.60 |     -75.25 |         0 |     100 |
|   22 |      573.20 |           509.78 |                    63.42 |     -46.75 |         0 |     100 |
|   23 |      509.44 |           411.68 |                    97.76 |     -46.88 |         0 |     100 |
+------+-------------+------------------+--------------------------+------------+-----------+---------+
Home_Consumption = Hausverbrauch ohne Wärmepumpe
Heizung = negativer Zähler, da es ein Verbraucher ist

An dem SQL Select arbeite ich momentan noch.
Habt Ihr auch interessante Abfragen, oder Ideen für Abfragen?

VG  Christian

Hier ist dann mal das SELECT
1) Zuerst werden die einzelnen Daten für einen Tag zusammen gesucht
2) Jeder Daten Teil wird mit einem Durchschnitt auf Stundenbasis berechnet
3) Im JOIN werden alle Daten Teile für die relevanten Stunden zusammen geführt. Maßgeblich hierbei ist der Betrieb der Heizung
   zudem Zeitpunkt wo auch PV-Leistung verfügbar war. Alle anderen Stunden tauchen danach nicht mehr auf. Ist es ein Hybrid WR
   mit Speicher, dann kann auch in der Nacht eine Unterstützung erfolgen, was im Winter jedoch recht selten sein wird.
4) Es wird der restliche Hausverbrauch ermittelt. Achtung, die Heizung ist ein Verbraucher, weshalb die Leistung im Heizungszähler
   negativ summiert wird. Ein "+Heizung" ist somit eine Summe mit einem negativen Wert ;-)
5) Im letzten SELECT werden dann die Daten final aufbereitet und Formatiert, auch der Prozentuale Anteil der PV Leistung am gesamten
   Heizungsverbrauch wird noch berechnet.

Das ließe sich natürlich auch auf andere Verbraucher übertragen.

SET @date:='2022-12-07',
    @consumer:='StromZaehler_Heizung', @consumer_P:='SMAEM1901401955_Saldo_Wirkleistung',
    @generator:='WR_1', @generator_P:='SW_Total_AC_Active_P', @Home_Consumtion_P:='SW_Home_own_consumption';


SELECT
  X.HOUR,
  cast(X.generator_P AS decimal(7,2)) AS generator_P,
  cast(X.Home_Consumption AS decimal(7,2)) AS Home_Consumption,
  cast(X.PV_after_Home_Consumtion AS decimal(7,2)) AS PV_after_Home_Consumtion,
  cast(X.consumer_P AS decimal(7,2)) AS consumer_P,
  if(consumer_P+PV_after_Home_Consumtion <= 0,cast(round(abs(consumer_P+PV_after_Home_Consumtion),2) AS decimal(7,2)),0) AS from_Grid,
  if(round(consumer_P+PV_after_Home_Consumtion,2) <= 0,round(abs(PV_after_Home_Consumtion*100/consumer_P),0),100) AS Percent
FROM (
  SELECT
    X1.HOUR,
    generator_P,
    round(Home_Consumtion_P+consumer_P,2) AS Home_Consumption,
    if(Home_Consumtion_P+consumer_P-generator_P < 0,round(abs(Home_Consumtion_P+consumer_P-generator_P),2),0) AS PV_after_Home_Consumtion,
    consumer_P
  FROM (
    SELECT
      hour(TIMESTAMP) AS HOUR,
      round(avg(value),2) AS consumer_P
    FROM history
    WHERE
      TIMESTAMP > @date and TIMESTAMP < DATE_ADD(@date,INTERVAL 1 DAY) AND
      DEVICE = @Consumer AND
      READING = @consumer_P
    GROUP BY 1
    ) X1
  JOIN (
    SELECT
      hour(TIMESTAMP) AS HOUR,
      round(avg(value),2) AS generator_P
    FROM history
    WHERE
      TIMESTAMP > @date AND TIMESTAMP < DATE_ADD(@date,INTERVAL 1 DAY) AND
      DEVICE    = @generator AND
      READING   = @generator_P AND
      VALUE     > 10
    GROUP BY 1
    ) X2
  JOIN (
    SELECT
      hour(TIMESTAMP) AS HOUR,
      round(avg(value),2) AS Home_Consumtion_P
    FROM history
    WHERE
      TIMESTAMP > @date and TIMESTAMP < DATE_ADD(@date,INTERVAL 1 DAY) AND
      DEVICE  = @generator AND
      READING = @Home_Consumtion_P AND
      VALUE   > 10
    GROUP BY 1
    ) X3
  ON    X1.HOUR = X2.HOUR
    AND X1.HOUR = X3.HOUR
  ) X;
« Letzte Änderung: 08 Dezember 2022, 15:55:33 von ch.eick »
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2781
Hallo zusammen,

ich teste gerade nochmal die WR_1_Speicher_1_ExternControl Zeit Steuerung.
Dadurch wollte ich dann jetzt im Winter mal nur den Speicher zur Tageszeit verwenden, falls er mal voll ist. Die Zeit Steuerung hatte ich mal für die Schweizer mit rein genommen, die Tagsüber einen Hochtarif und nachts einen Niedigtarif haben. Damit werde ich warscheinlich keinen Netzausfall verhindern :) :) :) , aber man probiert ja mal aus was man kann ;)
Sollte es mal attraktive Tarif Modelle geben, die man auch bestellen kann, würde soetwas ja auch bei uns Sinn machen.

VG   Chrstian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP