Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Modbus Sentron3200 Node-Red

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Modbus Sentron3200 Node-Red

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      starfish last edited by

      @Fizzo361 , ich habe genau dasselbe Gerät über den Modbus-Adapter mit modbus-tcp an iobroker angebunden. Wenn von Interesse kann ich Dir meine Konfiguration hier einstellen. Ist halt nicht dasselbe wie Nodered, aber es gibt ein paar interessante Skripte von looxer, um die pac3200-Daten auszuwerten.

      1 Reply Last reply Reply Quote 0
      • F
        Fizzo361 last edited by

        Vielen Dank für eure Untersützung,

        ich habe die richtigen Daten bereits ermitteln können, sie lagen bloß in einem "falschem"

        Format vor, so das ich die Daten nicht Interpretieren konnten, ich habe mir dann "um Herr der Daten" zu werden 😉

        ModBus Poll installiert und die Daten nochmals überprüft,

        Meine Daten wie die 17458, 658… sind im NodeRed im Format Signed um Sie Korrekt auszulesen müssen sie

        aber im Float AB CD format umgewandelt werden.

        Und mittels der Tabelle von @Graf konnte ich dann mir die gewollten Register auslesen.

        Also dieser Teil ist somit abgeschlossen.

        Benötige jetzt nur noch eine Funktion im NodeRed die mir die Daten von Signed zu Float AB CD

        umwandelt, dann sollte ich mit meinem Testlauf durch sein,

        habt ihr dazu evtl. Ideen wie ich das umsetzten könnte?

        Vielen Dank

        Fizzo361

        1 Reply Last reply Reply Quote 0
        • S
          starfish last edited by

          Ich vermute, dass Dein Problem mit dem Big-Endian Format zu tun hat, dort wird ein word-swap benötigt, um an weiter verarbeitbare Daten zu kommen. Genau dies macht der iobroker modbus adapter von alleine.

          Als Teaser hier ein screenshot des modbus objekt-baums:
          291_iobroker.admin_3_.png
          dazu brauchst Du nichts weiter zu tun, als den Adapter zu konfigurieren. Wie gesagt, ich verwende auch eine PAC3200.

          1 Reply Last reply Reply Quote 0
          • G
            Garf last edited by

            @Fizzo361:

            Benötige jetzt nur noch eine Funktion im NodeRed die mir die Daten von Signed zu Float AB CD

            umwandelt, dann sollte ich mit meinem Testlauf durch sein,

            habt ihr dazu evtl. Ideen wie ich das umsetzten könnte? `
            Um eine konkrete Idee/Lösung anbieten zu können müsste ich erst einmal verstehen was wie umgewandelt werden muss. Vielleicht hast Du mal ein Beispiel von den beschriebenen Datenformate Signed/Float. Dem Datenblatt hatte ich eigentlich entnommen, dass die Daten bereits als Float vorliegen. Mit dem Funktion Node könnte man z.B. ein Script schreiben und die Daten in das gewünschte Format umwandeln.

            3639_functionnode.jpg

            Garf

            1 Reply Last reply Reply Quote 0
            • F
              Fizzo361 last edited by

              Hey Jungs vielen Dank euch, das ihr dran bleibt an meinem Problem, echt super (Y)

              Ich verwende keinerlei IOBrokrer Adapter oder Co. Ich verwende lediglich einen Raspberry Pi und eine Sentron PAC 3200, die über Ethernet direkt miteinander verbunden sind. Also muss ich die gewünschte Funktionalität irgendwie in meinem Node Red Flow implementieren.

              Danke @Graf ich dachte mir auch schon das ich das wahrscheinlich mit dem Funktion Node bewältigen muss.

              so erhalte ich aktuell die Daten:

              FC 3: read Holing Registers

              Address: 1

              Quantity: 5

              Poll rate: 2 seconds

              IP Modbus Server: 192.168.0.13

              Port: 502

              Unit ID: 1

              [17256,38142,17256,43398,17256]

              Also von Bedeutung sind nur die Spalten 1, 3 und 5 also die Werte 17256,

              wenn ich diese im Modbus Poll umwandle von "Signed" zu "Float AB CD"

              sehen die werte so aus:

              232.174

              –

              232.941

              --

              233.954

              Das sind dann wie schon in der Grafik von @Graf ersichtlich die Spannungen von UL1, UL2 und UL3

              und ich möchte das die Daten im NodeRed nicht im 17256 Format erscheinen sondern direkt als 232 (V) angezeigt werden.

              Habt ihr eine Idee wie dazu dann die NodeRed Funktion aussehen muss?

              Ich habe euch mal meine Modbus Poll Datei hinzugefügt, wenn ihr diese Öffnet und seht ihr eine Tabelle, auf dieser Tabelle klickt ihr oben links, so das alle Zeilen und Spalten markiert sind, dann Rechtsklick und auf Format und wählt dann "Float AB CD" um zurück zu den ursprünglichen Daten zukommen, macht ihr das gleiche nochmals jedoch wählt ihr dann unter Format "Signed" aus, dann seht ihr die Umwandlung von 17256 zu 232.

              Ich wäre euch super dankbar wenn wir gemeinsam eine Lösung finden würden.

              Vielen Dank

              Fizzo361
              3186_mbpoll1-alle-infos.zip

              1 Reply Last reply Reply Quote 0
              • S
                starfish last edited by

                @Fizzo361:

                Ich verwende keinerlei IOBrokrer Adapter oder Co. `
                dann bist Du im iobroker-forum etwas verkehrt - aber verständlich, dass Du den adapter dann nicht verwenden kannst. Vielleicht kann @Garf dennoch helfen …

                ich vermute, dass das Problem mit dem Format Big Endian zusammenhängt, also müssen die Bytes vertauscht werden (MSB<>LSB) und erst dann gewandelt werden - vielleicht hilft das weiter: http://forum.iobroker.net/viewtopic.php ... ian#p13372

                1 Reply Last reply Reply Quote 0
                • G
                  Garf last edited by

                  @starfish:

                  ….dann bist Du im iobroker-forum etwas verkehrt..... ` Dann sind wir aber schon zu Zweit. Ich habe ioBroker zwar mal kurz auf meiner NAS installiert, war halt neugiergig, dann aber nicht weiter benutzt. IoBroker ist unumstritten hochinteressant und absolut klasse, aber man kann sich halt nicht mit 1000 Dingen gleichzeitig beschäftigen. Ich bin hier, weil ich ansonsten kein deutschsprachiges Forum gefunden habe, welches sich mit NodeRed beschäftigt.

                  Jetzt aber zurück zum eigentlichen Problem. So ganz ist mir noch nicht klar, warum man die Floatwerte signed im Modbusgegister ablegt. Wie man die Werte in eine reelle Zahl umwandelt dazu fehlt mir im Moment noch ein Lösungsansatz. Vielleicht finden wir es ja gemeinsam raus. Irgendwer hat den Adapter für ioBroker geschrieben, der könnte es z.B. wissen.

                  @Fizzo361

                  Um die drei Spannungswerte mit NodeRed auslesen zu können, musst Du die ersten sechs Register auslesen. Wobei immer zwei Register den richtigen Wert zurück geben.

                  Der Spannungswert U1 setzt sich somit aus dem signed Floatwert 17256 und 38142 zusammen. Jetzt brauchen wir nur jemand der uns den Weg zeigt wie man den signed Wert in den tatsächlichen Meßwert umrechnet.

                  Garf

                  1 Reply Last reply Reply Quote 0
                  • F
                    Fizzo361 last edited by

                    genau so, bin ich auch auf dieses Forum gestoßen, da es sonst nirgendwo etwas über NodeRed gibt.

                    Ich bin immer noch am tüfteln wie man das Umrechnen kann,

                    ich habe dazu mal eine Tabelle erstellt, damit auch andere User verstehen können wo wir hin wollen 😄

                    Ich teile euch meine Teilergebnisse, gerne mit, sobald welche vorliege 😉

                    Vielen

                    Fizzo361
                    3186_werte.xlsx

                    1 Reply Last reply Reply Quote 0
                    • S
                      starfish last edited by

                      sorry, mit node red kenn ich mich nicht so aus, aber vielleicht hilft dies weiter:

                      https://github.com/ioBroker/ioBroker.modbus

                      da werden auch die Datentypen sehr gut beschrieben - oder mal im code nachschauen.

                      1 Reply Last reply Reply Quote 0
                      • G
                        Garf last edited by

                        @Fizzo361:

                        Ich bin immer noch am tüfteln wie man das Umrechnen kann…. `
                        Und ich habe heute verstanden, wie man den Zahlenwurm wieder entziffert. Das Zauberwort heißt IEEE 754, Umrechnung Gleitkommazahl in IEEE 754. Wenn diese Binärzahl erzeugt wurde, dann kann man nicht mehr stumpf das Zahlengebilde von binär in dezimal umwandeln. Der ursprüngliche Meßwert wird in einem 32 bit Binärwert dargestellt.

                        Bestehend aus 1 bit Vorzeichen, 8 bit Exponent und einer 23 Bit Mantisse.

                        3639_aufbau_ieee754.jpg (Quelle: https://de.wikipedia.org/wiki/IEEE_754)

                        Wie man ein Gleitkommazahl in IEEE754 umwandelt kann man bei Wikipedia nachlesen, oder sich bei Youtube anschauen:

                        https://de.wikipedia.org/wiki/IEEE_754

                        https://www.youtube.com/watch?v=hHpSwBf0DCA

                        https://www.youtube.com/watch?v=KV7f2bX8vfo

                        Der 32 bit Binärwert wird dann in zwei Modbusregister abgelegt und kann dort ausgelesen werden. Die Bezeichnung mit Float AB CD oder CD AB beschreibt in welcher Reihenfolge der 32 bit Binärwert in den beiden Modbusregistern abgelegt wurde. Dafür scheint es keine einheitliche Vereinbarung zu geben.

                        So, ich habe fertig und hoffe als Laie nicht allzuviel falsch ausgedrückt zu haben. Im Prinzip habe ich das System nun verstanden und eben selber einmal auf Papier für den Messwert L1 deines Sentron3200 ausgerechnet. Und was soll ich sagen, es passt soweit. Wie man dies nun in ein Script in NodeRed abbildet, dafür habe ich im Moment noch keine Idee. Mal sehen, ob ich dafür noch Zeit finden werde. (Zur Zeit aber eher unwahrscheinlich.)

                        Mir war jedoch wichtig, als Nichtinformatiker, das Grundprinzip zu verstehen. Dies ist mir heute endlich gelungen. 😉

                        Garf

                        1 Reply Last reply Reply Quote 0
                        • F
                          Fizzo361 last edited by

                          hey danke das werde ich mir morgen mal anschauen, und versuchen auch auf dem Blattpapier zu dem Ergebnis zugelangen,

                          wenn das klappen sollte, bin ich mal auf die Umsetzung in NodeRed gespannt 😄

                          Ich melde mich morgen wieder 😉

                          @ Graf, könntest du evtl. deinen rechen weg uns online zur Verfügung stellen?

                          Vielen Dank

                          Fizzo361

                          1 Reply Last reply Reply Quote 0
                          • G
                            Garf last edited by

                            @Fizzo361:

                            …... bin ich mal auf die Umsetzung in NodeRed gespannt.... 😄 ` Ich bin schon seit gestern dran. Ganz grob betrachtet sieht es für den 1. Wurf gar nicht so schlecht aus. Im Moment suche ich noch eine Lösung um von Binär nach Dezimal umrechnen zu können. Ob eine allgemein brauchbare Lösung dabei heraus kommt, kann ich als Programmierlaie nicht versprechen.

                            Den Rechenweg auf Papier könnte ich sicher einscannen und hochladen. Darin sehe ich jedoch wenig Sinn. Da kommt man auch selber drauf, wenn man meinen Links folgt und dann mal selber macht.

                            Hier das Zwischenergebnis aus NodeRed. Ist aber alles noch im Schritt für Schritt Teststadium.

                            3639_zw_ergebnis.jpg

                            Edit:

                            Jetzt habe ich noch den Binärwert in ein Dezimalzahl umgewandelt und auf zwei Stellen hinter dem Komma eingekürzt. Aber wie bereits geschrieben, ist dies keine finale und fertige Lösung, sondern zeigt nur, dass es machbar wäre. Um zu einem Ergebnis zu kommen habe ich an einigen Stellen Hilfsbrücken eingebaut. Somit also nur eine Teillösung, die aus den beiden Modbuswertegegister für den Messwert L1 wieder eine verständliche Dezimalzahl macht.

                            Sieht dann so aus:

                            3639_testergebnis.jpg

                            Zur Erläuterung:

                            1. string[1] = Vorzeichen

                            2. string[8] = Charakteristik (Exponent)

                            3. string[24] = Mantisse

                            4. number = Messwert L1 in [V]

                            Garf

                            1 Reply Last reply Reply Quote 0
                            • F
                              Fizzo361 last edited by

                              Hey @Graf,

                              das sieht doch schon super aus 😮 :shock: 😉

                              ich verzweifle immer noch etwas beim rechnenweg, aber ich bleibe am ball 😉

                              kannst du evtl. doch deinen rechnenweg einscannen (wenn es nicht zuviel Aufwand ist natürlich) oder deinen NodeRed Flow mir mal

                              zu schicken oder hier posten? würde mir das von dir erarbeitete gern mal anschauen.

                              Vielen Dank

                              Fizzo361

                              1 Reply Last reply Reply Quote 0
                              • G
                                Garf last edited by

                                Hi Fizzo,

                                ich will dich ja nicht entmutigen, aber wenn dir der Rechenweg noch nicht klar geworden ist, dann wird dass wahrscheinlich nichts. Ich kann dir nur raten schau dir die Videos bei Youtube an, die Herren erklären es dort Schritt für Schritt. Besser geht es wirklich nicht. Das Beispiel einfach mitmachen und wenn es verstanden ist dann mit deinen Werten weitermachen. Dies alles macht aber nur Sinn, wenn Du dich mit der Javascriptprogrammierung auskennst, um dann die Funktion-Nodes von NodeRed programmieren zu können. Ich muss da leider passen.

                                Ich habe mich gestern Abend noch einmal intensiver mit deinen Modbus-Zahlenwerten und meinem Flow beschäftigt, dabei sind mir folgende Dinge aufgefallen.

                                1. Der ausgerechnete Wert für L1 kommt nur zustande weil ich mehrmals händisch in den Javascripts eingegriffen habe. Dies bedeutet, dass bei Eingabe der anderen Messwerte (L2, L3, L1-L2 usw.) aus deiner Exceltabelle nicht der richtige Wert ausgerechnet wird. Damit hatte ich aber auch nicht gerechnet. D.h. hier müsste programmiertechnisch noch erhebliche nachgebessert werden. Für jemanden der sich in der Javascriptprogrammierung sehr gut auskennt ist es sicher ein Kinderspiel. Ich muss da leider aus zeitgünden und fehlenden Programmierkenntnisse passen. Ich weiß nicht wie es um deine Programmierkenntnisse steht.

                                2. Das Zahlenpaar für L2 kann nach meinem Verständnis nicht stimmen. Für L2 steht im zweiten Modbusregister ein negativer Wert. Die Zahlen müssten eigentlich immer ohne Vorzeichen sein.

                                Mein Schmierpapier mit dem Rechenweg einzuscannen und hier hochzuladen halte ich weiterhin für sinnlos. Selbst ich komme nicht immer auf Anhieb mit den Handaufzeichnungen klar. Da ich nicht immer händisch ein ganzes DINA4 Blatt ausfüllen wollte, habe ich gestern damit begonnen den Rechenweg in deiner Exceldatei abzubilden. Mich würde nämlich noch interessieren, warum in den Modbusregister Negativwerte stehen, bzw. was dort gemäß dem erlenten Rechenweg stehen müsste.

                                Garf

                                1 Reply Last reply Reply Quote 0
                                • G
                                  Garf last edited by

                                  Hallo Fizzo361,

                                  bist du mit deinem Projekt für die Umrechnung weiter gekommen?

                                  Ich musste mich auch noch einmal mit dem Thema auseinander setzen. Ich habe mir Ende letzten Jahres noch div. Wasserzähler mit Impulsausgang einbauen lassen. Jetzt stand ich vor dem Problem die Zählerstände per Modbus übertragen zu können. Im Moment reicht ein 16 bit Register noch aus, aber spätestens bei einem Zählerstand von größer 65535 wäre dann Schluß. Da die Zähler auch den Literverbrauch anzeigen, müssen ebenfalls noch drei Nachkommastellen mit verarbeitet werden. Und schon war ich wieder Mitten drin im Thema IEEE 754 und der Konvertierung von Fließpunktzahlen. Allerdings muss ich die Messdaten im 32 bit Format in die Modbus Register schreiben und nicht auslesen.

                                  Dies habe ich heute soweit hinbekommen. Für ganz große Zahlen auch im 64 bit Format verteilt auf vier Modbus Register. Ganz so einfach wie gedacht war es nicht, denn die Programmierung in Javascript hat schon so seine Tücken. Aber nun funktioniert es soweit erst einmal fehlerfrei.

                                  Heute Nachmittag habe ich mich dann noch einmal deinem Auslesproblem gewidmet. Auch hier gab es, Dank Javascript, zwei Stolperstellen zu überwinden. Für das Rückrechnen der binären Nachkommastellen konnte ich keine fertigen Funktionen finden und für das Abrunden der Fließpunktnachkommastellen auf drei Stellen ebenfalls nicht. Hierdurch bedingt ging dann noch der ganze Nachmittag für die Programmierung drauf.

                                  Jetzt scheint aber auch dies fehlerfrei zu funktionieren.

                                  Garf

                                  3639_flow_ieee.jpg 3639_flow_ieee_werte.jpg 3639_flow_ieee_werte2.jpg

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    atelmblcd last edited by

                                    Hallo, hatte ein ähnliches Problem mit einem 16 bit signed float.

                                    Habe die Lösung gepostet siehe Beitrag

                                    16 bit signed Float einlesen über den Node-red Modbus

                                    MfG

                                    Jean

                                    1 Reply Last reply Reply Quote 0
                                    • G
                                      Garf last edited by

                                      @Garf:

                                      Jetzt scheint aber auch dies fehlerfrei zu funktionieren. `
                                      Na ja, so ganz fehlerfrei hat es dann doch nicht funktioniert. Ich lese seit dem Wochenende den Außentemperaturmesswert aus einem Regler ein. Dabei musste ich leider feststellen, dass es mir bei Zahlenwerte < 1 falsche oder gar keine Werte mehr in Node-Red angezeigt wurden. Da musste ich noch einmal ran und im Programm noch so einiges nachbessern.

                                      Jetzt scheint es soweit zu funktionieren.

                                      Aber vielmehr würde mich mal interessieren was User Jean hier http://forum.iobroker.net/viewtopic.php?f=32&t=11518 für eine Javascript-Funktion verwendet.

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        atelmblcd last edited by

                                        Es ist so dass man in deutschsprachigen Foren nichts dazu findet.

                                        Ich habe 2 Tage lang gesucht, und mindestens 16 Stunden damit verbracht, und dabei habe ich immer was übersehen.

                                        Geht man auf diese Webseite steht eigentlich alles da, und auch nichts.

                                        Klaus Lansdorf der Author von node-red-contrib-modbus, hat einem Teilnehmer in englisch sprachigen Forum https://github.com/biancode/node-red-co … /issues/42 geantwortet dass man den Buffer nehmen muss..

                                        biancode commented on 19 Oct 2017 •

                                        see Wiki and you need to know how to work with buffers ...

                                        Have fun!

                                        Unten steht auch wie man 2 16 bit zu einem 32 bit addiert.

                                        Das ist der einzige Hinweis den ich gefunden habe

                                        In diesem Forum https://groups.google.com/forum/#!topic ... t_Y7egwuio und in diesem Forum https://groups.google.com/forum/#!topic ... xl1ZrsSTVQ habe ich zuerst Hinweise gefunden.

                                        Geht man auf die Github Seite von Klaus findet man die Beispiele, jedoch keins mit einem signed Float.

                                        https://github.com/biancode/node-red-contrib-modbus

                                        Das SDM630 enthält jedoch die Antwort. Man muss sich nur den code ansehen.

                                        Iregendwo habe ich dann wieder den entscheidenden Link auf diese Seite gefunden

                                        https://nodejs.org/api/buffer.html#buff ... t_noassert

                                        Kombiniert man alles funktioniert es auf Anhieb, man muss nur drauf kommen und das ist nicht einfach.

                                        Ich habe aber noch einiges installiert ob man das braucht weis ich nicht

                                        npm install node-red-contrib-binary

                                        bei npm install kam ein Fehler, in einem anderen Forum habe ich dann gefunden dass man initialiesieren muur weis aber nicht mehr wo.

                                        stell mal deinen Node rein damit ich ihn importieren kann, ich sehe es mir an.

                                        MfG

                                        Jean

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          marclauer last edited by

                                          Hallo, ich habe ein sehr ähnliches Problem. Ich will von IEEE in Dec umwandeln. Bspw IEEE = 100 sodass der Dec = 17096 ist.

                                          Ich würde mich freuen, wenn mir da jmd ggf einen Quellcode schicken könnte von Node Red, da ich einfach nicht weiter komme. Wäre mega Dankbar.

                                          Cheers Marc

                                          1 Reply Last reply Reply Quote 0
                                          • G
                                            Garf last edited by

                                            @marclauer:

                                            Ich will von IEEE in Dec umwandeln. Bspw IEEE = 100 sodass der Dec = 17096 ist.

                                            I `
                                            Ist das ein konkretes Beispiel, oder nur irgendwelche dahin geschriebene Zahlen.

                                            Die Dezimalzahl 17096 (Integerwert) würde in IEEE-754 den Wert 01000110100001011001000000000000 ergeben.

                                            Konverter: https://www.h-schmidt.net/FloatConverter/IEEE754de.html

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            685
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            25
                                            6223
                                            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