Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Js wie in "Puffer" schreiben

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    229

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

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

Js wie in "Puffer" schreiben

Js wie in "Puffer" schreiben

Scheduled Pinned Locked Moved Skripten / Logik
36 Posts 4 Posters 1.8k 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.
  • S Offline
    S Offline
    sveni_lee
    wrote on last edited by
    #1

    ich möchte gern ankommendende Daten so lange in eine Puffer schreiben bis ein bestimmtes Zeichen am ende kommt und dann erst die "kompletten Daten" übergeben.

    folgendes:

    hier wird auf ankommende Daten reagiert:

    	on('data', function (data) {
    
    		var iscp_message = eiscp_packet_extract(data),
    			result = iscp_to_command(iscp_message);
    
    		result.iscp_command = iscp_message;
            result.host  = config.host;
            result.port  = config.port;
            result.model = config.model;
    
    		self.emit('debug', util.format("DEBUG (received_data) Received data from %s:%s - %j", config.host, config.port, result));
    		self.emit('data', result);
    
    		// If the command is supported we emit it as well
    		if (typeof result.command !== 'undefined') {
    			if (Array.isArray(result.command)) {
    				result.command.forEach(function (cmd) {
    					self.emit(cmd, result.argument);
    				});
    			} else {
    				self.emit(result.command, result.argument);
    			}
    		}
    	});
    

    und hier werden die Daten entpacket:

    function eiscp_packet_extract(packet) {
        /*
          Exracts message from eISCP packet
          Strip first 18 bytes and last 3 since that's only the header and end characters
        */
        return packet.toString('ascii', 18, packet.length - 3);
    }
    

    ich möchte die ankommenden Daten nun solange in einen Puffer schreiben (zusammenfügen) bis ein bestimmten Zeichen am Ende der Daten kommt.

    in HEX: 0a

    in Ascii: "." (Punkt)

    erst danach soll das komplette Paket übergeben werden…

    Bsp.:

    in HEX

    ~~![](</s><URL url=)https://i.imgur.com/dcdD8fc.jpg" />

    umgewandelt:

    ~~![](</s><URL url=)https://i.imgur.com/bVshqAe.jpg" />

    wie könnte man das realisieren?~~~~

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @sveni_lee:

      in HEX: 0a

      in Ascii: "." (Punkt) `
      HEX: 0a = LF(line feed)

      ASCII: "\n" (new line)

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        wrote on last edited by
        #3

        Du musst mit Streams Arbeiten. Schau dir mal "pipe" an. Damit geht sowas.

        Gesendet von meinem m8 mit Tapatalk

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Reply Last reply
        0
        • S Offline
          S Offline
          sveni_lee
          wrote on last edited by
          #4

          @paul53:

          HEX: 0a = LF(line feed)

          ASCII: "\n" (new line) `

          Ich verste nicht so ganz was du mir damit sagen möchtest… ??? :?:

          @Jey Cee:

          Du musst mit Streams Arbeiten. Schau dir mal "pipe" an. Damit geht sowas. `

          Ich hab mir mal einiges bei stackoverflow durgelesen aber so richtig schlau werde ich daraus noch nicht…

          const bl = require('bl')
          , fs = require('fs')
          
          fs.createReadStream('README.md')   
             .pipe(bl(function (err, data) { //  note 'new' isn't strictly required
                // `data` is a complete Buffer object containing the full data
                console.log(data.toString())   
          }))
          
          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @sveni_lee:

            Ich verste nicht so ganz was du mir damit sagen möchtest… ??? `
            https://www.torsten-horn.de/techdocs/ascii.htm.

            "." (Punkt) hat den hexadezimalen Wert 0x2e.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Reply Last reply
            0
            • S Offline
              S Offline
              sveni_lee
              wrote on last edited by
              #6

              jetzt verste ich was du meinst,

              0a am ende steht für LF(line feed) und nicht für den Punkt… okay verstanden.

              mein Problem ist das ein Antwort in mehreren Paketen gesendet wird und das ende immer "0A"...

              Ich möchte nun die Pakete "zusammensetzen" im Moment werden sie leider als einzelne Teile verarbeitet...

              1 Reply Last reply
              0
              • paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #7

                Wenn es Strings sind, kann man diese einfach verketten (anhängen). Ob das LF enthalten ist, kann man testen.

                if(str.indexOf('\n') != -1) { // LF ist enthalten
                   ...
                }
                

                Das sollte Dir die ASCII-Anmerkung sagen.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  sveni_lee
                  wrote on last edited by
                  #8

                  okay, aber dann müsste ich doch die strings so lange in einen Puffer schreiben bis ein LF zeichen kommt, richtig?

                  oder verstehe ich an der stelle etwas falsch?

                  1 Reply Last reply
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #9

                    @sveni_lee:

                    okay, aber dann müsste ich doch die strings so lange in einen Puffer schreiben bis ein LF zeichen kommt, richtig? `
                    So würde ich es versuchen.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      sveni_lee
                      wrote on last edited by
                      #10

                      und dann kommen wir zu meiner ursprünlichen Frage…

                      wie kann ich in einen Puffer schreiben?

                      1 Reply Last reply
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #11

                        Wenn es sich tatsächlich um Strings handelt, dann ist der Puffer ein String, der als Leerstring initialisiert wird, und an den man die Stringbruchstücke solange anhängt, bis ein LF enthalten ist. Der Hex-Dump zeigt allerdings etliche Steuerzeichen innerhalb der Daten.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          sveni_lee
                          wrote on last edited by
                          #12

                          die Antworten die ich erwarte sehen dann so aus…

                          NRI<response status="ok"><device id="TX-NR525"><brand>ONKYO</brand><category>AV Receiver</category><year>2013</year><model>TX-NR525</model><destination>xx</destination><firmwareversion>1060-9110-0000-</firmwareversion></device></response>
                          
                          1 Reply Last reply
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #13

                            @sveni_lee:

                            die Antworten die ich erwarte sehen dann so aus… `
                            Das ist unvollständiger XML-Code.

                            NRI
                             <response status="ok"><device id="TX-NR525"><brand>ONKYO</brand>
                            		<category>AV Receiver</category>
                            		<year>2013</year>
                            		<model>TX-NR525</model>
                            		<destination>xx</destination>
                            		<firmwareversion>1060-9110-0000-</firmwareversion></device></response> 
                            

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              sveni_lee
                              wrote on last edited by
                              #14

                              richtig… das Problem ist das der xml code in teilen gesendet wird und nicht vollständig übergeben wird...

                              ~~![](</s><URL url=)https://i.imgur.com/LFkxKiN.jpg" />

                              ~~![](</s><URL url=)https://i.imgur.com/qLyVEPv.jpg" />

                              der komplette xml-code setzt sich den Paketen 920,921,922,923 und 924 zusammen…

                              darum möchte ich die enzelnen Teile wieder zusammensetzen um den kompletten und brauchbaren xml code zu bekommen...~~~~

                              1 Reply Last reply
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by
                                #15

                                Das Packet 920 enthält einen Header, der mit "!1NRI" endet. Haben die anderen Packete auch diesen Header ? Der müsste dann erst ausgefiltert werden, bevor man die XML-Teile verkettet.

                                Wie sieht das letzte Packet aus ?

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  sveni_lee
                                  wrote on last edited by
                                  #16

                                  nein, die anderen haben diesen header nicht… der isr aber wichtig für die weiterverarbeitung müsste also am Anfang des Paketes bestehen bleiben...

                                  ~~![](</s><URL url=)https://i.imgur.com/sTO0PT2.jpg" />

                                  ~~![](</s><URL url=)https://i.imgur.com/jryLouz.jpg" />

                                  ~~![](</s><URL url=)https://i.imgur.com/E80eKKM.jpg" />

                                  ![](</s><URL url=)https://i.imgur.com/YKPAKSY.jpg" />~~~~~~

                                  1 Reply Last reply
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by
                                    #17

                                    Sind das keine Header bis zum Byte 0x41 : "|" (senkrechter Strich) ? Müssten die nicht rausgefiltert werden ?

                                    Wo erscheint das LF ?

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    1 Reply Last reply
                                    0
                                    • S Offline
                                      S Offline
                                      sveni_lee
                                      wrote on last edited by
                                      #18

                                      das ist richtig…

                                      ~~![](</s><URL url=)https://i.imgur.com/SaV0DU6.jpg" />

                                      Wireshark sagt mir das der "Datenteil" immer erst mit byte 66 startet…

                                      ![](</s><URL url=)https://i.imgur.com/wzzsRhF.jpg" />~~

                                      1 Reply Last reply
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by
                                        #19

                                        Werden die ersten 66 Zeichen auch an die Funktion übergeben ?

                                        on('data', function (data) {
                                        

                                        Oder sind sie an der Stelle schon ausgefiltert ?

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        1 Reply Last reply
                                        0
                                        • AlCalzoneA Offline
                                          AlCalzoneA Offline
                                          AlCalzone
                                          Developer
                                          wrote on last edited by
                                          #20

                                          Ich gehe nicht davon aus, dass du die TCP-Header ebenfalls empfängst. Wireshark zeigt dir das gesamte Datenpaket an, das übers Netzwerk geht, Anwendungen sehen i.d.R. nur den Inhalt des TCP-Pakets (in deinem Fall vermutlich ab Byte 66).

                                          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                          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

                                          54

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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