Verbrauch berechnen mit Solaredge und SDM230
Moderator: Ulrich
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Sorry, aber ich verstehe deine Fragen nicht. Ich übersetze aus dem Deutschen ins Italienische, vielleicht ist es schlecht übersetzt
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Ich schicke dir meine Dateien
SDM230_meter.php
funktionen.inc.php
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
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;
?>
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;
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
Re: Verbrauch berechnen mit Solaredge und SDM230
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
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
-
- Beiträge: 1217
- Registriert: Mo 22. Jun 2020, 08:58
- Wohnort: Ulm / Neu-Ulm
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 144 Mal
Re: Verbrauch berechnen mit Solaredge und SDM230
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
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
Gruß Timo
Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen
Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de
Tibber Invite (100% Öko-Strom + 50€ Bonus)
Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen
Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de
Tibber Invite (100% Öko-Strom + 50€ Bonus)
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Vielen Dank für Ihre Antwort.solarfanenrico hat geschrieben: ↑Do 18. Nov 2021, 09:12Inteso,
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
Sag mir, was ich tun soll, und ich tue es.
Vielen Dank
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Danke TeamO für die Antwort.TeamO hat geschrieben: ↑Do 18. Nov 2021, 09:39Das 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
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.
-
- Beiträge: 1217
- Registriert: Mo 22. Jun 2020, 08:58
- Wohnort: Ulm / Neu-Ulm
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 144 Mal
Re: Verbrauch berechnen mit Solaredge und SDM230
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
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
Gruß Timo
Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen
Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de
Tibber Invite (100% Öko-Strom + 50€ Bonus)
Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen
Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de
Tibber Invite (100% Öko-Strom + 50€ Bonus)
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Vielen DankTeamO hat geschrieben: ↑Do 18. Nov 2021, 13:48Eine 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
Ihr Test funktioniert, aber berechnet er bereits die Summe zwischen den Datenbanken?
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
Ihre Datei funktioniert, aber sie liest keine Daten aus zwei Datenbanken.TeamO hat geschrieben: ↑Do 18. Nov 2021, 13:48Eine 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
Also habe ich eine Änderung vorgenommen, aber es funktioniert nicht. Vielleicht möchten Sie überprüfen, was ich falsch gemacht habe.
Vielen Dank 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
-
- Beiträge: 51
- Registriert: So 9. Mai 2021, 16:02
- Wohnort: GB
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Verbrauch berechnen mit Solaredge und SDM230
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'));