Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. 16 bit signed Float einlesen über den Node-red Modbus

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    893

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

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

Scheduled Pinned Locked Moved Skripten / Logik
67 Posts 5 Posters 14.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    JXA
    wrote on last edited by
    #41

    Hallo Graf,

    danke für den Hinweis!

    Hatte ich mit keinem Gedanken mehr daran gedacht…

    Und jetzt funktioniert es!!!!

    Danke für DEINE (Eure) Hilfe!
    5860_working.png

    1 Reply Last reply
    0
    • J Offline
      J Offline
      JXA
      wrote on last edited by
      #42

      Hier noch die Funktion…...
      5860_swap_working.png

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pitu61
        wrote on last edited by
        #43

        das ist ja Wahnsinn,

        was ihr hier zu dem Thema abliefert, ich bin begeistert, nun versuche ich mich

        damit auch zu befassen, bin jedoch wirklich auf diesem Gebiet ein Noob ;)

        Ich komme schon gar nicht so weit wie ihr…

        wenn ich die 32bit function von euch übernehme also:

        msg.payload.buffer.readFloatLE(0,1.2,3)

        erhalte ich folgende fehlermeldung:

        TypeError: Cannot read property 'readFloatLE' of undefined

        ist das eine zusätzliche Lib die ich übersehen habe, oder warum nimmt er meinem

        Code nicht an?

        Verwende einen Raspi mit Node Red drauf.

        Vielen Dank

        Pitu61

        1 Reply Last reply
        0
        • A Offline
          A Offline
          atelmblcd
          wrote on last edited by
          #44

          @pitu61:

          msg.payload.buffer.readFloatLE(0,1.2,3) `

          du hast ein Punkt zwischen 1.2 stehen es muss (0,1,2,3) sein und nicht vergessen die Funktion unten anzuknÜpfen damit du an die Buffer kommst.

          Ober wird kein Buffer ausgegeben.

          MfG

          Jean

          1 Reply Last reply
          0
          • G Offline
            G Offline
            Garf
            wrote on last edited by
            #45

            @atelmblcd:

            Ober wird kein Buffer ausgegeben. `
            Donnerwetter, gute erkannt. Ist mir gar nicht so direkt aufgeallen.

            Ich habe mich vielmehr gefragt was will er überhaupt wo und in welchem Format auslesen. Integer- oder Flioatwert, Big Endian oder Littel Endian usw.

            Aber vielleicht ist es ja schon genau dieser kleine Tippfehler gewesen.

            Aber schön, dass du hier wieder etwas gepostet hast, ich hatte deine Wortmeldungen in den letzten Tagen schon vermisst.

            1 Reply Last reply
            0
            • A Offline
              A Offline
              atelmblcd
              wrote on last edited by
              #46

              Ich bin am Hausbauen, und die Handwerker haben diese Woche wieder angefangen zu arbeiten, da kann ich nicht immer online sein.

              Ich habe noch eine Methode gefunden.

              return [{ payload: msg.payload.buffer.readFloatBE(0,4)},

              { payload: msg.payload.buffer.readFloatBE(0,4) }];

              Habe mal den Modbussimulator hergenommen

              https://sourceforge.net/projects/modrssim/

              Die Wert habe ich aus dem Screenshot Buffer 0002 41a2

              und in die Kolonne +0 41a2 und in der Kolonne +1 0002 in den Simulator eingegeben,

              dann kommt genau der Wert 20,25….. heraus

              Die Klammer ()wird anders ausgewertet bei den Floats wenn ich richtg liege.

              (0,4) 0 ist wo ich anfange zu lesen und 4 die Anzahl

              lese ich z.b 3Stück 32 bit Floats ein und ich will das das 3te 32 bit Float haben so schreibe ich (8,4)

              wenn ich nur ein Float habe kann ich die Klammer sogar leer lassen.

              gebe ich in der Kolonne +0 0002 und in der Kolonne +1 41a2 in den Simulator kommt -2.6157436202396862e-18

              Was komisch ist das es egal ist ob ich LE oder BE angebe die Werte sind immer gleich.

              Ist es ein Fehler im Simulator?

              Man müsste testen ob das obengenannte Beispiel an dem x320 funktioniert.

              Es ist alles so schlecht dokumentiert so dass es nur mit try und error geht, ich hasse das.

              MfG

              Jean

              1 Reply Last reply
              0
              • J Offline
                J Offline
                JXA
                wrote on last edited by
                #47

                Guten Abend!

                Ich habe noch 2 Fragen

                zum Modbus Read

                Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

                z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen...

                Zur Datenanzeige.

                Wie kann ich die Anzahl der angezeigten Stellen einstellen?
                5860_feuchtigkeit.png
                5860_readout.png

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  atelmblcd
                  wrote on last edited by
                  #48

                  Ja kann man, die Werte sollten jedoch nicht zu weit auseinanderliegen weil man sonst sehr grosse Arrays hat.

                  bis 50 dürfte kein Problem sein.

                  Es gibt Modbus Hardware wo ein Limit gesetzt ist, ab einen gewissen Anzahl werden falsche Werte ausgegeben, so steht es jedenfalls in der Anleitung von Klaus ( Authos der Modbus Software) und das sagt er auch in seinem Youtube Video.

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

                  Man muss nur die richtige Array oder Buffer Nummer angeben.

                  MfG

                  Jean

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    atelmblcd
                    wrote on last edited by
                    #49

                    Um die stellen in der Gauge zu limitieren einfach

                    folgendes in der Gauge eingeben

                    {{value | number:1}}

                    eingeben 1 steht für 1 Nachkommastelle 2 für 2 Nachkommastellen usw.

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      JXA
                      wrote on last edited by
                      #50

                      Hallo Jean,

                      danke für deine Antwort!

                      Ich lese diesen Wert als 32Bit float direkt aus.

                      In der Hardware kann ich die Anzahl der Stellen nicht begrenzen.

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        JXA
                        wrote on last edited by
                        #51

                        Hallo atelmblcd,

                        perfect!!

                        Danke!

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          atelmblcd
                          wrote on last edited by
                          #52

                          du ziehst ja die gauge in den float, mit einem Doppelklick kannst du die gauge konfigurieren.

                          es ist das 5 Feld was du abändern must

                          Value Format

                          kopiere die Zeile die ich gepostet habe einfach rein.

                          Wenn du bessere Anzeigen haben willst du sende mir per PN deine Emailadresse ich sende dir dann einen Downloadlink mit den Instrumenten und einer Anleitung wie es installiert wird.

                          Siehe 1 Seite Instrument.pdf was ich eingestellt habe um zu sehen welche Instrumente du dann zur Verfügung hast.

                          MfG

                          jean
                          5726_canvas.png
                          5726_canvas2.png

                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            JXA
                            wrote on last edited by
                            #53

                            Hallo Jean,

                            deine Anzeigen sehen richtig "Cool" aus!

                            Gefällt mir!

                            Hast du meine PN erhalten?

                            Danke!

                            1 Reply Last reply
                            0
                            • J Offline
                              J Offline
                              JXA
                              wrote on last edited by
                              #54

                              Ich habe noch eine Frage

                              zum Modbus Read

                              ****Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

                              z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen..****.

                              Danke!

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                atelmblcd
                                wrote on last edited by
                                #55

                                Wenn du z.b von 272-278 auslesen willst dann gibst du 272 als Adresse an und 6 als Quantity.

                                Leider ist keine Mail als private Nachricht eingetroffen.

                                mfG

                                Jean

                                1 Reply Last reply
                                0
                                • J Offline
                                  J Offline
                                  JXA
                                  wrote on last edited by
                                  #56

                                  Hallo Jean,

                                  soweit ist es klar, wenn ich jedoch noch zusetzlich die Register 528-530 einlesen möchte.

                                  Also 272-278 + 528-530 mit einem FC Read ist das möglich?

                                  Im FC Setup kann ich ja nur eine Range angeben. Als A-B.

                                  Ich probiere es mit der PN noch einmal!

                                  Danke!

                                  1 Reply Last reply
                                  0
                                  • G Offline
                                    G Offline
                                    Garf
                                    wrote on last edited by
                                    #57

                                    @JXA:

                                    ****Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

                                    z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen..****. `
                                    Mit etwas Programmieraufwand könnte ich mir vorstellen, dass man es über das Flex Getter https://www.youtube.com/watch?v=G4p-Af1olo8 , https://flows.nodered.org/node/node-red-contrib-modbus hinbekommen könnte. Aber übersichtlicher wird es dadurch sicher nicht. Ich würde für jeden Registerbereich ein eigenes Read-Node und das Response Node verwenden.

                                    1 Reply Last reply
                                    0
                                    • J Offline
                                      J Offline
                                      JXA
                                      wrote on last edited by
                                      #58

                                      Hallo "Graf",

                                      danke für deine Antwort!

                                      Sicher mit einer einzelnen Abfrage für jeden Block bleibt es übersichtlicher.

                                      Ich frage mich halt wie es mit dem timing aussieht.

                                      Wenn ich für 1 Device 3x FC03 ausführen muss und dann noch die anderen FC1 ;FC2; FC5.

                                      Dachte daher 1x Read FC03 -> alle Register

                                      1x Read FC01 -> alle Register

                                      usw

                                      Hat jemand Erfahrung ab das sauber läuft? (Dauerbetrieb)

                                      Danke.

                                      1 Reply Last reply
                                      0
                                      • G Offline
                                        G Offline
                                        Garf
                                        wrote on last edited by
                                        #59

                                        Ich verstehe immer noch nicht so ganz worauf Du hinaus willst. Jeden Anfrage im Modbusfeld wird nacheinander abgearbeitet. Und dass was Du abfragen willst ist in einer Größenordnung, die man als überschaubar klein bezeichnen kann. Überfordern kann man solche Bussysteme jedoch schnell mit zu klein eingestellten Abtastraten. Darüber sollte man sich im Vorfeld Gedanken machen. Eine Raum- oder Außentemperatur wird sich im Gegensatz zu Betriebszuständen kaum schlagartig verändern. Wenn ich z.B. Temperaturwerte in einem Trend erfasse, so lasse ich nur alle 10-15 Minuten einen Wert aufzeichnen.

                                        Für den Fall, dass Du immer zum gleichen Zeitpunkt z.B. alle FC03 für eine Device auslesen möchtest, so nimmst Du das Modbus Node Flex Getter und schaltest dem ein Funnction und ein Inject Node vor. Wird aber zeitlich kaum anders sein wie mit dem Modbus Read-Node, denn nach einem Deploy werden die Nodes ja zeitgleich neu gestartet.

                                        Garf

                                        1 Reply Last reply
                                        0
                                        • P Offline
                                          P Offline
                                          pitu61
                                          wrote on last edited by
                                          #60

                                          Hallo Forum, nochmals vielen Dank, empfange nun die richtigen Werte ;)

                                          ` > Die Klammer ()wird anders ausgewertet bei den Floats wenn ich richtg liege.

                                          (0,4) 0 ist wo ich anfange zu lesen und 4 die Anzahl

                                          lese ich z.b 3Stück 32 bit Floats ein und ich will das das 3te 32 bit Float haben so schreibe ich (8,4)

                                          wenn ich nur ein Float habe kann ich die Klammer sogar leer lassen. `

                                          jedoch möchte ich noch weitere Register auslesen und habe damit so meine Probleme…

                                          für:

                                          msg.payload = msg.payload.buffer.readFloatBE(0,2);
                                          

                                          erhalte ich die Spannung von L1

                                          für:

                                          msg.payload = msg.payload.buffer.readFloatBE(8,4);
                                          

                                          erhalte ich die Spannung von L2

                                          und nun verstehe ich von "atelmblcd" noch nicht den Auslese Algorithmus.

                                          Warum …readFloatBE(8,4); also die 8 verstehe ich nicht. :roll:

                                          welche Parameter benötige ich nun für das auslesen von L3

                                          hier mal ein aktueller ausschnitt:
                                          5869_testbild.jpg
                                          aus den beiden letzten Werten im Response müsste sch ja L3 ermitteln lassen.

                                          Hoffe ihr könnt mir da nochmal auf die Sprunge helfen

                                          Vielen Dank

                                          Pitu61

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          556

                                          Online

                                          32.6k

                                          Users

                                          82.1k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe