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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Problem mit Konvertierung von Buffer()

NEWS

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

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

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

Problem mit Konvertierung von Buffer()

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 2 Kommentatoren 1.2k 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.
  • N Offline
    N Offline
    NightWatcher
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich bin verzeifelt, weil ich seit etwa 8 Std. den Fehler nicht finde.

    var data  = '4105000155250282';
    var buf = new Buffer(data, 'hex');
    adapter.log.debug(buf);
    
    

    Der Debugger gibt AU%� aus.

    Gibt man dies hier ein: http://www.asciitohex.com/, so sieht man, dass ich folgende Dezimal Variable zurückerhalte: 65 5 1 85 37 2 239 191 189

    Ich vermute SEHR stark, dass es mit dem Zeichensatz zu tun habe, aber bekomme es einfach nicht sauber auf die Reihe.

    Ich hoffe nun, dass sich hier ein paar Profis tummeln, die mir weiter helfen können.

    PS: Das alles wird ein neuer Adapter (wenn es denn dann irgendwann mal läuft).

    Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

    1 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Da "Buffer" alles mögliche enthalten können wäre ich mit logging von "buf" vorsichtig weil Du nicht weisst wie er das ausgibt. Ich kann mir gut vrostellen das er das erste Zeichen als ASCII erkennt und deswegen von Text ausgeht.

      am besten

      > buf.toString('hex');

      nutzen:

      https://nodejs.org/api/buffer.html#buff … _start_end

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • N Offline
        N Offline
        NightWatcher
        schrieb am zuletzt editiert von
        #3

        Alles schon probiert. Ich sitze heute bereits ungelogen 9 Std. an dem einen Problem.

        Ich lasse Wireshark mitlaufen und im Debug vom ioBroker Log alles ausgeben.

        Egal, wie ich es kodiere, es kommt NIE das raus, was ich möchte.

        Ich prüfe sogar, ob der String utf ist

        if(!buf.equals(Buffer.from(buf.toString('utf8'), 'utf8')))
        

        Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

        1 Antwort Letzte Antwort
        0
        • apollon77A Offline
          apollon77A Offline
          apollon77
          schrieb am zuletzt editiert von
          #4

          Warm sollten es denn Strings sein? da ist 0x05 und 0x00 dabei, das sind keine sinnvollen Zeichen … Damit ist ein Vergleich auf "String"-Ebene sehr schwierig

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          • N Offline
            N Offline
            NightWatcher
            schrieb am zuletzt editiert von
            #5

            Es sollen keine Strings sein.

            Das Gerät auf der anderen Seite reagiert und sendet Hexadezimale Werte.

            Ich sende 16 00 00 ohne Probleme.

            Beim Wert: "41 05 00 01 55 25 02 82" moniert er einzig das Byte 82. Lasse ich das weg, wird der ganze Wert korrekt übertragen. (Es fehlt halt leider nur die 82)

            die 82 konvertiert er in "ef bf bd".

            Kurzum: Grundsätzlich funktioniert es. Nur komischerweise wandelt er in diesem Beispiel die 82 in "ef bf bd" um.

            Was eben auch komisch ist, dass das Script "160000" als utf8 erkennt, "4105000155250282" aber eben nicht. Gleiche Datei. Ich stehe mittlerweile auch total auf dem Schlauch, weil der Kopf raucht :|

            Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

            1 Antwort Letzte Antwort
            0
            • apollon77A Offline
              apollon77A Offline
              apollon77
              schrieb am zuletzt editiert von
              #6

              Was willst Du mit UTF-8? Das ist eine String kodierung und du sagtst es sind keine "Strings". Also was genau tust Du mit den Daten?

              Also ein

              var data  = '4105000155250282';
              var buf = new Buffer(data, 'hex');
              adapter.log.debug(buf.toString('hex');
              

              Müsste genau die Ausgabe geben wie dein EIngabestring

              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
              1 Antwort Letzte Antwort
              0
              • N Offline
                N Offline
                NightWatcher
                schrieb am zuletzt editiert von
                #7

                Nach Recherche im Internet hat die Node.js Buffer Funktion teilweise Probleme damit, wenn man die Daten in einer falschen Kodierung übermittelt.

                Das konnte ich soweit auch reproduzieren. Und ja sogesehen hast du recht, dass ich die Daten als String an Buffer übergebe. So soll es nach der Funktionsdokumentation auch sein.

                var buf = Buffer.from('160000', 'hex');

                if(!buf.equals(Buffer.from(buf.toString('utf8'), 'utf8')))

                –> ergibt true --> die Daten werden korrekt übertragen [ 16 00 00 steht in Wireshark ]

                var buf = Buffer.from('4105000155250282', 'hex');

                if(!buf.equals(Buffer.from(buf.toString('utf8'), 'utf8')))

                –> ergibt false --> die Daten werden fehlerhaft übertragen [ 41 05 00 01 55 25 02 ef bf bd steht in Wireshark ] erwartet wird aber 41 05 00 01 55 25 02 82

                Meine Konkrete Frage ist einfache, wieso in dem Fall die 82 falsch umgewandelt und übertragen wird. Ich denke, es hat mit der Kodierung zu tun (deshalb eben auch der Hinweis darauf). Vielleicht liege ich hier auch total daneben.

                Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

                1 Antwort Letzte Antwort
                0
                • apollon77A Offline
                  apollon77A Offline
                  apollon77
                  schrieb am zuletzt editiert von
                  #8

                  Wie sieht denn der code aus der das raussendet? Und warum sendest DU nicht den "Binären" Buffer (also das was du dort als Hex vorgibst) direkt raus? Warum machst Du Dinge mit utf-8? Du willst die bytes so raussenden wie du sie im Buffer hast. Ergo: Nichts rumkonvertieren sondern den Buffer so wie Du Ihn hier erstellst senden. Du brauchst keine UTF-8 konvertierungen zu machen!!

                  Warum er sowa macht ist recht einfach:

                  "82" ist 130 dezimal. UTF-8 ist nur bis 127 dezomal identisch. Alles höhere wird mittels Zusatzbytes kodiert. In dem Fall kodiert er damit die "82" in in Summe 3 Bytes. Nach UTF-8 kodierlogik korrekt, daher: Lass das UTF-8 kodiere wenn Du die reinen Bytes haben willst!

                  Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                  • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                  • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                  1 Antwort Letzte Antwort
                  0
                  • N Offline
                    N Offline
                    NightWatcher
                    schrieb am zuletzt editiert von
                    #9

                    Ich würde es gerne so lassen.

                    var data = '4105000155250282';

                    var buf = new Buffer(data, 'hex');

                    War erst mein Code zu Anfang. Ich meine, es ging auch mal kurz. Aber auch da bekomme ich leider immer nur "41 05 00 01 55 25 02 ef bf bd" im Wireshark.

                    EDIT, sorry deine erste Frage vergessen zu beantworten.

                    Es läuft über eine Telnet Sitzung. Das dürfte aber vermutlich egal sein, denn das buffer object ist ja bereits vorher falsch.

                    Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

                    1 Antwort Letzte Antwort
                    0
                    • apollon77A Offline
                      apollon77A Offline
                      apollon77
                      schrieb am zuletzt editiert von
                      #10

                      Dein code den Du hier zeigst zeigt nur wie der Buffer initialisiert wird. Wie versendest Du ihn?

                      Wenn Du sagst das Wireshark was hat dann musst Du das irgendwie ausgeben. Sag jetzt bitte nicht das Du eine Text-Telnet Session hast und dort dann per "console.log" deinen Buffer ausgibst?!

                      Das kann dann nicht tun weil 0x82 kein ASCII ist und daher wahrscheinlich deine Telnet Session eine kodierung braucht. Warum telnet und nicht ein TCP Socket?!

                      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                      1 Antwort Letzte Antwort
                      0
                      • N Offline
                        N Offline
                        NightWatcher
                        schrieb am zuletzt editiert von
                        #11

                        Moin, dein Beitrag hat mich zum Umdenken gebracht. Dafür vielen Dank.

                        Nach dem Wechsel von Telnet auf TCP habe ich die Probleme in den Griff bekommen und habe nun die ersten Werte zurückerhalten.

                        Das ist übrigens daraus entstanden: http://forum.iobroker.net/viewtopic.php?f=30&t=8803

                        Wago 750-881 - mit über 200 Ein- und Ausgängen, DMX512 Art-Net für Beleuchtung, 1-Wire für Umweltsensoren Aussen und Innen, ioBroker als Visualisierung

                        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

                        540

                        Online

                        32.4k

                        Benutzer

                        81.4k

                        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