Fronius Wechselrichter per HTTPMOD

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

Vorheriges Thema - Nächstes Thema

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 :)