Stromverbrauch SMA - Nachts

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Antworten
hotspot2
Beiträge: 48
Registriert: So 30. Jan 2022, 09:48
Hat sich bedankt: 2 Mal

Stromverbrauch SMA - Nachts

Beitrag von hotspot2 »

Hallo zusammen,

ist es irgendwie möglich den Stromverbrauch des Hauses mit der Solaranzeige anzuzeigen in Grafana auch dann wenn der SMA Wechselrichter im Standby ist? Ich habe einen SMA Sunny Home Manager 2.0.

Oder müsste ich da, um das zu machen, dann doch auf ioBroker gehen.

Danke schon mal.

andreas_n
Beiträge: 717
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 15 Mal
Danksagung erhalten: 36 Mal

Re: Stromverbrauch SMA - Nachts

Beitrag von andreas_n »

hotspot2 hat geschrieben:
Mo 11. Jul 2022, 19:39
Oder müsste ich da
Nööö, wenn du den HM2.0 hast, so wie ich, dann musst du den als Gerät anlegen, evtl auf die Multiversion upgraden
9kWp S/SO > SMA Tripower (IBN 18.6.20) + 4kWp S/SW > Growatt MIN 3000 TL-XE (IBN 31.3.21) + 2kWp Süd -19° ELWA DC Warmwasser ("IBN" 9.5.21)
3,8kWp S > Growatt SPH 4600 (IBN 22.10.21)

ksapp
Beiträge: 50
Registriert: Di 27. Jul 2021, 21:17
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Stromverbrauch SMA - Nachts

Beitrag von ksapp »

Hi,

ich habe das SMA Energymeter als zweiten Regler eingebunden. Dann etwas PHP Code in die SMA_energymeter_math, der dafür sorgt, das die Verbrauchsberechnung Tagsüber die Werte vom Wechselrichter nimmt und wenn der Wechselrichter im Betriebsmodus ,Aus' ist , die Werte vom Energymeter verwendet.
Hintergrund ist, das bei schnellen Änderungen der PV Leistung mitunter negative Verbrauche ausgerechnet wurden, da die Werte von Energymeter und Wechselrichter nicht synchron in die Datenbank geliefert werden. Es gab dann Datenpunkte, wo die PV Leistung z.B. 1kW war und das Energymeter noch einen Export von z.B. 2kW angezeigt hat, was ja nicht sein kann.

Gruß
Oliver
SMA Tripower 5.0 STP - SMA Energymeter - Raspberrby Pi Zero, ESP 32 für Erfassung der Vor- Rücklauf und Aussentemperatur.

andreas_n
Beiträge: 717
Registriert: Do 25. Jun 2020, 13:40
Hat sich bedankt: 15 Mal
Danksagung erhalten: 36 Mal

Re: Stromverbrauch SMA - Nachts

Beitrag von andreas_n »

ksapp hat geschrieben:
Mi 13. Jul 2022, 07:29
gab dann Datenpunkte, wo die PV Leistung z.B. 1kW war und das Energymeter noch einen Export von z.B. 2kW angezeigt hat, was ja nicht sein kann.
das liegt vmtl daran, in welcher Reihenfolge die Geräte ausgelesen werden, denn die Kommunikation zw WR und HM ist recht fix, denn damit muss ja die 70% geregelt werden.
9kWp S/SO > SMA Tripower (IBN 18.6.20) + 4kWp S/SW > Growatt MIN 3000 TL-XE (IBN 31.3.21) + 2kWp Süd -19° ELWA DC Warmwasser ("IBN" 9.5.21)
3,8kWp S > Growatt SPH 4600 (IBN 22.10.21)

hotspot2
Beiträge: 48
Registriert: So 30. Jan 2022, 09:48
Hat sich bedankt: 2 Mal

Re: Stromverbrauch SMA - Nachts

Beitrag von hotspot2 »

Das klingt erstmal ganz gut. Wie funktioniert den die Integration und die Anpassung des PHP Skriptes? Ich würde gerne den gesamten Stromverbrauch vom Haus im Grafana Board darstellen.

Wäre klasse wenn ihr mir da helfen könntet. Könnte ja sicher auch für andere interessant sein.

hotspot2
Beiträge: 48
Registriert: So 30. Jan 2022, 09:48
Hat sich bedankt: 2 Mal

Re: Stromverbrauch SMA - Nachts

Beitrag von hotspot2 »

Das klingt erstmal ganz gut. Wie funktioniert den die Integration und die Anpassung des PHP Skriptes? Ich würde gerne den gesamten Stromverbrauch vom Haus im Grafana Board darstellen.

Wäre klasse wenn ihr mir da helfen könntet. Könnte ja sicher auch für andere interessant sein.

ksapp
Beiträge: 50
Registriert: Di 27. Jul 2021, 21:17
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Stromverbrauch SMA - Nachts

Beitrag von ksapp »

Hallo,

ich kann dir gerne meine Sma_energy_math.php geben

Code: Alles auswählen

// Info: Hier wird der Strompreis gepflegt (siehe unten)

#!/usr/bin/php
<?php

//Wenn der Wert auch in die LOG Datei geschrieben werden soll.
//$funktionen->log_schreiben("Rasperry Temperatur: ".round($RaspiTemp,1)." °C",">",5); //wenn RaspiTemp in solaranzeige.log angezeigt werden soll
                                                                                      //vor $funktionen entfernen

$Datenbank[1] = "solaranzeige";

$Measurements[1][1] = "AC";
$Measurements[1][2] = "Service";
$Measurements[1][3] = "Summen";


//06.06.2022 Strompreis von 0,282 auf 0,3045 angepasst
// $Strompreis ="0.3045"; // Euro pro Kilowatt
// $PreisperiodeWhEigenverbrauchAnfang ="988575"; //Startpunkt eigenverbrauchszähler für aktuelle PReisperiode in Wh
// $PreisperiodeEigenverbrauchEuAnfang ="202.76"; //Startpunkt  Eigenverbrauchszähler für aktuelle Preisperiode in EURO


//01.07.2022 Strompreis von 0,3045 auf 0,2673 angepasst (EEG Umlage entfallen)
$Strompreis ="0.2673"; // Euro pro Kilowatt
$PreisperiodeWhEigenverbrauchAnfang ="1111807"; //Startpunkt eigenverbrauchszähler für aktuelle PReisperiode in Wh
$PreisperiodeEigenverbrauchEuAnfang ="231.00"; //Startpunkt  Eigenverbrauchszähler für aktuelle Preisperiode in EURO




$Einspeiseverguetung ="0.0769"; // Euro pro Kilowatt

//$Datenbank[2] = "energymeter";

// Verbrauchsberechnung abhängig entweder Energymeterdaten oder Wechselrichterdaten verwenden. Tags -> Wechselrichter -> nachts -> Energymeter. Grund: Wechselrichter und Energymeter werden nie zeitgleich ausgelesen, das führt bei Wolkenflug macnhmal zu neagtiven Werten für Verbrauch.
// Verbrauchsberechnung Anfang
for ($i=1; $i <= count($Datenbank); $i++) {
    for($j=1; $j <= count($Measurements[$i]); $j++){

        $ch[$i][$j] = curl_init('http://localhost/query?db='.$Datenbank[$i].'&precision=s&q='.urlencode('select * from '.$Measurements[$i][$j].' order by time desc limit 1'));
        include "mathe.php";
    }
}

if($DB[1][2]["Betriebszustand"] != 0){ //Tagsüber Werte aus dem Wechselrichter verwenden
    log_schreiben(" Leistung WR : ".$DB[1][1]["Leistung"],"",8);
    log_schreiben(" Betriebszustand WR : ".$DB[1][2]["Betriebszustand"],"",8);
    log_schreiben(" Einspeisung WR : ".$DB[1][1]["Einspeisung"],"",8);
    log_schreiben(" Bezug WR : ".$DB[1][1]["Bezug"],"",8);
    log_schreiben(" Verbrauch WR : ".($DB[1][1]["Leistung"] + $DB[1][1]["Bezug"] - $DB[1][1]["Einspeisung"]),"",8);
    $aktuelleDaten["ZusatzQuery"] = "Dashboard Gesamt_Leistung=".($DB[1][1]["Leistung"] + $DB[1][1]["Bezug"] - $DB[1][1]["Einspeisung"]);

}
else // Nachts Werte aus dem Energymeter verwenden
{
    log_schreiben(" Import/Export (EM): ".$aktuelleDaten["AC_Leistung"],"",8); // nehme aus der zuletzt verwendenten PHP = hier ist das Energymeter den Wert aus der Tabelle 'AC' für 'Leistung'
    log_schreiben(" Verbrauch (EM):  ".($aktuelleDaten["AC_Leistung"] + $DB[1][1]["Leistung"]),"",8);
    $aktuelleDaten["ZusatzQuery"] = "Dashboard Gesamt_Leistung=".($DB[1][1]["Leistung"] + $aktuelleDaten["AC_Leistung"]);
}

// Verbrauchsberechnung Ende




// Wh Zähler Bezug Anfang
/*****************************************************************************
//  Die Status Datei wird dazu benutzt, um den Bezug in Wh Pro Tag zu berechnen
//  Um 00:00 wird der aktuelle Zählerstand des Energymeters in der Datei hinterlegt.
//  In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
//  und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
$StatusFile = $Pfad."/database/".$GeraeteNummer.".WattstundenZaehlerBezugAnfangswert.txt";
if (file_exists($StatusFile)) {
  /***************************************************************************
  //  Wenn Statusdatei existiert, dann Datei einlesen ...
  ***************************************************************************/
  $WattstundenZaehlerBezugAnfangswert = file_get_contents($StatusFile);
  if (empty($WattstundenZaehlerBezugAnfangswert)){ // Ist die gelesene Datei leer, dann ...
      $WattstundenZaehlerBezugAnfangswert = $aktuelleDaten["Wh_Bezug"]; //...schreibe den aktuellen Zählerstand in die Datei
  }
  if (date("H:i") == "00:00") {   // Jede Nacht 0 Uhr
    $WattstundenZaehlerBezugAnfangswert = $aktuelleDaten["Wh_Bezug"];       //  Zäherstand am Anfang des Tages merken
    $rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Bezug"]);       // und in die statusdatei schreiben
    $funktionen->log_schreiben("WattstundenZaehlerBezugAnfangswert gesetzt".$aktuelleDaten["Wh_Bezug"],8);
  }
}
else {
  /***************************************************************************
  //  Inhalt der Status Datei anlegen, wenn Datei noch nicht vorhanden ist.
  ***************************************************************************/
  $rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Bezug"]);
  if ($rc === false) {
    $funktionen->log_schreiben("Konnte die Datei WattstundenZaehlerBezugAnfangswert.txt. nicht anlegen","   ",5);
  }
}

/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Bezug in Wh Pro Tag zu berechnen
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
// und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
if (file_exists($StatusFile) and isset($aktuelleDaten["Wh_Bezug"])) {
  /***************************************************************************
  //  Daten einlesen ...
  ***************************************************************************/
  $WattstundenZaehlerBezugAnfangswert = file_get_contents($StatusFile);
  $aktuelleDaten["whBezugHeute"] = $aktuelleDaten["Wh_Bezug"] - $WattstundenZaehlerBezugAnfangswert; // // Berechne aktuellen Bezugs - BezugAnfangswert von heute
  $aktuelleDaten["whBezugHeute"] = round($aktuelleDaten["whBezugHeute"],0);
  $funktionen->log_schreiben("Bezug Wh Heute  ".$aktuelleDaten["whBezugHeute"],"  Wh",8);
  $aktuelleDaten["ZusatzQuery"] .= ",WhBezugHeute=".$aktuelleDaten["whBezugHeute"]; // Alle Werte der ZUsatzquarry landen in der Tabelle Dashboard WICHTIG: ,

}
// Wh Zähler Bezug Ende

// Wh Zähler Einspeisung Anfang
/*****************************************************************************
//  Die Status Datei wird dazu benutzt, um den Einspeisung in Wh Pro Tag zu berechnen
//  Um 00:00 wird der aktuelle Zählerstand des Energymeters in der Datei hinterlegt.
//  In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
//  und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
$StatusFile = $Pfad."/database/".$GeraeteNummer.".WattstundenZaehlerEinspeisungAnfangswert.txt";
if (file_exists($StatusFile)) {
  /***************************************************************************
  //  Wenn Statusdatei existiert, dann Datei einlesen ...
  ***************************************************************************/
  $WattstundenZaehlerEinspeisungAnfangswert = file_get_contents($StatusFile);
  if (empty($WattstundenZaehlerEinspeisungAnfangswert)){ // Ist die gelesene Datei leer, dann ...
      $WattstundenZaehlerEinspeisungAnfangswert = $aktuelleDaten["Wh_Einspeisung"]; //...schreibe den aktuellen Zählerstand in die Datei
  }
  if (date("H:i") == "00:00") {   // Jede Nacht 0 Uhr
    $WattstundenZaehlerEinspeisungAnfangswert = $aktuelleDaten["Wh_Einspeisung"];       //  Zäherstand am Anfang des Tages merken
    $rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Einspeisung"]);       // und in die statusdatei schreiben
    $funktionen->log_schreiben("WattstundenZaehlerEinspeisungAnfangswert gesetzt".$aktuelleDaten["Wh_Einspeisung"],8);
  }
}
else {
  /***************************************************************************
  //  Inhalt der Status Datei anlegen, wenn Datei noch nicht vorhanden ist.
  ***************************************************************************/
  $rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Einspeisung"]);
  if ($rc === false) {
    $funktionen->log_schreiben("Konnte die Datei WattstundenZaehlerEinspeisungAnfangswert.txt. nicht anlegen","   ",8);
  }
}

/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Einspeisung an kWh Pro Tag zu berechnen
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
if (file_exists($StatusFile) and isset($aktuelleDaten["Wh_Einspeisung"])) {
  /***************************************************************************
  //  Daten einlesen ...
  ***************************************************************************/
  $WattstundenZaehlerEinspeisungAnfangswert = file_get_contents($StatusFile);
  $aktuelleDaten["whEinspeisungHeute"] = $aktuelleDaten["Wh_Einspeisung"] - $WattstundenZaehlerEinspeisungAnfangswert; // // Berechne aktuellen Einspeisungs - EinspeisungAnfangswert von heute
  $aktuelleDaten["whEinspeisungHeute"] = round($aktuelleDaten["whEinspeisungHeute"],0);
  $funktionen->log_schreiben("Einspeisung Wh Heute  ".$aktuelleDaten["whEinspeisungHeute"],"  Wh",8);
  $aktuelleDaten["ZusatzQuery"] .= ",WhEinspeisungHeute=".$aktuelleDaten["whEinspeisungHeute"]; // Alle Werte der ZUsatzquarry landen in der Tabelle Dashboard WICHTIG: ,
}
// Wh Zähler Einspeisung Ende

