Photovoltaik Eigenverbrauch,Bilanz,Prognose (Kostal Plenticore; KSEM; BYD HV)

Begonnen von ch.eick, 07 Oktober 2020, 16:09:12

Vorheriges Thema - Nächstes Thema

ch.eick

Moin zusammen,
da ja die Implementierung stabiel läuft schreib ich mal was anderes, was ich nützlich finde.
Zum Überprüfen der FHEM Log Dateien verwende ich eine Terminal Session ins UNIX und lasse dann einfach ein tail Kommando laufen.
Damit ich da nicht jeden Tag das Datum der Log Datei ändern muss sezte ich es direkt mit dem date Befehl.
tail -n 1000 -f log/fhem-`date --iso-8601`.log
und schön läuft der Inhalt auf der Konsole.
Möchte man dann nur etwas bestimmtes sehen, kann man mit grep noch filtern.
fhem@raspberrypi:~$ tail -n 10000 -f log/fhem-2023-11-23.log| egrep 'WR_|Pool|LWP'
2023.11.23 00:01:00.069 3: WR_ctl 4_WR_1_API_init_Werte : init Werte gesetzt
2023.11.23 00:57:00.015 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 01:57:00.015 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 02:24:05.096 3: WR_1_Speicher_1_ExternControl cmd_2.1: smart_laden aktiviert
2023.11.23 02:24:05.096 3: WR_1_Speicher_1_ExternControl cmd_2.1: SpeicherExternTrigger, Entlademodus gesperrt
2023.11.23 02:57:00.017 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 03:57:00.016 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 04:57:00.015 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 05:03:00.078 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 05:07:14.667 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 05:57:00.031 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 06:00:00.049 3: WR_1_Speicher_1_ExternControl cmd_14 : ExternControl Lüfter ausgeschaltet
2023.11.23 06:03:00.080 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 06:07:00.357 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 06:15:00.004 3: Pool_PV 09__ : Pool switched to RunTimePerDay 28800
2023.11.23 06:57:00.015 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 07:03:00.078 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 07:06:48.586 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 07:17:00.004 3: Pool_PV 08__ : Pool switched to TimeStart 09:10 TimeEnd 16:00
2023.11.23 07:57:00.015 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 08:03:00.116 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 08:06:58.477 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 08:57:00.016 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 09:03:00.073 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 09:04:02.811 3: WR_1_Speicher_1_ExternControl cmd_7  : SpeicherMaxSOC_MinSOC_Time gefunden 10 %
2023.11.23 09:04:02.812 3: WR_1_Speicher_1_ExternControl cmd_7  : SpeicherMiddayControl es wird kein Middayhigh geben
2023.11.23 09:07:06.870 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 09:50:00.003 3: LWP_PV_Perl 07_1 : LWP Heizung Automatik
2023.11.23 09:57:00.044 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 10:03:00.081 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 10:07:01.275 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 10:57:00.026 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 11:03:00.088 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 11:07:00.253 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 11:57:00.017 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 12:03:00.077 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 12:07:15.872 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 12:57:00.016 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 13:03:00.084 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 13:07:01.152 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 13:57:00.016 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 14:03:00.087 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 14:07:25.528 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 14:57:00.019 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 15:03:00.079 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 15:07:11.711 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 15:57:00.016 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 16:00:00.005 3: Pool_PV 10__ : Pool on for maintanance
2023.11.23 16:00:00.006 3: Pool_PV sub  : Pool on
2023.11.23 16:00:00.137 3: WR_1_Speicher_1_ExternControl cmd_8  : ExternControl zurückgesetzt
2023.11.23 16:03:00.086 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 16:06:56.456 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 16:57:00.041 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 17:03:00.082 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 17:06:51.453 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 17:57:00.017 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 18:03:00.078 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 18:06:42.346 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 18:35:00.002 3: LWP_PV_Perl 07_2 : LWP Heizung aus
2023.11.23 18:35:00.009 3: LWP_PV_Perl 07_2 : Parameter: 10319 < 16000 and 4.9 <= 5.6
2023.11.23 18:35:00.009 3: LWP_PV_Perl 07_2 : TimeStartHeizung switched to 02:05
2023.11.23 18:57:00.014 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 19:03:00.083 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 19:06:57.098 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 19:30:00.042 3: WR_1_Speicher_1_ExternControl cmd_14 : ExternControl Lüfter ausgeschaltet
2023.11.23 19:57:00.035 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 20:03:00.107 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 20:07:02.334 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 20:57:00.019 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 21:03:00.084 3: WR_ctl 2_KI_Prognose : Start KI Prognose
2023.11.23 21:07:12.108 3: DbRep LogDBRep_PV_KI_Prognose - execute command after sqlCmd: '"/opt/fhem/python/bin/PV_KI_Prognose.py 192.168.178.40 192.168.178.40 LogDBRep_PV_KI_Prognose WR_ctl Yield_fc"'
2023.11.23 21:57:00.061 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 22:57:00.009 3: WR_ctl cmd_1  : Abfrage der Statistiken
2023.11.23 23:55:00.006 3: LWP_PV_Perl 06__ : LWP Priorität frei
2023.11.23 23:57:00.009 3: WR_ctl cmd_1  : Abfrage der Statistiken
Bei laufenden Kommando könnt Ihr auch noch mit der Enter Taste mal kurz einige Leerzeilen auf dem Terminal einfügen, was beim zurück scrollen ein schnelleres Finden der Position ermöglicht.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo zusammen,
hier wäre dann mal wieder eine Änderung für die Speicher Steuerung. Bei der externen Speicher Steuerung gibt es anscheinend einen weiteren Timeout von < 1 Minute zu beachten. Dies fällt auf, wenn man manuell, oder automatisch den Speicher zu "wartingszwecken" laden/entladen möchte.
Zu diesem Zweck gibt es ja hier eine Einstellungsmöglichkeit.
Du darfst diesen Dateianhang nicht ansehen.
An dieser Stelle kann man nun "An/Aus/manuell" unterscheiden.
1. Manuell
Auf manuell stellt man anschließend einen Wert ein und schickt diesen mit dem benachbarten Pull Down Menü über den Punkt DC_Power_Abs zum Speicher. Dies muss dann manuell alle < 60 Sekunden wiederholt werden. Es ist zu beachten, dass der Wechselrichter den Speicher etwas träge ansteuert.
Nach dem letzten Befehl dauert es dann die konfigurierte [WR_1_API:Battery_ComMonitor_Time] Zeit, bis der Speicher wieder normal über den Wechselrichter gesteuert wird.
2. An
Der eingestellte Wert wird automatisch gesendet, bis er auf 0 gesetzt wird, oder Aus ausgewählt wird.
Man kann den Wert auch wärend dessen verändern, was dann langsam vom Wechselrichter nachgeregelt wird, jedoch auf jeden Fall langsamer reagiert, als wenn der Wechselrichter automatisch steuert.
3. Aus
Der eingestellte Wert wird auf 0 gesetzt und ein letztes mal zum Wechselrichter gesendet. Nach Ablauf der [WR_1_API:Battery_ComMonitor_Time] Zeit wird 25_Battery_EM_State abgefragt, um den Speicher Status zeitnah zu aktualisieren.

Updates der Devices
## Im WR_1_Speicher_1_ExternControl ist der Block 17 zu ersetzen

################################################################################################################
## 17 Wiederhole alle 180s das Kommando für die DcPowerAbs Steuerung
##
17_Kommando_Wiederholung_DcPowerAbs
{if( !([$SELF:state] eq "off")                                           ## DOIF enabled
     and
      ((
           [$SELF:SpeicherTriggerLaden] eq "An"                          ## Ist der Trigger für das Zwangsladen aktiv?
       and [$SELF:SpeicherDcPowerAbs]   ne 0                             ## Wurde eine Lade/Entlade Leistung eingestellt?
       and (   [+58]                                                     ## Den Befehl nach eingestellter Zeit wiederholen
            or [$SELF:SpeicherDcPowerAbs]
           )
      )
      or [$SELF:ui_command_1] eq "Kommando_Wiederholung_DcPowerAbs"      ## Hier wird das uiTable select ausgewertet
      or     [$SELF:SpeicherTriggerLaden] eq "Aus"                       ## Hier wird die externe Steuerung beendet
         and [$SELF:SpeicherDcPowerAbs]   ne 0
     )
   ) {

    if( [$SELF:ui_command_1] eq "Kommando_Wiederholung_DcPowerAbs" ) {   ## Hier wurde manuell eingeschaltet
      set_Reading("ui_command_1_before",[$SELF:ui_command_1]);
    }
   if([$SELF:SpeicherTriggerLaden] eq "An") {
     set_Exec("17_Battery_EM_State",30,'::CommandGet(undef, "WR_1_API 25_Battery_EM_State")');
   } else {
     set_Reading("SpeicherDcPowerAbs",0);
     set_Exec("17_Battery_EM_State",[WR_1_API:Battery_ComMonitor_Time]+60,'::CommandGet(undef, "WR_1_API 25_Battery_EM_State");Log 3, "$SELF cmd_17 : 25_Battery_EM_State abgerufen"');
   }

   ::CommandSet(undef, "WR_1_API 23_05_Battery_ExternControl_DcPowerAbs [$SELF:SpeicherDcPowerAbs]");
   set_Exec("17_Repeat_CMD",13,'::CommandSet(undef, "WR_1_API 23_05_Battery_ExternControl_DcPowerAbs '.[$SELF:SpeicherDcPowerAbs].'")');

   if (AttrVal("$SELF","verbose",0) >=3) {
     Log 3, "$SELF cmd_17 : Battery_ExternControl_DcPowerAbs auf ".[$SELF:SpeicherDcPowerAbs]." gesetzt";
   };

   set_Reading("ui_command_1","---");                                    ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten
                                                                         ## kann das Kommando nicht sofort wiederholt werden
   }
}


