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;