Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche Plugin für SolarWorld eManager

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

    Suche Plugin für SolarWorld eManager

    Servus Leute,

    ich suche ein Plugin für den eManager von Solarworld. Ich dachte das sich vielleicht ja schon mal jemand damit befasst hat und frag mal nach.

    Alternativ würd ich mich auch um ein paar Tips oder Unterstützung beim erstellen einens solchen Plugins freuen.

    #2
    https://github.com/smarthomeNG/smart...ugin-5-minutes
    https://github.com/smarthomeNG/smart...ki/SmartPlugin

    Auf die Schnelle finde ich nichts zu einer API. Da das Ding aber offenbar nach "Hause funkt" (suntrol myhome) sollte schon was gehen. Beim SunnyPortal der Konkurrenz, kann man bspw via JSON Daten abgreifen, in den AGB wird dies aber oft untersagt.

    Update: offenbar gibts eine lokale Webgui.. Also mal mit Firebug prüfen, wie die ihre Daten bekommt. Das wäre der Ansatzpunkt.
    Zuletzt geändert von psilo; 20.08.2016, 11:48.

    Kommentar


      #3
      Danke psilo für die flotte Antwort!

      ich hab mir das mit dem Firebug sogar schon angeschaut und kann da auch die Werte beobachten. Es sind auch JSON Daten wie du schon erwähnt hast.

      Das heißt ich könnte Lokal über das Netztwerk diese JSON Datensätze abgreifen. Ich werd mal ein Plugin suchen das so was änliches macht und es dann versuchen umzubauen da ich mit Sicherheit nicht von Null anfangen kann. (keine Erfahrung)


      Viele Grüße

      Kommentar


        #4
        Jue nimm das tankerkoenig plugin. da greife ich auch json ab.

        Kommentar


          #5
          Danke für die Info. ich werd es mir mal ansehen auch wenn es nur ab SmarthomeNG funktioniert und nich noch die alte Version auf meinem Raspberry habe. Hab micht vor etwas umzustellen da ich lange genung gebraucht hab bis es überhaupt läuft.

          ich schaue es mir aber mal durch um zu lernen.

          Viele Grüße

          Kommentar


            #6
            naja viel ist jetzt nicht smarthomeNG-spezifisch. nur die paar smartplugin kleinigkeiten.. schau einfach mal.

            wills dir nicht einreden aber ich würde schon über das update nachdenken.. die alte version war einfach zu lange stillgestanden. und aus meiner erfahrung ist das haerteste der knxd/eibd und initial smarthome hinzukriegen. der kern ist ja nicht viel geändert worden.

            Kommentar


              #7
              Servus miteinander,

              hab mich in den letzten Tagen von Grund auf mit Python beschäftigt. Ausser einfache Logiken im SH.py war bei mir bis jetzt nicht viel los. Ich wollte jetzt mal meine bescheidenen Zwischenergebnisse posten.
              Das einzige was ich bis jetzt auf die Reihe bekommen habe ist eine Json-Datei in einen Python String zu verwandeln. Leider hört es dann auch schon auf. eigentlich müsste ich ja nur noch mit SH.py darauf zugreiffen nur wie?

              Code:
              import urllib.request
              import json
              
              geourl = "http://emanager/rest/solarworld/lpvm/powerAndBatteryData"
              
              response = urllib.request.urlopen(geourl)
              content = response.read()
              data = json.loads(content.decode("utf8"))
              print(data)
              print(type(data))
              for i in data:
                  print(i)
              list = json.dumps(data)
              print(list)
              print(type(list))
              rauskommen tut:

              Code:
              {'PowerOut': 0, 'PowerConsumption': 926.9506754534755, 'PowerSelfConsumption': 0, 'StatesOfCharge': {'ModeConverter': 'DISCHARGING', 'WorkCharge': 5160, 'StateOfCharge': 86}, 'PowerIn': 396.8482495774647, 'PowerSelfSupply': 530.1024258760108, 'PowerTotalPV': 0, 'PowerConsumptionMax': {'2016-08-23': 5777.682295454546, '2016-08-24': 5646.413489399598, '2016-08-28': 5764.4676358318675, '2016-08-25': 5422.690553788477, '2016-08-26': 5552.465826460481, '2016-08-22': 5444.103467537193, '2016-08-27': 5670.949108061749}, 'PowerPVPeak': 9900}
              <class 'dict'>
              PowerOut
              PowerConsumption
              PowerSelfConsumption
              StatesOfCharge
              PowerIn
              PowerSelfSupply
              PowerTotalPV
              PowerConsumptionMax
              PowerPVPeak
              {"PowerOut": 0, "PowerConsumption": 926.9506754534755, "PowerSelfConsumption": 0, "StatesOfCharge": {"ModeConverter": "DISCHARGING", "WorkCharge": 5160, "StateOfCharge": 86}, "PowerIn": 396.8482495774647, "PowerSelfSupply": 530.1024258760108, "PowerTotalPV": 0, "PowerConsumptionMax": {"2016-08-23": 5777.682295454546, "2016-08-24": 5646.413489399598, "2016-08-28": 5764.4676358318675, "2016-08-25": 5422.690553788477, "2016-08-26": 5552.465826460481, "2016-08-22": 5444.103467537193, "2016-08-27": 5670.949108061749}, "PowerPVPeak": 9900}
              <class 'str'>
              die print-Befehle sind ja nur zum Test. Der Code ist eigentlich voll kurz.

              Warscheinlich müsste ich unter Python eine Funktion erstellen auf die man dann mit (z.B.) sh.emanager(PowerIn) den Strombezug abfragen kann, oder?


              mfg

              Jürgen

              Kommentar


                #8
                Hallo Leute,

                ich hab mal das Tankerkönig-Plugin umgemodelt und wollte Fragen ob es vom Syntax her passt.
                Sorry ich tu mich echt schwer, wird aber jeden Tag besser.

                ich habs allerdings noch gar nicht richtig ausprobiert bzw bekomms nicht zum laufen

                Hier mal der Code:
                Code:
                import logging
                import requests
                import json
                
                
                
                
                
                class eManager():
                    ALLOW_MULTIINSTANCE = False
                    PLUGIN_VERSION = "0.0.1"
                    _base_url = 'http://eManager/rest/solarworld/lpvm/powerAndBatteryData'
                
                
                
                
                
                    def __init__(self, smarthome):
                        self.logger = logging.getLogger(__name__)
                        self._sh = smarthome
                
                
                
                
                    def run(self):
                        self.alive = True
                
                
                
                
                    def stop(self):
                        self.alive = False
                
                
                
                
                
                    def get_wert(self, id):
                
                
                
                
                        try:
                            response = self._session.get(http://emanager/rest/solarworld/lpvm/powerAndBatteryData)))
                        except Exception as e:
                            self.logger.error("Keine Verbindung zu eManager")
                            return
                        json_obj = response.json()
                        keys = ['PowerSelfSupply', 'PowerOut', 'PowerPVPeak', 'PowerConsumption', 'PowerSelfConsumption', 'PowerTotalPV']
                        #ab hier versteh ich den Code nicht mehr richtg      
                        i = json_obj['station'] # was ist hier die richtige Variable oder ist das nicht wichtig?
                        result_power = {}
                        for key in keys:
                            result_power[key] = i[key]
                
                
                
                
                        return result_power
                es sollte so funktionieren das wenn ich sh.eManager.get_wertl(PowerOut) im meine Item.conf reinschreibe das dann auch der wert bzw Balken erscheint, sollte doch dann gehen,oder?


                ich bin echt für jede Hilfe dankbar
                Zuletzt geändert von Jue; 05.09.2016, 22:13.

                Kommentar


                  #9
                  So Leute,

                  ich hab jetzt ein Plugin fertig. Leider weiß ich nicht genau wie ich es einbinde im meine Items.

                  Mein plugin:
                  Code:
                  import logging
                  import urllib.request
                  import json
                  
                  
                  
                  
                  
                  class eManager():
                      ALLOW_MULTIINSTANCE = False
                      PLUGIN_VERSION = "0.0.1"
                      _base_url = 'http://eManager/rest/solarworld/lpvm/powerAndBatteryData'
                  
                      def __init__(self, smarthome):
                        self.logger = logging.getLogger(__name__)
                        self._sh = smarthome
                  
                      def run(self):
                    ´   self.alive = True
                  
                  ´   def stop(self):
                        self.alive = False
                  
                  def wert(i):
                   geourl = "http://eManager/rest/solarworld/lpvm/powerAndBatteryData"
                   response = urllib.request.urlopen(geourl)
                   content = response.read()
                   data = json.loads(content.decode("utf8")) 
                   #keys = ['PowerSelfSupply', 'PowerOut', 'PowerPVPeak', 'PowerConsumption', 'PowerSelfConsumption', 'PowerTotalPV']
                   ausgabe = data['i']
                   return ausgabe
                  wenn ich also eManager.wert("PowerOut") aufrufe (zumindest auf meinem PC) dann bekomm ich auch was zurück, zwar mit vielen Kommastellen aber das ist jetzt erst mal egal.

                  Ich hab Bei Smarthome.py im Verzeichniss plugins ein Verzeichniss erstellt namens emanager und dort liegt der Code als __init__.py

                  in meine plugin.conf
                  Code:
                  [emanager]
                      class_name = eManager
                      class_path = plugin.emanager
                  eingefügt

                  Nur jetzt geht's nicht weiter wenn ich ein Item in meiner item.conf erstelle wie bekomm ich den Wert da rein? Ich hoffe jemand liest das und hat etwas Zeit mir auf die Sprünge zu helfen.

                  Hab zwar noch andere Probleme zB das Runden der Werte, doch da hab ich schon mal was viel versprechendes gelesen. Das sollte ich selbst auf die Reihe bekommen.
                  Die andere Sache ist der JSON-String der hat "zwei" Reihen das macht mir Probleme:
                  Code:
                  {'PowerPVPeak': 9900, 'PowerSelfConsumption': 0, 'PowerTotalPV': 0, 'PowerIn': 0, 'PowerSelfSupply': 263.30544653550044, 'StatesOfCharge': {'ModeConverter': 'DISCHARGING', 'WorkCharge': 3660, 'StateOfCharge': 61}, 'PowerOut': 0.6945534644995632, 'PowerConsumption': 263.30544653550044, 'PowerConsumptionMax': {'2016-09-09': 4725.838142775557, '2016-09-04': 5098.517402871913, '2016-09-07': 4414.292681060016, '2016-09-10': 522.7730723841048, '2016-09-05': 6009.073047908689, '2016-09-06': 6195.454174512601, '2016-09-08': 4215.911749642754}}
                  263.30544653550044
                  ZB an "StatesOfCharge" komm ich nicht ran. Ich weiß nicht wie ich den dazuhehörenden Wert ausgeben kann. Hab mir schon nen Wolf gegooglet....

                  Danke im Vorraus,

                  Jürgen


                  Kommentar


                    #10
                    für die items: entweder mit logik die mit cycle läuft den items die funktionsergebnisse vom plugin zuweisen.
                    ODER: in der parse_item im plugin auf spezielle items (bzw itemattribute) abfragen. dazu einfach in andere plugins schauen.

                    für json: mit der Requests Bibliothek bspw. so:

                    json_obj = response.json()
                    value=json_obj['StatesOfCharge']['ModeConverter']

                    Kommentar


                      #11
                      Servus, da bin ich wieder.

                      Nachdem ich SmartVisu und Smarthome.py upgedatet habe und alles soweit läuft wollt ich mich wieder um mein Problem kümmern.
                      In der Zwischenzeit hab ich mich dazu entschieden wohl eine Logik zu machen, das Plugin scheint mir zu komplex.

                      die Logik läuft jetzt zum Test alle Minuten:
                      Code:
                      #logic.conf
                      
                      [logic_pv]
                          filename = eman.py
                          crontab = * * * *
                      Code:
                      import urllib.request
                      import logging
                      import json
                      
                      
                      
                      
                      
                      def wert(item):
                       geourl = "http://192.168.0.49/rest/solarworld/lpvm/powerAndBatteryData"
                       response = urllib.request.urlopen(geourl)
                       content = response.read()
                       data = json.loads(content.decode("utf8"))
                       #keys = ['PowerSelfSupply', 'PowerOut', 'PowerPVPeak', 'PowerConsumption', 'PowerSelfConsumption', 'PowerTotalPV']
                       PowerSelfSupply = data['PowerSelfSupply']
                       PowerOut = data['PowerOut']
                       PowerPVPeak = data['PowerPVPeak']
                       PowerConsumption = data['PowerConsumption']
                       PowerSelfConsumption = data['PowerSelfConsumption']
                       PowerIn = data['PowerIn']
                       #{'StatesOfCharge': {'ModeConverter': 'DISCHARGING', 'StateOfCharge': 80, 'WorkCharge': 4800}
                       ausgabe = data['item']
                       ausgabe2 = round(ausgabe)
                       return ausgabe2
                      
                      sh.pv.info.pv.powerselfsupply() = wert(PowerSelfSupply)
                      sh.pv.info.pv.powerout() = wert(PowerOut)
                      sh.pv.info.pv.powerpvpeak() = wert(PowerPVPeak)
                      sh.pv.info.pv.powerconsumption() = wert(PowerConsumption)
                      sh.pv.info.pv.powerselfconsumption() = wert(PowerSelfConsumption)
                      sh.pv.info.pv.powerin() = wert(PowerIn)
                      wenn ich Smarthome im Debugging-mode starte bekomm ich u.a. das:

                      Code:
                        File "/usr/local/smarthome/logics/eman.py", line 25
                          sh.pv.info.pv.powerselfsupply() = wert(PowerSelfSupply)
                      das wäre ein Ausschnitt meiner item.conf

                      Code:
                      [pv]          
                       [[info]]
                        name = PV
                        sv_page = room
                        sv_img = scene_baby.svg
                        [[[pv]]]
                         name = Power
                         sv_widget =  PowerSelfSupply : {{ basic.float('powerselfsupply', 'item.powerselfsupply', 'kW') }} <br> Power Out : {{ basic.float('powerout', 'item.powerout', 'kW') }} <br> Power PV Peak : {{ basic.float('powerpvpeak', 'item.powerpvpeak', 'kW') }} <br> Power Consumption : {{ basic.float('powerconsumption', 'item.powerconsumption', 'kW') }} <br> Power Self Consumption : {{ basic.float('powerselfconsumption', 'item.powerselfconsumption', 'kW') }} <br> Power Out : {{ basic.float('powerout', 'item.powerout', 'kW') }} <br> Power In : {{ basic.float('powerin', 'item.powerin', 'kW') }}
                         [[[[powerselfsupply]]]]
                                          name = power
                                          type = num
                                          visu_act = rw
                         [[[[powerout]]]]
                                          name = powerout
                                          type = num
                                          visu_act = rw
                         [[[[powerpvpeak]]]]
                                          name = powerpvpeak
                                          type = num
                                          visu_act = rw
                         [[[[powerconsumption]]]]
                                          name = powerconsumption
                                          type = num
                                          visu_act = rw
                         [[[[powerselfconsumption]]]]
                                          name = powerselfconsumption
                                          type = num
                                          visu_act = rw
                         [[[[powerin]]]]
                                          name = powerin
                                          type = num
                                          visu_act = rw
                      Da ich in Python und Dergleichen nicht so fit bin (aber ich arbeite daran), bin ich für jede Hilfe dankbar.

                      Danke, Grüße
                      Jürgen

                      Kommentar


                        #12
                        Hi Leute,

                        hab's geschafft ;-) Werte werden übergeben. Habs noch ein Sück vereinfacht:

                        Code:
                        import urllib.request
                        import logging
                        import json
                        
                        
                        
                        geourl = "http://192.168.0.49/rest/solarworld/lpvm/powerAndBatteryData"
                        response = urllib.request.urlopen(geourl)
                        content = response.read()
                        data = json.loads(content.decode("utf8"))
                        #keys = ['PowerSelfSupply', 'PowerOut', 'PowerPVPeak', 'PowerConsumption', 'PowerSelfConsumption', 'PowerTotalPV']
                        PowerSelfSupply = data['PowerSelfSupply']
                        PowerOut = data['PowerOut']
                        PowerPVPeak = data['PowerPVPeak']
                        PowerConsumption = data['PowerConsumption']
                        PowerSelfConsumption = data['PowerSelfConsumption']
                        PowerIn = data['PowerIn']
                        #{'StatesOfCharge': {'ModeConverter': 'DISCHARGING', 'StateOfCharge': 80, 'WorkCharge': 4800}
                        PowerSelfSupplyRound = round(PowerSelfSupply)
                        PowerOutRound = round(PowerOut)
                        PowerPVPeakRound = round(PowerPVPeak)
                        PowerSelfConsumptionRound = round(PowerSelfConsumption)
                        PowerInRound = round(PowerIn)
                        PowerConsumptionRound = round(PowerConsumption)
                        
                        sh.pv.info.pv.powerselfsupply(PowerSelfSupplyRound)
                        sh.pv.info.pv.powerout(PowerOutRound)
                        sh.pv.info.pv.powerpvpeak(PowerPVPeakRound)
                        sh.pv.info.pv.powerconsumption(PowerConsumptionRound)
                        sh.pv.info.pv.powerselfconsumption(PowerSelfConsumptionRound)
                        sh.pv.info.pv.powerin(PowerInRound)
                        ist warscheinlich etwas schlampig aber bin zufrieden

                        Kommentar


                          #13
                          Hallo Jürgen,

                          greife hier Deinen Thread nochmals auf und hoffe, dass Du hier noch aktiv bist. :-)

                          Ich versuche auch gerade an die Daten von meinem Solarworld E-Manager zu kommen (und Sie dann in Edomi zu visualisieren und loggen). Ich werde das mit CURL versuchen und dann die Werte auslesen. Super geholfen hat mir da die Data-URL, die Du benutzt:
                          Denn mit...

                          Code:
                           
                           curl http://192.168.0.49/rest/solarworld/lpvm/powerAndBatteryData
                          ... bekomme ich eigentlich alle Werte, die ich visualisieren will.

                          Meine Frage ist nun, wie Du an die Data-URL gekommen bist? Also wie hast Du "..../rest/solarworld/lpvm/powerAndBatteryData" ermittelt?
                          Hintergrund meiner Frage: Ich habe auf dem EManager auch die Wärmepumpen-Steuerungs-App drauf und steuere damit das Smart-Grid-Signal an meine Brauchwasser-WP. In der WP-App sind dann auch noch ein paar Werte, die ich gerne visualisieren und loggen würde. Allerdings fehlt mir da die Data-URL.

                          Hast Du eine Idee wie ich die ermitteln kann.

                          Viele Grüße

                          Rainer

                          Kommentar


                            #14
                            Servus repoman,

                            ja bin noch aktiv! Aber nicht mehr mit Smarthome-py.

                            Wenn du im Browser die Seite öffnest und dann F12 drückst kommst du in die Entwicklerkonsole, so kannst du solche URLs herausfinden...
                            versuch es mal mit:
                            http://xxx.xxx.xxx.xxx/rest/solarwor...omentaryValues


                            Grüße Jürgen

                            Kommentar


                              #15
                              Hi Jürgen,

                              super. Vielen Dank. Die URL gibt genau die Werte für die WP raus, die ich haben wollte.

                              Auch wenn ich mich damit als (Noch-)NOOB oute: Ich hatte das auch schon mit der F12-Funktion in Chrome und Firefox versucht. Aber die von Dir genannten URLs habe ich da nicht gefunden. Wenn Du magst, hilf mir doch kurz aufs Pferd wo und wie man die da findet.

                              Und natürlich auch TausendDank für die PNs mit dem Code. Habe gerade leider zu wenig Zeit um mich damit auseinander zu setzen und bin, wie schon beschrieben, noch ziemlicher Anfänger was Smarthome angeht. Bislang bin ich froh, dass ich so langsam die ETS halbwegs verstehe und die erste Edomi-Visu online habe. LBS in Edomi werden dann das nächste Lernkapitel sein.

                              Viele Grüße

                              Rainer

                              Kommentar

                              Lädt...
                              X