Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin für Fronius Symo Wechselrichter

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Plugin für Fronius Symo Wechselrichter

    Hallo,

    ich würde gerne einige Daten meiner PV Anlage in Smartvisu visualisieren.
    Folgende Werte bekomme ich über eine Webabfrage.

    PHP-Code:
    {
        
    "Head" : {
            
    "RequestArguments" : {
                
    "DataCollection" "CommonInverterData",
                
    "DeviceClass" "Inverter",
                
    "DeviceId" "1",
                
    "Scope" "Device"
            
    },
            
    "Status" : {
                
    "Code" 0,
                
    "Reason" "",
                
    "UserMessage" ""
            
    },
            
    "Timestamp" "2015-05-25T14:02:10+02:00"
        
    },
        
    "Body" : {
            
    "Data" : {
                
    "DAY_ENERGY" : {
                    
    "Value" 13307,
                    
    "Unit" "Wh"
                
    },
                
    "FAC" : {
                    
    "Value" 49.96,
                    
    "Unit" "Hz"
                
    },
                
    "IAC" : {
                    
    "Value" 16.89,
                    
    "Unit" "A"
                
    },
                
    "IDC" : {
                    
    "Value" 8.6,
                    
    "Unit" "A"
                
    },
                
    "PAC" : {
                    
    "Value" 3916,
                    
    "Unit" "W"
                
    },
                
    "TOTAL_ENERGY" : {
                    
    "Value" 1221454,
                    
    "Unit" "Wh"
                
    },
                
    "UAC" : {
                    
    "Value" 232.1,
                    
    "Unit" "V"
                
    },
                
    "UDC" : {
                    
    "Value" 467,
                    
    "Unit" "V"
                
    },
                
    "YEAR_ENERGY" : {
                    
    "Value" 1221454,
                    
    "Unit" "Wh"
                
    },
                
    "DeviceStatus" : {
                    
    "StatusCode" 7,
                    
    "MgmtTimerRemainingTime" : -1,
                    
    "ErrorCode" 0,
                    
    "LEDColor" 2,
                    
    "LEDState" 0,
                    
    "StateToReset" false
                
    }
            }
        }

    Würde das ganze gerne über eine Plugin lösen.
    Hat hier jemand schon was vergleichbares gemacht ?

    LG Markus

    #2
    Hallo,

    mir ist nichts dazu bekannt.
    Das könntest Du für den Anfang auch als kleine Logik implementieren. Einfach mit fetch_url holen und als JSON parsen.

    Bis bald

    Marcus

    Kommentar


      #3
      Hallo,

      Danke für den TIP.

      Mit sh.tools.fetch_url hab ich es noch nicht zum laufen gebracht.

      Was bis jetzt funktioniert ist dieser Code.

      Code:
      import urllib.request
      import json
      
      request = urllib.request.Request("http://192.168.8.181/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData")  
      response = urllib.request.urlopen(request)
      encoding = response.info().get_param('charset', 'utf8')
      data = json.loads(response.read().decode(encoding))
      
      day_energy = data["Body"]["Data"]["DAY_ENERGY"]["Value"]
      
      day_energy_kwh = (day_energy / 1000)
      sh.bungalow.pv.day_energy(day_energy_kwh)
      Wie müsste ich den Code ändern damit es auch mit sh.tools.fetch_url funktioniert ?

      LG Markus

      Kommentar


        #4
        Hallo,

        der URL-Aufruf sieht so aus, als ob das fetch_url kann.


        Wo das Problem ist bzw. was Du ändern musst, kann Dir nur Dein Debuglog sagen.

        Bis bald

        Marcus

        Kommentar


          #5
          Ist zwar schon älter, aber gibt es da mittlerweile was?

          Kommentar


            #6
            Zitat von chrisi Beitrag anzeigen
            Ist zwar schon älter, aber gibt es da mittlerweile was?
            Ja die folgende logic mit dem Kostal Plugin


            Code:
            #!/usr/bin/env python3
            # queryurl.py
            
            import requests
            import json
            
            def find(element, json):
                keys = element.split('.')
                rv = json
                for key in keys:
                    rv = rv[key]
                return rv
            
            kostal_ip = "192.168.1.26"
            kostal_url = "http://"+kostal_ip+"/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData"
            
            # Map JSON entries to items:
            json2items = {
                'Body.Data.DAY_ENERGY.Value' : 'PV.Fronius.Tagesertrag',
                'Body.Data.PAC.Value'        : 'PV.Fronius.Momentan',
                'Body.Data.YEAR_ENERGY.Value': 'PV.Fronius.Jahresertrag',
                'Body.Data.IDC.Value': 'PV.Fronius.IDC',
                'Body.Data.UDC.Value': 'PV.Fronius.UDC',
                }
            
            # ----------------------------------------
            sample="""{ "Body" : { "Data" : { "DAY_ENERGY" : { "Unit" : "Wh", "Value" : 159.19999999999999 }, "DeviceStatus" : { "ErrorCode" : 0, "LEDColor" : 2, "LEDState" : 0, "MgmtTimerRemainingTime" : -1, "StateToReset" : false, "StatusCode" : 7 }, "FAC" : { "Unit" : "Hz", "Value" : 50 }, "IAC" : { "Unit" : "A", "Value" : 1.2 }, "IDC" : { "Unit" : "A", "Value" : 0.68999999999999995 }, "PAC" : { "Unit" : "W", "Value" : 111 }, "TOTAL_ENERGY" : { "Unit" : "Wh", "Value" : 4552750 }, "UAC" : { "Unit" : "V", "Value" : 237.19999999999999 }, "UDC" : { "Unit" : "V", "Value" : 193.40000000000001 }, "YEAR_ENERGY" : { "Unit" : "Wh", "Value" : 77647.699999999997 } } }, "Head" : { "RequestArguments" : { "DataCollection" : "CommonInverterData", "DeviceClass" : "Inverter", "DeviceId" : "1", "Scope" : "Device" }, "Status" : { "Code" : 0, "Reason" : "", "UserMessage" : "" }, "Timestamp" : "2019-02-07T10:43:11+01:00" } }"""
            
            if kostal_ip:
                logger.debug("Abfragen von {} ".format(kostal_url))
                r = requests.get(kostal_url)
                data = r.json()
            else:
                logger.debug("Keine IP vorhanden, benutze Musterdaten")
                data=json.loads(sample)
            
            for k in json2items:
                try:
                    value = find(k, data)
                    itempath= json2items[k]
                    logger.debug("{} mit Wert {} wird gemappt auf {}".format(k, value, itempath))
                    item = sh.return_item(itempath)
                    if item is not None:
                        item(value)
                    else:
                        logger.debug("Item {} existiert nicht".format(itempath))    
                except KeyError:
                    logger.debug("{} wurde nicht gefunden".format(k))
                except NameError:
                    logger.debug("Item {} konnte nicht zugewiesen werden".format(itempath))
            Gruss Oliver

            Projektleiter Technische Gebäudeausrüstung

            Kommentar


              #7
              Danke
              Du verwendest das Kostal Plugin mit einem Fronius WR?
              Hast du dem WR eine fixe IP verpasst?

              Kommentar

              Lädt...
              X