Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Modbus adapter

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Modbus adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Klamm 0 @Glasfaser last edited by Klamm 0

      @glasfaser
      Nein ich glaube du hast meine Frage nicht verstanden.
      Ich möchte nicht rausfinden welche Register es gibt (dafür habe ich die Dokumentation des Zählers und da steht alles drin)
      Der Master (Wechselrichter) Fragt bereits ein Register ab
      Direkt auf der RS485 Leitung sieht das dann so aus:
      01 03 00 0B 00 01 F5 C8
      ------------------^^^^^ crc
      ------------^^^^^------ anzahl der zu lesenden Register
      ------^^^^^------------ Startadresse
      ---^^------------------ Funktionscode (03 read holding register)
      ^^--------------------- GeräteID

      Der Waveshare übersetzt das dann in TCP und schickt es an den iobroker.
      Hier habe ich das Holdingregister 300012 auch bereits angelegt
      55e7eb19-2dcc-4db3-bcad-b6224883cbaa-grafik.png

      Die Anfrage scheint auch im iobroker anzukommen. Hier gibts aber dann den Fehler:
      FC3 request outside register boundaries: from 11, len 1. Expected max address 0

      Was sich für mich danach anhört als hätte man versucht ein nicht vorhandenes Register abzufragen.
      Meine Frage ist also: welches register wurde ausgelesen? (bzw. versucht) was dann zu dem Fehler geführt hat.
      evtl. übersetzt der Waveshare ja schwachsinn und das Register 5331896 (wild auf dem Numpad rumgedrückt) wird abgefragt.

      1 Reply Last reply Reply Quote 0
      • K
        klassisch Most Active @Klamm 0 last edited by

        Wenn ich das richtig verstanden habe hast auch du den Zähler und nutzt den IOBroker als Master um Werte vom Zähler zu erfragen.

        Ja, genau. geht auch mit mehreren dieser Zähler

        In meinem Fall ist der WR aber der Master und der IOBroker müsste der Slave sein.

        Sorry, das hatte ich nicht verstanden oder überlesen. Diesen Fall hatte ich noch nicht und kann dazu leider auch nichts sagen. Mir ist auch unklar, welche Daten der ioBroker dem WR per Modbus bereit stellen sollte.

        Wie gesagt, beim Suchen der Adressen hat mir das etwas angestaubte Programm QModMaster geholfen, weil die Adressen und Werte stur in Bin, Dec oder Hex anzeigt. Dem ioBroker Modbus-Adapter vermochte ich diese Informationen nicht zu entlocken. Der Autor von QModMaster verweist auf seiner Sourceforge Seite auf seinen Modbus Slave SW PyModSlave
        https://sourceforge.net/projects/pymodslave/

        Vielleich hilft das weiter?

        Nachtrag: Stelle ich auf mehrere ID´s und RTU over TCP, dann bleibt der Adapter in gelb stehen (not connected)

        Bei mir war es so, daß nur EINER der Kommunikationspartner die Übersetzung RTU over TCP vornehmen durfte. Wenn beide oder keiner diese Translarion vornahmen hat es nicht funktioniert.

        1 Reply Last reply Reply Quote 0
        • Glasfaser
          Glasfaser @Klamm 0 last edited by

          @klamm-0 sagte in Modbus adapter:

          Habe mir das mal alles durchgelesen (teilweise nur überflogen)

          Schlecht ... dann hättest du das erstmal gemacht :

          Vorschlag ... teste erstmal damit :
          https://forum.iobroker.net/topic/51804/erledigt-modbusfrage-mit-waveshare-rs485-to-eth-b/28

          K 1 Reply Last reply Reply Quote 0
          • K
            Klamm 0 @Glasfaser last edited by

            @klassisch said in Modbus adapter:

            Mir ist auch unklar, welche Daten der ioBroker dem WR per Modbus bereit stellen sollte.

            Normalerweise fragt der WR am Zähler Leistung, Strom, Spannung etc. ab.
            Ich habe aber einen SMA Zähler und will mir nicht noch einen weiteren Zähler einsetz sondern die Werte des SMA nutzen und diese dem WR bereitstellen wenn er die entsprechenden Register abfragt.

            @klassisch said in Modbus adapter:

            https://sourceforge.net/projects/pymodslave/

            Vielleich hilft das weiter?

            Habe ich mir angesehen aber leider nicht viel verstanden 🙄

            @glasfaser said in Modbus adapter:

            @klamm-0 sagte in Modbus adapter:

            Habe mir das mal alles durchgelesen (teilweise nur überflogen)

            Schlecht ... dann hättest du das erstmal gemacht :

            Vorschlag ... teste erstmal damit :
            https://forum.iobroker.net/topic/51804/erledigt-modbusfrage-mit-waveshare-rs485-to-eth-b/28

            Meinst du den Radzio? oder meinst du die Instanz neu aufsetzen?

            der Radzio! ist ja ein MASTER und genau den brauche ich nicht.
            Die Instanz habe ich schon neu aufgesetzt. Hat nicht geholfen.

            Glasfaser 1 Reply Last reply Reply Quote 0
            • Glasfaser
              Glasfaser @Klamm 0 last edited by Glasfaser

              @klamm-0

              Ich meine eine Ausleseprogramm wie auch ..... geschrieben hat .
              Erstmal unabhängig von ioBroker testen.

              @klassisch sagte in Modbus adapter:
              verweist auf seiner Sourceforge Seite auf seinen Modbus Slave SW PyModSlave
              https://sourceforge.net/projects/pymodslave/

              1 Reply Last reply Reply Quote 0
              • K
                Klamm 0 last edited by

                Habe die Instanz auf dem iobroker jetzt so eigestellt gelassen (TCP Slave) und die Objekte mit Daten gefüllt.
                Habe versucht die dann mit radzio auszulesen. Ich weiß nicht ob es eine Radzio oder Modbus Beschränkung ist aber es können nur Register bis 65535 genutzt werden.

                Wenn ich im Modbus Adapter 300002 anlege (eine Adresse die ich nachher auch brauche), dann erhalte ich die oben genannte Fehlermeldung.

                Ich werde mal noch ein paar Sachen mit Alias bzw. ohne Versuchen und mich mal morgen im Laufe des Tages erneut dazu melden.

                Hilfreich wäre es, wenn ich im Log sehen könnte welches Register gelesen wurde bzw. versucht wird zu lesen.
                Ist das irgendwie möglich?

                Glasfaser 1 Reply Last reply Reply Quote 0
                • Glasfaser
                  Glasfaser @Klamm 0 last edited by Glasfaser

                  @klamm-0 sagte in Modbus adapter:

                  Wenn ich im Modbus Adapter 300002 anlege

                  so eine lange Registeradresse kenne ich nicht, wo hast du die her ! und deshalb kommt bei dir :

                  request outside register boundaries: from 11, len 1. Expected max address 0

                  Beispiel , von mir :

                  b83a9493-e182-4a08-b0aa-faf8e79e283b-grafik.png

                  f6436ad5-fef6-4d0b-ad6c-f0b116d708b7-grafik.png

                  2da3803c-0ad5-49f5-8ed2-6f0169d44dae-grafik.png

                  K 1 Reply Last reply Reply Quote 0
                  • K
                    Klamm 0 @Glasfaser last edited by

                    @glasfaser
                    Die Register habe ich aus der Dokumentation des EM24. Hier mal ein paar Beispiele:

                    6dd22d96-2f93-4aaa-9b50-8a01295f1501-grafik.png

                    wenn ich in Radzio einen Wert größer als 65535 eingebe, wird einfach wieder vor vorne begonnen zu zählen.
                    65536 ist also quasi wieder 0.
                    Ich vermute der Iobroker Adapter nutzt die Zahl die wirklich reinkommt. Gibts eine Modbus Schnittstellenbeschreibung in der steht was gemacht werden soll wenn das abgefragte Register größer ist als FFFF? Bzw. gibts eine vorgabe bis wohin die Registeradressen gehen dürfen?

                    b2824cd1-f343-42e9-85c3-3bd4dd3a8bc2-grafik.png

                    Glasfaser 2 Replies Last reply Reply Quote 0
                    • Glasfaser
                      Glasfaser @Klamm 0 last edited by Glasfaser

                      @klamm-0

                      nimm mal Holding-Register in der Instanz ( kein ALIAS ) , dann 40001 mit int32 , wenn nichts kommt dann das Register rauf oder runter +1 / oder -1
                      Also 40000 oder 40002

                      K 1 Reply Last reply Reply Quote 0
                      • K
                        klassisch Most Active last edited by

                        Oder physical Address und ohne alias, falls noch nicht getestet

                        Adressen wie 30019 hat mein SDM auch. Aber wie gesagt, da habe ich ja eine Master-Instanz und keine Slave Instanz.

                        1 Reply Last reply Reply Quote 0
                        • Glasfaser
                          Glasfaser @Klamm 0 last edited by Glasfaser

                          @klamm-0 sagte in Modbus adapter:

                          Dokumentation des EM24

                          Siehe mal in der Suche ...

                          bzw. hier :

                          https://forum.iobroker.net/topic/47991/modbus-zähler-einbinden-carlo-gavazzi-em24-lan?_=1658208815961

                          1 Reply Last reply Reply Quote 0
                          • K
                            Klamm 0 @Glasfaser last edited by Klamm 0

                            @glasfaser said in Modbus adapter:

                            @klamm-0

                            nimm mal Holding-Register in der Instanz ( kein ALIAS ) , dann 40001 mit int32 , wenn nichts kommt dann das Register rauf oder runter +1 / oder -1
                            Also 40000 oder 40002

                            Wenn ich das mache bekomme ich immer die Fehlermeldung. Egal ob mit oder ohne Alias. Auch wenn ich beim Holdingregister kleinere Registeradressen vergebe (40 zb.) bekomme ich immer die Fehlermeldung.
                            Input Register funktioniert über radzio sofort.
                            59430712-1683-43f5-9a82-c42a26747726-grafik.png

                            @glasfaser said in Modbus adapter:

                            @klamm-0 sagte in Modbus adapter:

                            Dokumentation des EM24

                            Siehe mal in der Suche ...

                            bzw. hier :

                            https://forum.iobroker.net/topic/47991/modbus-zähler-einbinden-carlo-gavazzi-em24-lan?_=1658208815961

                            Auch hier geht es darum das der Zähler vorhanden ist und ausgelesen werden soll. Ich will aber den Zähler simulieren.
                            Das heißt ich mache den ioBroker zum Slave, lege die Register an und fülle diese mit Daten.
                            Wenn mein Wechselrichter dann auf diese Daten zugreifen will (wie er es beim Zähler auch tun würde), dann soll ioBroker die Werte rausgeben. Anscheinend funktioniert das als Slave nicht wenn die Inputregister größer sind als 65535.
                            Das könnte daran liegen dass Radzio aus 300001 die 37857 macht oder daran dass der Modbus adapter aus der 300001 nicht die 37857 macht. Ich kenne hierzu halt nicht den Soll
                            ab4ca4cb-fd44-4802-9d75-8f226879cb5b-grafik.png

                            Ich denke also entweder wird aus dem Beispiel RS485 Telegramm 03 00 0B als Adresse genommen (was dann ja deutlich über 35565 liegt) oder der Waveshare übersetzt ganz groben Unfug.

                            Mir sagt es leider nichts aber hier mal ein tcpdump vom raspberry (iobroker).
                            IP 170 ist der Waveshare und 166 der Raspberry
                            Hier ist es GeräteID 3, Funktionscode 3, Register 0100 (dezimal 256) was man im ersten Päckchen auch zum Ende hin sieht.
                            Vielleicht sieht man daran welche Registeradresse lt. Modbusadapter gelesen werden soll (was dann mit FC3 nicht gemacht wird)

                            09:22:55.558539 IP 192.168.100.170.4197 > 192.168.100.166.4196: Flags [P.], seq 1305343477:1305343489, ack 1863987640, win 3000, length 12
                            	0x0000:  e45f 0115 89f8 2861 98ea ccaf 0800 4500
                            	0x0010:  0034 0d70 0000 4006 22b3 c0a8 64aa c0a8
                            	0x0020:  64a6 1065 1064 4dcd f5f5 6f1a 31b8 5018
                            	0x0030:  0bb8 3028 0000 0126 1eb0 0006 0303 0100
                            	0x0040:  0001
                            
                            09:22:55.558598 IP 192.168.100.166.4196 > 192.168.100.170.4197: Flags [.], ack 1305343489, win 64228, length 0
                            	0x0000:  2861 98ea ccaf e45f 0115 89f8 0800 4500
                            	0x0010:  0028 3781 4000 4006 b8ad c0a8 64a6 c0a8
                            	0x0020:  64aa 1064 1065 6f1a 31b8 4dcd f601 5010
                            	0x0030:  fae4 4abc 0000
                            
                            09:22:55.762428 IP 192.168.100.170.4197 > 192.168.100.166.4196: Flags [.], ack 10, win 3000, length 0
                            	0x0000:  e45f 0115 89f8 2861 98ea ccaf 0800 4500
                            	0x0010:  0028 0d71 0000 4006 22be c0a8 64aa c0a8
                            	0x0020:  64a6 1065 1064 4dcd f601 6f1a 31c1 5010
                            	0x0030:  0bb8 5407 0000 0126 3432 0020
                            
                            09:22:55.664385 IP 192.168.100.166.4196 > 192.168.100.170.4197: Flags [P.], seq 0:9, ack 1, win 64228, length 9
                            	0x0000:  2861 98ea ccaf e45f 0115 89f8 0800 4500
                            	0x0010:  0031 3782 4000 4006 b8a3 c0a8 64a6 c0a8
                            	0x0020:  64aa 1064 1065 6f1a 31b8 4dcd f601 5018
                            	0x0030:  fae4 4ac5 0000 0126 1eb0 0003 0383 02
                            

                            Hier die passende Fehlermeldung aus dem ioboker:
                            6d21f50b-1b4f-4417-9fbe-f2bb5b4498f0-grafik.png

                            Wenn die Zeitstempel alle passen, dann scheint es auf das erste Telegramm hin einen Fehler zu geben.
                            Und auf das zweite wird etwas geantwortet (was das zweite Telegramm sein soll weiß ich nicht.)

                            EDIT: Ich habe im inputregister natürlich Adressen angelegt (250-260) und gefüllt mit 1,2,3 bis 11
                            Als Antwort hätte ich also idealerweise
                            03 03 01 XX CRC
                            ^^ Gerät
                            ---^^ Funktion
                            ------^^ bytes transfered

                            für XX dann eine der Zahlen zwischen 1 und 11,
                            CRC dementsprechend.

                            Glasfaser 1 Reply Last reply Reply Quote 0
                            • Glasfaser
                              Glasfaser @Klamm 0 last edited by

                              @klamm-0 sagte in Modbus adapter:

                              Ich will aber den Zähler simulieren.

                              Warum hast du das nicht das ganz am Anfang deiner Anfrage hier im Thread geschrieben .

                              Bzw. eventuell habe ich es auch überlesen ... nach deinen Angaben !?

                              @klassisch verstehst du was er dann möchte !?

                              K K 2 Replies Last reply Reply Quote 0
                              • K
                                Klamm 0 @Glasfaser last edited by

                                @glasfaser
                                Also wörtlich habe ich es nicht geschrieben aber ich fand ich habe es gut erklärt.
                                Sonst würde ich den IObroker ja auch nicht als Slave haben wollen sondern als Master.

                                1 Reply Last reply Reply Quote 0
                                • K
                                  klassisch Most Active @Glasfaser last edited by klassisch

                                  @klassisch verstehst du was er dann möchte !?

                                  Der Spur nach schon. Aber leider habe ich das noch nie gemacht und kann deshalb nicht wirklich helfen, wie ich oben geschrieben habe. Ich hatte es anfangs auch nicht kapiert.
                                  Mein Verständnis:

                                  • Er hat einen Wechselrichter, der einen Zähler (wohl den Carlo Gavazzi EM24) erwartet. Der EM24 arbeitet ja auch mit Victrons zusammen.
                                  • Der Wechselrichter ist Master und will den EM24 per Modbus RTU via TCP abfragen
                                  • Den EM24 gibt es aber nicht. Die benötigten Daten sind aber bereits auf dem ioBroker vorhanden - woher auch immer
                                  • ioBroker soll jetzt Slave sein und dem Wechselrichter einen EM24 vorspielen und ihm die auf dem ioBroker vorhandenen Daten nach Aufforderung zuspielen
                                  K 1 Reply Last reply Reply Quote 0
                                  • K
                                    Klamm 0 @klassisch last edited by Klamm 0

                                    Genau so ist es.
                                    Die Frage wäre jetzt ob ich irgendwie/irgendwo sehen kann welche Abfrage zu einem Fehler geführt hat. Möglichst genau mit Teilnehmer X hat Y Bytes von Register XYZ abgefragt.
                                    Bin davon ausgegangen, dass ich das im Log mit einstellung Silly sehen kann (ist aber nicht so) oder ob es eine Protokollbeschreibung von Modbus allgemein gibt und ob da drinne steht was passiert wenn die Registerzieladresse größer ist als 65535.

                                    Die beötigten Daten sind übrigens schon durch einen Sunny Home Manager 2.0 auf dem ioBroker vorhanden.

                                    bzgl. Modbusbeschreibung. Nach ein bisschen mehr googlen ist klar, dass es maximal FFFF = 65535 Register gibt.
                                    Registeradressen darüber sind nicht möglich. Dass da also ein Fehler im Log steht ist absolut richtig. Schön wäre es, wenn ich sehen könnte warum.

                                    K 1 Reply Last reply Reply Quote 0
                                    • K
                                      klassisch Most Active @Klamm 0 last edited by

                                      @klamm-0 Sorry, das einizige, was ich dazu sagen kann ist, daß ich noch nie "silly" benutzt habe, sondern immer nur "debug". Wirst Du aber auch schon getestet haben.
                                      Was dann meiner Meinung nach bleibt, ist ein Ticket in Github
                                      Das Szenario ist durchaus interessant. So könnte man z.B. unter Umständen auch eine vorhandene "moderne Meßeinrichtung" als Wurzelzähler verwenden oder irgendenen anderen (z.B. SDM72), wenn der Carlo Gavazzi nicht verfügbar ist.
                                      Der Rest der Anlage funktioniert dann halt nur bestimmungsgemäß, solange ioBroker läuft....

                                      K 1 Reply Last reply Reply Quote 0
                                      • K
                                        Klamm 0 @klassisch last edited by

                                        Habe ein Issue in github angelegt.

                                        Vermute nach einigen weiteren recherchen aber eher, dass Funktionscode 3 nicht funktioniert wenn der IObroker der Slave ist.

                                        K 1 Reply Last reply Reply Quote 0
                                        • K
                                          klassisch Most Active @Klamm 0 last edited by

                                          @klamm-0 vielen Dank, bin mal gespant, was dabei herauskommt

                                          1 Reply Last reply Reply Quote 0
                                          • K
                                            Klamm 0 last edited by

                                            Die Lösung stand übrigens im Issue 204.

                                            Wenn der Adapter als Slave konfiguriert ist und die Holdingregister abgefragt werden sollen, dann muss ein haken in das Feld poll / Abfrage rein. Damit gehts dann.

                                            Morgen kann ich mich also dran setzten und Alle Holdingregister des Zählers anlegen.

                                            M 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            615
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            modbus modbus adapter
                                            140
                                            970
                                            301652
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo