ioBroker / AdapterRequests

This Place is used to track the status of new Adapter-Requests.
248 stars 36 forks source link

Adapter für Fronius Gen24 Plus Solarwechselrichter #454

Open JBSullivan opened 3 years ago

JBSullivan commented 3 years ago

Ich würde mir einen Adapter für den/die Wechselrichter der Firma Fronius wünschen, bzw. das jemand die Weiterentwicklung des bestehenden ioBroker Adapter übernimmt. Eine API Schnittstelle für Fronius Wechselrichter ist vorhanden.

https://www.fronius.com/de/solarenergie/produkte/alle-produkte/anlagen-monitoring/offene-schnittstellen/fronius-solar-api-json-

Es gibt bei ioBroker bereits einen Fronius Adapter. Wenn ich richtig informiert bin, basiert der aber auf einem alten API Datenbestand und wird vom Entwickler auch nicht mehr gepflegt, weil dieser keine Fronius Anlage mehr besitzt. In der Zwischenzeit hat sich jedoch bei Fronius einiges getan, sodaß es toll wäre wenn jemand anderer den bestehenden Adapter weiter entwickeln könnte, oder ggf einen neuen Adapter aus der Taufe heben würde.

https://github.com/iobroker-community-adapters/ioBroker.fronius/issues/34

p-vitt commented 3 years ago

Ich hätte eine Anlage und habe auch das Verlangen, Informationen über meinen BYD-Akku zu bekommen. Eigentlich wollte ich dazu gerade einen Request für einen BYD-Adapter erstellen, aber vielleicht bekommt man die Informationen ja auc schon über das neue AI vom Wechselrichter. Allerdings kann ich die Dokumente auf der verlinkten Seite nicht herunterladen. Hat da jemand mehr Glück?

RalfWein commented 3 years ago

Die Abfrage des BYD-Speichers mache ich schon über den parser auf das Webinterface, wenn dir diese Info kurzfristig weiterhilft:

Parser_BYD

system.adapter.parser.0.json.zip

harrym67 commented 3 years ago

Bildschirmfoto vom 2020-08-26 16-23-24 der aktuelle Fronius Adapter liefert doch brav seine Werte vom Akkupack. Ebenso ist der Adapter auch mit der aktualisierten SolarAPI zu 100% kompatibel.

p-vitt commented 3 years ago

der aktuelle Fronius Adapter liefert doch brav seine Werte vom Akkupack. Ebenso ist der Adapter auch mit der aktualisierten SolarAPI zu 100% kompatibel.

Wenn der aktuelle Adapter neuer als eine Woche ist, muss ich ihn mal testen. Ansonsten stimmt wohl mit der Kommunikation zwischen WR und Batterie etwas nicht, denn bei mir sind die Felder alle leer.

p-vitt commented 3 years ago

Wenn ich "http://1.2.3.4/solar_api/v1//GetStorageRealtimeData.cgi?Scope=Device&DeviceId=0" aufrufe, bekomme ich Status Code 255 mit Reason "battery type 'BYD' is not supported". Hat der WR eventuell eine alte Firmware? Muss ich wohl mal nachschauen.

matthiasisrael commented 3 years ago

Es wäre toll, wenn man alle Daten gebündelt über den fronius-Adapter erhalten könnte. Fronius bietet ja eine offene Schnittstelle, die Daten müssten "ja dort nur abgeholt" werden. Ich weiß, dass das wahrscheinlich mit viel Arbeit verbunden ist, würde mich aber unheimlich freuen, wenn ich die Daten meines neuen GEN24 genauso in iobroker integrieren könnte, wie ich das momentan mit dem Fronius Symo tue.

JBSullivan commented 3 years ago

@matthiasisrael D.h. der aktuelle Fronius Adapter funktioniert nicht mit den neuen GEN24 Wechselrichtern?

matthiasisrael commented 3 years ago

@JBSullivan : Die meisten Datenpunkten sind bislang leider leer. (Ich glaube nicht, dass das daran liegt, dass der PV - Installateur die Anlage noch nicht im Webportal eingetragen hat. Falls sich etwas ändert sage ich Bescheid)

JBSullivan commented 3 years ago

Ich meine irgendwo mal gelesen zu haben, das Fronius für das GEN24 Modell eine neue API 2.0 eingeführt hat, die aber noch nicht veröffentlicht wurde. Eine Zeit lang gab es auf der Fronius Seite mal einen Download Link zur API ab GEN24. Der Link führte aber ins Nirvana - mittlerweile findet man zum Thema API > 1.0 bei Fronius nichts mehr.

Hier die Doku zu API 1.x

https://www.fronius.com/~/downloads/Solar%20Energy/Operating%20Instructions/42%2C0410%2C2012.pdf

In dem Dokument oben tauch ein Hinweis auf die Gen24 Geräte auf - leider wenig zufrieden stellend:

1.1 Fronius Generation 24 ☞ Products from Fronius Generation 24 are described here but be aware that this interface is a temporary solution and will be removed.

JBSullivan commented 3 years ago

Hier noch ein paar weiterführende Infos:

https://github.com/iobroker-community-adapters/ioBroker.fronius/issues/49

djatwork commented 3 years ago

bei einer Anfrage hat er mir 1.5 als API version zurück gegeben....

Es haben sich leider die meisten Variablen vom WR geändert. selbst die API Variablen vom SmartMeter wurden (warum auch immer) umbenannt!!!!!

Hier zwei Beispiele: "Voltage_AC_Phase_1" ==> "SMARTMETER_VOLTAGE_01_F64" "PowerReal_P_Phase_1" ==> "ACBRIDGE_CURRENT_ACTIVE_MEAN_01_F32"

Meine Anfrage läuft beim Support läuft seit 1.10.2020.......

JBSullivan commented 3 years ago

https://forum.iobroker.net/topic/33809/fronius-adapter-entwicklung-eingestellt/58 ;)

JR-Home commented 3 years ago

Ein einfaches Javascript um mit dem Fronius Gen 24 zu kommunizieren:

console.log("Fronius Interface Version 1.2 started");

const csFroniusAcess = "http://192.168.178.112/solar_api/v1/"; const csFroniusEnergieFlow = csFroniusAcess + "GetPowerFlowRealtimeData.fcgi"; const csFroniusPVData = csFroniusAcess + "GetInverterRealtimeData.cgi?Scope=Device&DeviceId=0&DataCollection=CommonInverterData";

const csFroniusObjectPath = "javascript.0.Fronius."; const csObjPowerGrid = csFroniusObjectPath + "PGrid"; const csObjPowerPV = csFroniusObjectPath + "PPV"; const csObjPowerPV1 = csFroniusObjectPath + "PPV1"; const csObjPowerPV2 = csFroniusObjectPath + "PPV2"; const csObjPowerBattery = csFroniusObjectPath + "PBattery"; const csObjPowerConsumption = csFroniusObjectPath + "PConsumption"; const csObjBattery = csFroniusObjectPath + "BatteryLoad"; const csObjDeviceStatus = csFroniusObjectPath + "InverterStatus"; const csObjStatus = csFroniusObjectPath + "ConnectionState"; const csObjVisWidget = csFroniusObjectPath + "VisWidget";

const bForceObjectUpdate = false;

