Ankündigung

Einklappen
Keine Ankündigung bisher.

Entwicklungsthread für das Huawei SUN 2000 Plugin

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

    #46
    Zitat von Onkelandy Beitrag anzeigen
    Nö ich hab keinen Speicher.
    Sowas gibt's noch?

    Zitat von Onkelandy Beitrag anzeigen
    die leer bleiben könnte man in ein emma_storage struct auslagern..?



    Könnte man. Aber ob das wirklich Sinn macht, wäre zu überlegen. Denn aktuell habe ich pro Komponente ein struct gemacht. Das heißt sogar die Akku-Packs bei den Batterie-Speichern als struct. Ich persönlich würde es eher lassen und tendenziell ne optionale Variante mit "Light"-Varianten machen, wo man nur die gängigen Register rein nimmt. Vielleicht könntest du das übernehmen? Also im Prinzip alle vorhanden structs, so filtern, dass da nicht jedes unsinnige Register drin ist. Vielleicht lässt sich das mit irgendwelche Flags, Kommentare oder was auch immer machen....

    Kommentar


      #47
      Leider funktioniert das Exception-Handling nicht, wie gedacht. Merkt man leider auch erst Stunden später. Hat jemand Rat?

      Code:
                              except Exception as e:
                                  self.logger.error(f"inverter_read: Error reading register '{self._read_item_dictionary[item].register}' from {self._host}:{self._port}, slave_id {self._read_item_dictionary[item].slave}: {e}")
                                  # if 'IllegalAddress' occurs the register will be dropped out
                                  if len(e) == 42 and e[27:-1] == 'IllegalAddress':
                                      self.logger.debug(f"inverter_read: register '{self._read_item_dictionary[item].register}' will not be checked anymore")
                                      self._read_item_dictionary.pop(item)​
      e ist halt kein String, sondern eine Exception-Klasse. Laut huawei-solar-lib:

      Code:
      class HuaweiSolarException(Exception):
          """Base class for Huawei Solar exceptions."""​
      
      class ReadException(HuaweiSolarException):
          """Exception reading register from device."""
      
          def __init__(self, *args, modbus_exception_code: int | None = None, **kwargs):
              """Create ReadException."""
              super().__init__(*args, **kwargs)
              self.modbus_exception_code = modbus_exception_code​
      Ansatz wäre jetzt das?

      Code:
      if typeof(e) == 'ReadException' and ?????:
      Ich weiß nicht, wie ich jetzt den Inhalt der Exception, die da lautet "Exception Response(131, 3, IllegalAddress)". Wo finde ich "IllegallAddress"?
      Zuletzt geändert von Cannon; 07.11.2024, 18:34.

      Kommentar


        #48
        Eine einfache Konvertierung mittels str(e) klappt nicht? oder vielleicht sowas if any("IllegalAddress" in str(arg) for arg in e.args):

        Kommentar


          #49
          Zitat von Onkelandy Beitrag anzeigen
          Eine einfache Konvertierung mittels str(e) klappt nicht?
          Ja geht, hatte ich dann auch gemacht und läuft auch. Ist jetzt in meinem github drin. So richtig elegant erscheint mir das aber nicht.

          Zitat von Onkelandy Beitrag anzeigen
          if any("IllegalAddress" in str(arg) for arg in e.args):



          Keine Ahnung. Wir fehlt da ein bisschen das Verständnis, was das überhaupt für ein type ist bzw. wie man da gezielt drauf zugreifen kann.

          Kommentar


            #50
            der zweite Ansatz wäre wohl der Noblere, sofern es klappt. Weiß ich jetzt aber auch nicht.
            Ich hab mal bei der Emma alle Einträge gesammelt, bei denen es bisher kein Update gegeben hat (ich hab nur die Emma und einen Wechselrichter. und ja, Batterie wird schon noch kommen später, hehe...)
            Update kommt vom Plugin, also Register existiert, aber Wert ist halt 0. Kann gut sein, dass das eh so passt..

            inverter_total_absorbed_energy
            state_of_capacity
            backup_time_notification_threshold
            emma_power_control_mode_at_grid_connection_point
            emma_maximum_feed_grid_power_watt
            emma_maximum_feed_grid_power_percent

            Außerdem bleibt das auf 0, ich bleib der Ansicht, dass es sich anbietet, das in ein emma_storage struct auszulagern.
            energy_charged_today
            total_charged_energy
            energy_discharged_today
            total_discharged_energy
            ess_chargeable_energy
            ess_dischargeable_energy
            rated_ess_capacity
            battery_charge_discharge_power
            state_of_capacity
            ess_chargeable_capacity
            ess_dischargeable_capacity
            backup_power_state_of_charge
            energy_charged_this_month
            energy_discharged_this_month


            Komisch ist, dass bei number_of_inverters_found eine 0 eingetragen ist. Aber den Grund werden wir wohl eher nicht erfahren

            Kommentar


              #51
              Die Funktionalität, dass ein Register nicht mehr gelesen wird, wenn es eine "illegal" Response gab, ist aber noch nicht implementiert, oder? Funzt bei mir jedenfalls nicht.

              Kommentar


                #52
                Zitat von Onkelandy Beitrag anzeigen
                Die Funktionalität, dass ein Register nicht mehr gelesen wird, wenn es eine "illegal" Response gab, ist aber noch nicht implementiert, oder? Funzt bei mir jedenfalls nicht.



                Ist implementiert, geht aber nicht wie erwartet. Ich teste noch mal neu. Morgen gibts dann das Update, wenn es geht.

                Kommentar


                  #53
                  Beim Start hab ich etwa noch 30 solche Einträge plugins.huawei_sun2000 Invalid key for sun2000_equipment 'EMMA_BUILT_IN_ENERGY_SENSOR' configured

                  Kommentar


                    #54
                    Zitat von Onkelandy Beitrag anzeigen
                    Beim Start hab ich etwa noch 30 solche Einträge plugins.huawei_sun2000 Invalid key for sun2000_equipment 'EMMA_BUILT_IN_ENERGY_SENSOR' configured


                    Das ist nicht schlimm. Das wird später behoben. Ist auch kein wirkliches Problem. Da sind nur noch die Equipment-Test-Register in der ini eingerichtet.

                    Prio ist erst mal das Problem mit IllegalAdress. Irgendwie funzt das immer noch nicht. Vor allem, dauert das immer 2 Tage, bis man den Fehler feststellt, was allerdings, wenn man so darüber nachdenkt seltsam ist, da das ja dann eine ganze Weile nicht die falsche Adresse war. Vielleicht sollte man das doch erst einmal nicht raus filtern.

                    Kommentar


                      #55
                      Ich habe das Update noch mal hochgeladen. Es scheint jetzt zu funktionieren. Seit Tagen läuft das. Kannst du also gern testen.

                      Kommentar


                        #56
                        Danke, was wäre denn aktuell neu?
                        Ich hab kurz nach dem Start und dann wohl im 5m Rhythmus? noch die Meldung:
                        Dez 12 11:19:25 ERROR plugins.priv_huawei_sun2000 inverter_read: Error reading register 'ENERGY_CHARGED_THIS_MONTH' from 10.0.0.37:502, slave_id 0: Got error while reading from register 30407 with length 2: Exception Response(131, 3, IllegalValue)
                        Dez 12 11:19:25 ERROR plugins.priv_huawei_sun2000 inverter_read: Error reading register 'ENERGY_DISCHARGED_THIS_MONTH' from 10.0.0.37:502, slave_id 0: Got error while reading from register 30409 with length 2: Exception Response(131, 3, IllegalValue)​

                        Wäre nach wie vor dafür, alles mit ess, battery und charge in ein eigenes struct zu stecken. Ansonsten sieht die Sache sehr gut aus, danke!

                        Kommentar


                          #57
                          Zitat von Onkelandy Beitrag anzeigen
                          Danke, was wäre denn aktuell neu?
                          Immer noch das raus werfen der Register mit dem "IllegalAddress" Fehler. Ich habe das ne Weile laufen lassen und festgestellt, dass das nun so geht. Die Fehler kommen dann auch nicht mehr, nachdem sie einmal geworfen wurden.

                          Zitat von Onkelandy Beitrag anzeigen
                          Ich hab kurz nach dem Start und dann wohl im 5m Rhythmus? noch die Meldung:
                          Dez 12 11:19:25 ERROR plugins.priv_huawei_sun2000 inverter_read: Error reading register 'ENERGY_CHARGED_THIS_MONTH' from 10.0.0.37:502, slave_id 0: Got error while reading from register 30407 with length 2: Exception Response(131, 3, IllegalValue)
                          Dez 12 11:19:25 ERROR plugins.priv_huawei_sun2000 inverter_read: Error reading register 'ENERGY_DISCHARGED_THIS_MONTH' from 10.0.0.37:502, slave_id 0: Got error while reading from register 30409 with length 2: Exception Response(131, 3, IllegalValue)​
                          Da scheint irgendwas mit der huawei-solarlib und der Kommunikation mit der Emma nicht zu stimmen. Ist deine Emma auf dem aktuellen Softwarestand? Sonst müsste man warten, bis die nächste Version der huawei-solarlib kommt und hoffen, dass das dann passt. Alternativ bestündige aktuell die Möglichkeit das Item entweder gar nicht so lesen oder die cycle time (für diese Items) noch höher zu setzen.

                          Zitat von Onkelandy Beitrag anzeigen
                          Wäre nach wie vor dafür, alles mit ess, battery und charge in ein eigenes struct zu stecken
                          Möchtest du das machen?

                          Kommentar


                            #58
                            Bitteschön.
                            EMMA ist aktuell, da gab es außer dem initialen Update, das Modbus ermöglichte, kein weiteres mehr - nur für den Inverter, aber das sollte egal sein. Naja, ich leb momentan wohl damit bzw wenn es in einem eigenen struct ist, hab ich kein Prob damit
                            Angehängte Dateien

                            Kommentar


                              #59
                              Cannon aus meiner Sicht könnten wir das plugin dann als "develop" State als PR erstellen?

                              Kommentar


                                #60
                                Zitat von Onkelandy Beitrag anzeigen
                                aus meiner Sicht könnten wir das plugin dann als "develop" State als PR erstellen?




                                Ja, habe ich meiner Meinung nach auch schon mal gemacht .Bei mir läuft es auch sehr stabil (vor allem nach dem Raspi-Upgrade 3B -> 5 + M.2).

                                Kommentar

                                Lädt...
                                X