## Ebenfalls im WR_1_Speicher_1_ExternControl muss die erste Zeile der Tabelle im uiTable geändert werden

"$SELF"|"Kommando<dd>Auswahl / DcPowerAbs / Status</dd>" | widget([$SELF:ui_command_1],"uzsuDropDown,---,Status_Speicher,smart_Laden_start,smart_Laden_beenden,smart_Laden_starten_WB_1,smart_Laden_beenden_WB_1,Kommando_Wiederholung,SOC_Calculation,Reset,DC_Power_Abs,Sommer,Winter,Speicher_voll,14_Luefter_ein,15_Luefter_aus,Status_WR_1_Speicher_1_BYD") | widget([$SELF:SpeicherDcPowerAbs],"selectnumbers,-4500,250,4500,0,lin")."W".widget([$SELF:SpeicherTriggerLaden],"uzsuDropDown,An,Aus,manuell") |[WR_1_API:Battery_EM_State]|([$SELF:SpeicherExternTrigger] eq "gesperrt" and [WR_1_API:Battery_InternControl_MinHomeConsumption] == 30000)?'<span style="color:red">smart_Laden aktiv</span>':""
Für einen Test solltet Ihr Euch auf dem Plenticore anmelden und dort im Bereich "Momentanwerte|Batterie" aufklappen. Dort seht Ihr dann am schnellsten die Reaktion des Wechselrichters auf die externe Speicher Steuerung.
Im FHEM WR_1_Speicher_1_ExternControl werden die Status durch die Zeitgesteuerte Abfrage über die API immer erst verzögert dargestellt.

Viel Spaß beim Testen
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

trupf

Hallo Christian,

