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

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

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

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

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.
  • 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
              • S Offline
                S Offline
                sveni_lee
                wrote on last edited by
                #21

                die sind an der stelle schon ausgefiltert…

                die werden hier ausgefiltert:

                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);
                
                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  sveni_lee
                  wrote on last edited by
                  #22

                  @AlCalzone:

                  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). `

                  dann sind das also nur die 18 bytes die noch ausgfiltert werden

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

                    Wo hast Du diesen Code her ? Ich verstehe ihn nicht :oops:

                    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
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #24

                      Hier sollen die ersten 18 Zeichen nach dem TCP-Header ausgefiltert werden, so dass das Ergebnis mit "NRI<" beginnt. Das darf aber nur beim ersten Packet erfolgen, wie die Hexdumps zeigen.

                      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
                        #25

                        wenn der Onkyo daten sendet wird diese funktion aufgerufen…

                        	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);
                        			}
                        		}
                        	});
                        };
                        

                        hier wird das "Datenpaket übergeben zum "entpacken"…

                        var iscp_message = eiscp_packet_extract(data)
                        

                        und das ist dann diese Funktion

                        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);
                        }
                        

                        das ganze ist eiscp node.js… das Problem ist das der code nicht mehr gepflegt wird und bisher nicht dafür ausgelegt ist diese Daten (xml) zu verarbeiten... diese sind aber notwendig um mein Project der Steurung des Onkyo umzusetzen...

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

                          @paul53:

                          Hier sollen die ersten 18 Zeichen nach dem TCP-Header ausgefiltert werden, so dass das Ergebnis mit "NRI<" beginnt. Das darf aber nur beim ersten Packet erfolgen, wie die Hexdumps zeigen. `
                          richtig…

                          darum möchte ich ja in einen Puffer schreiben bis das "schlußbyte" 0A kommt, dann das komplette paket übergeben...

                          wenn nun schon ein 0A im ersten paket kommt (bei kuruen nachrichten vom Onkyo) würde es sofort übergeben...

                          so mein Plan...

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

                            @sveni_lee:

                            das ganze ist eiscp node.js `
                            Bist Du sicher, dass eISCP der richtige Ansatz ist ? Es wird XML-Code geliefert.
                            @sveni_lee:

                            darum möchte ich ja in einen Puffer schreiben bis das "schlußbyte" 0A kommt, dann das komplette paket übergeben… `
                            Da zwischen 1. und den weiteren Packeten unterschieden werden muss (wegen der ersten 18 Byte), vielleicht folgender Ansatz

                            var xml = ''; // Puffer
                            var first = true; // Indikator erstes Packet
                            
                            on('data', function (data) {
                               if(first) {
                                  xml = eiscp_packet_extract(data);
                                  first = false;
                               } else {  
                                  xml = xml + data; // evtl. data.toString('utf8', 0, data.length - 3) ?
                               }   
                               if(xml.indexOf('\n') != -1) {
                                  first = true;
                                  ... hier die Auswertung des XML-Codes
                               }
                            });     
                            
                            

                            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
                              #28

                              das scheint leider noch nicht so zu funktionieren…

                              wenn ich das so einbaue:

                              	on('data', function (data) {
                              		if(first) {
                              			xml = eiscp_packet_extract(data);
                              			first = false;
                              		} else {  
                              			xml = xml + data // evtl. data.toString() ?
                              		}   
                              		if(xml.indexOf('\n') != -1) {
                              			first = true;
                              
                                      result = iscp_to_command(xml);
                              
                                      result.iscp_command = xml;
                                      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);
                              				}
                              			}
                              		}	
                              	});
                              

                              bekomme ich

                              2018-06-26 15:47:55.178  - ^[[34mdebug^[[39m: onkyo-vis.0 DEBUG (sent_command) Sent command to 192.168.1.177:60128 - NRIQSTN
                              2018-06-26 15:47:55.220  - ^[[31merror^[[39m: onkyo-vis.0 uncaught exception: result is not defined
                              2018-06-26 15:47:55.220  - ^[[31merror^[[39m: onkyo-vis.0 ReferenceError: result is not defined
                                  at Socket. <anonymous>(/opt/iobroker/node_modules/iobroker.onkyo-vis/node_modules/eiscp/eiscp.js:385:16)
                                  at emitOne (events.js:96:13)
                                  at Socket.emit (events.js:188:7)
                                  at readableAddChunk (_stream_readable.js:176:18)
                                  at Socket.Readable.push (_stream_readable.js:134:10)
                                  at TCP.onread (net.js:559:20)</anonymous> 
                              
                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                sveni_lee
                                wrote on last edited by
                                #29

                                @paul53:

                                Bist Du sicher, dass eISCP der richtige Ansatz ist ? Es wird XML-Code geliefert. `

                                mittlerweile nicht mehr so sehr… ich bin mir nur nicht sicher ob ich das als js-script hinbekomme...

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

                                  Ist result deklariert ?

                                  var result;
                                  

                                  Wie sieht die Funktion iscp_to_command(xml) aus ?

                                  Nach Aufruf der Funktion werden Zugriffe auf Objekt-Eigenschaften gemacht. Dazu müsste XML in ein Javascript-Objekt gewandelt werden. Dafür gibt es das NPM-Modul https://www.npmjs.com/package/xml2js.

                                  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
                                    #31

                                    @paul53:

                                    Ist result deklariert ?

                                    var result;
                                    

                                    die originale funktion sieht ja so aus: `

                                        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);
                                                        }
                                                }
                                        });
                                    

                                    dort ist result auch nicht extra deklriert…

                                    ` > Wie sieht die Funktion iscp_to_command(xml) aus ?

                                    Nach Aufruf der Funktion werden Zugriffe auf Objekt-Eigenschaften gemacht. Dazu müsste XML in ein Javascript-Objekt gewandelt werden. Dafür gibt es das NPM-Modul https://www.npmjs.com/package/xml2js. `

                                    function iscp_to_command(iscp_message) {
                                        /*
                                          Transform a low-level ISCP message to a high-level command
                                        */
                                        var command = iscp_message.slice(0, 3),
                                            value = iscp_message.slice(3),
                                            result = {};
                                    
                                        Object.keys(COMMANDS).forEach(function (zone) {
                                    
                                            if (typeof COMMANDS[zone][command] !== 'undefined') {
                                    
                                                var zone_cmd = COMMANDS[zone][command];
                                    
                                                result.command = zone_cmd.name;
                                    	    result.zone = zone;
                                                if (typeof zone_cmd.values[value] !== 'undefined') {
                                    
                                                    result.argument = zone_cmd.values[value].name;
                                    
                                                } else if (typeof VALUE_MAPPINGS[zone][command].INTRANGES !== 'undefined' && /^[0-9a-fA-F]+$/.test(value)) {
                                    
                                                    // It's a range so we need to convert args from hex to decimal
                                                    result.argument = parseInt(value, 16);
                                                }
                                            }
                                        });
                                    
                                        return result;
                                    }
                                    
                                    1 Reply Last reply
                                    0
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      wrote on last edited by
                                      #32

                                      Das scheint wenig (oder nichts) mit den XML-Daten zu tun zu haben.

                                      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
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by
                                        #33

                                        Funktioniert der Adapter https://www.npmjs.com/package/iobroker.onkyo nicht ?

                                        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
                                          #34

                                          Funktionieren tut er schon nur kann er nicht alle Befehle bzw. Antworten verarbeiten. Genau darum geht es mir ja… ich brauche die XML Geschichte...

                                          Gesendet von iPhone mit Tapatalk Pro

                                          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

                                          572

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          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