if($DB[1][2]["Betriebszustand"] != 0){ //nur Tagsueber berechen. Sonst durch woechentlichen Wechselrichterneustart nachts falsche Werte.

/****************************************************************************
// Verkaufter Strom im Wert von xxx Euro 
*****************************************************************************/
    $aktuelleDaten["Eu_GesamtEinspeisung"] = ($aktuelleDaten["Wh_Einspeisung"] / 1000)  * $Einspeiseverguetung;
    $aktuelleDaten["Eu_GesamtEinspeisung"] = round($aktuelleDaten["Eu_GesamtEinspeisung"] ,2);
    $funktionen->log_schreiben("Eingespeist Eu Gesamt  ".$aktuelleDaten["Eu_GesamtEinspeisung"],"  Euro",8);
    $aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEinspeisung=".$aktuelleDaten["Eu_GesamtEinspeisung"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier $
/****************************************************************************/



/*****************************************************************************
// Eigenverbrauch Gesamt in Wh
// Wh (PV Ertrag Gesamt) - Wh (Eingespeist) ergibt den selbst verbrauchten PV Strom aus Gesamtzähler Energymeter und Wechselrichter
*****************************************************************************/

    $aktuelleDaten["Wh_GesamtEigenverbrauch"] = $DB[1][3]["Wh_Gesamt"] - $aktuelleDaten["Wh_Einspeisung"];
    $aktuelleDaten["Wh_GesamtEigenverbrauch"] = round($aktuelleDaten["Wh_GesamtEigenverbrauch"],0);
    $funktionen->log_schreiben("Eigenverbrauch Wh Gesamt  ".$aktuelleDaten["Wh_GesamtEigenverbrauch"],"  Wh",8);
//  $aktuelleDaten["ZusatzQuery"] .= ",Wh_GesamtEigenverbrauch=".$aktuelleDaten["Wh_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier das Komma am Anfang ,
/****************************************************************************


/****************************************************************************
// Eigenverbrauchter Strom im Wert von xxx Euro (Strompreis Minus Einspeisevergütung) aus Gesamtzähler Energymeter
*****************************************************************************/
//  $aktuelleDaten["Eu_GesamtEigenverbrauch"] = ($aktuelleDaten["Wh_GesamtEigenverbrauch"] / 1000)  * ($Strompreis - $Einspeiseverguetung);
//  $aktuelleDaten["Eu_GesamtEigenverbrauch"] = round($aktuelleDaten["Eu_GesamtEigenverbrauch"] ,2);
//  $funktionen->log_schreiben("Eigenverbrauch Eu Gesamt  ".$aktuelleDaten["Eu_GesamtEigenverbrauch"],"  Euro",8);
//  $aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEigenverbrauch=".$aktuelleDaten["Eu_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier das Komma am Anfang
/****************************************************************************/


/****************************************************************************
// Eigenverbrauchter Strom im Wert von xxx Euro (Strompreis Minus Einspeisevergütung) aus Gesamtzähler Energymeter P
*****************************************************************************/
   $aktuelleDaten["Eu_PreisperiodeEigenverbrauch"] = (($aktuelleDaten["Wh_GesamtEigenverbrauch"]- $PreisperiodeWhEigenverbrauchAnfang) / 1000)  * ($Strompreis - $Einspeiseverguetung);
    $aktuelleDaten["Eu_GesamtEigenverbrauch"] = $aktuelleDaten["Eu_PreisperiodeEigenverbrauch"] + $PreisperiodeEigenverbrauchEuAnfang ;
    $aktuelleDaten["Eu_GesamtEigenverbrauch"] = round($aktuelleDaten["Eu_GesamtEigenverbrauch"] ,2);
    $funktionen->log_schreiben("PreisperiodeEingenverbrauchsEuAnfang  ".$PreisperiodeEigenverbrauchEuAnfang,"  Euro",8);
    $funktionen->log_schreiben("Eu_PreisperiodeEigenverbrauch ".$aktuelleDaten["Eu_PreisperiodeEigenverbrauch"],"  Euro",8);
    $funktionen->log_schreiben("Eu_GesamtEigenverbrauch ".$aktuelleDaten["Eu_GesamtEigenverbrauch"],"  Euro",8);
    $aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEigenverbrauch=".$aktuelleDaten["Eu_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist$
/****************************************************************************/



}
?>
Allerdings kann ich nicht garantieren, das das bei deinem System auch funktioniert. Ein paar Kommentare sind in dem Programmcode drin.

Gruß
Oliver
SMA Tripower 5.0 STP - SMA Energymeter - Raspberrby Pi Zero, ESP 32 für Erfassung der Vor- Rücklauf und Aussentemperatur.

Antworten