Fronius Wechselrichter per HTTPMOD

Begonnen von simonberry, 16 Juni 2014, 15:30:33

Vorheriges Thema - Nächstes Thema

simonberry

Hallo zusammen

ich habe den Datenlogger von meinem Fronius Wechselrichter ins FHEM integrieren können.   :D
Vielleicht kann dies ja jemand brauchen.
Die Schnittstelle zum Fronius bietet zwar noch ein paar andere Abfragen aber diese sollten für die meisten ausreichen. Die ausführliche Beschreibung der API kann man sich bei Fronius direkt herunterladen. (Registrierung erforderlich)
In der URL, muss natürlich der Hostname oder die IP-Adresse (bei mir "froni") ersetzt werden.

SolarMax enthält die vom Datenlogger ermittelten Maximalwerte der Leistung (Tag, Jahr und Gesamt).


define SolarMax HTTPMOD http://froni/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=MinMaxInverterData 300
attr SolarMax group Messen
attr SolarMax readingsName.1 DAY_PMAX
attr SolarMax readingsName.2 YEAR_PMAX
attr SolarMax readingsName.3 TOTAL_PMAX
attr SolarMax readingsRegex.1 "DAY_PMAX"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarMax readingsRegex.2 "YEAR_PMAX"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarMax readingsRegex.3 "TOTAL_PMAX"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarMax room Strom
attr SolarMax icon measure_photovoltaic_inst
attr SolarMax stateFormat {sprintf("Tag: %d W Jahr: %d W Gesamt: %d W", ReadingsVal($name,"DAY_PMAX",0),ReadingsVal($name,"YEAR_PMAX",0),ReadingsVal($name,"TOTAL_PMAX",0))}


SolarAkt enthält die aktuellen Messwerte:
DAY_ENERGY : Erzeugte Energie am aktuellen Tag
TOTAL_ENERGY : Erzeugte Energie Gesamt
YEAR_ENERGY : Erzeugte Energie im Jahr
FAC: Frequenz in Hz
IAC: Strom Wechselstromseite A
IDC: Strom Gleichstromseite in A
PAC: aktuell erzeugte Leistung in W
UAC: Spannung Wechselstromseite in V
UDC: Spannung Gleichstromseite in V


define SolarAkt HTTPMOD http://froni/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData 300
attr SolarAkt group Messen
attr SolarAkt room Strom
attr SolarAkt readingsName.1 DAY_ENERGY
attr SolarAkt readingsName.2 TOTAL_ENERGY
attr SolarAkt readingsName.3 YEAR_ENERGY
attr SolarAkt readingsName.4 FAC
attr SolarAkt readingsName.5 IAC
attr SolarAkt readingsName.6 IDC
attr SolarAkt readingsName.7 PAC
attr SolarAkt readingsName.8 UAC
attr SolarAkt readingsName.9 UDC
attr SolarAkt readingsRegex.1 "DAY_ENERGY"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.2 "TOTAL_ENERGY"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.3 "YEAR_ENERGY"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.4 "FAC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.5 "IAC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.6 "IDC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.7 "PAC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.8 "UAC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt readingsRegex.9 "UDC"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),
attr SolarAkt stateFormat {sprintf("%d", ReadingsVal($name,"PAC",0))}
attr SolarAkt icon measure_photovoltaic_inst


Das einzige was mich wundert ist, dass ich die Attribute readingsName.# und readingsRegex.# nur im fhem.cfg File bearbeiten kann und nicht im GUI. Mach ich da was grundlegendes falsch?   ???

NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

Hi

oooha , das ist aber interessant .... genau sowas suche ich.

Habe selber nen Solarmax, aber auch mittlerweile einen Power Dog.

Funktioniert alles bei dir ?

werde das auch nachher ausprobieren....

simonberry

Hi Jumbo,

ich fürchte da liegt ein Missverständnis vor:
"Solarmax" ist in meinem Modul der Name für die "Maximalwerte der Solarleistung" und das Verwendete Modul ist HTTPMOD. Mein Wechselrichterhersteller ist "Fronius".

Zitat
Habe selber nen Solarmax, aber auch mittlerweile einen Power Dog.

Klingt für mich nach. "Ich habe eine Wechselrichter von Solarmax". Ich glaube nicht das die Kommandos für Fronius vom Solarmax verstanden werden.

Viele Grüße

Simonberry


NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

ja genau :-D meine wechselrichter ist von Solarmax ;-)

ok , nichts dest trotz, was hast du hier :   define SolarMax HTTPMOD http://froni/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=MinMaxInverterData 300

rausgezogen ? ist das ein CSV File was du da bekommst ?

evtl kann ich es auf meins anpassen ...

Danke dir für die Hilfe.

simonberry

Hi Jumbo

Also die Antwort vom Fronius ist ein JSON - String und sieht momentan so aus:

{
        "Head" : {
                "RequestArguments" : {
                        "DataCollection" : "MinMaxInverterData",
                        "DeviceClass" : "Inverter",
                        "DeviceId" : "1",
                        "Scope" : "Device"
                },
                "Status" : {
                        "Code" : 0,
                        "Reason" : "",
                        "UserMessage" : ""
                },
                "Timestamp" : "2014-07-29T14:38:22+02:00"
        },
        "Body" : {
                "Data" : {
                        "DAY_PMAX" : {
                                "Value" : 2564,
                                "Unit" : "W"
                        },
                        "DAY_UACMAX" : {
                                "Value" : 237.9,
                                "Unit" : "V"
                        },
                        "DAY_UDCMAX" : {
                                "Value" : 444.1,
                                "Unit" : "V"
                        },
                        "TOTAL_PMAX" : {
                                "Value" : 4347,
                                "Unit" : "W"
                        },
                        "TOTAL_UACMAX" : {
                                "Value" : 241.2,
                                "Unit" : "V"
                        },
                        "TOTAL_UDCMAX" : {
                                "Value" : 519.7,
                                "Unit" : "V"
                        },
                        "YEAR_PMAX" : {
                                "Value" : 4347,
                                "Unit" : "W"
                        },
                        "YEAR_UACMAX" : {
                                "Value" : 241.2,
                                "Unit" : "V"
                        },
                        "YEAR_UDCMAX" : {
                                "Value" : 519.7,
                                "Unit" : "V"
                        }
                }
        }


Ist wahrscheinlich komplett anders als CSV. Mit

attr SolarMax readingsRegex.1 "DAY_PMAX"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),

Suche ich mir im Antwort-String die Zeile mit DAY_PMAX und speichere den Wert ab. Da ich mit Perl nicht viel gemacht habe war das ein bisschen gebastelt bis es geklappt hat.

Wie sieht denn Deine CSV aus?

Gruß

Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

ok, danke

hier ein beispiel aus der Beschreibung :

CALL:
Day Chart:
http://api.power-dog.eu/client/index_plain?key=90f47b75edc159ba8333a16ef37bd431&date=2012-
07-12&type=pv

OK
CHARTS
PAC,TEMPERATURE,UDC
NAME;MAX;UNIT
PAC;2500;W
DateTime;Value
2012-07-12 03:00:00 UTC;null
2012-07-12 05:57:42 UTC;2
2012-07-12 06:02:41 UTC;17
-- omitted --
2012-07-12 20:35:38 UTC;16
2012-07-12 20:40:25 UTC;1
NAME;MAX;UNIT
TEMPERATURE;80;°C
DateTime;Value
2012-07-12 03:00:00 UTC;null
2012-07-12 05:57:42 UTC;0
2012-07-12 06:02:41 UTC;0
-- omitted –
2012-07-12 20:35:38 UTC;0
2012-07-12 20:40:25 UTC;0
NAME;MAX;UNIT
UDC;800;V
DateTime;Value
2012-07-12 03:00:00 UTC;null
2012-07-12 05:57:42 UTC;227
2012-07-12 06:02:41 UTC;226
-- omitted --
2012-07-12 20:40:25 UTC;265
NAME;MAX;UNIT
PDC;2500;V
DateTime;Value
2012-07-12 03:00:00 UTC;null
2012-07-12 05:57:42 UTC;14
2012-07-12 06:02:41 UTC;37
2012-07-12 06:07:41 UTC;30
-- omitted --
2012-07-12 20:30:24 UTC;52


danke dir vielmals...

simonberry

Hi Jumbo

sieht machbar aus, aber wie gesagt Perl ist noch nicht so meine Stärke.

Probier mal:
attr SolarMax readingsName.1 PAC
attr SolarMax readingsRegex.1 PAC;([0-9]+);

Erklärung:
Suche nach "PAL;" Danach nach mindestens '+' einer Zahl '[0-9]', und speicher sie ab '(...)',

Wenn's nicht klappt selbst mit Perl ein bisschen rumprobieren. ;)

Wenn das geklappt hat, kannst Du ja noch TEMPERATURE und UDC ergänzen.

Viel Erfolg
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

hierbei krieg ich ne Fehlermeldung :

attr SolarMax readingsRegex.1 PAC;([0-9]+);

Unknown command ([0-9]+), try help.

Jumbo

ich hab's jetzt mal so umgeändert :

attr SolarMax readingsRegex.1 PAC"([0-9]+)"

damit kriege ich keine Fehlermeldung beim abspeichern , aber auch keine daten.

:-(

simonberry

#9
Hi Jumbo

Den Strichpunkt müssen wir schon finden... aber der macht das Problem:

';' ist das Abschlusszeichen von FHEM Perl, CSV und was sonst noch alles.

Maskier das mal mal mit nem Backslash '\' Ich nehme an Du editierst die fhem.cfg direkt, oder?

Im Gui, wird's bei mir ohne Backslash angezeigt. Evtl auch noch die Anführungszeichen ergänzen um "PAC;"
also in etwa so:

attr SolarMax readingsRegex.1 "PAC\;"([0-9]+)\;



Gruß
Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

ja ich editiere direkt im GUI von FHEM.

aber auch da kriege ich die Fehlermeldungen.

Invalid Regex "PAC\ Unknown command "([0-9]+)\, try help.

Nehme ich den Backslash raus , kommt diese Fehlermeldung :
attr SolarMax readingsRegex.1 "PAC;"([0-9]+)\;

ohne Anfürungszeichen kommt das hier :

Invalid Regex PAC\ Unknown command ([0-9]+)\, try help.
attr SolarMax readingsRegex.1 PAC\;([0-9]+)\;

schaue ich mir die Commandref an , dann haben die es so gelöst :

attr PM readingsRegex1 34.4001.value":[ \t]+"([\d\.]+)"

also die Anführungszeichen hinter den namen .
das allerdings geht auch wiederrum nicht :( grrrr
Unknown command "([0-9]+)\, try help.

simonberry

und so?


attr SolarMax readingsRegex.1 "PAC"[ ;]+([0-9]+)


Alle Perl-checker, lachen sich wahrscheinlich gerade über unser rumstochern kaputt,  ;D . Aber die haben auch mal angefangen..

NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Jumbo

Fehlermeldung

Invalid Regex "PAC"[ Unknown command ]+([0-9]+), try help.


is nicht schlimm , probieren geht über studieren , deshalb können wir ja bestimmt was anderes besser als Programmieren ;-)

danke dir auf jeden fall für deine Hilfe....

simonberry

Ich habe nicht behauptet dass ich nicht programmieren kann, schliesslich verdiene ich meine Brötchen damit.  8)
Nur mit PERL bin ich in den anfängen. :-[
Was ich bei meinem FHEM mittels BASH und PHP bastel, weil ich's anders nicht hinbekomme will hier bestimmt niemand wissen ..  ;D

Aber zuletzt noch ein Vorschlag:

attr SolarMax readingsRegex.1 "PAC"[ .]+([0-9]+)

NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

simonberry

Hi Jumbo,

danke für die PN.
Jetzt kapier ich erst die Antwort die kommt. Das ist ja ein komplettes Diagramm. Ich dachte Du willst nur die aktuelle Leistung auslesen und dann per Logfile ein Diagramm Zeichnen. Aber ich hatte es bis jetzt auf die Überschrift des Diagramms abgesehen.
Also das wäre für mich jetzt der Klassiker ein FHEM externes Programm zu schreiben, dass die Daten in ein FHEM-Logfile wandelt was dann von von FEHM in ein Diagramm zeichnet.
Auf was für einer Plattform läuft denn dein FHEM?

Ein anderer Ansatz wäre, den letzten Wert aus dem CSV zu fieseln und zu loggen, aber wir sind ja schon am Anfang gescheitert.



NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

clemens

Zitat von: simonberry am 16 Juni 2014, 15:30:33

ich habe den Datenlogger von meinem Fronius Wechselrichter ins FHEM integrieren können.   :D
Vielleicht kann dies ja jemand brauchen.[...]

Hallo, simonberry!

Wow, gratuliere! So etwas suche ich schon lange! Bin leider kein Programmierer und konnte mit den Infos von Fronius bezüglich JSON-Abfragen genau nix anfangen :-(
Deine Lösung kommt mir da gerade recht!

Leider bekomm ich es aber nicht hin, Daten zu bekommen. Daher meine Frage:
Holt sich Deine Lösung die Daten von einem "Fronius Datalogger Web"? Ich habe einen solchen und dessen IP ist in der FHEM-Konfig eingetragen. Leider bekomme ich nur 404er als Antwort...

Passwort-Abfrage habe ich deaktiviert; wenn ich den "Datalogger Web" ansurfe, sehe ich die Daten, ohne ein Passwort eingeben zu müssen.

Oder fragst Du gar ein anderes Fronius-Gerät, als den "Datalogger Web" ab?
   
Danke für  Deine Arbeit und vielleicht könntest mir kurz antworten!

mfg. C.

Mein Abfrageergebnis:
HTTP/1.0 404 Not Found Server: thttpd/2.25b 29dec2003 Content-Type: text/html; charset=utf-8 Date: Mon, 29 Sep 2014 14:39:05 GMT Last-Modified: Mon, 29 Sep 2014 14:39:05 GMT Accept-Ranges: bytes Connection: close Cache-Control: no-cache,no-store <HTML> <HEAD><TITLE>404 Not Found</TITLE></HEAD> <BODY BGCOLOR="#cc9999" TEXT="#000000" LINK="#2020ff" VLINK="#4040cc"> <H2>404 Not Found</H2> The requested URL '/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection' was not found on this server. <HR> <ADDRESS><A HREF="http://www.acme.com/software/thttpd/">thttpd/2.25b 29dec2003</A></ADDRESS> </BODY> </HTML>

simonberry

Hi Celmens,

also ich frage die Daten vom Datenlogger ab, der in meinem Wechselrichter integriert ist. (Also nicht von Solar Web oder wie das heißt).
Kannst Du mal deine def posten...

Grüße

Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

clemens

Hallo, simonberry!

Danke für deine schnelle Antwort! Bitte entschuldige meine späte!

Ich habe zwei Wechselrichter: Fronius IG Plus 25 V-1 und IG Plus 55 V-3. Zusätzlich eine Sensorbox und einen Datalogger Web, dessen IP 192.168.1.180 ist. Diesen würde ich gerne per httpmod und deiner Lösung auslesen.

Damit ich den Wechselrichter und den Datalogger Web verbinden kann, habe ich noch eine Comcard im Wechselrichter.

Meine FHEM Def ist:
http://192.168.1.180/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=MinMaxInverterData 300

per json Abfrage auf die IP des Datalogger Web habe ich auch keine Daten erhalten.

lg. Clemens

simonberry

Hallo Clemens

habe mich nochmal auf der Fronius Homepage schlau gemacht:
Ich fürchte wir haben 2 Unterschiedliche Datenlogger:
meiner: Fronius Datenmanager http://www.fronius.com/cps/rde/xchg/SID-04B09495-9DF64CF0/fronius_international/hs.xsl/83_28105_DEU_HTML.htm
Deiner: Fronius Datenlogger WEB http://www.fronius.com/cps/rde/xchg/SID-04B09495-9DF64CF0/fronius_international/hs.xsl/83_16106_DEU_HTML.htm

In der API - Beschreibung steht was von einer Minimum Product Release Version für den Datenlogger WEB:
2.0.4-1
Und die Solar API Version 0

Hier mal ein erster Schuss aus der Hüfte:
Probier mal:
http://192.168.1.180/solar_api/v0/GetInverterRealtimeData.cgi?Scope=Device&DeviceIndex=0&DataCollection=CommonInverterData 300

Die Komplette Beschreibung der Schnittstelle V0 habe ich von hier, bin aber auch bei Fronius registriert:
http://www.fronius.com/cps/rde/xbcr/SID-04B09495-9DF64CF0/fronius_international/42_0410_2011_318484_snapshot.pdf

Kann dir das Dok auch per Mail schicken

Viele Grüße

Simonberry
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

derchrome

#19
Hallo zusammen,
ich wäre auch sehr daran interessiert meinen Fronius Symo in FHEM zu integrieren.

Leider scheint mir die HTTPMOD.pm zu fehlen. Ich hab schon über sudo nano die Datei zu erstellen und mit dem Inhalt vom Git zu füllen, aber irgendwie ohne Erfolg. Mit der HTTPMod ließ sich der FHEM Server dann nicht mehr starten, in der Console wurde ein ungültiger Zugriff in der HttpUser angezeigt.

Vielleicht kann mir ja jemand bei der Installation ein bisschen auf die Sprünge helfen?

simonberry

Hallo derchrome,

Bei mir heißt die Datei
98_HTTPMOD.pm
Ich weiß nicht mehr genau, aber ich habe die glaube ich nicht extra installiert. Probier mal ein update.

Grüße

Saimen
NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

clemens

Zitat von: simonberry am 02 Oktober 2014, 10:15:26
Hallo Clemens

habe mich nochmal auf der Fronius Homepage schlau gemacht:
[...]

Hallo, Simonberry!

Danke!

Zitat von: simonberry
Hier mal ein erster Schuss aus der Hüfte:
Probier mal:
http://192.168.1.180/solar_api/v0/GetInverterRealtimeData.cgi?Scope=Device&DeviceIndex=0&DataCollection=CommonInverterData 300

...das bringt mir einen 404er. Aber, wenn ich '/v0/' weglasse, so bekomme ich eine JSON-Antwort retour. die aber nicht sehr informativ wirkt:

{
"Head" : {
"RequestArguments" : {
"DataCollection" : "CommonInverterData",
"DeviceClass" : "Inverter",
"DeviceIndex" : "0",
"Scope" : "Device"
},
"Status" : {
"Code" : 8,
"Reason" : "Transfer timeout.",
"UserMessage" : ""
},
"Timestamp" : "2014-10-02T16:25:47+02:00"
}
}


Ich habe mich auch bei Fronius registriert. Was in der API Beschreibung nervt: ich kann nix herauskopieren, denn da bekomme ich nur wirre Zeichen. Muß somit zumTesten alles selber eintippen. Schick Dir meine Mailadressse, vielleicht ist deine Version brauchbarer.


Könntest Du mir einen Screenshot von deiner Datamanger Übersicht schicken?

Lg. C

derchrome

Zitat von: simonberry am 02 Oktober 2014, 14:59:15
Hallo derchrome,

Bei mir heißt die Datei
98_HTTPMOD.pm
Ich weiß nicht mehr genau, aber ich habe die glaube ich nicht extra installiert. Probier mal ein update.

Grüße

Saimen
Welche FHEM Version nutzt du denn? Und wie mache ich ein Update?

simonberry

#23
Hi Clemens,

wenn Du dir die API runtergeladen hast kann ich Dir auch nix neueres schicken. Probier einfach mal die Beispiele aus. Aus meinem PDF kann man auch nichts rauskopieren, das nervt wirklich, aber ishaltso.

Was ich nicht genau verstehe ist, welchen Screenshot Du meinst..

@ derchrome,
also ein update macht man in dem man in der Commandozeilte "update" eintippt, dann wartet man bis es fertig ist, und die Meldung erscheint "Shutdown restart erforderlich" Dann tippt man "shutdown restart" in die commandozeile,... schonmal die Suchfunktion verwendet? ;-)

Grüße

Simonberry

NUC5i3RYK#DBLOG; MYSQL; LIRC; MPD; HM-CFG-HM-USB-2: HM-divers; MQTT2; Signalduino; Shelly; Sonoff; dash_dhcp; FS20; IT; FroniusWR; Somfy RTS; NFS-Server
Rpi B#: nfsmount; ser2net CUL868; CUL433; GPIO4:DS18B20; WEMOS-D1-MINI#JVC-via-IR;

Fritz R.

Hi,

die Idee mit HTTPMOD auszulesen hat mich inspiriert mal die Webseite des Datenloggers im Wechselrichters (SYMO) genauer anzuschauen.
Ich hatte das Problem, dass mit der beschriebenen Art jeweils nur 1 Wechselrichter antwortet und ich die Summe irgendwie selber ausrechnen müsste. Auf der Webseite des Datenloggers wird aber die Summe dargestellt und noch dazu mein momentaner Verbrauch, der über den S0 Ausgang des Zählers am Wechselrichter ankommt (70% dynamische Einspeisung). Deshalb habe ich diese mal analysiert.

Ich verwende eine in den API PDF's nicht dokumentierte Seite des Datenloggers. Gibt man folgenden Link ein

http://ip-wechselrichter/components/5/0/?print=names

kommt das:

{
"Head" : {
"RequestArguments" : {
"resource" : "5\/0\/",
"print" : "names"
},
"Status" : {
"Code" : 0,
"Reason" : "",
"UserMessage" : "",
"ErrorDetail" : {
"Nodes" : []
}
},
"Timestamp" : "2014-11-02T11:43:25+01:00"
},
"Body" : {
"Data" : {
"TimeStamp" : {
"value" : 1414925004,
"unit" : "sec"
},
"Enable" : {
"value" : 1,
"unit" : "1"
},
"Visible" : {
"value" : 1,
"unit" : "1"
},
"Power_P_Generate" : {
"value" : 5297,
"unit" : "W"
},
"Power_P_Load" : {
"value" : -1425.178067,
"unit" : "W"
},
"Power_P_Grid" : {
"value" : -3871.821933,
"unit" : "W"
},
"Power_Akku_Sum" : {
"value" : null,
"unit" : "W"
},
"Power_PV_Sum" : {
"value" : 5297,
"unit" : "W"
},
"Relative_Current_SelfConsumption" : {
"value" : 26.905382,
"unit" : "%"
},
"Relative_Current_Autonomy" : {
"value" : 100,
"unit" : "%"
},
"Power_P_SelfConsumption" : {
"value" : -1425.178067,
"unit" : "W"
}
}
}
}


Loggen tu ich derzeit :

Power_P_Generate = gerade produzierte Leistung
Power_P_Grid          = momentane Einspeisung / Strombezug je nach Vorzeichen
Power_P_Load         = momentaner Verbrauch
Relative_Current_Autonomy = Autonomie in 100%

Bei mehreren Wechselrichtern ist das schon bezogen auf die Summe.

Folgende Einträge hab ich verwendet

define PV_Anlage HTTPMOD http://IP-Wechselrichter/components/5/0/?print=names 30
attr PV_Anlage group Messen
attr PV_Anlage icon measure_photovoltaic_inst
attr PV_Anlage readingsName.1 Power_P_Generate
attr PV_Anlage readingsName.2 Power_P_Load
attr PV_Anlage readingsName.3 Power_P_Grid
attr PV_Anlage readingsRegex.1 "Power_P_Generate"[:{\n\t ]+"value"[ : \t]+([\d\.]+),
attr PV_Anlage readingsRegex.2 "Power_P_Load"[:{\n\t ]+"value"[ : \t]+(-?[\d\.]+),
attr PV_Anlage readingsRegex.3 "Power_P_Grid"[:{\n\t ]+"value"[ : \t]+(-?[\d\.]+),
attr PV_Anlage room Strom
attr PV_Anlage stateFormat {sprintf("PV %d W  Verbrauch %d W  Netz %d W",ReadingsVal($name,"Power_P_Generate",0),ReadingsVal($name,"Power_P_Load",0),ReadingsVal($name,"Power_P_Grid",0))}
attr PV_Anlage verbose 2
define FileLog_PV_Anlage FileLog ./log/PV_Anlage-%Y.log PV_Anlage
define SVG_FileLog_PV_Anlage_1 SVG FileLog_PV_Anlage:SVG_FileLog_PV_Anlage_1:CURRENT
attr SVG_FileLog_PV_Anlage_1 room Plots,Strom


Das "attr PV_Anlage verbose 2" ist meine Lösung um das Log-File nicht mit Fehlermeldungen vollzuschreiben, wenn keine Strom mehr produziert wird, da dann das Reading teilweise nicht mehr richtig funktioniert. Vielleicht hat jemand da eine bessere Idee. Der Wechselrichter mit dem Datenlogger muss übrigens so konfiguriert werden, dass er Nachts an bleibt, da sonst kein Verbrauch geloggt werden kann.

Gruss Fritz

Burny4600

Wurde das auch mit einem Fronius Datalogger Web 2 realisiert?

Benötige Unterstützung wie ich die Daten des Fronius Datalogger Web 2 in das FHEM bekomme.
Konnte mit diesen Informationen leider keine Verbindung herstellen.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

HotteFred

Hallo Chris,

was für einen Fronius hast du denn genau?

Grüße
BananaPi mit FHEM, KM50, Velux Raumluftsensor, jede Menge HM-CC-RT-DN, jede Menge 1Wire Zeugs

kanenas

Probier mal : http://froni_ip/solar_api/GetInverterRealtimeData.cgi?

Der Fronius Datalogger unterstützt die API V0 (nicht die V1)
Jessie@Raspi(v3)+SSD, CUL-MAX, CUL-433, CUL-FS20, JeeLink-PCA301, JeeLink-JLLaCrosse, HM-MOD-UART, HUEBridge(v2), ESPEasy, Tasmota, Plenticore 7 mit BYD 11,5

timberbeam

Zitat von: simonberry am 16 Juni 2014, 15:30:33
ich habe den Datenlogger von meinem Fronius Wechselrichter ins FHEM integrieren können.   :D
Vielleicht kann dies ja jemand brauchen.
Hi Simonberry,

danke, das konnte ich sehr gut brauchen!
Zusammen mit den JSON-Schnittstellenbeschreibungen von Fronius konnte ich alles lesen.
Da ich auch das Smart-Meter von Fronius integriert habe, wollte ich auch diese Daten aus dem Wechselrichter auslesen. Die Werte können bei Lieferung auch negativ werden, daher musste ich die Auswertung auf negative Zahlen erweitern. Die Regular-Expressions in PERL für "floating point, no exponent" hab ich dann schließlich hier gefunden: http://perldoc.perl.org/perlretut.html#Extracting-matches

Der Kode sieht dann so aus:

# MeterAkt enthält die aktuellen Messwerte
define MeterAkt HTTPMOD http://192.168.1.XXX/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0 300
attr MeterAkt userattr event-on-change-reading icon readingsName.* readingsName.1 readingsName.2 readingsName.3 readingsName.4 readingsName.5 readingsName.6 readingsRegex.1 readingsRegex.2 readingsRegex.3 readingsRegex.4 readingsRegex.5 readingsRegex.6 stateFormat
attr MeterAkt event-on-change-reading PowerReal_P_Sum
attr MeterAkt group Messen
attr MeterAkt icon measure_power_meter
attr MeterAkt readingsName.1 PowerReal_P_Phase_1
attr MeterAkt readingsName.2 PowerReal_P_Phase_2
attr MeterAkt readingsName.3 PowerReal_P_Phase_3
attr MeterAkt readingsName.4 PowerReal_P_Sum
attr MeterAkt readingsName.5 EnergyReal_WAC_Sum_Produced
attr MeterAkt readingsName.6 EnergyReal_WAC_Sum_Consumed
attr MeterAkt readingsRegex.1 "PowerReal_P_Phase_1"[ : \t]+([+-]?(\d+\.\d+|\d+\.|\.\d+)),
attr MeterAkt readingsRegex.2 "PowerReal_P_Phase_2"[ : \t]+([+-]?(\d+\.\d+|\d+\.|\.\d+)),
attr MeterAkt readingsRegex.3 "PowerReal_P_Phase_3"[ : \t]+([+-]?(\d+\.\d+|\d+\.|\.\d+)),
attr MeterAkt readingsRegex.4 "PowerReal_P_Sum"[ : \t]+([+-]?(\d+\.\d+|\d+\.|\.\d+)),
attr MeterAkt readingsRegex.5 "EnergyReal_WAC_Sum_Produced"[ : \t]+([\d\.]+),
attr MeterAkt readingsRegex.6 "EnergyReal_WAC_Sum_Consumed"[ : \t]+([\d\.]+),
attr MeterAkt room Strom
attr MeterAkt stateFormat {sprintf("ElPower: %.2f W, Phase_1: %.2f W, Phase_2: %.2f W, Phase_3: %.2f W;; netPower to grid: %.3f kWh / from grid: %.3f kWh", ReadingsVal($name,"PowerReal_P_Sum",0),ReadingsVal($name,"PowerReal_P_Phase_1",0),ReadingsVal($name,"PowerReal_P_Phase_2",0),ReadingsVal($name,"PowerReal_P_Phase_3",0),ReadingsVal($name,"EnergyReal_WAC_Sum_Produced",0)/1000.0,ReadingsVal($name,"EnergyReal_WAC_Sum_Consumed",0)/1000.0)}


Der Teil "attr MeterAkt event-on-change-reading PowerReal_P_Sum" kann eigentlich weggelassen werden, wenn nur alle 300s abgefragt wird.

Burny4600

@Dionysios

Kannst du mir vielleicht auch behilflich sein.
Ich bekomme einfach keine Readingwerte heraus obwohl unter buf diese eingeslesen werden.
Mit dem HTTPMOD hat sich scheinbar auch ab Anfang März etwas geändert, und bin mir nicht sicher ob meine Config so stimmt wie ich diese definiert habe.
https://forum.fhem.de/index.php/topic,50639.msg423936.html#msg423936
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

kanenas

Hi Chris, ich hab mich hingesetzt und versucht zu verstehen wo das Problem liegt. Es ist ein Formatierungsproblem.

Bei der Abfrage"http://192.xxx.xxx.xxx/solar_api/GetInverterRealtimeData.cgi?Scope=System" Bekommst du die Variablen in der Form:

"DAY_ENERGY" : {
            "Unit" : "Wh",
            "Values" : {
               "1" : 6067
            }

Das Script was du nutzt (attr PV_Anlage_1 reading01Regex "DAY_ENERGY"[:{\n\t ]+"Value"[ : \t]+([\d\.]+),) versucht aber den Wert in ein andere Form zu lesen:

         "DAY_ENERGY" : {
            "Value" : 6067,
            "Unit" : "Wh"
         },

Zwei Möglichkeiten gibt es, entweder wird die Verarbeitung der Variable angepasst. Das kenn ich leider nicht. Oder du versuchst folgende Abfrage durchzuführen:

http://192.xxx.xxx.xxx/solar_api/GetInverterRealtimeData.cgi?Scope=Device&DeviceIndex=0&DataCollection=CommonInverterData

von der API Spezifikation 3.1.5 Seite 7

Dann kommen die Daten in den richtigen Format und die Config von Simonberry sollte funktionieren.




Jessie@Raspi(v3)+SSD, CUL-MAX, CUL-433, CUL-FS20, JeeLink-PCA301, JeeLink-JLLaCrosse, HM-MOD-UART, HUEBridge(v2), ESPEasy, Tasmota, Plenticore 7 mit BYD 11,5

Burny4600

@Dionysios
Mit der Anforderung:
http://192.xxx.xxx.xxx/solar_api/GetInverterRealtimeData.cgi?Scope=Device&DeviceIndex=0&DataCollection=CommonInverterData
bekomme ich aber nur diese Antwort.
{
"Head" : {
"RequestArguments" : {
"DataCollection" : "CommonInverterData",
"DeviceClass" : "Inverter",
"DeviceIndex" : "0",
"Scope" : "Device"
},
"Status" : {
"Code" : 8,
"Reason" : "Transfer timeout.",
"UserMessage" : ""
},
"Timestamp" : "2016-03-14T09:12:13+01:00"
}
}


Ich denke da hat sich bei Fronius etwas in der Firmware des Datenloggers getan, was aber noch nicht dokumentiert wurde.
Zitat
Datalogger Web 2
Platinenversion    1.4A
Softwareversion    2.0.5-4

Anbei nochmals die HTTP Anworten laut Fronius Solar API V0 (002-06082013)
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Peter1984

Hallo,

Bin neu in dem Thema FHEM.

Nach Studium einiger Dokumentationen komme ich trotzdem noch nicht zum Ziel.
Ich möchte die Werte, die über JSON geliefert werden, in einem Diagramm darstellen. Die Werte erhalte ich, wie bekomme ich da jetzt ein Diagramm draus?
Die Tageserträge sollen eins sein (ähnlich Solarweb), das ganze dann summiert für den Monat (Diagramm soll einige Monate anzeigen und dann der Jahresertrag...

octek0815

Zitat von: Peter1984 am 09 Mai 2016, 13:49:06
Hallo,

Bin neu in dem Thema FHEM.

Nach Studium einiger Dokumentationen komme ich trotzdem noch nicht zum Ziel.
Ich möchte die Werte, die über JSON geliefert werden, in einem Diagramm darstellen. Die Werte erhalte ich, wie bekomme ich da jetzt ein Diagramm draus?
Die Tageserträge sollen eins sein (ähnlich Solarweb), das ganze dann summiert für den Monat (Diagramm soll einige Monate anzeigen und dann der Jahresertrag...


Moin Peter,

du musst Dich in die Themen FileLog und Plots einlesen. Steht alles in der Wiki und Commandref.
Mit ein wenig fleiß kannst Du dann vieles machen (als Anhang mal ein Beispiel)...

Grüße
Olli

Peter1984

Wow! Genau so in der Art soll es später mal aussehen :-)

Da habe ich ja noch einiges zu tun :-)

DaRealDan

Auch wenn das Thema schon etwas älter ist, aber hier ein kurzes Config-Update - ich glaube im HTTPMOD und/oder in der Fronius API wurde ein bisschen was geändert, sodass hier ein bisschen was angepasst werden muss, wenn man die Config aus dem ersten Posting nimmt.

define PVAnlageMax HTTPMOD http://192.XXX.XXX.XXX/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=MinMaxInverterData 300
attr PVAnlageMax userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex
attr PVAnlageMax group Messen
attr PVAnlageMax icon measure_photovoltaic_inst
attr PVAnlageMax reading1Name DAY_PMAX
attr PVAnlageMax reading1Regex "DAY_PMAX"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageMax reading2Name YEAR_PMAX
attr PVAnlageMax reading2Regex "YEAR_PMAX"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageMax reading3Name TOTAL_PMAX
attr PVAnlageMax reading3Regex "TOTAL_PMAX"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageMax room Strom
attr PVAnlageMax stateFormat {sprintf("Tag: %d W Jahr: %d W Gesamt: %d W", ReadingsVal($name,"DAY_PMAX",0),ReadingsVal($name,"YEAR_PMAX",0),ReadingsVal($name,"TOTAL_PMAX",0))}


define PVAnlageAkt HTTPMOD http://192.XXX.XXX.XXX/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData 300
attr PVAnlageAkt userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex reading4Name reading4Regex reading5Name reading5Regex reading6Name reading6Regex reading7Name reading7Regex reading8Name reading8Regex reading9Name reading9Regex
attr PVAnlageAkt group Messen
attr PVAnlageAkt icon measure_photovoltaic_inst
attr PVAnlageAkt reading1Name DAY_ENERGY
attr PVAnlageAkt reading1Regex "DAY_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading2Name TOTAL_ENERGY
attr PVAnlageAkt reading2Regex "TOTAL_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading3Name YEAR_ENERGY
attr PVAnlageAkt reading3Regex "YEAR_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading4Name FAC
attr PVAnlageAkt reading4Regex "FAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading5Name IAC
attr PVAnlageAkt reading5Regex "IAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading6Name IDC
attr PVAnlageAkt reading6Regex "IDC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading7Name PAC
attr PVAnlageAkt reading7Regex "PAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading8Name UAC
attr PVAnlageAkt reading8Regex "UAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading9Name UDC
attr PVAnlageAkt reading9Regex "UDC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt room Strom
attr PVAnlageAkt stateFormat {sprintf("Aktuelle Erzeugung: %d kw", ReadingsVal($name,"PAC",0))}\


Das JSON vom Fronius sieht bei mir nämlich wie folgt aus:


{
   "Body" : {
      "Data" : {
         "DAY_PMAX" : {
            "Unit" : "W",
            "Value" : 9085
         },
         "DAY_UACMAX" : {
            "Unit" : "V",
            "Value" : 242
         },
         "DAY_UDCMAX" : {
            "Unit" : "V",
            "Value" : 571.60000000000002
         },
         "TOTAL_PMAX" : {
            "Unit" : "W",
            "Value" : 9618
         },
         "TOTAL_UACMAX" : {
            "Unit" : "V",
            "Value" : 262.80000000000001
         },
         "TOTAL_UDCMAX" : {
            "Unit" : "V",
            "Value" : 602.60000000000002
         },
         "YEAR_PMAX" : {
            "Unit" : "W",
            "Value" : 9618
         },
         "YEAR_UACMAX" : {
            "Unit" : "V",
            "Value" : 262.80000000000001
         },
         "YEAR_UDCMAX" : {
            "Unit" : "V",
            "Value" : 602.60000000000002
         }
      }
   },
   "Head" : {
      "RequestArguments" : {
         "DataCollection" : "MinMaxInverterData",
         "DeviceClass" : "Inverter",
         "DeviceId" : "1",
         "Scope" : "Device"
      },
      "Status" : {
         "Code" : 0,
         "Reason" : "",
         "UserMessage" : ""
      },
      "Timestamp" : "2017-07-22TXX:XX:XX+02:00"
   }
}

Peter1984


HotteFred

Zitat von: octek0815 am 10 Mai 2016, 12:12:04

Mit ein wenig fleiß kannst Du dann vieles machen (als Anhang mal ein Beispiel)...


Hallo octek0815,

würdest du deinen Code zu dem Screenshot posten?

Grüße
Fred
BananaPi mit FHEM, KM50, Velux Raumluftsensor, jede Menge HM-CC-RT-DN, jede Menge 1Wire Zeugs

tobox

Ich habe gerade meinen Fronius Wechselrichter in Betrieb genommen, und die aktuellste Firmware eingespielt. Damit haben alle hier geposteten Beispielconfigs aber nicht funktioniert. Wesentlich einfacher lief es dann aber auf Anhieb mit extractAllJSON:


define SolarAkt HTTPMOD http://fronius.fritz.box/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData 300
attr SolarAkt extractAllJSON


Damit hatte ich auf Anhieb alle Readings, und auch kleiner Änderungen am Whitespace bei neuen Firmwareupdates sollten kein Problem sein.

Franky1992

Hallo, der hier beschriebene Teil funktioniert super.

Leider sieht das Format beim SmartMeter etwas anders aus:
{
   "Body" : {
      "Data" : {
         "0" : {
            "Current_AC_Phase_1" : 5.766,
            "Current_AC_Phase_2" : 4.9909999999999997,
            "Current_AC_Phase_3" : 5.6200000000000001,
            "Details" : {
               "Manufacturer" : "Fronius",
               "Model" : "Smart Meter 63A",
               "Serial" : "18160838"
            },
            "Enable" : 1,
            "EnergyReactive_VArAC_Sum_Consumed" : 507280,
            "EnergyReactive_VArAC_Sum_Produced" : 17757220,
            "EnergyReal_WAC_Minus_Absolute" : 3391542,
            "EnergyReal_WAC_Plus_Absolute" : 1820046,
            "EnergyReal_WAC_Sum_Consumed" : 1820046,
            "EnergyReal_WAC_Sum_Produced" : 3391542,
            "Frequency_Phase_Average" : 50,
            "Meter_Location_Current" : 0,
            "PowerApparent_S_Phase_1" : 1368.8484000000001,
            "PowerApparent_S_Phase_2" : 1182.867,
            "PowerApparent_S_Phase_3" : 1333.626,
            "PowerApparent_S_Sum" : 3855,
            "PowerFactor_Phase_1" : -0.98999999999999999,
            "PowerFactor_Phase_2" : -0.98999999999999999,
            "PowerFactor_Phase_3" : -0.98999999999999999,
            "PowerFactor_Sum" : -0.98999999999999999,
            "PowerReactive_Q_Phase_1" : -149.56,
            "PowerReactive_Q_Phase_2" : -81.540000000000006,
            "PowerReactive_Q_Phase_3" : -98.069999999999993,
            "PowerReactive_Q_Sum" : -329.17000000000002,
            "PowerReal_P_Phase_1" : -1355.5999999999999,
            "PowerReal_P_Phase_2" : -1167.5899999999999,
            "PowerReal_P_Phase_3" : -1318.73,
            "PowerReal_P_Sum" : -3841.9200000000001,
            "TimeStamp" : 1553954882,
            "Visible" : 1,
            "Voltage_AC_PhaseToPhase_12" : 410.80000000000001,
            "Voltage_AC_PhaseToPhase_23" : 410.80000000000001,
            "Voltage_AC_PhaseToPhase_31" : 411.10000000000002,
            "Voltage_AC_Phase_1" : 237.40000000000001,
            "Voltage_AC_Phase_2" : 237,
            "Voltage_AC_Phase_3" : 237.30000000000001
         }
      }
   },
   "Head" : {
      "RequestArguments" : {
         "DeviceClass" : "Meter",
         "Scope" : "System"
      },
      "Status" : {
         "Code" : 0,
         "Reason" : "",
         "UserMessage" : ""
      },
      "Timestamp" : "2019-03-30T15:08:03+01:00"
   }


wie es aussieht sind alle Readings in Data zusammengefasst.

hat jemand ne Idee wie hierfür das Regex angepasst werden muss?
Bin da wohl zu doof zu :)

Gruß

amenomade

Setze einmal extractAllJson, dann siehst Du wie die Readings abzufangen sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Franky1992

Super, das sieht schonmal recht gut aus.

wenn ich jedoch get01JSON verwende und poll benutze scheint der jeden wert einzeln abzufragen :=)
Was bedeutet das bei 30 Werten mit 5 Sekunden Abfragezeit allgemein jeder einzelne Wert nur alle 150sek erneuert wird
da die ja der Reihe nach durchlaufen.
Soll das so ??? :)

define smtest HTTPMOD http://192.168.217.111/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System 30
setuuid smtest 5c9f78c2-f33f-5faf-6002-725adebfb9ab124b
attr smtest get01Poll 1
attr smtest get01Name strom_l1
attr smtest get01JSON Body_Data_0_Current_AC_Phase_1
attr smtest get02Poll 1
attr smtest get02Name strom_l2
attr smtest get02JSON Body_Data_0_Current_AC_Phase_2
attr smtest get03Poll 1
attr smtest get03Name strom_l3
attr smtest get03JSON Body_Data_0_Current_AC_Phase_3
attr smtest get08Poll 1
attr smtest get08PollDelay 60
attr smtest get08Name verbrauch_gesamt
attr smtest get08JSON Body_Data_0_EnergyReal_WAC_Sum_Consumed
attr smtest get09Poll 1
attr smtest get09PollDelay 60
attr smtest get09Name erzeugung_gesamt
attr smtest get09JSON Body_Data_0_EnergyReal_WAC_Sum_Produced

eigentlich habe ich mir ja nur einzelne Felder rausgesucht um Rechenzeit, Events, log ... usw zu sparen.

gibts da ne Möglichkeit das die gemeinsam ausgelesen werden?





amenomade

#42
Wenn man immer die gleiche URL und alle Readings auf einmal abfragen möchtet, nutzt man nicht getXX Attribute sondern readingXX

attr smtest reading01Name strom_l1
attr smtest reading01JSON Body_Data_0_Current_AC_Phase_1


getXX ist wenn man explizit Einzelwerte mit "get <HTTPMODname> wert" manuell abfragen will oder wenn man mehrere getXXURL abfragen muss
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Alex76

Zitat von: octek0815 am 10 Mai 2016, 12:12:04

Moin Peter,

du musst Dich in die Themen FileLog und Plots einlesen. Steht alles in der Wiki und Commandref.
Mit ein wenig fleiß kannst Du dann vieles machen (als Anhang mal ein Beispiel)...

Grüße
Olli

Hallo Olli,

deine Grafik gefällt mir, wie hast Du die beiden mppt Strings getrennt abgefragt, hab da keinen Wert in der API dafür gefunden.

lg

Alex
ps. dein Code würd mich auch brennend interessieren, weils auch richtig gut aussieht.

daniN

Hallo,
ich habe den Thread aufmerksam gelesen. Damit konnte ich nun auch erfolgreich meine Wechselrichter auslesen.
Da ich zwei davon besitze, habe ich auch zwei Geräte angelegt die via HTTPMOD gelesen werden.

Was mich interessieren würde ist, wie ich den Tageswert beider Wechselrichter summieren kann?

Wechselrichter1
Devicename: Fronius1
Reading Body_Data_DAY_ENERGY_Value

Wechselrichter2
Devicename: Fronius1
Reading Body_Data_DAY_ENERGY_Value

Ich möchte von beiden Wechselrichtern die Tageswerte summieren, um sie via FTUI als Label anzuzeigen.
Hab jetzt mal via DOIF schon rumgespielt:
setreading at PV_Info_Gesamt {([Fronius1:Body_Data_DAY_ENERGY_Value]+[Fronius2:Body_Data_DAY_ENERGY_Value])}

Ich editiere via FhemWeb.

Ich freu mich auf eure Antworten :)

amenomade

Das packst Du in einem at oder in einem DOIF, und setzt damit ein Reading mit der Summe

Was soll das bedeuten:
ZitatHab jetzt mal via DOIF schon rumgespielt:

setreading at PV_Info_Gesamt {([Fronius1:Body_Data_DAY_ENERGY_Value]+[Fronius2:Body_Data_DAY_ENERGY_Value])}
? Ist das ein at oder ein DOIF
Wie sieht denn dein DOIF aus ("list" davon)?

DOIF:
([00:05])
    (setreading $SELF PV_Info_Gesamt ([Fronius1:Body_Data_DAY_ENERGY_Value]+[Fronius2:Body_Data_DAY_ENERGY_Value]))
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Shadow3561

Warum nutzt du nicht das Fronius ModBus Modul?

https://forum.fhem.de/index.php/topic,46685.0.html

Mit freundlichen Grüßen

daniN

Hallo Shadow3561,

ich hab mir das mal angesehen. Macht das einen Unterschied welche Ergebnisse ich bekomme?

Wenn das Ergebnis das gleiche ist, bleibt mein Problem mit den einzelnen Werten die ich summieren möchte :D

Gruß Daniel

Shadow3561

Hallo,
Wenn die WR über RS485 verbunden sind dann geben dir dir die Modbus Register die Erzeugung von allen WR summiert aus.



500   501   2   R   0x03   F_Site_Power   Total power (site sum) of all connected inverters.   uint32   W
502   505   4   R   0x03   F_Site_Energy_Day   Total energy for current day of all connected inverters.   uint64   Wh
506   509   4   R   0x03   F_Site_Energy_Year   Total energy for last year of all connected inverters.   uint64   Wh
510   513   4   R   0x03   F_Site_Energy_Total   Total energy of all connected inverters.   uint64   Wh

Mit freundlichen Grüßen

Tronde

Zitat von: DaRealDan am 22 Juli 2017, 20:13:14
define PVAnlageAkt HTTPMOD http://192.XXX.XXX.XXX/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData 300
attr PVAnlageAkt userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex reading4Name reading4Regex reading5Name reading5Regex reading6Name reading6Regex reading7Name reading7Regex reading8Name reading8Regex reading9Name reading9Regex
attr PVAnlageAkt group Messen
attr PVAnlageAkt icon measure_photovoltaic_inst
attr PVAnlageAkt reading1Name DAY_ENERGY
attr PVAnlageAkt reading1Regex "DAY_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading2Name TOTAL_ENERGY
attr PVAnlageAkt reading2Regex "TOTAL_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading3Name YEAR_ENERGY
attr PVAnlageAkt reading3Regex "YEAR_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading4Name FAC
attr PVAnlageAkt reading4Regex "FAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading5Name IAC
attr PVAnlageAkt reading5Regex "IAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading6Name IDC
attr PVAnlageAkt reading6Regex "IDC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading7Name PAC
attr PVAnlageAkt reading7Regex "PAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading8Name UAC
attr PVAnlageAkt reading8Regex "UAC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt reading9Name UDC
attr PVAnlageAkt reading9Regex "UDC"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
attr PVAnlageAkt room Strom
attr PVAnlageAkt stateFormat {sprintf("Aktuelle Erzeugung: %d kw", ReadingsVal($name,"PAC",0))}\


Hallo,

ich glaube in der letzten Zeile des obigen Code-Blocks hat sich ein Tippfehler eingeschlichen. Hier wird als Einheit kW (Kilowatt) verwendet. Die richtige Einheit ist nach meiner Beobachtung jedoch W (Watt).

Vielen Dank an DaRealDan und simonberry! Dass ihr eure Lösungen hier vorgestellt habt, hat mir sehr geholfen.  :D

Vielen Dank
Tronde

Heinz1973

Ja ebenfalls Danke von  mir hat mir sehr geholfen. Man kann die Antwort auch direkt mit dem JSON support von HTTPMOD parsen, dann sieht es so aus (https://wiki.fhem.de/wiki/HTTPMOD#Parsing_JSON):

Zitat
define FroniusCommon HTTPMOD http://fronius.fritz.box/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData 30
attr FroniusCommon userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex reading4Name reading4JSON reading5Name reading5JSON reading6Name reading6JSON reading7Name reading7JSON reading8Name reading8JSON reading9Name reading9JSON reading10Name reading10JSON reading11Name reading11JSON reading12Name reading12JSON reading13Name reading13JSON
attr FroniusCommon group Solar
attr FroniusCommon alias FroniusSymo
attr FroniusCommon icon measure_photovoltaic_inst
attr FroniusCommon room Solar
# DAY_ENERGY in Wh
attr FroniusCommon reading1Name DAY_ENERGY
attr FroniusCommon reading1Regex "DAY_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
# TOTAL_ENERGY in Wh
attr FroniusCommon reading2Name TOTAL_ENERGY
attr FroniusCommon reading2Regex "TOTAL_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
# YEAR_ENERGY in Wh
attr FroniusCommon reading3Name YEAR_ENERGY
attr FroniusCommon reading3Regex "YEAR_ENERGY"[:{\n\t ]+"Unit"[ : \t]+["a-zA-Z",]+[ \n\t ]+"Value"[ : \t]+([\d\.]+)
# FAC in Hz
attr FroniusCommon reading4Name FAC
attr FroniusCommon reading4JSON Body_Data_FAC_Value
# IAC in A
attr FroniusCommon reading5Name IAC
attr FroniusCommon reading5JSON Body_Data_IAC_Value
# IDC in A
attr FroniusCommon reading6Name IDC
attr FroniusCommon reading6JSON Body_Data_IDC_Value
# PAC in W
attr FroniusCommon reading7Name PAC
attr FroniusCommon reading7JSON Body_Data_PAC_Value
# UAC in V
attr FroniusCommon reading8Name UAC
attr FroniusCommon reading8JSON Body_Data_UAC_Value
# UDC in V
attr FroniusCommon reading9Name UDC
attr FroniusCommon reading9JSON Body_Data_UDC_Value

# DeviceStatus
attr FroniusCommon reading10Name ErrorCode
attr FroniusCommon reading10JSON Body_Data_DeviceStatus_ErrorCode
attr FroniusCommon reading11Name LEDColor
attr FroniusCommon reading11JSON Body_Data_DeviceStatus_LEDColor
attr FroniusCommon reading12Name LEDState
attr FroniusCommon reading12JSON Body_Data_DeviceStatus_LEDState
attr FroniusCommon reading13Name StatusCode
attr FroniusCommon reading13JSON Body_Data_DeviceStatus_StatusCode

attr FroniusCommon stateFormat {sprintf("PAC: %d W", ReadingsVal($name,"PAC",0))}\


Heinz1973

Hier noch ein Beispiel wie man aktuelle Leistung, Eigenverbrauch und Einspeisung abgreifen kann:


define FroniusPowerFlow HTTPMOD http://fronius.fritz.box/solar_api/v1/GetPowerFlowRealtimeData.fcgi 10
attr FroniusPowerFlow userattr reading1Name reading1JSON
attr FroniusPowerFlow alias FroniusPowerFlow
attr FroniusPowerFlow extractAllJSON 1
attr FroniusPowerFlow group Solar
attr FroniusPowerFlow icon measure_power
attr FroniusPowerFlow room Solar
attr FroniusPowerFlow stateFormat {sprintf("PV-Anlage %d W: Eigenverbrauch %d W - Einspeisung %d W (Anteil %d %%)",\
    ReadingsVal($name,"Body_Data_Site_P_PV",0),\
    abs(ReadingsVal($name,"Body_Data_Site_P_Load",0)),\
    abs(ReadingsVal($name,"Body_Data_Site_P_Grid",0)),\
    ReadingsVal($name,"Body_Data_Site_rel_SelfConsumption",1)\
    )}


Alpha_DE

Ich habe hier einen Fronius Datalogger Web (Platinenversion, 1.4A, Softwareversion    2.0.5-4).

Erstmal danke für die vielen Anregungen hier, da ist wohl trotz der 2er Software eine "alte" Api drin, ich bekomme die Readings mit

defmod PV_Anlage HTTPMOD http://ip.des.data.loggers/solar_api/GetInverterRealtimeData.cgi?Scope=Device&DeviceIndex=1&DataCollection=CommonInverterData 30
attr PV_Anlage userattr Body_Data_PAC_Value
attr PV_Anlage extractAllJSON 1
attr PV_Anlage stateFormat {sprintf("%d %s", ReadingsVal($name,"Body_Data_PAC_Value",0),ReadingsVal($name,"Body_Data_PAC_Unit",0))}

AbeamStart

Hallo,
wie schaut es denn bei euch Nachts aus? Bei mir liefert der WR dann keine Werte mehr und mein Log wird zugemüllt:
2022.03.22 21:01:02 3: Wechselrichter2: Read callback: Error: read from http://192.168.1.9:80 timed out
2022.03.22 21:01:02 3: Wechselrichter1: Read callback: Error: read from http://192.168.1.9:80 timed out

Wie habt ihr das gelöst?
FHEM auf Debian (VM)

PatrickR

lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

breitbanddilettant

Hallo zusammen,

ich würde gerne HTTPMOD nutzen, um bei meinem Symo Gen24 automatisiert die String Spannung kurzzeitig zu ändern. Eine Kurzbeschreibung des Ablaufes wäre:

- morgens um ca. 8Uhr auf dem Wechselrichter (http://x.x.x.x/#/dashboard) mit dem Techniker Account einloggen
- auf http://x.x.x.x/#/inverter wechseln und dort die String Spannung auf fix und 80V stellen
- nach 10sek die String Spannung wieder auf Auto stellen.

Ist HTTPMOD hierfür das richtige? Oder gibt es vielleicht noch eine einfacherer Methode diesen festen Ablauf automatisiert in FHEM zu implementieren?

Danke und schöne Grüße