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

    Entwicklungsthread für das Huawei SUN 2000 Plugin

    Hallo zusammen,
    ich habe begonnen für die Huawei-Wechselrichter ein Plugin zu schreiben. Es ist noch in einem recht frühen Stadium. Viele Sachen funktionieren schon. Das Web-Interface ist aber noch nicht wirklich begonnen. Auch die Doku steht noch aus.

    Zu finden ist es hier:
    https://github.com/CannonRS/plugins/tree/develop/huawei_sun2000

    Systemvora
    ussetzungen:
    Da das Plugin auf die huawei-solar-lib aufsetzt ist Python 3.10 mindestens Voraussetzung. Unter SmartHomeNG 1.9.5 wird Python 3.10 nicht offiziell unterstützt. Bei mir läuft mein gesamtes System allerdings problemlos mit Python 3.10.13.

    Das Plugin ist grundsätzlich multiinstanzfähig. Der Betrieb mehrerer verbundener Wechselrichter funktioniert derzeit allerdings nicht. Das heißt es kann nur euf einen Wechselrichter zugegriffen werden.

    Installation:
    Einfach ins plugin-Verzeichnis kopieren und in der plugin.yaml entsprechend die Parameter eintragen:

    huawei_sun2000:
    plugin_name: huawei_sun2000
    *instance: wr_haus
    host: <IP4-Adresse>
    *port: 502
    *slave: 16
    *cycle: 300

    Die mit Sternchen markierten Parameter sind optional. Angegeben sind hier die Standardwerte.

    Die Einbindung der Items folgt am Besten per Item-structs, siehe hier:

    Code:
    Zentral:
        Energie:
            Photovoltaik:
                SUN2000_WR_Haus:
                    struct: huawei_sun2000.inverter
                    instance: wr_haus
                SUN2000_Meter:
                    struct: huawei_sun2000.meter
                    instance: wr_haus
                SUN2000_Storage:
                    struct: huawei_sun2000.storage
                    instance: wr_haus
                    unit_1:
                        struct: huawei_sun2000.storage_unit_1
                        instance: wr_haus
                        battery_pack_1:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_1
                            instance: wr_haus
                        battery_pack_2:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_2
                            instance: wr_haus
                        battery_pack_3:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_3
                            instance: wr_haus
    Weitere Informationen:
    Die Battery-Packs und Battery-Units werden nur dann ausgelesen, wenn sie vorhanden sind. Das prüft das Plugin. Zudem kann für jedes Register eine eigene Cycle-Zeit festgelegt werden, die von der Plugin-Cycle-Zeit abweicht. Infos dazu finden sich in der plugin.yaml.

    Bekannte Fehler:
    Manchmal funktioniert plötzlich der Modbus-Zugriff auf den Wechselrichter nicht mehr. Bisher ist das nicht nachvollziehbar, ggf. wäre da auch Feedback schön, falls jemand das Problem auch hat oder auch nicht.

    #2
    Nachdem ich das nun mit dem asynchronen Methoden hinbekommen habe, läuft das ganze jetzt wesentlich stabiler und es können nun mehrere verkettete Wechselrichter ausgelesen werden. In der Regel ist die Multiinstanzfähigkeit nur dann von Nöten, wenn man mehrere separate Wechselrichter hat, die aber nicht miteinander verkettet sind. Das bedeutet, dass die Slaves_id bei jedem Item separat angegeben werden kann. Wenn keine angegebene wird, wird sie vererbt bzw. der Standardwert aus der Plugin-Konfiguration verwendet. Und so kann man das dann (ohne Multiinstanz) einbinden:

    Code:
    Zentral:
        Energie:
            Photovoltaik:
                SUN2000_WR_Haus:
                    struct: huawei_sun2000.inverter
                SUN2000_WR_Garage:
                    struct: huawei_sun2000.inverter
                    sun2000_slave: 1
                SUN2000_Meter:
                    struct: huawei_sun2000.meter
                SUN2000_Storage:
                    struct: huawei_sun2000.storage
                    unit_1:
                        struct: huawei_sun2000.storage_unit_1
                        battery_pack_1:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_1
                        battery_pack_2:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_2
                        battery_pack_3:
                            struct: huawei_sun2000.storage_unit_1_battery_pack_3
    zu beachten ist hier, dass der SUN2000_WR_Garage eine separate Slave_id hat.

    Darüber hinaus kann man in der plugin.yaml separate cyle-Zeiten pro Item einstellen, was den Hintergrund hat, dass da nicht so viel gelesen werden muss, denn der Huawei lässt sich dafür reichlich Zeit.

    Als nächstes folgt dann die Dokumentation und das Web-Interface.

    Dazu die Frage: Was sollte im WebInterface zu sehen sein?

    Kommentar


      #3
      Ich habe noch mal ein Update eingestellt, auch wenn offensichtlich keiner einen Huawei-Wechselrichter hat. Oder eben kein Python 3.10, was ja auch noch nicht offiziell von SHNG unterstützt wird.

      Das Schreiben von Registern funktioniert nun auch. Zudem habe ich noch einige weitere Register zugefügt.
      Zuletzt geändert von Cannon; 09.12.2023, 13:35.

      Kommentar


        #4
        Zitat von Cannon Beitrag anzeigen
        Ich habe noch mal ein Update eingestellt, auch wenn offensichtlich keiner einen Huawei-Wechselrichter hat.
        doch doch.. und großes Interesse an deinem Plugin

        jedoch aktuell noch andere größere shNG-Baustellen

        Außerdem scheue ich die systemseitige Veränderung bezgl. Python. Habe Angst, etwas kaputt zu machen und dann läuft nichts mehr.

        Kommentar


          #5
          Bei mir wird es demnächst ernst. Dann teste ich gerne und vielleicht schafft es das Plugin dann ins offizielle Repo..

          Kommentar


            #6
            Zitat von Onkelandy Beitrag anzeigen
            mir wird es demnächst ernst
            Die PV steht schon? Wenn ja, Gratulation!

            Zitat von Onkelandy Beitrag anzeigen
            Dann teste ich gerne und vielleicht schafft es das Plugin dann ins offizielle Repo
            Vielleicht willst du auch noch ein paar Sachen ergänzen/korrigieren.

            Ich nutze das Plugin jetzt und es läuft für mich super. Es gibt allerdings ein paar Dinge, die noch nicht ganz optimal sind:
            • Das Schreiben von Registern funktioniert nicht so richtig. Vermutlich deshalb, weil auch das Schreiben über das Web-Interface sehr unzuverlässig läuft. Da gibt es immer wieder Meldungen, dass das gerade nicht geht, weil was ausgelastet ist oder so. Man müsste also wahrscheinlich immer mal wieder prüfen, ob der geschriebene Wert auch drin ist und wenn das nicht geschehen ist noch mal schreiben.
            • Das WebInterface fehlt komplett. Ehrlich gesagt, habe ich damit noch nichts gemacht und so richtig nutze ich das auch nicht.

            Kommentar


              #7
              Vielleicht kann mich beim plugin noch jemand unterstützen. Es fehlen noch ein paar Sachen bzw. funktionieren nicht:
              • Das Schreiben in Registern geht irgendwie nicht. Es gibt keine Fehlermeldung, aber es kommt nichts am Ziel an. Ich habe das jetzt mehrfach mit dem Batteriespeicher probiert. Dennoch keien Änderung.
              • Einige Register müssten noch irgendwie konvertiert werden. Das sind insbesondere Register, die Listen haben. Da habe ich bisher noch keine optimale Lösung für gefunden.
              • Web-Interface fehlt.

              Kommentar


                #8
                Ich muss leider einen anderen Weg gehen, das Plugin funzt bei mir nicht. Bei mir wird es über Modbus gehen müssen. Werde da dann wohl selbst noch ein Plugin dazu schreiben, wenn ich mal dazu komme und gerne berichten, ob das klappt.

                Kommentar


                  #9
                  Zitat von Onkelandy Beitrag anzeigen
                  Ich muss leider einen anderen Weg gehen, das Plugin funzt bei mir nicht. Bei mir wird es über Modbus gehen müssen.
                  Läuft doch über Modbus. Was geht denn nicht? Vielleicht kann ich helfen?

                  Kommentar


                    #10
                    Klar, stimmt.. hatte ich falsch im Kopf.
                    Hatte dir auf gitter geschrieben.
                    Problem ist das huawei_solar, das kommt mit meiner EMMA nicht klar. Vielleicht inzwischen. Aber irgendwie wäre es mir sympathischer, direkt per Modbus zu interagieren ohne ein weiteres Pythonmodul.

                    Kommentar


                      #11
                      Warum das Rad neu erfinden.
                      Das wird dann letztendlich doch ein huawei_solar2...
                      Verbesser das doch lieber so, dass es kompatibel ist.

                      Kommentar


                        #12
                        Zitat von Onkelandy Beitrag anzeigen
                        Hatte dir auf gitter geschrieben
                        Ja ich habe es jetzt gesehen und die Unterhaltung akzeptiert. Das Gitter ist mir aber ein bisschen suspekt. Erinnert mich an die Chat-Systeme in den frühen Neunzigern. ;-)

                        Zitat von Onkelandy Beitrag anzeigen
                        Problem ist das huawei_solar, das kommt mit meiner EMMA nicht klar. Vielleicht inzwischen. Aber irgendwie wäre es mir sympathischer, direkt per Modbus zu interagieren ohne ein weiteres Pythonmodul.


                        Den Gedanken hatte ich zuerst auch. Allerdings muss man sagen, dass es eine Menge Arbeit wäre die ganzen Register in SmartHomeNG zu bringen. Und es sind wirklich sehr viele. Zudem ist der WR sehr träge und damit sind die asynchronen Bibliotheken wirklich gut geeignet. Auch das müsste man dann irgendwie nach programmieren. Mit einem fertigen Python-Modul ist es wesentlich leichter. Deshalb denke ich, macht es Sinn zu schauen, wo das Problem liegt. Denn es kann ja durchaus sein, dass das es mit EMMA noch nicht ging. EMMA gibt es ja auch erst seit ein paar Monaten.

                        Aktuell getestet wurde nur mit dem SmartDongle, also weder mit dem SmartLogger, noch mit EMMA.

                        Die ersten Fragen zur Einrichtung wären:
                        • Ist Modbus TCP in EMMA aktiviert?
                        • Ist im Plugin die richtige Modbus-Adresse des Wechselrichters eingestellt?

                        Kommentar


                          #13
                          Soda, Verbindung klappt, wenn ich Slave ID auf 0 setze.
                          Problem aktuell ist:
                          plugins.huawei_sun2000 inverter_read: Error reading register 'PN' from 10.0.0.37:502, slave_id 0: Got error while reading from register 30025 with length 10: Exception Response(131, 3, IllegalValue)

                          Va. ist das Prob, dass danach keine anderen Werte mehr gefüllt werden. Das müsste also im Plugin imho abgefangen werden.

                          Kommentar


                            #14
                            Zitat von Onkelandy Beitrag anzeigen
                            Soda, Verbindung klappt, wenn ich Slave ID auf 0 setze.
                            Aber ist das auch die Slave_ID des Wechselrichters? Das solltest du prüfen. Standard sollte eigentlich 16 sein. Das kann man in den Einstellungen des Huawei-Portals beim Wechselrichter prüfen. Ich denke da wird das Problem liegen. Eine Verbindung klappt auch auf anderen Slave-Ids, auch wenn es dann Lesefehler gibt.

                            Die ersten beiden Register die gelesen werden sind model_name und serial_number. Werden die dann korrekt angezeigt in einem Item? Erst danach kommt dann die PN (Register 300025), die bei dir nicht gelesen werden kann. Durch das asynchrone Protokoll lassen sich die Lesefehler aber nicht immer exakt dem richtigen Register zuordnen, weil die verzögert ankommen.

                            Kommentar


                              #15
                              Genau model und serial werden korrekt gelesen und ins item geschrieben

                              Kommentar

                              Lädt...
                              X