ich habe noch das Problem das bei mir in WR_1_API die Statistiken für das letzte Jahr und das letzte Quartal nicht angezeigt werden. Ich denke, das liegt daran, da die im stateFormat refernzierten "LogDBRep_Statistic_previous_Year" und "LogDBRep_Statistic_previous_Quarter" nicht existieren. Ist das ein Fehler? Hast Du die bei Dir? Wie wären die zu definieren? Oder wie löst Du das Problem bei Dir?

Grüße,
Tobias

ch.eick

Zitat von: trupf am 26 November 2023, 12:42:49Hallo Christian,

ich habe noch das Problem das bei mir in WR_1_API die Statistiken für das letzte Jahr und das letzte Quartal nicht angezeigt werden. Ich denke, das liegt daran, da die im stateFormat refernzierten "LogDBRep_Statistic_previous_Year" und "LogDBRep_Statistic_previous_Quarter" nicht existieren. Ist das ein Fehler? Hast Du die bei Dir? Wie wären die zu definieren?
Hallo Tobias,
das ist kein Fehler, sondern es fehlen Dir nur die Device definitionen.
Im Anhang findet Ihr jetzt die DbRep Devices und ein Beispiel für das Scheduling.
Die Anzeige im WR_1_API Devive als stateFormate sollte nicht mehr die bevorzugte sein, dafür wurde das WR_ctl Device erstellt.
Du darfst diesen Dateianhang nicht ansehen.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Moin
Es geht voran mit dem Tibber Trigger.
2023.11.28 12:28:07.005 3: WR_1_Speicher_1_ExternControl cmd_17 : Battery_ExternControl_DcPowerAbs auf -1000 gesetzt
2023.11.28 12:29:05.005 3: WR_1_Speicher_1_ExternControl cmd_17 : Battery_ExternControl_DcPowerAbs auf -1000 gesetzt
2023.11.28 12:30:03.005 3: WR_1_Speicher_1_ExternControl cmd_17 : Battery_ExternControl_DcPowerAbs auf -1000 gesetzt
2023.11.28 12:30:23.001 3: WR_1_Speicher_1_ExternControl cmd_17 : Battery_ExternControl_DcPowerAbs auf 0 gesetzt
2023.11.28 12:31:53.006 3: WR_1_Speicher_1_ExternControl cmd_17 : 25_Battery_EM_State abgerufen

Falls jemand Tibber im Einsatz hat könnte er sich mal zu erkennen geben.

Vorraussetzung:
- Ein Speicher
- Die aktuelle WR_1_Speicher_1_ExternControl
- Meine EVU_Tibber Implementierung mit EVU_Tibber_connect
- Im WR_1_Speicher_1_ExternControl einen neuen Block für die Steuerung und eine zusätzliche Zeile im uiTable

Du darfst diesen Dateianhang nicht ansehen.

Tja, leider war eine Lademöglichkeit heute Morgen, jedoch war selbst der min Preis immer noch teurer als das was ich momentan zahle :-)
Du darfst diesen Dateianhang nicht ansehen. 
Im WR_1_Speicher_1_ExternControl wird nur auf den Trigger vom EVU_Tibber_connect reagiert und auch das Zeitfenster wird direkt dort berechnet. Somit bleibt im WR_1_Speicher_1_ExternControl nur noch eine Ladeleistung zu wählen und das Reagieren auf Tibber zu aktivieren.
Es wären natürlich auch noch andere Börsenanbieter denkbar, wenn man dort entsprechende readings ins Device integriert.

VG  Christian

EDIT: Das erste Laden nach dem Tibber Trigger hat bereits funktioniert. Wie man erkennen kann könnte ich in meiner Konstellation zum Einen die Verbraucher in die günstige Zeit legen und zum Anderen noch weitere ca 5 Stunden aus dem Speicher Leben. Gerade in der Nacht hätte ich noch zusätzlich das E-Auto laden können, was weitere fast 40 kWh gewesen wären.
Nur leider lag der niedrige Tibberpreis nur im Durchschnitt bei 24,94 ct und ich zahle 23 ct :-( Das wäre somit für mich kein Tag gewesen, um die höheren Grundgebühren und die 20% Verluste beim Speicher raus zu holen.
'2023-11-28 00:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2539', NULL
'2023-11-28 00:03:01', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 01:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2452', NULL
'2023-11-28 01:03:01', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 02:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2416', NULL
'2023-11-28 02:03:01', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 03:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2381', NULL
'2023-11-28 03:03:01', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 04:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2426', NULL
'2023-11-28 04:03:01', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 05:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2566', NULL
'2023-11-28 05:03:02', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
'2023-11-28 06:00:00', 'EVU_Tibber_connect', 'Tibber', NULL, 'fc0_total', '0.2677', NULL
'2023-11-28 06:03:02', 'EVU_Tibber_connect', 'HTTPMOD', '', 'fc0_trigger', 'on', NULL
Du darfst diesen Dateianhang nicht ansehen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

trupf

Zitat von: ch.eick am 27 November 2023, 08:53:02
Zitat von: trupf am 26 November 2023, 12:42:49Hallo Christian,

ich habe noch das Problem das bei mir in WR_1_API die Statistiken für das letzte Jahr und das letzte Quartal nicht angezeigt werden. Ich denke, das liegt daran, da die im stateFormat refernzierten "LogDBRep_Statistic_previous_Year" und "LogDBRep_Statistic_previous_Quarter" nicht existieren. Ist das ein Fehler? Hast Du die bei Dir? Wie wären die zu definieren?
Hallo Tobias,
das ist kein Fehler, sondern es fehlen Dir nur die Device definitionen.
Im Anhang findet Ihr jetzt die DbRep Devices und ein Beispiel für das Scheduling.
Die Anzeige im WR_1_API Devive als stateFormate sollte nicht mehr die bevorzugte sein, dafür wurde das WR_ctl Device erstellt.
Du darfst diesen Dateianhang nicht ansehen.

VG  Christian

Jetzt fehlt nur noch die Definition für "LogDBRep_Statistic_previous_Month" ... die rufst Du im DB_Service-Schedule auf, aber ich sehe nicht, wo die Ergebnisse gebraucht werden...

ch.eick

Zitat von: trupf am 02 Dezember 2023, 14:05:43Jetzt fehlt nur noch die Definition für "LogDBRep_Statistic_previous_Month" ... die rufst Du im DB_Service-Schedule auf, aber ich sehe nicht, wo die Ergebnisse gebraucht werden...
Hallo
LogDBRep_Statistic_previous_Month wird noch nirgens angezeigt, da der Wunsch nach dem Quartal gewesen ist.

Bei mir verwende ich es für andere Devices, wie z.B. WB_0, WB_1_lp1, WB_1_lp2, EVU_Tibber_connect

defmod LogDBRep_Statistic_previous_Month DbRep LogDB
attr LogDBRep_Statistic_previous_Month DbLogExclude .*
attr LogDBRep_Statistic_previous_Month allowDeletion 0
attr LogDBRep_Statistic_previous_Month comment Version 2023.01.02 15:00
attr LogDBRep_Statistic_previous_Month room System
attr LogDBRep_Statistic_previous_Month sqlCmdHistoryLength 1
attr LogDBRep_Statistic_previous_Month sqlFormatService https://sqlformat.org
attr LogDBRep_Statistic_previous_Month userExitFn splitReading .*:.*
attr LogDBRep_Statistic_previous_Month verbose 0

setstate LogDBRep_Statistic_previous_Month 2023-12-02 16:31:27 sqlCmd SELECT *\
FROM\
  (SELECT h.TIMESTAMP,\
          CONCAT('WB_0_', h.READING) AS READING,\
          h.VALUE\
   FROM history h\
   JOIN\
     (SELECT max(TIMESTAMP) AS TIMESTAMP,\
             READING\
      FROM history\
      WHERE DEVICE = 'WB_0'\
        AND READING = 'Kia_eNiro_kWhCounter_Month'\
        AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
        AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
      GROUP BY READING) x1 USING(TIMESTAMP,READING)) x\
UNION ALL\
SELECT h.TIMESTAMP,\
       CONCAT('WB_0_', h.READING) AS READING,\
       h.VALUE\
FROM history AS h\
JOIN\
  (SELECT max(TIMESTAMP) AS TIMESTAMP,\
          READING\
   FROM history\
   WHERE DEVICE = 'WB_0'\
     AND READING = 'Gast_kWhCounter_Month'\
     AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
     AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
   GROUP BY READING) x2 USING(TIMESTAMP,READING)\
UNION ALL\
SELECT h.TIMESTAMP,\
       CONCAT('WB_1_', h.READING) AS READING,\
       h.VALUE\
FROM history h\
JOIN\
  (SELECT max(TIMESTAMP) AS TIMESTAMP,\
          READING\
   FROM history\
   WHERE DEVICE = 'WB_1'\
     AND READING LIKE 'lp_%_kWhCounter_Month'\
     AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
     AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
   GROUP BY READING) x3 USING(TIMESTAMP,READING)\
UNION ALL\
SELECT max(TIMESTAMP) AS TIMESTAMP,\
       'EVU_Tibber_connect_nodes_consumption_Month' AS READING,\
       cast(sum(VALUE) AS DECIMAL(10, 0)) AS VALUE\
FROM history\
WHERE DEVICE='EVU_Tibber_connect'\
  AND READING='nodes_consumption'\
  AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
  AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59');;
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Moin,
es schneit :-) und das hatte ich letztes Jahr schon mal eingerichtet.
Du darfst diesen Dateianhang nicht ansehen.
string_1_covered_snow:SW_Total_DC_Energy_From_PV1.* {
   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);; $year += 1900;; $mon += 1 ;;
   (($mon <= 2 or $mon >= 11) and
    ($hour >= 9 and $hour <= 16) and
    ReadingsVal($NAME,"P_DC1","10000") < 100 and
    ReadingsVal("Heizung","ambientTemperature",100) < 10)? "Schnee" : "frei";; },
