Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.9k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
67 Beiträge 5 Kommentatoren 13.9k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G Offline
    G Offline
    Garf
    schrieb am zuletzt editiert von
    #35

    @JXA:

    Kannst du mir eine Sample code senden mit deinen selbst programmierten Funktions -Node? `
    Wenn wir keine andere Lösung finden, dann schicke ich dir das selbst programmierte Funktion-Node zu. Im Moment befindet es sich aber noch in einer Rohfassunge und enthält viele Dinge die man in der praktischen Umrechnung nicht mehr braucht. Um Programmierfehler frühzeitig erkennen zu können, musste ich diese allerdings einbauen. Ich habe an dem Node nicht mehr weitergearbeitet, weil es für die Umrechnung ja bereits diese tolle Javascriptfunktion gibt. Wir müssen mal schauen, ob es da nicht auch schon eine Lösung für dein Problem gibt. Ich lese mich da gleich noch einmal ein.

    Garf

    1 Antwort Letzte Antwort
    0
    • G Offline
      G Offline
      Garf
      schrieb am zuletzt editiert von
      #36

      Ich glaube da schon etwas gefunden zu haben.

      https://github.com/biancode/node-red-co … endianness

      Mit der swap Funktion werden tatsächlich die Bufferwerte getauscht.

      Lt. Response stehen als Werte im Buffer 3f 99 99 9a und nach dem swap 99 3f 9a 99. Mir ist nur noch nicht klar was buffer.swap16() macht und ob es die richtige Funktion für dein Problem ist. Da muss man wohl noch mal weiter nachlesen.

      Ich bin mal optimistisch, damit könnten wir es irgendwie hinbekommen. Wenn Du magst, kannst Du ja schon mal ein Versuch starten.

      1 Antwort Letzte Antwort
      0
      • J Offline
        J Offline
        JXA
        schrieb am zuletzt editiert von
        #37

        Hallo Graf,

        danke für die Info.

        Ich habe den "Buffer Swap" getestet.

        Er führt aktuell nicht zum gewünschten Ergebnis…

        Habe ich etwas vergessen??
        5860_swap.png

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          Garf
          schrieb am zuletzt editiert von
          #38

          Bei mir scheint es zu funktionieren. Du solltest nur das Debug-Node eingeschaltet lassen, welches uns die Meldungen zu dem Function swap-Node zeigt.

          Bitte den Inhalt des swap-Nodes posten.

          Ich habe folgende Eintragungen vorgenommen:

          msg.payload.buffer.swap16();
          
          msg.payload = msg.payload.buffer.readFloatBE(0,1,2,3);
          
          return msg;
          
          1 Antwort Letzte Antwort
          0
          • J Offline
            J Offline
            JXA
            schrieb am zuletzt editiert von
            #39

            Habe die Änderung vorgenommen…
            5860_swap2.png
            5860_swap_function.png

            1 Antwort Letzte Antwort
            0
            • G Offline
              G Offline
              Garf
              schrieb am zuletzt editiert von
              #40

              Erstaunlich, dass es funktioniert, Normalerweise hättest Du das BE durch LE ersetzen müssen. Bisher jedenfalls hast Du immer Littel Endian ausgelesen.

              Hier mal die Grundlagen dazu: https://de.wikipedia.org/wiki/Byte-Reihenfolge

              Lt. Bedienungsanleitung von deinem X-320 lässt sich die Byte-Reihenfolge einstellen:

              ` > Big Endian

              32-bit data is treated as two individual 16-bit words using IEEE 754 floating point format. Floating

              point format is used for sensor, pulse counter, analog, and frequency data as well as for setting

              output pulse duration.

              If the checkbox is set, the X-320™ will use big-endian architecture, and the most significant 16-bit

              word (big end) is sent first. If the box is cleared, then the X-320™ will use little-endian architecture,

              and the least significant word (little end) is sent first. The default setting for this box is

              unchecked,

              use little-endian.

              For example, in little-endian format, a 32-bit floating point number represented by '1234 ABCD' is

              sent as 'ABCD 1234'. `

              Um Big Endian auslesen zu können verwendest Du die Funktion msg.payload.buffer.readFloatBE(0,1,2,3) und für Littel Endian die Funktion msg.payload.buffer.readFloatLE(0,1,2,3).

              Nicht, dass wir uns hier ständig im Kreis drehen. Vielleicht im X-320 Big Endian einstellen und dann mal schauen was in den Modbusregistern 1 und 2 steht. Es könnte dir das Auslesen evtl. vereinfachen.

              1 Antwort Letzte Antwort
              0
              • J Offline
                J Offline
                JXA
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • J Offline
                  J Offline
                  JXA
                  schrieb am zuletzt editiert von
                  #42

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

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    pitu61
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • A Offline
                      A Offline
                      atelmblcd
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • G Offline
                        G Offline
                        Garf
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • A Offline
                          A Offline
                          atelmblcd
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • J Offline
                            J Offline
                            JXA
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • A Offline
                              A Offline
                              atelmblcd
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • A Offline
                                A Offline
                                atelmblcd
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                0
                                • J Offline
                                  J Offline
                                  JXA
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  0
                                  • J Offline
                                    J Offline
                                    JXA
                                    schrieb am zuletzt editiert von
                                    #51

                                    Hallo atelmblcd,

                                    perfect!!

                                    Danke!

                                    1 Antwort Letzte Antwort
                                    0
                                    • A Offline
                                      A Offline
                                      atelmblcd
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      0
                                      • J Offline
                                        J Offline
                                        JXA
                                        schrieb am zuletzt editiert von
                                        #53

                                        Hallo Jean,

                                        deine Anzeigen sehen richtig "Cool" aus!

                                        Gefällt mir!

                                        Hast du meine PN erhalten?

                                        Danke!

                                        1 Antwort Letzte Antwort
                                        0
                                        • J Offline
                                          J Offline
                                          JXA
                                          schrieb am zuletzt editiert von
                                          #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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          813

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe