Verbrauch berechnen mit Solaredge und SDM230

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

Moderator: Ulrich

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

Sorry, aber ich verstehe deine Fragen nicht. Ich übersetze aus dem Deutschen ins Italienische, vielleicht ist es schlecht übersetzt

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

Ich schicke dir meine Dateien

SDM230_meter.php

Code: Alles auswählen

#!/usr/bin/php
<?php
/*****************************************************************************
//  Solaranzeige Projekt             Copyright (C) [2015-2016]  [Ulrich Kunz]
//
//  Dieses Programm ist freie Software. Sie können es unter den Bedingungen
//  der GNU General Public License, wie von der Free Software Foundation
//  veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß
//  Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
//  Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es
//  Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne
//  die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
//  BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
//
//  Ein original Exemplar der GNU General Public License finden Sie hier:
//  http://www.gnu.org/licenses/
//
//  Dies ist ein Programmteil des Programms "Solaranzeige"
//
//  Es dient dem Auslesen der Regler der Tracer Serie über die USB Schnittstelle
//  Das Auslesen wird hier mit einer Schleife durchgeführt. Wie oft die Daten
//  ausgelesen und gespeichert werden steht in der user.config.php
//
//
*****************************************************************************/
$path_parts = pathinfo($argv[0]);
$Pfad = $path_parts['dirname'];
if (!is_file($Pfad."/1.user.config.php")) {
  // Es ist kein Multi Regler System!
  require($Pfad."/user.config.php");
}


require_once($Pfad."/phpinc/funktionen.inc.php");
if (!isset($funktionen)) {
  $funktionen = new funktionen();
}
// Im Fall, dass man die Device manuell eingeben muss
if (isset($USBDevice) and !empty($USBDevice)) {
  $USBRegler = $USBDevice;
}

$Tracelevel = 7;  //  1 bis 10  10 = Debug
$Version = "";
$Device = "ME"; // ME = Smart Meter
$RemoteDaten = true;


if (empty($WR_Adresse)) {
  $WR_ID = "01";
}
elseif(strlen($WR_Adresse) == 1)  {
  $WR_ID = str_pad($WR_Adresse,2,"0",STR_PAD_LEFT);
}
else {
  $WR_ID = str_pad(substr($WR_Adresse,-2),2,"0",STR_PAD_LEFT);
}

$funktionen->log_schreiben("WR_ID: ".$WR_ID,"+  ",7);


$Befehl = array(
  "DeviceID" => $WR_ID,
  "BefehlFunctionCode" => "04",
  "RegisterAddress" => "3001",
  "RegisterCount" => "0001" );



$Start = time();  // Timestamp festhalten
$funktionen->log_schreiben("---------   Start  SDM230_meter.php  ------------------------- ","|--",6);
setlocale(LC_TIME,"de_DE.utf8");
$funktionen->log_schreiben("Zentraler Timestamp: ".$zentralerTimestamp,"   ",8);
$aktuelleDaten = array();
$aktuelleDaten["zentralerTimestamp"] = $zentralerTimestamp;


//  Hardware Version ermitteln.
$Teile =  explode(" ",$Platine);
if ($Teile[1] == "Pi") {
  $Version = trim($Teile[2]);
  if ($Teile[3] == "Model") {
    $Version .= trim($Teile[4]);
    if ($Teile[5] == "Plus") {
      $Version .= trim($Teile[5]);
    }
  }
}
$funktionen->log_schreiben("Hardware Version: ".$Version,"o  ",8);

switch($Version) {
  case "2B":
  break;
  case "3B":
  break;
  case "3BPlus":
  break;
  case "4B":
  break;
  default:
  break;
}



//  Nach em Öffnen des Port muss sofort der Regler ausgelesen werden, sonst
//  sendet er asynchrone Daten!
$USB1 = $funktionen->openUSB($USBRegler);
if (!is_resource($USB1)) {
  $funktionen->log_schreiben("USB Port kann nicht geöffnet werden. [1]","XX ",7);
  $funktionen->log_schreiben("Exit.... ","XX ",7);
  goto Ausgang;
}


$i = 1;
do {
  $funktionen->log_schreiben("Die Daten werden ausgelesen...",">  ",9);

  /**************************************************************************
  //  Ab hier wird der Energy Meter ausgelesen.
  //
  //  Ergebniswerte:
  // 
  // 
  **************************************************************************/


  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0000";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Voltage"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0006";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Current"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "000C";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Power"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0012";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Scheinleistung"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0018";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Blindleistung"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "001E";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["PF_Power_Factor"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0024";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["AC_Phasenverschiebung"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0046";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Frequency"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0048";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Wh_Import"] = ($rc*1000);

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "004A";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Wh_Export"] = ($rc*1000);

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0054";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Total_energy_power-demand"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0058";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Import"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "005C";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Export"] = $rc;

  $Befehl["DeviceID"] = $WR_ID;
  $Befehl["RegisterAddress"] = "0156";
  $Befehl["BefehlFunctionCode"] = "04";
  $Befehl["RegisterCount"] = "0002";
  $rc = $funktionen->sdm_auslesen($USB1,$Befehl);
  $aktuelleDaten["Total_active_energy"] = ($rc*1000);

  $funktionen->log_schreiben("AC Power: ".$aktuelleDaten["AC_Power"]." Watt","   ",6);


  /**************************************************************************
  //  Falls ein ErrorCode vorliegt, wird er hier in einen lesbaren
  //  Text umgewandelt, sodass er als Fehlermeldung gesendet werden kann.
  //  Die Funktion ist noch nicht überall implementiert.
  **************************************************************************/
  $FehlermeldungText = "";


  /****************************************************************************
  //  Die Daten werden für die Speicherung vorbereitet.
  ****************************************************************************/
  $aktuelleDaten["Regler"] = $Regler;
  $aktuelleDaten["Objekt"] = $Objekt;
  $aktuelleDaten["Firmware"] = 0;
  $aktuelleDaten["Produkt"]  = "SDM230";
  $aktuelleDaten["WattstundenGesamtHeute"]  = 0;  // dummy
  $aktuelleDaten["zentralerTimestamp"] = ($aktuelleDaten["zentralerTimestamp"]+10);

  if ($i == 1) 
    $funktionen->log_schreiben(var_export($aktuelleDaten,1),"   ",8);

  /****************************************************************************
  //  User PHP Script, falls gewünscht oder nötig
  ****************************************************************************/
  if ( file_exists ("/var/www/html/SDM230_meter_math.php")) {
    include 'SDM230_meter_math.php';  // Falls etwas neu berechnet werden muss.
  }



  /**************************************************************************
  //  Alle ausgelesenen Daten werden hier bei Bedarf als mqtt Messages
  //  an den mqtt-Broker Mosquitto gesendet.
  //  Achtung! Die Übertragung dauert ca. 30 Sekunden!
  **************************************************************************/
  if ($MQTT and $i == 1) {
    $funktionen->log_schreiben("MQTT Daten zum [ $MQTTBroker ] senden.","   ",1);
    require($Pfad."/mqtt_senden.php");
  }

  /****************************************************************************
  //  Zeit und Datum
  ****************************************************************************/
  //  Der Regler hat keine interne Uhr! Deshalb werden die Daten vom Raspberry benutzt.
  $aktuelleDaten["Timestamp"] = time();
  $aktuelleDaten["Monat"]     = date("n");
  $aktuelleDaten["Woche"]     = date("W");
  $aktuelleDaten["Wochentag"] = strftime("%A",time());
  $aktuelleDaten["Datum"]     = date("d.m.Y");
  $aktuelleDaten["Uhrzeit"]      = date("H:i:s");



  /****************************************************************************
  //  InfluxDB  Zugangsdaten ...stehen in der user.config.php
  //  falls nicht, sind das hier die default Werte.
  ****************************************************************************/
  $aktuelleDaten["InfluxAdresse"] = $InfluxAdresse;
  $aktuelleDaten["InfluxPort"] =  $InfluxPort;
  $aktuelleDaten["InfluxUser"] =  $InfluxUser;
  $aktuelleDaten["InfluxPassword"] = $InfluxPassword;
  $aktuelleDaten["InfluxDBName"] = $InfluxDBName;
  $aktuelleDaten["InfluxDaylight"] = $InfluxDaylight;
  $aktuelleDaten["InfluxDBLokal"] = $InfluxDBLokal;
  $aktuelleDaten["InfluxSSL"] = $InfluxSSL;
  $aktuelleDaten["Demodaten"] = false;



  /*********************************************************************
  //  Daten werden in die Influx Datenbank gespeichert.
  //  Lokal und Remote bei Bedarf.
  *********************************************************************/
  if ($InfluxDB_remote) {
    // Test ob die Remote Verbindung zur Verfügung steht.
    if ($RemoteDaten) {
      $rc = $funktionen->influx_remote_test();
      if ($rc) {
        $rc = $funktionen->influx_remote($aktuelleDaten);
        if ($rc) {
          $RemoteDaten = false;
        }
      }
      else {
        $RemoteDaten = false;
      }
    }
    if ($InfluxDB_local) {
      $rc = $funktionen->influx_local($aktuelleDaten);
    }
  }
  else {
    $rc = $funktionen->influx_local($aktuelleDaten);
  }



  if (is_file($Pfad."/1.user.config.php")) {
    // Ausgang Multi-Regler-Version
    $Zeitspanne = (9 - (time() - $Start));
    $funktionen->log_schreiben("Multi-Regler-Ausgang. ".$Zeitspanne,"   ",2);
    if ($Zeitspanne > 0) {
      sleep($Zeitspanne);
    }
    break;
  }
  else {
    $funktionen->log_schreiben("Schleife: ".($i)." Zeitspanne: ".(floor((56 - (time() - $Start))/($Wiederholungen-$i+1))),"   ",9);
    sleep(floor((56 - (time() - $Start))/($Wiederholungen-$i+1)));
  }
  if ($Wiederholungen <= $i or $i >= 6) {
    $funktionen->log_schreiben("OK. Daten gelesen.","   ",9);
    $funktionen->log_schreiben("Schleife ".$i." Ausgang...","   ",8);
    break;
  }
  $i++;

} while (($Start + 56) > time());