// Objekte für FRonius anlegen createState( csObjPowerGrid, 0, bForceObjectUpdate, {name: 'Power Netzversorger', unit: 'W'}); createState( csObjPowerPV, 0, bForceObjectUpdate, {name: 'Power Photovoltaik Summe', unit: 'W'}); createState( csObjPowerPV1, 0, bForceObjectUpdate, {name: 'Power Photovoltaik 1', unit: 'W'}); createState( csObjPowerPV2, 0, bForceObjectUpdate, {name: 'Power Photovoltaik 2', unit: 'W'}); createState( csObjPowerBattery, 0, bForceObjectUpdate, {name: 'Power Battery', unit: 'W'}); createState( csObjPowerConsumption, 0, bForceObjectUpdate, {name: 'Power consumption', unit: 'W'}); createState( csObjBattery, 0, bForceObjectUpdate, {name: 'Battery load', unit: '%'}); createState( csObjDeviceStatus, "", bForceObjectUpdate, {name: 'Inverter Status', type: 'string', unit: 'Info'}); createState( csObjStatus, 0, bForceObjectUpdate, {name: 'Fronius Communication Status', type: 'string', unit: 'Info'}); setState( csObjStatus, "not initialised", false ); // Ack=false, um nach dem ersten Zugriff die Verfügbarkeit zu bestätigen.

var request = require( "request" );

function ReadFroniusData() { var sErrMsg = "";

// PowerFlow aller Komponenten auslesen
request( csFroniusEnergieFlow, function (error, response, body) {
    if( error != null )
    {
         setState( csObjStatus, "Error Fronius request: " + error, true );
    }
    else
    {
        // Nur beim ersten Zugriff den "fehlerfreien" Zustand übernehmen. Ansonsten den letzten Fehler beim Zugriff im Object halten.
        if( getState( csObjStatus ).ack == false ) {
            setState( csObjStatus, "Available", true );
        } 

        var json = JSON.parse(body);
        // console.log ( "JSON: " + JSON.stringify(json) );
        var iVal = Math.round( -json.Body.Data.Site.P_Load * 10 ) / 10; // -Verbrauch, daher invertieren
        setState( csObjPowerConsumption, iVal, true );
        iVal = Math.round( json.Body.Data.Site.P_Akku * 10 ) / 10;     // + Entladen, -Laden
        setState( csObjPowerBattery, iVal, true );    
        iVal = Math.round( json.Body.Data.Site.P_PV * 10 ) / 10;        // + PV Generatorleistung
        setState( csObjPowerPV, iVal, true );           
        iVal = Math.round( json.Body.Data.Site.P_Grid * 10 ) / 10;      // + Netzbezug, -Einspeisung
        setState( csObjPowerGrid, iVal, true );      
        iVal = Math.round( json.Body.Data.Inverters['1'].SOC );         // Batterie Ladezustand 
        setState( csObjBattery, iVal, true );              

        // console.log( "Wert " + iVal + " " + json.Body.Data.Inverters['1'].SOC );
    }
});
// PV Leistung Segment 1 / 2
request( csFroniusPVData, function (error, response, body) {
    if( error != null )
    {
         setState( csObjStatus, "Error Fronius request: " + error, true );
    }
    else
    {
        // Nur beim ersten Zugriff den "fehlerfreien" Zustand übernehmen. Ansonsten den letzten Fehler beim Zugriff im Object halten.
        if( getState( csObjStatus ).ack == false ) {
            setState( csObjStatus, "Available", true );
        } 

        var json = JSON.parse(body);
    //    console.log ( "JSON: " + JSON.stringify(json) );
        var iVal = Math.round( json.Body.Data.IDC.Value * json.Body.Data.UDC.Value * 10 ) / 10; // Leistung PV1
        setState( csObjPowerPV1, iVal, true );
        iVal = Math.round( json.Body.Data.IDC_2.Value * json.Body.Data.UDC_2.Value * 10 ) / 10; // Leistung PV2
        setState( csObjPowerPV2, iVal, true );
        setState( csObjDeviceStatus, json.Body.Data.DeviceStatus.InverterState, true ); 
    //    console.log("PV2:" + json.Body.Data.IDC_2.Value );
    }
});

}

schedule("/30 ", function () { // Abfrage alle 30 Sec ReadFroniusData(); });