Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: SMAModbus (zu Auslesen eines SMA-Wechselrichters über speedwire/modbus)

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

    #61
    Zitat von Sipple Beitrag anzeigen
    Der Effekt war, dass ich nach jedem 2. Abfrageintervall wieder den falschen Wert im Item hatte
    Wie hast Du das item und das eval denn formuliert?

    Zitat von Sipple Beitrag anzeigen
    Der 2er ist das Problem. Wenn ich mich nicht irre, ist das die Anzahl der zusammenhängenden 16bit Register
    Da schau ich noch mal rein

    Zitat von Sipple Beitrag anzeigen
    dass die Registerbeschreibung von SMA meines Wechselrichters (aller Wechselrichter?) fehlerhaft ist. Siehe Bild.
    Das STR32 in der SMA Doku macht keinen Sinn deshalb habe ich STR08, STR12, STR16 und STR32 eingeführt. Die Länge musst Du aus der Spalte vorher nehmen.
    In pymodbus gibt es nur eine String Decode Funktion, die die Länge übergeben bekommen muss. Deshalb die unterschiedlichen Typen, die ich definiert habe.
    Viele Grüße
    Martin

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

    Kommentar


      #62
      Zitat von Msinn Beitrag anzeigen
      Wie hast Du das item und das eval denn formuliert?
      So ähnlich wie in Post #13 von Klab gezeigt. In verschiedenen Varianten. Manchmal passierte gar nichts und der falsche Wert war weiterhin im Item, manchmal eben dieses Toggle Verhalten. Hab's dann gelöscht und eben diese Anpassung im Plugin eingebaut, da hat es sofort funktioniert. Braucht man schon nicht bei jedem Item drüber nachdenken, ob und wenn ja welcher unsinnige Wert kommt und diesen jedesmal mit einem eval korrigieren.

      Zitat von Msinn Beitrag anzeigen
      Das STR32 in der SMA Doku macht keinen Sinn deshalb habe ich STR08, STR12, STR16 und STR32 eingeführt. Die Länge musst Du aus der Spalte vorher nehmen.
      In pymodbus gibt es nur eine String Decode Funktion, die die Länge übergeben bekommen muss. Deshalb die unterschiedlichen Typen, die ich definiert habe.
      Ok, also ist das universell und wenn jemand tatsächlich den 12 Register langen String bräuchte (Nameplate.Location), müsste man nur noch zwei weitere Zeilen für STR24 einfügen. Verstanden. Wo ich noch unsicher bin ist das Verhältnis Registerlänge zu Stringlänge. Ich verstehe das so, dass ein Modbus Register 16bit breit ist, also zwei UTF-8 Zeichen enthält (zumindest bis 7f Hex in der UTF-8 Tabelle). Wenn die Registerlänge mit z.B. 16 angegeben wird, ist das ein STR32 und KEIN STR16, richtig?

      Kommentar


        #63
        Ich habe gerade die v1.5.1 gepusht. Veränderungen:
        - Anzahl zu lesender Register wird gesetzt.
        - bei S32 wird -2147483648 als 0 interpretiert

        Bei den Strings bin ich am schwimmen. Ich muss die Anzahl der zulesenden Register angeben. Soweit klar (das habe ich im Moment aus STR08, STR12, STR16 abgeleitet. Allerdings möchte pymodbus in decode_string(size=1) nochmal die Size angegeben haben, wobei mir nicht ganz klar ist wieso und ob dort die Größe in Characters oder in Registern angegeben werden soll. Das könnte im Moment noch falsch sein.
        Viele Grüße
        Martin

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

        Kommentar


          #64
          Alles klar, ich schau es mir an und teste was geht wenn ich dazu komme. Mal sehen, was passiert und was man daraus dann ableiten kann.

          Kommentar


            #65
            Also, getestet:

            Bei den Strings ist das z.B. so: 8 Modbus Register entsprechen STR16, also ein String mit 16 Zeichen, somit 2 Zeichen pro Modbus Register
            Beim Einlesen also die Anzahl der Register angeben, so wie in der Modbus Register Beschreibung von SMA in der Spalte "Anzahl zusammenhängender SMA Register" angegeben.
            Die Spalte "Datentyp SMA" ignorieren, die ist in dem Fall fast komplett falsch oder irreführend. STRxx ist einfach die doppelte Zahl zu lesender Register.

            Beispiel: IP Adresse des Wechselrichters. 8 Register ab Adresse 31017, ist ein STR16. Beim Dekodieren muss also STR16 mit size=16 dekodiert werden. Usw.

            In der ganzen Beschreibung habe ich nur 8, 12 und 16 zusammenhängende Register für Strings gefunden, entsprechend STR16, STR24 und STR32 und selbst die dort angegebenen Registeradressen funktionieren nicht alle, weil der Wechselrichter sie gar nicht kennt (obwohl dokumentiert). Es funktionieren nur die Adressen mit 3xxxx Nummern. Kann aber bei anderen Wechselrichtern von SMA anders sein.

            So habe ich das im Plugin Code nun eingebaut und das tut's - fast...

            Ich bekomme noch folgenden Fehler:

            Code:
            2021-04-29 12:36:32 WARNING lib.smarthome.main -------------------- SmartHomeNG restarting, initiated by admin interface --------------------
            2021-04-29 12:37:10 WARNING lib.smarthome.main -------------------- Init SmartHomeNG 1.8.2.master (5c3f6d20) --------------------
            2021-04-29 12:37:10 WARNING lib.smarthome.main Running in Python interpreter 'v3.7.3 final', from directory /usr/local/smarthome
            2021-04-29 12:37:10 WARNING lib.smarthome.main - on Linux-5.10.17-v7+-armv7l-with-debian-10.9 (pid=32354)
            2021-04-29 12:37:10 WARNING lib.smarthome.main - Nutze Feiertage für Land 'DE', Provinz 'BY', benutzerdefinierte(r) Feiertag(e) nicht definiert
            2021-04-29 12:37:20 WARNING lib.smarthome.main -------------------- SmartHomeNG initialization finished --------------------
            2021-04-29 12:37:35 WARNING lib.item.item Item SB15.IP: value "b'192.168.178.26\x00\x00'" does not match type str. Via sma_mb smamb_register
            2021-04-29 12:37:35 WARNING lib.item.item Item SB15.Mask: value "b'255.255.255.0\x00\x00\x00'" does not match type str. Via sma_mb smamb_register
            2021-04-29 12:37:35 WARNING lib.item.item Item SB15.GWIP: value "b'192.168.178.1\x00\x00\x00'" does not match type str. Via sma_mb smamb_register
            2021-04-29 12:37:35 WARNING lib.item.item Item SB15.DNSIP: value "b'192.168.178.1\x00\x00\x00'" does not match type str. Via sma_mb smamb_register
            Die Items sind so definiert:

            Code:
            # SB15.yaml
            SB15:
                IP:
                    type: str
                    smamb_register: 31017
                    smamb_datatype: STR16
                Mask:
                    type: str
                    smamb_register: 31025
                    smamb_datatype: STR16
                GWIP:
                    type: str
                    smamb_register: 31033
                    smamb_datatype: STR16
                DNSIP:
                    type: str
                    smamb_register: 31041
                    smamb_datatype: STR16
            Wenn man sich die Warnings anschaut, passt es eigentlich, man sieht die IP Adressen ja. IP im Klartext mit aufgefüllten 0-Bytes. Die Items müssen doch str sein, was sonst?
            Wahrscheinlich (hoffentlich) ne Kleinigkeit.

            Anbei noch der angepasste Plugin Code, gezippt (den U32 Überlauf habe ich auch gleich noch eingebaut)

            SMA_MB.zip .

            Kommentar


              #66
              Zitat von Sipple Beitrag anzeigen
              Beispiel: IP Adresse des Wechselrichters. 8 Register ab Adresse 31017, ist ein STR16. Beim Dekodieren muss also STR16 mit size=16 dekodiert werden. Usw.
              Gedacht ist das as STR08 (da 8 Register). Das ist näher an der SMA Doku, in der keine 16 für die Länge auftaucht. Ich muss nur noch ändern, dass bei STR08 16 Zeichen, bei STR12 24 Zeichen und bei STR16 32 Zeichen dekodiert werden.

              Zitat von Sipple Beitrag anzeigen
              h bekomme noch folgenden Fehler
              Ok, da kommt ein Byte Array statt eines Strings zurück. Das muss ich noch umwandeln.
              Außerdem muss ich die Null-Chars am Ende entfernen (aber das macht es auch einfacher, dann kann ich da einen zu langen String decoden, da er ja Null-terminiert ist.
              Zuletzt geändert von Msinn; 29.04.2021, 13:39.
              Viele Grüße
              Martin

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

              Kommentar


                #67
                Ich habe gerade die v1.5.2 gepusht. Nun sollten die Strings funktionieren.

                Ich habe die Konfig Doku noch angepasst, um die Konfig klarer zu machen: https://www.smarthomeng.de/dev/user/...ig/sma_mb.html
                Viele Grüße
                Martin

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

                Kommentar


                  #68
                  Schade, dass ich (wieso auch immer?) mit Ignoranz bestraft werde.
                  Nur als Hinweis: Es reicht nicht aus, nur "Registeradresse SMA" und "Datentyp SMA" anzugeben, auch die "Anzahl der zusammenhängender SMA Register" muss mitgegeben werden, sonst kommen falsche Werte ... aber wen interessierts. Schönes Wochenende.

                  Kommentar


                    #69
                    Nun, wenn du soviel Wert darauf legst, nicht ignoriert zu werden, dann schreibe ich gerne etwas zu deinem Kommentar.
                    Ich entschuldige mich im Namen aller für dieses Vergehen.

                    In diesem Thread ging es halt um ein anderes Plugin und die Arbeit daran war schon im Gange, bis du dich gemeldet hast, und es war halt auch schon im Develop Zweig. Deins nicht.
                    Du wertest auch die unitid aus. Gute Idee, ist dann aber während der Laufzeit auch fix. String Register scheinen gar nicht ausgewertet zu werden. Hätte also auch noch Arbeit erfordert. Mitten in der Entwicklung an einem Plugin abzubrechen und dann auf ein anderes Plugin umzusteigen, ist halt so eine Sache. Man kann es halt nicht immer allen recht machen.

                    Selbstverständlich wird die Anzahl der zusammenhängenden Register berücksichtigt. Das hättest du nur ein wenig weiter oben lesen können.

                    Ebenso berücksichtigt werden unsinnige Werte (in deinem Plugin auch?), die z.B. nachts auftreten, weil SMA alle Bits einiger Register auf 1 setzt und man dadurch z.B. rund -2,15 Gigawatt Leistung im Item und daher z.B. in der DB und einem Plot stehen hat. Bei völliger Dunkelheit produziert mein SMA Wechselrichter also fast soviel negative Energie für zwei Fluxkompensatoren um DeLoreans mit 88m/h nach 1955 zu schießen.

                    Und jetzt auch ein schönes Wochenende

                    Kommentar


                      #70
                      Msinn

                      Läuft wie es soll. Nur eine Kleinigkeit habe ich noch eingefügt.
                      Ab Zeile 211, für U32, den Wert 4294967295 ebenfalls auf 0 gesetzt.

                      user_doc.rst ein wenig erweitert, noch ein String Beispiel in die Readme eingefügt.
                      Das Webinterface ist übrigens Gold wert.

                      Screenshot 2021-04-30 102326.png

                      sma_mb.zip

                      Kommentar


                        #71
                        Habt ihr eine aktuelle Beschreibung der SMA Register Map? Wisst ihr ob die bei allen SMA Wechselrichtern gleich ist?
                        Ich habe einen STP15000 und einen STP3000. Beim großen WR bekomme ich auf Register 30535 den Tagesertrag raus. Beim Kleinen NaN bzw. 4294967295=0xFFFFFFFF.
                        Zapft ihr Narren der König hat Durst

                        Kommentar


                          #72
                          Ist nicht bei allen gleich, weil nicht alle WR alle Register liefern. Hier mal der Link zum großen


                          https://www.sma.de/produkte/solar-we...l-25000tl.html

                          Dort unter Downloads und dann Hintergrundwissen findest du die Modbusbeschreibung. Analog schaust halt noch beim kleinen ob die gleich sind.
                          Trotzdem kann es dann sein, dass der nicht alle Register benutzt.
                          Wenn aber FFFFFFFF kam, wann hast du das getestet? War es nachts, aber schon nach Mitternacht? Dann ist der Wert "normal". Erst nach Sonnenaufgang, wenn der WR tatsächlich produziert, kommt ein sinnvoller Wert.
                          SMA hat bei der Modbus Beschreibung noch einige Luft nach oben.
                          Zuletzt geändert von Sipple; 02.05.2021, 15:26.

                          Kommentar


                            #73

                            Zitat von Sipple Beitrag anzeigen
                            SMA hat bei der Modbus Beschreibung noch einige Luft nach oben.
                            Hi. Danke! Ja die Doku ist mies. Auch die Sunspec Register habe ich nicht kapiert.

                            Problem ist, ich hab jetzt mehrere Sachen auf einmal probiert. Was glaube ich geholfen hat war ein Firmwareupdate auf der kleinen Büchse.


                            Angehängte Dateien
                            Zapft ihr Narren der König hat Durst

                            Kommentar


                              #74
                              SMA und Sunspec geht auch nicht gleichzeitig, wenn ich das richtig verstanden habe. SMA verwendet unitid 3 und Sunspec unitid 126.

                              Kommentar

                              Lädt...
                              X