if (isset($aktuelleDaten["Firmware"]) and isset($aktuelleDaten["Regler"])) {


  /*********************************************************************
  //  Jede Minute werden bei Bedarf einige Werte zur Homematic Zentrale
  //  übertragen.
  *********************************************************************/
  if (isset($Homematic) and $Homematic == true) {
    $funktionen->log_schreiben("Daten werden zur HomeMatic übertragen...","   ",8);
    require($Pfad."/homematic.php");
  }

  /*********************************************************************
  //  Sollen Nachrichten an einen Messenger gesendet werden?
  //  Bei einer Multi-Regler-Version sollte diese Funktion nur bei einem
  //  Gerät aktiviert sein.
  *********************************************************************/
  if (isset($Messenger) and $Messenger == true) {
    $funktionen->log_schreiben("Nachrichten versenden...","   ",8);
    require($Pfad."/meldungen_senden.php");
  }

  $funktionen->log_schreiben("OK. Trasferimento dati riuscito.","   ",7);    
}
else {
  $funktionen->log_schreiben("Nessun dato valido ricevuto.","!! ",6);
}


Ausgang:


$funktionen->log_schreiben("---------   Stop   SDM230_meter.php    ----------------------- ","|--",6);

return;


?>
funktionen.inc.php

Code: Alles auswählen

