Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

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