string_2_covered_snow:SW_Total_DC_Energy_From_PV2.* {
   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);; $year += 1900;; $mon += 1 ;;
   (($mon <= 2 or $mon >= 11) and
    ($hour >= 9 and $hour <= 16) and
    ReadingsVal($NAME,"P_DC2","10000") < 100 and
    ReadingsVal("Heizung","ambientTemperature",100) < 10)? "Schnee" : "frei";; }

Welche Werte Ihr da eintragen wollt hängt natürlich von Eurer Umgebung ab.
Ich bin jetzt mal gespannt, wie nah die KI Prognose an der Realität liegt.
Interessant ist auch der Moment, wo der Schnee nur noch teilweise die Module abdeckt.
P_DC1 79.25
P_DC2 70.64

ambientTemperature 0.5
averageAmbientTemperature 0.1

string_1_covered_snow Schnee
string_2_covered_snow Schnee

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: trupf am 02 Dezember 2023, 14:05:43Jetzt fehlt nur noch die Definition für "LogDBRep_Statistic_previous_Month" ... die rufst Du im DB_Service-Schedule auf, aber ich sehe nicht, wo die Ergebnisse gebraucht werden...
Wäre denn Interesse das bei Vorhandensein eines LogDBRep_Statistic_previous_Month Ergebnisses im WR_ctl zusätzlich oder anstelle des Quartals anzuzeigen?

Hier wäre z.B. schon mal das SQL für den Vormonat mit WR_1_API und noch weiteren Beispielen für andere Devices, als FHEM RAW
defmod LogDBRep_Statistic_previous_Month DbRep LogDB
attr LogDBRep_Statistic_previous_Month DbLogExclude .*
attr LogDBRep_Statistic_previous_Month allowDeletion 0
attr LogDBRep_Statistic_previous_Month comment Version 2023.12.04 14:00
attr LogDBRep_Statistic_previous_Month device WR_1_API
attr LogDBRep_Statistic_previous_Month reading SW_Statistic%_Month,Statistic_EnergyHomeBat_Month EXCLUDE=%NoBat%,%EnergyPv%
attr LogDBRep_Statistic_previous_Month room System
attr LogDBRep_Statistic_previous_Month sqlCmdHistoryLength 1
attr LogDBRep_Statistic_previous_Month sqlFormatService https://sqlformat.org
attr LogDBRep_Statistic_previous_Month userExitFn splitReading .*:.*
attr LogDBRep_Statistic_previous_Month verbose 0

