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. Js wie in "Puffer" schreiben

NEWS

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

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

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

Js wie in "Puffer" schreiben

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
36 Beiträge 4 Kommentatoren 1.8k 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.
  • paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      sveni_lee
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        sveni_lee
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            sveni_lee
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  sveni_lee
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    sveni_lee
                    schrieb am zuletzt editiert von
                    #35

                    @paul53:

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

                    so… ich versuchs dann mal weiter...

                    den Adapter bzw. den Onkyo-vis benutze ich ja... aber diese beiden greifen auf node eiscp.js zurück. das heist die Kommunikation läuft über dieses

                    node js Modul und das ist leider nicht up to date.

                    ich versuche grad mal die eiscp.js zu debuggen. was ist mir aufgefallen:

                    • ich denke das es funktioniert nicht weil die Daten nicht in so ankomme wie erwartet. mein Debug sieht nun so aus:
                    ````
                    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
                        */
                    	self.emit('debug', util.format('DEBUG (iscp_to_command) raw HEX "%s"', packet));
                    	self.emit('debug', util.format('DEBUG (iscp_to_command) raw ASCII "%s"', packet.toString('ascii', 18, packet.length - 3)));
                        return packet.toString('ascii', 18, packet.length - 3); //return packet.toString('ascii', 18, packet.length - 3);
                    ````
                    Ergebniss:
                    ```
                    `2018-06-27 08:43:40.544  - [34mdebug[39m: onkyo-vis.0 DEBUG (iscp_to_command) raw HEX "ISCP     v   !1NRI<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><netservicelist count="15"><netservice id="0e" value="1" name="TuneIn" account="Enter your Username" password="Enter your Password"><netservice id="04" value="0" name="Pandora Internet Radio" account="Enter your email address." password="Enter your password."><netservice id="05" value="0" name="Rhapsody" account="Enter your username." password="Enter your password."><netservice id="03" value="0" name="SiriusXM Internet Radio" account="Enter your user name." password="Enter your password."><netservice id="06" value="1" name="Last.fm Internet Radio" account="Enter your user name." password="Enter your password."><netservice id="08" value="0" name="Slacker Personal Radio" account="Enter your email address." password="Enter your password."><netservice id="0a" value="1" name="Spotify" account="Enter your Username" password="Enter your Password"><netservice id="0b" value="1" name="AUPEO! PERSONAL RADIO" account="Enter your user name." password="Enter your password."><netservice id="0d" value="0" name="e-onkyo music"><netservice id="0c" value="0" name="radiko.jp"><netservice id="10" value="1" name="simfy" account="Username or email address." p"/2018-06-27/08:43:40.545/-/[34mdebug[39m:/onkyo-vis.0/debug/(iscp_to_command)/raw/ascii/"nri<?xml/version="1.0" encoding="utf-8" ?=""><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><netservicelist count="15"><netservice id="0e" value="1" name="TuneIn" account="Enter your Username" password="Enter your Password"><netservice id="04" value="0" name="Pandora Internet Radio" account="Enter your email address." password="Enter your password."><netservice id="05" value="0" name="Rhapsody" account="Enter your username." password="Enter your password."><netservice id="03" value="0" name="SiriusXM Internet Radio" account="Enter your user name." password="Enter your password."><netservice id="06" value="1" name="Last.fm Internet Radio" account="Enter your user name." password="Enter your password."><netservice id="08" value="0" name="Slacker Personal Radio" account="Enter your email address." password="Enter your password."><netservice id="0a" value="1" name="Spotify" account="Enter your Username" password="Enter your Password"><netservice id="0b" value="1" name="AUPEO! PERSONAL RADIO" account="Enter your user name." password="Enter your password."><netservice id="0d" value="0" name="e-onkyo music"><netservice id="0c" value="0" name="radiko.jp"><netservice id="10" value="1" name="simfy" account="Username or email address." <e="">[/code]</netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservicelist></device></response></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservice></netservicelist></device></response>`
                    
                    Also kommen das _~~[i]~~/n[/i]_ wohl gar nicht an...
                    ```
                    

                    <list type="2">~~~~* mir ist aufgefallen das komischer Weise die 5 Pakete die vom Onkyo gesendet werden als 2 Pakete empfangen werden. Ich kann aber im ersten Paket keinen unterschied zu den anderen sehen...

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      sveni_lee
                      schrieb am zuletzt editiert von
                      #36

                      nach sehr langem debuggen von node eiscp.js habe ich nun einen weg gefunden die Daten auszufiltern…

                      	on('data', function (data) {
                      
                      		if(first) {
                      			xml = eiscp_packet_extract(data);
                      			first = false;
                      			var result = iscp_to_command(xml);
                      			result.iscp_command = xml;
                      			result.host  = config.host;
                      			result.port  = config.port;
                      			result.model = config.model;
                      
                      		} 
                      		else {  
                      			xml = xml + data.toString('ascii', 18); // evtl. data.toString() ?
                      			self.emit('debug', util.format("DEBUG (XML) command %s", xml));
                      
                      			var result = iscp_to_command(xml);
                      			result.iscp_command = xml;
                      			result.host  = config.host;
                      			result.port  = config.port;
                      			result.model = config.model;
                      
                      			if(xml.indexOf('') != -1) {
                      				self.emit('data', result);
                      				first = true
                      
                      				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);
                      					}	
                      				}
                      
                      			}
                      		}   
                      
                      		if(result.command !== 'receiver-information' | result.command !== 'net-usb-list-info-allitems') {
                      			first = true;
                      
                      			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);
                      				}
                      			} 
                      		}	
                      	});
                      

                      da es nur zwei commands gibt, die eine xml als Anwort erhalten sollte das eigendlich funktionionieren.

                      das ist sicher nicht der eleganteste Weg aber so komme ich auf jedenfall erst einmal weiter… (hoffe) ich

                      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

                      747

                      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