[Modul] Fronius Wechselrichter

Na ja, ich hatte mich ja schon gewundert warum die Werte so hoch sind. Hier mal die Logs zur Orientierung


Ich bin mittlerweile auch erstmal auf die json-API gegangen. Bisher bekomme ich alles was ich brauche. Verfolge die andere Richtung aber auch noch gespannt weiter.

Würdest Du uns Deine Vorgehensweise mitteilen?
Ich komme nämlich auch mit den json Werten nicht auf die aus dem Solarweb.

Ich poste einfach mal mein Skript zum Auslesen der aktuellen Werte:

<?php

define("baseIPGEN24", "192.168.20.152");      // IP Adresse GEN24

define("baseIPSymo", "192.168.20.154");      // IP Adresse Symo

// Abfrage 
$content2 = @file_get_contents("http://".baseIPGEN24."/solar_api/v1/GetPowerFlowRealtimeData.fcgi"); 
if ($content2 !== False){ 
    $json2 = json_decode($content2); 
	$Ladezustand = $json2->Body->Data->Inverters->{"1"}->SOC;
    $AkkuLadeleistung = $json2->Body->Data->Site->P_Akku;
    $Autarkiegrad = $json2->Body->Data->Site->rel_Autonomy;
    $Eigenverbrauch = $json2->Body->Data->Site->rel_SelfConsumption;
    $PVLeistung = $json2->Body->Data->Site->P_PV;
    $Netzbezug = $json2->Body->Data->Site->P_Grid;
} else {SetValue(26877 ,0); return;}    // Meter Data missing 

SetValue(51224,$Netzbezug);
SetValue(41742,$PVLeistung);
SetValue(50178,$Autarkiegrad);
//SetValue(58387,$Eigenverbrauch);
SetValue(33859,$AkkuLadeleistung);
SetValue(47475,$Ladezustand);

//Ladezustand des Akkus für IPsView setzen
if ($Ladezustand < 25) {
    SetValue(41140,1);
} elseif ($Ladezustand > 25 and $Ladezustand < 50) {
    SetValue(41140,2);
} elseif ($Ladezustand > 50 and $Ladezustand < 75) {
    SetValue(41140,3);
} elseif ($Ladezustand > 75 and $Ladezustand < 95) {
    SetValue(41140,4);
} elseif ($Ladezustand > 95) {
    SetValue(41140,5);
}

//Farbe für die Ladeleistung auf dem Dashboard setzen positive Ladeleistung --> rote Farbe, ansonsten weiß
if ($AkkuLadeleistung > 30) {
    SetValue(53700,'#FF0000');
} else {
    SetValue(53700,'#FFFFFF');
}

//Farbe für die Ladeleistung setzen positive Ladeleistung --> rote Farbe, ansonsten weiß
if ($AkkuLadeleistung > 0) {
    SetValue(38895,'#FF0000');
} else {
    SetValue(38895,'#FFFFFF');
}

//Icon für den Ladeleistung setzen
if ($AkkuLadeleistung < 0) {
    SetValue(38626,true);
} else {
    SetValue(38626,false);
}

//Farbe für den Netzbezug setzen positiver Netzbezug --> rote Farbe, ansonsten weiß
if ($Netzbezug > 0) {
    SetValue(20014,'#FF0000');
} else {
    SetValue(20014,'#FFFFFF');
}

//Icon für den Netzbezug setzen negativer Netzbezug --> Icon farbig, ansonsten farblos
if ($Netzbezug < 0) {
    SetValue(28915,true);
} else {
    SetValue(28915,false);
}

//Icon für den Autarkiegrad setzen
if ($Autarkiegrad > 0) {
    SetValue(43276,true);
} else {
    SetValue(43276,false);
}

// Daten des zweiten Wechselrichters abrufen
$content2 = @file_get_contents("http://".baseIPSymo."/solar_api/v1/GetPowerFlowRealtimeData.fcgi"); 
if ($content2 !== False){ 
    $json2 = json_decode($content2); 
    $PVLeistung = $json2->Body->Data->Site->P_PV;
} else {SetValue(36890 ,0); return;}    // Meter Data missing 

SetValue(56278,$PVLeistung);

//Prüfen ob Strom aus dem Akku entnommen wird --> Dann zählt dieser auch zum Eigenverbrauch
if (GetValue(33859)>0){

    $erzeugte_leistung = (getvalue(33811) + GetValue(33859));

    if ($erzeugte_leistung<=0)
    {

        SetValue(27475,0);

    } else
    {

        if ((GetValue(50679)*100 / $erzeugte_leistung) > 100)
        {

            SetValue(27475,100);

        } else 
        
        {

            SetValue(27475, GetValue(50679)*100/$erzeugte_leistung);

        }
        
    }

} else {

    $erzeugte_leistung = (getvalue(33811));

    if ($erzeugte_leistung<=0)
    {

        SetValue(27475,0);

    }
    else
    {

        if ((GetValue(50679)*100/$erzeugte_leistung) > 100)
        {

            SetValue(27475,100);

        } else 
        
        {

            SetValue(27475, GetValue(50679)*100/$erzeugte_leistung);

        }

    }

}

?>

Das Skript läuft bei mir alle 5 Sekunden.

Hiermit (Rechenmodul) ermittele ich den aktuellen Verbrauch im Haus:

Das sieht dann in IPsView so aus:

1 „Gefällt mir“

Frage: Was hast du für eine Batterie? Und wieso ziehst du bei voller Batterie aus dem Netz?

E_Day wirft der Gen24 auch nicht aus?
Da muss Fronius noch ein paar Hausaufgaben machen!

danke+lg
hagi

Das sind Schwankungen im Sekundenbereich und ist auch vom Wert her recht niedrig. Der Wechselrichter kann nicht so schnell auf Laständerungen reagieren → die sogenannte Einschwingzeit ist beim Fronius relativ hoch. Da kannst du schon mal kurz nach Einschalten des Backofens ein paar Sekunden aus dem Netz 2 kWh ziehen obwohl die Batterie voll oder genug Strom vom Dach kommt.

Was meinst du mit E_Day? Den Tagesverbrauch? Den ermittele ich selber in Symcon.

Sieht dann so aus:

Batterie ist eine BYD HVS mit 10 kWh Bruttokapazität

Schaut schick aus!

Ich bekomm auch eine BYD aber die HVM Serie mit Notstrom!

lg
hagi

Meine Kombination könnte auch Notstrom, aber nur mit Umschaltbox (kostet 1000 Euro). Kann aber bei Bedarf den PV-Point (Steckdose neben dem WR) nutzen.

Nein , Tageserzeugung? Verbrauch nehm ich vom Stromzähler des Energieversorgers + Erzeugung - Einspeisung (auch vom Stromzähler)

Bekommst du aus dem gen24 Gesamtproduktion oder so raus? Das Problem scheint ja Normann auch zu haben.
Lg
Hagi

Man müsste bei dem gen24 wohl irgendwie Differenzen von den internen Zählern oder so bilden. Hab mich damit aber nicht näher beschädigt, weil ich hier symcon alles machen lasse

Moin,

das sieht super aus enJOyIT. Leider fehlt bei mir noch die Battery. BYD ist auch geplant. Ich warte aber noch bis es wieder Förderung in Sachsen gibt.
Kannst du noch mal kurz beschreiben wie du die Erzeugung pro Tag des WR errechnest. Daran scheitere ich ja bisher.

<?php

//Tagesverbrauch ermitteln
//gestern
$gesternverbrauch = AC_GetAggregatedValues(58714,50679, 0 /* Stündlich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); //50679 ist die ID der Variable, 58714 vom Archiv

$summe=0;

// schleife, die jeden Wert der letzten 24 Aufzeichnungen für den Wert "Avg" ausgibt
foreach($gesternverbrauch as $wert) {
//echo $wert['Avg'] . PHP_EOL;
$summe=$summe+$wert['Avg']; // Summierung der einzelnen Stundenwerte
}

$date = new DateTime(); // For today/now, don't pass an arg.
$date->modify("-1 day");

SetValueFloat(12421,$summe / 1000);

AC_DeleteVariableData (58714, 12421, strtotime("yesterday 00:00"), strtotime("yesterday 24:00"));

AC_AddLoggedValues(58714, 12421, [
  [
    'TimeStamp' => date_timestamp_get($date),
    'Value' => $summe / 1000
  ]
]);

AC_ReAggregateVariable (58714, 12421);

//Tagesproduktion ermitteln
//gestern
$gesternverbrauch = AC_GetAggregatedValues(58714,33811, 0 /* Stündlich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); //50679 ist die ID der Variable, 58714 vom Archiv

$summe=0;

// schleife, die jeden Wert der letzten 24 Aufzeichnungen für den Wert "Avg" ausgibt
foreach($gesternverbrauch as $wert) {
//echo $wert['Avg'] . PHP_EOL;
$summe=$summe+$wert['Avg']; // Summierung der einzelnen Stundenwerte
}

$date = new DateTime(); // For today/now, don't pass an arg.
$date->modify("-1 day");

SetValueFloat(14310,$summe / 1000);

AC_DeleteVariableData (58714, 14310, strtotime("yesterday 00:00"), strtotime("yesterday 24:00"));

AC_AddLoggedValues(58714, 14310, [
  [
    'TimeStamp' => date_timestamp_get($date),
    'Value' => $summe / 1000
  ]
]);

AC_ReAggregateVariable (58714, 14310);

//TagesNetzbezug ermitteln
//gestern
$gesternverbrauch = AC_GetAggregatedValues(58714,51224, 0 /* Stündlich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); //50679 ist die ID der Variable, 58714 vom Archiv

$summe_einspeisung=0;
$summe_bezug=0;
$summe_direktverbrauch=0;

// schleife, die jeden Wert der letzten 24 Aufzeichnungen für den Wert "Avg" ausgibt
foreach($gesternverbrauch as $wert) {
//echo $wert['Avg'] . PHP_EOL;
if ($wert['Avg'] > 0){
    $summe_bezug=$summe_bezug+$wert['Avg']; // Summierung der einzelnen Stundenwerte
} 
if ($wert['Avg'] < 0)
{
    $summe_einspeisung=$summe_einspeisung+$wert['Avg']; // Summierung der einzelnen Stundenwerte
}
}

$date = new DateTime(); // For today/now, don't pass an arg.
$date->modify("-1 day");

SetValueFloat(34068,($summe_einspeisung * -1)/ 1000);
SetValueFloat(41116,$summe_bezug / 1000);
SetValueFloat(55983,GetValueFloat(14310)-GetValueFloat(34068));

AC_DeleteVariableData (58714, 34068, strtotime("yesterday 00:00"), strtotime("yesterday 24:00"));
AC_DeleteVariableData (58714, 41116, strtotime("yesterday 00:00"), strtotime("yesterday 24:00"));
AC_DeleteVariableData (58714, 55983, strtotime("yesterday 00:00"), strtotime("yesterday 24:00"));

AC_AddLoggedValues(58714, 34068, [
  [
    'TimeStamp' => date_timestamp_get($date),
    'Value' => $summe_einspeisung / 1000 * -1
  ]
]);

AC_AddLoggedValues(58714, 41116, [
  [
    'TimeStamp' => date_timestamp_get($date),
    'Value' => $summe_bezug / 1000
  ]
]);

AC_AddLoggedValues(58714, 55983, [
  [
    'TimeStamp' => date_timestamp_get($date),
    'Value' => GetValueFloat(14310)-GetValueFloat(34068)
  ]
]);

AC_ReAggregateVariable (58714, 34068);
AC_ReAggregateVariable (58714, 41116);
AC_ReAggregateVariable (58714, 55983);

?>

Hab das jetzt mal einfach so herauskopiert. Sind ein paar unsinnige Kommentare dabei… Der Code ist der Kommentar :smiley:

Vielen Dank,
werd wohl aber erst nächste Woche dazukommen es auszuprobieren.
Jetzt ist erst mal Gartenarbeit angesagt. :laughing:

Hallo zusammen,

ich weiß jetzt nicht ob ich hier richtig bin. Wir haben seit gestern einen GEN24 PLUS 6.0 WR. Der ist mittels WLAN mit unserem ASUS Router verbunden. Im Router wird dem WR mittels DCHP eine IP Adresse 10.118.143.118 zugewiesen. Im Router wird das als „Wistron Neweb Corporation“ angezeigt. Klingt merkwürdig, scheint aber keine Bedeutung zu haben ?! Über diesen Router kommuniziert der WR z.B. mit der Solar.web Plattform etc. Frage an Euch: kann man im lokalen Netz auch direkt über die Eingabe der IP Adresse z.B. http://10.118.143.118/xxxx
die Daten vom WR auslesen ? Hat der WR dafür ein Webinterface ?

Grüße, Andreas

Wenn das so ist kannst du das Webinterface des Gen24 mit der Adresse aufrufen:
http://10.118.143.118

Um Werte in Symcon zu holen stehen dir 2 Wege zur Verfügung. Über json API (darüber geht dzt. ein Teil nicht) und über Modbus mit z.B. Brovnings Modul. Da hat aber der Gen24 auch seine Grenzen, da die Modbusregister nicht die gleichen wie z.B. beim Symo sind.

@Brovning: habe jetzt auch den Gen24 seit heute am Start und kann die Probleme der Kollegen dzt. im Großen und Ganzen bestätigen. Muss nächste Woche noch die enwitec Box anschließen und evt. mit dem Smart Meter wird es besser mit der Datenlage. Schön im Modul wäre wenn man die einzelenen Register mit Checkboxen aus- oder abwählen konnte. Da ich bei einigen eine Fehlermeldung in Symcon bekomme, habe ich jetzt die Abfragezeit auf 0 gestellt, aber beim nächsten Modulupdate habe ich wieder den Salat :frowning:

Trotzdem danke für deinen Einsatz.

lg
hagi

Als kleiner Nachsatz. Das Modul produziert beim Gen 24 massig Fehlermeldungen, da eben die Register nicht mit den Vorgängern übereinstimmen. Werde wohl Hand anlegen müssen und die paar Register zu Fuß abfragen.

@hagi01
Wenn du mir die Register listen könntest, die beim GEN24 abweichen, dann kann ich im Modul ein Auswahlfeld hinzufügen und die GEN24 spezifischen Register mit integrieren.

Mal die ganzen F_Site… werfen allesamt Fehler aus („invalide Adresse“ oder so"). Den Rest habe ich jetzt nicht mehr aufgeschrieben, da ich jetzt mal die handvoll Werte die ich benötige, wie Status, AC aktuell (pac), Frequenz, Fehler, Lifetime und noch den einen oder anderen einfach mit einem eigenen Socket und Gateway abfrage.
lg
hagi

P.S. Wenn ich den Smart Meter noch am Start habe kann ich dir mehr sagen bzw. testen.

Hallo guten Abend,

danke für die Hilfe, aber genau das geht nicht. Ich kann da nicht zugreifen. Netzwerk ist OK. Irgendwas in dem GEN24 sperrt den Zugriff. Ping auf die Adresse wird geblockt. Gibt es irgend eine Netzwerkeinstellung in dem GEN24 die das macht (firewall ?).
Wenn man den AP im GEN24 aktiviert, wie bei der Installation, kann man sich in das WLAN des FRONIUS einloggen und das funktioniert ohne Probleme.
Was tun ?

Grüße, Andreas

und dein heimnetzwerk hat den adressbereich 10.118.143.xxx ?

Du musst den gen24 in dein heimnetzwerk einbinden. am einfachsten entweder per lan oder wenn wlan am einfachsten per WPS wenn dein Router das kann.

Das glaube ich nicht, dass das dein Gen24 ist! Nur meine Vermutung!

Stimmt, mein Fehler, hab mich jetzt als Customer ins lokale Netz des GEN24 einloggen können, und der sagt er wäre auf 10.118.143.116 zu finden, und tatsächlich das funktioniert :+1: :smiley:

Danke für die Hilfe, Grüße, Andreas