setstate LogDBRep_Statistic_previous_Month 2023-12-04 14:30:36 sqlCmd SELECT *\
FROM\
  (SELECT h.TIMESTAMP,\
          CONCAT('WR_1_API_', h.READING) AS READING,\
          IF (h.READING LIKE '%Rate%'\
              OR h.READING LIKE '%Autarky%',\
                 h.VALUE,\
                 cast(h.VALUE/1000 AS decimal(6))) AS VALUE\
   FROM history h\
   JOIN\
     (SELECT max(TIMESTAMP) AS TIMESTAMP,\
             READING\
      FROM history\
      WHERE §device§\
        AND §reading§\
        AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
        AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
      GROUP BY READING) x1 USING(TIMESTAMP,READING)) x\
UNION ALL\
SELECT *\
FROM\
  (SELECT h.TIMESTAMP,\
          CONCAT('WB_0_', h.READING) AS READING,\
          h.VALUE\
   FROM history h\
   JOIN\
     (SELECT max(TIMESTAMP) AS TIMESTAMP,\
             READING\
      FROM history\
      WHERE DEVICE = 'WB_0'\
        AND READING = 'Kia_eNiro_kWhCounter_Month'\
        AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
        AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
      GROUP BY READING) x1 USING(TIMESTAMP,READING)) x\
UNION ALL\
SELECT h.TIMESTAMP,\
       CONCAT('WB_0_', h.READING) AS READING,\
       h.VALUE\
FROM history AS h\
JOIN\
  (SELECT max(TIMESTAMP) AS TIMESTAMP,\
          READING\
   FROM history\
   WHERE DEVICE = 'WB_0'\
     AND READING = 'Gast_kWhCounter_Month'\
     AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
     AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
   GROUP BY READING) x2 USING(TIMESTAMP,READING)\
UNION ALL\
SELECT h.TIMESTAMP,\
       CONCAT('WB_1_', h.READING) AS READING,\
       h.VALUE\
FROM history h\
JOIN\
  (SELECT max(TIMESTAMP) AS TIMESTAMP,\
          READING\
   FROM history\
   WHERE DEVICE = 'WB_1'\
     AND READING LIKE 'lp_%_kWhCounter_Month'\
     AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
     AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')\
   GROUP BY READING) x3 USING(TIMESTAMP,READING)\
UNION ALL\
SELECT max(TIMESTAMP) AS TIMESTAMP,\
       'EVU_Tibber_connect_nodes_consumption_Month' AS READING,\
       cast(sum(VALUE) AS DECIMAL(10, 0)) AS VALUE\
FROM history\
WHERE DEVICE='EVU_Tibber_connect'\
  AND READING='nodes_consumption'\
  AND TIMESTAMP > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00')\
  AND TIMESTAMP < DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59');;
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ojb

Hallo,

ich habe das Problem dass ohne Änderung an der Konfig viele Werte meines BYD Speichers als 0 zurückkommen, z.B. Battery_temperature, Battery_work_capacity.

Die Werte vom Wechselrichter kommen richtig, wie z.B. Grid_frequency.

Battery_voltage ist auf 0,23.

Kann es sein, dass die Batterie wegen Schnee in Deepsleep ist und deshalb nichts kommt?

Vielen lieben Dank im Voraus.

Liebe Grüße
Oli
FHEM unter Debian auf Asus EEBox: KNX (Wetterstation, Rollläden, Beleuchtung), Maple-CUN (Temperatur und Feuchte über 1-Wire, Intertechno-Funksteckdosen), PV-Anlage mit Plenticore und BYD, Viessmann Wärmepumpe, 1-Wire (Temperatur, Feuchte, Stromverbrauch), Husquarna-Automower, ...