if (date( "i" ) == '00' or date( "i" ) == '10' or date( "i" ) == '20' or date( "i" ) == '30' or date( "i" ) == '40' or date( "i" ) == '50') {
      // if (1 == 1) {
      //$this->log_schreiben("Aktuelle Statistik:\n".print_r($daten,1),"   ",9);
      $this->log_schreiben( "Alle 10 Minuten werden die Statistikdaten übertragen.", "   ", 5 );
      $query = "Statistics Description=\"WhTag\",Date=\"".$daten['Datum']."\",Week=".$daten['Woche'].",Month=".$daten['Monat'];
      $query .= ",Value=".$daten["WattstundenGesamtHeute"].",Weekday=\"".$daten['Wochentag']."\"";
      $query .= ",Today_TS=".mktime( 0, 0, 0, date( "m" ), date( "d" ), date( "Y" ))."000000000";
      $query .= ",Yesterday_TS=".mktime( 0, 0, 0, date( "m" ), date( "d" ) - 1, date( "Y" ))."000000000";
      $query .= ",This_Year_TS=".mktime( 0, 0, 0, 1, 1, date( "Y" ))."000000000";
      $query .= ",Last_Year_TS=".mktime( 0, 0, 0, 1, 1, date( "Y" ) - 1 )."000000000";
      $query .= ",This_Month_TS=".mktime( 0, 0, 0, date( "m" ), 1, date( "Y" ))."000000000";
      $query .= ",Last_Month_TS=".mktime( 0, 0, 0, date( "m" ) - 1, 1, date( "Y" ))."000000000";
      $query .= ",This_Week_TS=".strtotime( "last monday" )."000000000";
      $query .= ",Last_Week_TS=".strtotime( "last monday -7 days" )."000000000";
      $query .= ",Day_of_month=".date( "j" );
      $query .= ",Day_of_year=".(date( "z" ) + 1);
      $query .= ",Year=".date( "Y" );
      $query .= ",Hour=".date( "G" );
      $query .= "  ".$daten["zentralerTimestamp"];
      $ch = curl_init( 'http://localhost/write?db='.$daten["InfluxDBLokal"].'&precision=s' );
      $i = 1;
      //
      //
      //
      //
      //////   SD230
      if (date( "i" ) == "01" or $daten["Demodaten"] or date( "H" ) == date( "H", $Sonnenaufgang )) {
          $query .= "Info ";
          $query .= "Firmware=\"".$daten["Firmware"]."\"";
          $query .= ",Product=\"".$daten["Modell"]."\"";
          $query .= ",Object=\"".$daten["Objekt"]."\"";
          $query .= ",Date=\"".$daten["Datum"]."\"";
          $query .= "  ".$daten["zentralerTimestamp"];
          $query .= "\n";
        }
        $query .= "AC ";
        if ($daten["Regler"] == 50) {
          $query .= "Voltage=".$daten["AC_Voltage"];
        }
        else {
          $query .= "Voltage=".$daten["AC_Spannung_R"];
        }
        $query .= ",Current=".$daten["AC_Current"];
        $query .= ",Frequency=".$daten["Frequency"];
        $query .= ",Power=".$daten["AC_Power"];
        $query .= ",Power_Factor=".$daten["PF_Power_Factor"];
        if ($daten["Regler"] == 34 or $daten["Regler"] == 51 or $daten["Regler"] == 53 or $daten["Regler"] == 54 or $daten["Regler"] == 61) {
          $query .= ",Voltage_R=".$daten["AC_Spannung_R"];
          $query .= ",Voltage_S=".$daten["AC_Spannung_S"];
          $query .= ",Voltage_T=".$daten["AC_Spannung_T"];
          $query .= ",Current_R=".$daten["AC_Strom_R"];
          $query .= ",Current_S=".$daten["AC_Strom_S"];
          $query .= ",Current_T=".$daten["AC_Strom_T"];
          $query .= ",Power_R=".$daten["AC_Leistung_R"];
          $query .= ",Power_S=".$daten["AC_Leistung_S"];
          $query .= ",Power_T=".$daten["AC_Leistung_T"];
          $query .= ",Power_Factor_R=".$daten["PF_R"];
          $query .= ",Power_Factor_S=".$daten["PF_S"];
          $query .= ",Power_Factor_T=".$daten["PF_T"];
        }
        if ($daten["Regler"] == 50 or $daten["Regler"] == 51 or $daten["Regler"] == 54 or $daten["Regler"] == 61) {
          $query .= ",Import=".$daten["Import"];
          $query .= ",Export=".$daten["Export"];
        }
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n"; // *
        $query .= "Total_energy ";
        $query .= "Total_active_energy=".$daten["Total_active_energy"];
        $query .= ",Wh_Import=".round( $daten["Wh_Import"], 1 );
        $query .= ",Wh_Export=".$daten["Wh_Export"];
        $query .= ",Total_energy_requirement=".$daten["Total_energy_power-demand"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
        break;
        //
        //
        //
        //
        //
        // Solaredge
        /*  SolarEdge   */
      case 16:
        if (date( "i" ) == "01" or $daten["Demodaten"] or date( "H" ) == date( "H", $Sonnenaufgang )) {
          $query .= "Info ";
          $query .= "Firmware=".$daten["Firmware"];
          $query .= ",Product=\"".$daten["Modell"]."\"";
          $query .= ",Object=\"".$daten["Objekt"]."\"";
          $query .= ",Date=\"".$daten["Datum"]."\"";
          $query .= "  ".$daten["zentralerTimestamp"];
          $query .= "\n"; // *
        }
        if (isset($daten["Batterie1Modell"])) {
          $query .= "Batterie ";
          $query .= "SOC=".$daten["Batterie1StatusSOE"];
          $query .= "  ".$daten["zentralerTimestamp"];
          $query .= "\n"; // *            $query .= "Batterie_1 ";
          $query .= "Batterie_1 ";
          $query .= "Temperature=".$daten["Batterie1Temp"];
          $query .= ",Voltage=".$daten["Batterie1Spannung"];
          $query .= ",Current=".$daten["Batterie1Strom"];
          $query .= ",Power=".$daten["Batterie1Leistung"];
          $query .= ",SOH=".$daten["Batterie1StatusSOH"];
          $query .= ",SOE=".$daten["Batterie1StatusSOE"];
          $query .= ",Status=".$daten["Batterie1Status"];
          $query .= "  ".$daten["zentralerTimestamp"];
          $query .= "\n"; // *
        }
        if (isset($daten["Batterie2Modell"])) {
          $query .= "Batterie_2 ";
          $query .= "Temperature=".$daten["Batterie2Temp"];
          $query .= ",Voltage=".$daten["Batterie2Spannung"];
          $query .= ",Current=".$daten["Batterie2Strom"];
          $query .= ",Power=".$daten["Batterie2Leistung"];
          $query .= ",SOH=".$daten["Batterie2StatusSOH"];
          $query .= ",SOE=".$daten["Batterie2StatusSOE"];
          $query .= ",Status=".$daten["Batterie2Status"];
          $query .= "  ".$daten["zentralerTimestamp"];
          $query .= "\n"; // *
        }
        $query .= "AC ";
        $query .= "Voltage=".$daten["M1_AC_Spannung"];
        $query .= ",Voltage_R=".$daten["AC_Spannung_R"];
        $query .= ",Voltage_S=".$daten["AC_Spannung_S"];
        $query .= ",Voltage_T=".$daten["AC_Spannung_T"];
        $query .= ",Frequency=".$daten["AC_Frequenz"];
        $query .= ",Power=".$daten["AC_Leistung"];
        $query .= ",Apparent_power=".$daten["AC_Scheinleistung"];
        $query .= ",Real_power=".$daten["AC_Wirkleistung"];
        $query .= ",Efficiency=".$daten["AC_Leistung_Prozent"];
        $query .= ",Consumption=".$daten["AC_Verbrauch"];
        $query .= ",Import=".$daten["AC_Bezug"];
        $query .= ",Export=".$daten["AC_Einspeisung"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n"; // *
        $query .= "PV ";
        $query .= "Voltage=".$daten["DC_Spannung"];
        $query .= ",Power=".$daten["PV_Leistung"];
        $query .= ",Current=".$daten["DC_Strom"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n"; // *
        $query .= "Service ";
        $query .= "Temperature=".$daten["Temperatur"];
        $query .= ",Status=".$daten["Status"];
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n"; // *
        $query .= "Total_energy ";
        $query .= "Wh_Today=".round( $daten["WattstundenGesamtHeute"], 1 );
        $query .= ",Wh_Total=".$daten["AC_Wh_Gesamt"];
        $query .= ",Wh_Total_Export=".$daten["M1_AC_Exportgesamt_Wh"];
        $query .= ",Wh_Total_Import=".$daten["M1_AC_Importgesamt_Wh"];
        if (isset($daten["M2_Version"])) {
          $query .= ",Wh_Total_Export_M2=".$daten["M2_AC_Exportgesamt_Wh"];
          $query .= ",Wh_Total_Import_M2=".$daten["M2_AC_Importgesamt_Wh"];
        }
        if (isset($daten["M3_Version"])) {
          $query .= ",Wh_Total_Export_M3=".$daten["M3_AC_Exportgesamt_Wh"];
          $query .= ",Wh_Total_Import_M3=".$daten["M3_AC_Importgesamt_Wh"];
        }
        $query .= "  ".$daten["zentralerTimestamp"];
        $query .= "\n";
        break;
Ich weiß sehr gut, dass diese Übersetzungen wenig wert sind, ich weiß, dass beim nächsten Update alles zurückkehrt wie zuvor. Aber im Moment versuche ich herauszufinden, wie ich noch ein paar Berechnungen durchführen und alles auf influxdb stopfen muss.
Vorher habe ich die Berechnungen zwischen Datenbanken mit grafana durchgeführt, aber es war so weit, dass die Himbeere aufhörte und die Temperatur zu hoch war und nichts von den Berechnungen auf influxdb gespeichert wurde. Ich habe versucht, kontinuierliche Abfragen mit influxdb durchzuführen, aber ich denke, es ist nicht möglich, Berechnungen zwischen Datenbanken durchzuführen, nur PHP kann mir helfen.
Vielen Dank

solarfanenrico
Beiträge: 593
Registriert: Mi 20. Jan 2021, 19:49
Hat sich bedankt: 31 Mal
Danksagung erhalten: 37 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von solarfanenrico »

Inteso,
Io parlo tedesco e tu parli italiano.
dobbiamo iniziare lentamente.
parliamo con frasi semplici.
Faccio solo una domanda al giorno.
Dopodiché aspetto la risposta corretta.
Se questa risposta è sbagliata, non reagirò.
se la risposta è corretta, viene visualizzata la domanda o l'attività successiva.
Il compito è legato alla tua collaborazione.
Continuerò solo se collaborerai anche tu.
Enrico

TeamO
Beiträge: 422
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 4 Mal
Danksagung erhalten: 66 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von TeamO »

Das ist hier mal wieder sinnfrei was Du machst Enrico. Zwei Seite geschrieben ohne das Du überhaupt was verstanden hast oder helfen konntest.
Zwei Punkte von mir:
1. ist es nicht hilfreich jetzt hier auf einmal mit Italienisch anzufangen
2. ist das was StepSolar möchte ganz einfach und mit zwei Dateien erledigt.

Ich habe so etwas schon für jemand anderen gebaut und schreibe das um.
Gebt mir bitte etwas Zeit, dann stelle ich die Dateien zum testen für StepSolar ein.

Gruß
Timo

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

solarfanenrico hat geschrieben:
Do 18. Nov 2021, 09:12
Inteso,
Io parlo tedesco e tu parli italiano.
dobbiamo iniziare lentamente.
parliamo con frasi semplici.
Faccio solo una domanda al giorno.
Dopodiché aspetto la risposta corretta.
Se questa risposta è sbagliata, non reagirò.
se la risposta è corretta, viene visualizzata la domanda o l'attività successiva.
Il compito è legato alla tua collaborazione.
Continuerò solo se collaborerai anche tu.
Enrico
Vielen Dank für Ihre Antwort.
Sag mir, was ich tun soll, und ich tue es.

Vielen Dank

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

TeamO hat geschrieben:
Do 18. Nov 2021, 09:39
Das ist hier mal wieder sinnfrei was Du machst Enrico. Zwei Seite geschrieben ohne das Du überhaupt was verstanden hast oder helfen konntest.
Zwei Punkte von mir:
1. ist es nicht hilfreich jetzt hier auf einmal mit Italienisch anzufangen
2. ist das was StepSolar möchte ganz einfach und mit zwei Dateien erledigt.

Ich habe so etwas schon für jemand anderen gebaut und schreibe das um.
Gebt mir bitte etwas Zeit, dann stelle ich die Dateien zum testen für StepSolar ein.

Gruß
Timo
Danke TeamO für die Antwort.
solaranzeige.de ist ein schönes Projekt und soll auf die ganze Welt ausgedehnt werden.
Sie sollten eine mehrsprachige Konfigurations-HTML erstellen, damit Sie die deutschen Originaldateien nicht ändern müssen.

TeamO
Beiträge: 422
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 4 Mal
Danksagung erhalten: 66 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von TeamO »

Eine mehrsprachige Konfigurations-Datei würde hier nicht viel helfen, da hier ja spezielle Abfragen gewünscht sind,he auf die festen Namen in der Datenbank gehen. Dazu müssten alle Dateien und Bezeichungen angepasst werden. Das ist zu viel Aufwand. ;)

Anbei mal zwei Dateien zum testen. Beide müssen direkt in /var/www/html

Mit der SDM230_meter_math.php wird der letzte Wert "Power" von der Datenbank "solarmonitor" aus dem Measurement "PV" ausgelesen und mit dem aktuellen Wert "AC_Power" vom SDM230 addiert. Das Ergebnis wird dann mit der eigenenfunktionen.php in die Datenbank "HomeManager" im Measurement "Power" als Wert "Power_consumption" gespeichert.

Gruß
Timo
SDM230_meter_math.php
(4.77 KiB) 8-mal heruntergeladen
eigenefunktionen.php
(3.45 KiB) 8-mal heruntergeladen

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

TeamO hat geschrieben:
Do 18. Nov 2021, 13:48
Eine mehrsprachige Konfigurations-Datei würde hier nicht viel helfen, da hier ja spezielle Abfragen gewünscht sind,he auf die festen Namen in der Datenbank gehen. Dazu müssten alle Dateien und Bezeichungen angepasst werden. Das ist zu viel Aufwand. ;)

Anbei mal zwei Dateien zum testen. Beide müssen direkt in /var/www/html

Mit der SDM230_meter_math.php wird der letzte Wert "Power" von der Datenbank "solarmonitor" aus dem Measurement "PV" ausgelesen und mit dem aktuellen Wert "AC_Power" vom SDM230 addiert. Das Ergebnis wird dann mit der eigenenfunktionen.php in die Datenbank "HomeManager" im Measurement "Power" als Wert "Power_consumption" gespeichert.

Gruß
Timo

SDM230_meter_math.phpeigenefunktionen.php
Vielen Dank
Ihr Test funktioniert, aber berechnet er bereits die Summe zwischen den Datenbanken?

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

TeamO hat geschrieben:
Do 18. Nov 2021, 13:48
Eine mehrsprachige Konfigurations-Datei würde hier nicht viel helfen, da hier ja spezielle Abfragen gewünscht sind,he auf die festen Namen in der Datenbank gehen. Dazu müssten alle Dateien und Bezeichungen angepasst werden. Das ist zu viel Aufwand. ;)

Anbei mal zwei Dateien zum testen. Beide müssen direkt in /var/www/html

Mit der SDM230_meter_math.php wird der letzte Wert "Power" von der Datenbank "solarmonitor" aus dem Measurement "PV" ausgelesen und mit dem aktuellen Wert "AC_Power" vom SDM230 addiert. Das Ergebnis wird dann mit der eigenenfunktionen.php in die Datenbank "HomeManager" im Measurement "Power" als Wert "Power_consumption" gespeichert.

Gruß
Timo

SDM230_meter_math.phpeigenefunktionen.php
Ihre Datei funktioniert, aber sie liest keine Daten aus zwei Datenbanken.
Also habe ich eine Änderung vorgenommen, aber es funktioniert nicht. Vielleicht möchten Sie überprüfen, was ich falsch gemacht habe.

Vielen Dank
SDM230_meter_math5.php
(5.17 KiB) 10-mal heruntergeladen
vielleicht habe ich mich nicht gut erklärt.
Ich möchte 2 Werte aus zwei Datenbanken hinzufügen

der Wert
"Power" = messen "PV" Datenbank "solarmonitor"
+
"Power" = messen "AC" Datenbank "SDM_SSP"
=
Verbrauch

StepSolar
Beiträge: 51
Registriert: So 9. Mai 2021, 16:02
Hat sich bedankt: 6 Mal

Re: Verbrauch berechnen mit Solaredge und SDM230

Beitrag von StepSolar »

potrebbe funzionare una cosa del genere?

Code: Alles auswählen

$i = 1;
{
$Datenbank1 = "solarmonitor";
$Measurement1 = "PV";
$ch = curl_init('http://localhost/query?db='.$Datenbank1.'&precision=s&q='.urlencode('select * from '.$Measurement1.' order by time desc limit 1'));

$Datenbank2 = "SDM_SSP";
$Measurement2 = "AC";
$ch = curl_init('http://localhost/query?db='.$Datenbank2.'&precision=s&q='.urlencode('select * from '.$Measurement2.' order by time desc limit 1'));

Antworten