Fronius PV Anlage auslesen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Fronius PV Anlage auslesen

Beitrag von MichaelN » 06.02.2022, 19:14

1. Laufzeit messen
2. Sicherstellen dass ein Ausfall von Router, Internet, Website nicht zum blockieren des Skript führt
3. Schlüsse ziehen, Sicherheits Puffer einbauen, testen
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Stramon
Beiträge: 46
Registriert: 29.06.2016, 20:28
Wohnort: Kiel
Hat sich bedankt: 3 Mal

Re: Fronius PV Anlage auslesen

Beitrag von Stramon » 06.02.2022, 19:46

Auf der RaspberryMatic läuft das Script hier alle acht Sekunden. Alles stabil.

Viele Grüße
Jens

christian.mann88
Beiträge: 128
Registriert: 04.11.2015, 22:03
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Fronius PV Anlage auslesen

Beitrag von christian.mann88 » 06.02.2022, 19:53

Ich hätte auch an so etwas von 5-10 Sekunden gedacht.

Wie messe ich die Laufzeit?

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Fronius PV Anlage auslesen

Beitrag von MichaelN » 08.02.2022, 08:58

christian.mann88 hat geschrieben:
06.02.2022, 19:53
Wie messe ich die Laufzeit?
Füge vor der ersten Zeile des Skript ein:

Code: Alles auswählen

var Start = localtime;
Füge nach der letzten Zeile ein:

Code: Alles auswählen

WriteLine ( (localtime.ToInteger() - Start.ToInteger()) # " Sekunden Laufzeit");
Lass es unter "SKript testen" laufen und Du bekommst die Laufzeit in Sekunden angezeigt.
Zuletzt geändert von MichaelN am 20.06.2022, 11:25, insgesamt 1-mal geändert.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

christian.mann88
Beiträge: 128
Registriert: 04.11.2015, 22:03
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Fronius PV Anlage auslesen

Beitrag von christian.mann88 » 09.02.2022, 20:43

Ok, da hätt ich auch selbst drauf kommen können - ist halt aber nur auf ganze Sekunden genau. Jedenfalls kommt 0 raus, sollte also kein Problem in kurzem Intervall sein.
Abgesehen davon dass diese Ausführung jetzt wirklich nicht lange dauert: stimmt es dass die CCU immer nur ein Script gleichzeitig ausführen kann?

Noch eine andere Frage abseits des Themas, aber passend zur deinem Beitrag mit der Zeitmessung:
was ist der Unterschied zwischen folgenden Zeitabfragen:

Code: Alles auswählen

var Zeit = localtime;
var Zeit = currenttime;
var Zeit = system.Date().ToTime();
?

Stromer
Beiträge: 25
Registriert: 15.06.2016, 23:09

Re: Fronius PV Anlage auslesen

Beitrag von Stromer » 27.03.2022, 23:46

Hallo,

dieser Thread ist genau das was ich suche. Leider kann ich die Abläufe zum Verarbeiten der Abfrageparameter nicht nachvollziehen (bin eben ein "Greenhorn"). Doch der Reihe nach:

> Ausstattung: Fronius SYMO GEN 24 Plus 8 + Smartmeter TS 65A-3 (Smartmeter wird erst in den nächsten Tagen installiert)
> JSON-Schnittstelle ist in der Fronius-Software freigegeben
> CUxD mit Gerät ist in der CCU3 eingerichtet
> die benötigen Systemvariablen sind angelegt (werden aber noch nicht gefüllt, weil Smartmeter noch fehlt)

Nun meine Fragen:
1. Benötige ich zum Anzeigen und Verarbeiten der Fronius-Parameter außer dem "Abfrage-Skript" auch das JSON-Skript (wenn ja, wie wird es
eingebunden)?
2. Kann ich die angelegten Systemvariablen für Programme nutzen, sobald sie "gefüllt" sind?
3. Wofür wird die Abfrage "http://<IP>/solar_api/v1/GetPowerFlowRealtimeData.fcgi?Scope=System" genutzt? (die liefert jetzt schon Daten)
4. Hat jemand Erfahrung mit dem "I/O Leistungsmanagement" im Fronius-Wechselrichter (evtl. auch andere Quellen)?

Der Thread befasst sich hauptsächlich mit den Skripten, die mir aber Probleme bereiten. Außerdem fehlt mir leider die praktische Umsetzung in entsprechende Programmabfragen und -verarbeitungen.

Ich hoffe auf eure Schützenhilfe und bedanke mich schon jetzt!

Gruß Norbert

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Fronius PV Anlage auslesen

Beitrag von MichaelN » 28.03.2022, 00:04

1. Entweder das spezifische Fronius Skript, um das es hier ursprünglich ging. Wobei ich nicht weiß ob es nun funktional ist oder nicht. Oder das allgemeine JSON Skript.
2. Natürlich
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Fronius PV Anlage auslesen

Beitrag von michaelapp » 03.04.2022, 19:25

Hallo zusammen,

hab das Skript gerade auch auf meiner CCU3 implementiert:

Code: Alles auswählen

!Dietmar's Version V1.1 21.01.2021 der Ursprungsversion von ldittmar  https://homematic-forum.de/forum/viewtopic.php?f=31&t=24675&hilit=fronius#p212221
!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD und Fronius Symo Wechselrichter mit Fronius SmartMeter
!-----------------------------------------------------------------------------
var froniusIP = "192.168.180.68"; !IP des Fronius Wechselrichters
var deviceID = "1"; !Device ID (wird meistens stimmen, wenn nicht ausprobieren)
var CUxD_Device = "CUxD.CUX2801001:1"; !CUxD Virtuelles Gerät
string variable_verbrauch = "Var_PV_Verbrauch"; !Name der Variabel für den Verbrauch
string variable_erzeugung = "Var_PV_Erzeugung"; !Name der Variabel für die Erzeugung
string variable_einspeisung = "Var_PV_Einspeisung"; !Name der Variabel für den Einspeisung
string variable_netzbezug = "Var_PV_Netzbezug"; !Name der Variabel für den Netzbezug
string variable_soc = "Var_PV_Batterie_SoC"; !Name der Variabel für den Batterie - Ladestand
string variable_ladung = "Var_PV_Batterie_Ladung"; !Name der Variabel für die Batterie Ladeleistung
string variable_entladung = "Var_PV_Batterie_Entladung"; !Name der Variabel für die Batterie Entladeleistung

!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
	
string pos1;
string pos2 = ",";
string pos3 = ":";
real wertVerbrauch;
real wertErzeugung;
real wertNetzfluss;
real wertSoC;
real wertBatteriefluss;
integer wert_pos;
var stdout;   
   
string url = "http://" + froniusIP + "/solar_api/v1/";
string flussParam="GetPowerFlowRealtimeData.fcgi?Scope=System";


!-----------------------------------------------------------------------------
! Aktueller Verbrauch in [W]
!-----------------------------------------------------------------------------
	
dom.GetObject(CUxD_Device + ".CMD_SETS").State("wget -q -O - " + url + flussParam);
dom.GetObject(CUxD_Device + ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(CUxD_Device + ".CMD_RETS").State();
	
pos1 = "\"P_Load\" :";
wert_pos = stdout.Find(pos1) +  pos1.Length();
wertVerbrauch = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);

dom.GetObject(variable_verbrauch).State(wertVerbrauch.ToInteger() * -1);

!-----------------------------------------------------------------------------
! Aktuell wird erzeugt in [W]
!-----------------------------------------------------------------------------

	pos1 = "\"P_PV\" :";
wert_pos = stdout.Find(pos1) +  pos1.Length();
wertErzeugung = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);

dom.GetObject(variable_erzeugung).State(wertErzeugung.ToInteger());

!-----------------------------------------------------------------------------
! Netzfluss auslesen eingespeist(negativ)/bezogen(positiv) in [W]
!-----------------------------------------------------------------------------

	pos1 = "\"P_Grid\" :";
wert_pos = stdout.Find(pos1) +  pos1.Length();
wertNetzfluss = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);

!-----------------------------------------------------------------------------
! Wenn Netzfluss ist negativ, dann als positive Einspeisungs-Wert in Watt Speichern, sonst als Netzbezug
!-----------------------------------------------------------------------------

if(wertNetzfluss.ToInteger() < 0) 
    {dom.GetObject(variable_einspeisung).State(wertNetzfluss.ToInteger()*-1);
     dom.GetObject(variable_netzbezug).State(0);}
  else
    {dom.GetObject(variable_netzbezug).Variable(wertNetzfluss.ToInteger()*1);
     dom.GetObject(variable_einspeisung).State(0);}

!-----------------------------------------------------------------------------
! Batterie SoC auslesen in [W]
!-----------------------------------------------------------------------------

	pos1 = "\"SOC\" :";
wert_pos = stdout.Find(pos1) +  pos1.Length();
wertSoC = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);

dom.GetObject(variable_soc).State(wertSoC.ToInteger());

!-----------------------------------------------------------------------------
! Batterie Strom auslesen in [W]
!-----------------------------------------------------------------------------

	pos1 = "\"P_Akku\" :";
wert_pos = stdout.Find(pos1) +  pos1.Length();
wertBatteriefluss = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);


!-----------------------------------------------------------------------------
! Wenn Batteriefluss negativ ist, dann als positiven Entladungs-Wert in Watt Speichern, sonst als Ladewert
!-----------------------------------------------------------------------------

if(wertBatteriefluss.ToInteger()<0)
    {dom.GetObject(variable_ladung).State(wertBatteriefluss.ToInteger()*-1 );
     dom.GetObject(variable_entladung).State(0);}
  else
    {dom.GetObject(variable_entladung).State(wertBatteriefluss.ToInteger()*1);
     dom.GetObject(variable_ladung).State(0);};
Bei mir wird der Wert "Var_PV_Netzbezug" nicht aktualisiert. Hat mir jemand einen Tip?
CCU3.jpg
Gruß
Michael

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Fronius PV Anlage auslesen

Beitrag von MichaelN » 03.04.2022, 20:04

Ersetze

Code: Alles auswählen

.Variable
durch

Code: Alles auswählen

.State
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Fronius PV Anlage auslesen

Beitrag von michaelapp » 03.04.2022, 20:15

Super, jetzt klappt es. Danke !

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“