ch.eick

Zitat von: ojb am 05 Dezember 2023, 17:49:17Hallo,
ich habe das Problem dass ohne Änderung an der Konfig viele Werte meines BYD Speichers als 0 zurückkommen, z.B. Battery_temperature, Battery_work_capacity.
Die Werte vom Wechselrichter kommen richtig, wie z.B. Grid_frequency.

Battery_voltage ist auf 0,23.

Kann es sein, dass die Batterie wegen Schnee in Deepsleep ist und deshalb nichts kommt?
Hallo Oli,
Da gab es glaube ich auch mal ein Problem mit der FW des WRs. Gibt es im WR eventuell Fehlermeldungen? Haste den mal neu gestartet?
Über das WR_1_API kann man auch einen Reset des WRs machen.

VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ojb

Ok, prüfe ich heute Abend. Wir hatten einen 30-minütigen Stromausfall ....

Wie kann ich den Reset über  API machen?
FHEM unter Debian auf Asus EEBox: KNX (Wetterstation, Rollläden, Beleuchtung), Maple-CUN (Temperatur und Feuchte über 1-Wire, Intertechno-Funksteckdosen), PV-Anlage mit Plenticore und BYD, Viessmann Wärmepumpe, 1-Wire (Temperatur, Feuchte, Stromverbrauch), Husquarna-Automower, ...

ch.eick

Zitat von: ojb am 06 Dezember 2023, 10:23:06Ok, prüfe ich heute Abend. Wir hatten einen 30-minütigen Stromausfall ....

Wie kann ich den Reset über  API machen?
Hallo Oli,
nach dem Stromausfall könnte auch ein Reset vom Speicher nicht schaden.
set WR_1_API 60_01_Reset_Wechselrichter

Wenn das nicht reichen sollte, dann könntest Du mal die komplette Power Off/Power On Prozedur von Kostal durchführen.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ojb

Bei mir kommt:
Unknown argument 60_01_Reset_Wechselrichter, choose one of 22_03_Battery_MinHomeConsumption 22_05_Battery_SmartBatteryControl_Enable 23_04_Battery_ExternControl_DcCurrentRel 23_07_Battery_ExternControl_MaxChargePowerAbs 23_02_Battery_ExternControl_AcPowerRel 23_00_Battery_ExternControl 23_01_Battery_ExternControl_AcPowerAbs 23_10_Battery_ExternControl_MinSocRel 22_06_Battery_Strategy 40_02_Generator_ShadowMgmt 22_07_Battery_Type 22_01_Battery_DynamicSoc_Enable 22_04_Battery_MinSoc 23_05_Battery_ExternControl_DcPowerAbs 06_auth_logout 23_08_Battery_ExternControl_MaxDischargePowerAbs 23_03_Battery_ExternControl_DcCurrentAbs 50_events_latest_5 23_09_Battery_ExternControl_MaxSocRel 23_06_Battery_ExternControl_DcPowerRel attrTemplate
FHEM unter Debian auf Asus EEBox: KNX (Wetterstation, Rollläden, Beleuchtung), Maple-CUN (Temperatur und Feuchte über 1-Wire, Intertechno-Funksteckdosen), PV-Anlage mit Plenticore und BYD, Viessmann Wärmepumpe, 1-Wire (Temperatur, Feuchte, Stromverbrauch), Husquarna-Automower, ...

ch.eick

Moin,
ich habe die Definition für den Reset nochmal raus gesucht.

attr WR_1_API set6001Header01 authorization: Session %auth_sessionId%
attr WR_1_API set6001Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set6001Method POST
attr WR_1_API set6001Name 60_01_Reset_Wechselrichter
attr WR_1_API set6001NoArg 1
attr WR_1_API set6001URL http://%IP-WR%/api/v1/system/reboot

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick