Ankündigung

Einklappen
Keine Ankündigung bisher.

Anbindung Wechselrichter Huawei SUN2000 (SUN2000-3-10KTL-M1)

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

    #16
    Zitat von henfri Beitrag anzeigen
    Siehe Post 5
    Ja schon zu lange her.,... ;-)

    Kommentar


      #17
      Ich habs mal gestetet. Das funktioniert ganz gut soweit. Es wird allerdings etwas fummelig, wenn man mehrere WR hat und vor allem, wenn man dann noch die Batterie und den Smart Power Sensor auslesen will. Da muss man dann definieren, wo der genau dran hängt. Hier mal ein Beispiel:

      Code:
      from huawei_solar import AsyncHuaweiSolar, register_names as rn
      import asyncio
      
      async def test_huaweisolar():
          slave_id = 16
          client = await AsyncHuaweiSolar.create("192.168.1.7", 502, slave_id)
          result = await client.get(rn.NB_PV_STRINGS, slave_id)
          logger.info('Number of PV strings: {}'.format(result.value))
          results = await client.get_multiple([rn.LINE_VOLTAGE_A_B, rn.LINE_VOLTAGE_B_C, rn.LINE_VOLTAGE_C_A], slave_id)
          logger.info('A-B voltage: {}, B-C voltage:  {}, C-A voltage:  {}'.format(results[0].value, results[1].value, results[2].value))
          results = await client.get_multiple([rn.MODEL_NAME, rn.SERIAL_NUMBER, rn.MODEL_ID], slave_id)
          logger.info('Modell-Name: {}, Seriennummer: {}, Modell-ID: {}'.format(results[0].value, results[1].value, results[2].value))
          results = await client.get_multiple([rn.STORAGE_UNIT_1_STATE_OF_CAPACITY, rn.STORAGE_UNIT_1_BATTERY_TEMPERATURE], slave_id)
          logger.info('Batterie Kapazität: {}, Batterie Temperatur: {}'.format(results[0].value, results[1].value))
          results = await client.get_multiple([rn.ACTIVE_GRID_A_POWER, rn.ACTIVE_GRID_B_POWER, rn.ACTIVE_GRID_C_POWER], slave_id)
          logger.info('Meter Power A: {}, Meter Power B: {}, Meter Power C: {}'.format(results[0].value, results[1].value, results[2].value))
          await client.stop()
      
      asyncio.run(test_huaweisolar())
      IP-Adresse, Port und Slave-ID müsst ihr euch aus den EInstellungen im Wechselrichter raus suchen. Die Slave-ID ist unterschiedlich pro WR. Bei mir hängt der WR mit SmartDongle im Netzwerk. Der 2. WR ist nur per RS485 verbunden und hat kein Netzwerk, wird aber eben über die andere Slave-Id gefunden.

      Kommentar


        #18
        Ich bin schon recht weit gekommen gewesen und konnte auch im kommenden Plugin zumindest schon mal die Daten des WR auslesen. Allerdings gab es immer wieder Verbindungsabbrüche, sodass ich die huawei-solar-lib mal aktualisiert habe. Nun bekomme ich aber einen merkwürdigen Fehler, den ich nicht wirklich lösen kann. Auch die Suche im Netz führte zwar zu Ergebnissen, aber dennoch nicht zur entscheidenden Lösung. Das heißt selbst die "simple" Logik geht jetzt nicht mehr:

        Code:
        2023-07-23  14:39:54 ERROR    logics.test         In der Logik ist ein Fehler aufgetreten:
           Logik 'test', Datei '/usr/lib/python3.9/asyncio/events.py', Zeile 642
           function get_event_loop(), Exception: There is no current event loop in thread 'logics.test'.​
        Wie kann ich das im obigen Beispiel fixen?

        Kommentar


          #19
          Der Kontext in dem Logiken laufen, hört auf zu existieren wenn die Logik endet. Damit wird auch die in asyncio.run() implizit erzeugte eventloop beendet.

          Du könntest versuchen explizit eine eventloop erzeugen und diese im logic Objekt ablegen, damit sie die das Ende der Logik Ausführung überlebt.

          Alternativ könntest Du versuchen eine nie endende Logik zu erzeugen, damit der Kontext erhalten bleibt.

          Insgesamt ist die Nutzung von asyncio in einer Logik aus oben genannten Grünen problematisch (weshalb ich es auch noch nie probiert habe).
          Viele Grüße
          Martin

          There is no cloud. It's only someone else's computer.

          Kommentar


            #20
            Nachvollziehbar. Ich habe doch noch in den Package der lib was gefunden. Zum testen. Damit geht es wahrscheinlich auch in der Logik:

            Code:
            loop = asyncio.new_event_loop()
            async def test_single(name):
                hs = await AsyncHuaweiSolar.create("192.168.1.7", 502, slave_id)
                logger.info(await hs.get(name))
                await hs.stop()
            
            loop.run_until_complete(test_single("model_name"))​
            Wahrscheinlich deshalb, weil ich es noch nicht testen kann. Es kommt mit der neuen lib immer wieder ein andere Fehler:

            Code:
            2023-07-23  17:14:01 ERROR    logics.test         In der Logik ist ein Fehler aufgetreten:
               Logik 'test', Datei '/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py', Zeile 78
               function AsyncHuaweiSolar(), Exception: unsupported operand type(s) for |: 'type' and 'NoneType'​
            Der verweist auf die lib:

            Code:
                _reconnect_task: asyncio.Task | None = None
            In der alten ist das aber genauso drin und geht. Dennoch ist mir nicht klar, was die Anweisung überhaupt macht.

            Kommentar


              #21
              Ich komme leider nicht weiter, ohne das Problem zu lösen. Hat jemand einen Tipp? Das steht im Log:

              Code:
              2023-09-05  09:29:07 ERROR    lib.plugin          Plugin 'huawei_sun2000' exception during import of __init__.py: unsupported operand type(s) for |: 'type' and 'NoneType'
              Traceback (most recent call last):
                File "/usr/local/smarthome/lib/plugin.py", line 571, in __init__
                  exec("import {0}".format(classpath))
                File "<string>", line 1, in <module>
                File "/usr/local/smarthome/plugins/huawei_sun2000/__init__.py", line 33, in <module>
                  from huawei_solar import AsyncHuaweiSolar, register_names as rn
                File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/__init__.py", line 6, in <module>
                  from .bridge import HuaweiSolarBridge  # noqa
                File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/bridge.py", line 16, in <module>
                  from .huawei_solar import DEFAULT_BAUDRATE, DEFAULT_SLAVE, DEFAULT_TCP_PORT, AsyncHuaweiSolar, Result
                File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py", line 75, in <module>
                  class AsyncHuaweiSolar:
                File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py", line 78, in AsyncHuaweiSolar
                  _reconnect_task: asyncio.Task | None = None
              TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'​
              Das bezieht sich schon auf den Code in der lib, welches die Exception auslöst.

              Code:
               _reconnect_task: asyncio.Task | None = None
              Ich kenn mich ein wenig mit Python aus, aber eber nicht genug, um diese Anweisung überhaupt zu verstehen. Das mit dem Doppelpunkt ist mir unklar und mit dem None = None genauso.

              Andererseits stelkt sich die Frage, wieso die lib mit SmartHomeNG nicht funktioniert, woanders sollte sie ja laufen. Vor allem, weil die ältere Version der lib an der Stelle läuft. Der Fehler wird wahrscheinlich woanders sein oder?
              Zuletzt geändert von Cannon; 05.09.2023, 08:48.

              Kommentar


                #22
                Ich glaube ich habe das Problem gefunden. Es ist Python 3.10 erforderlich. SmartHomeNG unterstützt aktuell aber nur Python 3.9. Damit ist das Plugind erzeit unmöglich oder?

                Kommentar


                  #23
                  Heho gibt es da Neuigkeiten?

                  Man könnte inzwischen ja auch über die solarfusion api gehen, siehe
                  https://pypi.org/project/fusion-solar-py/
                  und https://forum.huawei.com/enterprise/...13868771979264

                  statt smartmeter und dongle kommt jetzt ja die EMMA, das wird aber vermutlich nicht viel ändern. Das knx Gerät hat niemand im Einsatz?

                  Kommentar


                    #24
                    Zitat von Onkelandy Beitrag anzeigen
                    Heho gibt es da Neuigkeiten?
                    Mein Plugin läuft bei mir schon mehrere Monate: https://knx-user-forum.de/forum/supp...un-2000-plugin

                    Zitat von Onkelandy Beitrag anzeigen
                    Man könnte inzwischen ja auch über die solarfusion api gehen
                    Ging bei mir irgendwie nicht.

                    Zitat von Onkelandy Beitrag anzeigen
                    Das knx Gerät hat niemand im Einsatz?
                    Nee das kann leider nur einen einzigen WR anbinden und dann auch nicht mit Dongle, glaube ich. Also irgendwie hatte mir das nicht zugesagt.

                    Kommentar


                      #25
                      Hallo,

                      Ich würde gerne über den Dongle per Modbus den Huawei mit dem Gira X1 auslesen. Hat da jemand mit Erfahrung?

                      Ich verwende den Modbus Baustein von Gira. Bekomme aber immer Fehler 11.

                      Vielleicht hat hier jemand schon Erfahrung damit.

                      Grüße
                      René

                      Kommentar

                      Lädt...
                      X