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. Onkyo NET/USB Steuerung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    848

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Onkyo NET/USB Steuerung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 1 Kommentatoren 676 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.
  • S Offline
    S Offline
    sveni_lee
    schrieb am zuletzt editiert von
    #1

    nachdem es ja einen gut funktionierenden Onkyo.vis Adapter gibt (danke an Eisbaeeer), vermisse ich noch die Steuerung für NET/USB.

    Man kann zwar die Quelle Net/USB auswählen und auch noch Home-Media aber ich möchte nun auch noch durch meine Datenbank browsen.

    Über die RemoteApps funktioniert das ganze ja schon. Ich hätte es aber auch gern in ioBroker.

    Ich habe mir nun mal Eisbaeeer Script für CCU.io genommen und versucht es iobrokerfähig zu machen. Das klappt auch schon ganz gut.

     `var io     = require('socket.io-client'),
         net    = require('net'),
         debug = true,
         onkyoSettingsIP = '192.168.1.177',
         onkyoSettingsport = 60128,
         socketOnkyo,
         onkyoConnected = 'false',
         objects = {},
    	 datapoints = {},
         onkyoID = 'javascript.0.Onkyo.',
         socket = io.connect("127.0.0.1", {
    		port: 8082
    	 });
    
    connectOnkyo();
    
    function connectOnkyo() {
    	//Hier wird der Socket zum Receiver geöffnet
    	  if (debug == true) {
    	log("adapter onkyo starting connect to:"+onkyoSettingsIP+" "+onkyoSettingsport);
    	                                   }
      socketOnkyo = net.connect({port: onkyoSettingsport, host: onkyoSettingsIP},
    	    function() {
          onkyoConnected = 'true';
          setState(onkyoID + "Onkyo_Connect_Status",true); 
    	  	log("adapter onkyo connected to Receiver: "+ onkyoSettingsIP);
    //      log("adapter onkyo debug is set to: "+ onkyoSettings.debug);
    		//Wenn Du noch was senden willst musst (initialisierung?) dann so:
    	  	//socketOnkyo.write("HIER_DEN_STRING");
          //socketOnkyo.write("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211MVLQSTN\x0D");
    	});
    }
    
    //Wird aufgerufen wenn der Socket zum Onkyo geschlossen wird
      socketOnkyo.on('close', function () {
        log("adapter onkyo  disconnected from Receiver");
      });
    
    //Wird aufgerufen wenn Daten auf dem Socket vom Onkyo kommen:
      socketOnkyo.on('data', function (data) {
    //hier z.B den String vom Onkyo zerpflücken:
      chunk = data.toString().slice(9);
      chunk = chunk.substr(9,3);
      string = data.toString().slice(9);
    	string = string.substr(12,80);
    
      //Logger | Debug
      if (debug == true) {
    	   log("adapter Onkyo Event Receiver raw:"+data.toString());
    	   log("adapter Onkyo Event Receiver chunk:"+chunk.toString());  
         log("adapter Onkyo Event Receiver string:"+string);
                                          }  
    	//usw...
    	//z.B. ne CCU.IO Variable setzen
    	//setState(ID,WERT); also setState(onkyoSettings.firstId+5,"10");
    
      //Onkyo_NET/USB_Artist_Name_Info
      if (chunk == 'NAT')  {
        setState(onkyoID + "Onkyo_NET/USB_Artist_Name_Info",string);
                        }
      //Onkyo_NET/USB_Time_Info
      if (chunk == 'NTM')  {
        setState(onkyoID + "Onkyo_NET/USB_Time_Info",string);
                        }
      //Onkyo_NET/USB_Album_Name_Info
      if (chunk == 'NAL')  {
        setState(onkyoID + "Onkyo_NET/USB_Album_Name_Info",string);
                        }
      //Onkyo_NET/USB_Track_Info
      if (chunk == 'NTR')  {
        setState(onkyoID + "Onkyo_NET/USB_Track_Info",string);
                        }
      //Onkyo_NET/USB_Track_Info
      if (chunk == 'NTI')  {
        setState(onkyoID + "Onkyo_NET/USB_Track_Info1",string);
                        }
      //Onkyo_Volume_Zone1
      if (chunk == 'MVL')  {
        string = parseInt(string, 16);              //convert hex to decimal - backward: string = string.toString(16);
        setState(onkyoID + "Onkyo_Volume_Zone1",string);
                        }
      //Onkyo_Volume_Zone2
      if (chunk == 'ZVL')  {
        string = parseInt(string, 16);              //convert hex to decimal
        setState(onkyoID + "Onkyo_Volume_Zone2",string);
                        }
      //Onkyo_Tuning_Zone1
      if (chunk == 'TUN')  {
        string = parseInt(string) / 100;            //set dot for decimal
        setState(onkyoID + "Onkyo_Tuning_Zone1",string);
                        }
      //Onkyo_Tuning_Zone2                    
      if (chunk == 'TUZ')  {
        string = parseInt(string) / 100;            //set dot for decimal
        setState(onkyoID + "Onkyo_Tuning_Zone2",string);
                        }
      //Onkyo_Internet_Radio_Preset_Zone1 
      if (chunk == 'NPR')  {
        string = parseInt(string, 16);              //convert hex to decimal
        setState(onkyoID + "Onkyo_Internet_Radio_Preset_Zone1",string);
                        }
      //Onkyo_Internet_Radio_Preset_Zone2
      if (chunk == 'NPZ')  {
        string = parseInt(string, 16);              //convert hex to decimal
        setState(onkyoID + "Onkyo_Internet_Radio_Preset_Zone2",string);
                        }
      //Onkyo_Input_Select_Zone1  (hex)
      if (chunk == 'SLI')  {
        string = string.substr(0,2)        
        setState(onkyoID + "Onkyo_Input_Select_Zone1",string);
                        }
      //Onkyo_Input_Select_Zone2  (hex)
      if (chunk == 'SLZ')  {
        string = string.substr(0,2)  
        setState(onkyoID + "Onkyo_Input_Select_Zone2",string);
                        }
      //Onkyo_Audio_Mute_Zone1
      if (chunk == 'AMT')  {
        string = parseInt(string);                  //convert string to integer
        if (string == '1') {
          setState(onkyoID + "Onkyo_Audio_Mute_Zone1",true);
                            }
        if (string == '0') {
          setState(onkyoID + "Onkyo_Audio_Mute_Zone1",false);
                            }
                          }                              
      //Onkyo_Audio_Mute_Zone2
      if (chunk == 'ZMT')  {
        string = parseInt(string);                  //convert string to integer  
        if (string == '1') {
          setState(onkyoID + "Onkyo_Audio_Mute_Zone2",true);
                            }
        if (string == '0') {
          setState(onkyoID + "Onkyo_Audio_Mute_Zone2",false);
                            } 
                        }
      //Onkyo_Tuner_Preset_Zone1
      if (chunk == 'PRS')  {
        string = parseInt(string, 16);              //convert hex to decimal
        setState(onkyoID + "Onkyo_Tuner_Preset_Zone1",string);
                        }
      //Onkyo_Tuner_Preset_Zone2
      if (chunk == 'PRZ')  {
        string = parseInt(string, 16);              //convert hex to decimal
        setState(onkyoID + "Onkyo_Tuner_Preset_Zone2",string);
                        }
      //Onkyo_Power_Zone1
      if (chunk == 'PWR')  {
       string = parseInt(string);                   //convert string to integer
        if (string == '1') {
          setState(onkyoID + "Onkyo_Power_Zone1",true);
                            }
        if (string == '0') {
          setState(onkyoID + "Onkyo_Power_Zone1",false);
                            }                                              
                        }
      //Onkyo_Power_Zone2
      if (chunk == 'ZPW')  {
       string = parseInt(string);                   //convert string to integer
        if (string == '1') {
          setState(onkyoID + "Onkyo_Power_Zone2",true);
                            }
        if (string == '0') {
          setState(onkyoID + "Onkyo_Power_Zone2",false);
                            } 
                        }
      //Navigation bei Netzwerk Modus
      if (chunk == 'NLT')  {
        var string_nlt = string.substr(22,40);   
        setState(onkyoID + "Onkyo_NET_NAVIGATION",string_nlt);
        //String zerlegen fuer Navigation
        var string_nlt_nav = string.substr(6,2);                    //2 digits navigation
        string_nlt_nav = parseInt(string_nlt_nav, 16) + 1;              //this start at zero, we need start at one and convert hex to decimal
        var string_nlt_nav_summ = string.substr(10,2);              //2 digits navigation summary
        string_nlt_nav_summ = parseInt(string_nlt_nav_summ, 16);    //convert hex to decimal    
        setState(onkyoID + "Onkyo_NET_POSITION_SUMM",string_nlt_nav+"/"+string_nlt_nav_summ);
                              }  
      //Rückgabe NSL-U0 ibs U9 in Variable schreiben
      if (chunk == 'NLS')  {
        var string_nls = string.substr(0,2);
        var string_menu = string.substr(3,40);
        var string_cursor = string.substr(0,1);         //Cursor
        var string_position = string.substr(1,1);       //Cursor position
        var string_update = string.substr(2,1);         //Cursor position update (clear list)
            if (debug == true) {
                log("adapter Onkyo Event Receiver NLS:"+string_nls);
                                                }
        //Clear Menu when update is need
        if (string_update == 'P') {                            
                setState(onkyoID + "Onkyo_NET-MENU-1","");
                setState(onkyoID + "Onkyo_NET-MENU-2","");
                setState(onkyoID + "Onkyo_NET-MENU-3","");
                setState(onkyoID + "Onkyo_NET-MENU-4","");
                setState(onkyoID + "Onkyo_NET-MENU-5","");
                setState(onkyoID + "Onkyo_NET-MENU-6","");
                setState(onkyoID + "Onkyo_NET-MENU-7","");
                setState(onkyoID + "Onkyo_NET-MENU-8","");
                setState(onkyoID + "Onkyo_NET-MENU-9","");
                          }
    
        //Set Curso position in var
        if (string_cursor == 'C') {
                string_position = parseInt(string_position) + 1;     
                setState(onkyoID + "Onkyo_NET_POSITION",string_position) 
                                  }
        //Debug                          
        if (debug == true) {
        log("adapter Onkyo Nav: "+string_cursor+" "+string_position+" "+string_update);
    		                                    }                          
    
        switch (string_nls)
                        {
                case "U0":
                          setState(onkyoID + "Onkyo_NET-MENU-0",string_menu);                      
                          break;
                case "U1":
                          setState(onkyoID + "Onkyo_NET-MENU-1",string_menu);
                          break;
                case "U2":
                          setState(onkyoID + "Onkyo_NET-MENU-2",string_menu);
                          break;
                case "U3":
                          setState(onkyoID + "Onkyo_NET-MENU-3",string_menu);
                          break;
                case "U4":
                          setState(onkyoID + "Onkyo_NET-MENU-4",string_menu);
                          break;
                case "U5":
                          setState(onkyoID + "Onkyo_NET-MENU-5",string_menu);
                          break;
                case "U6":
                          setState(onkyoID + "Onkyo_NET-MENU-6",string_menu);
                          break;
                case "U7":
                          setState(onkyoID + "Onkyo_NET-MENU-7",string_menu);
                          break;
                case "U8":
                          setState(onkyoID + "Onkyo_NET-MENU-8",string_menu);
                          break;
                case "U9":
                          setState(onkyoID + "Onkyo_NET-MENU-9",string_menu);
                          break;
                //default: 
                //alert('Default case');
                //break;
                        }            
                        }
      //Listening Mode
      if (chunk == 'LMD')  {
        string = string.substr(0,2)  
        setState(onkyoID + "Onkyo_Listening_Mode",string);
                        }                    
      //Audio information
      if (chunk == 'IFA')  {  
        setState(onkyoID + "Onkyo_Audio_Information",string);
                        }                    
    
      //Video information
      if (chunk == 'IFV')  {
        setState(onkyoID + "Onkyo_Video_Information",string);
                        }  
      //Net Play Status
      if (chunk == 'NST')  {
        var nst_play = string.substr(0,1);         //Play status
        var nst_repeat = string.substr(1,1);       //Repeat status
        var nst_shuffle = string.substr(2,1);      //Shuffle status
        setState(onkyoID + "Onkyo_NET_Play_Status",nst_play);
        setState(onkyoID + "Onkyo_NET_Repeat_Status",nst_repeat);
        setState(onkyoID + "Onkyo_NET_Shuffle_Status",nst_shuffle);
                        }                                    
    });
    
    //Wird beim Socket Fehler aufgerugen
    socketOnkyo.on('error', function (data) {
          if (debug == true) {
    	log("adapter onkyo ERROR Connection Receiver:" +data.toString());
                                          }
      setState(onkyoID + "Onkyo_Connect_Status",false);                                    
      onkyoConnected = 'false';
    	//Neuen connect in 10sec initiieren (geht nur einmalig, deshalb setinterval onkyoreconnect)
        activityTimeout = setTimeout(function () {
           connectOnkyo();
        }, 10000);
    });
    
    //Wird aufgerufen bei Connect zu iobroker
    socket.on('connect', function () {
        log("adapter onkyo connected to iobroker");
    });
    
    //Wird aufgerufen bei disconnect zu iobroker
    socket.on('disconnect', function () {
        log("adapter onkyo disconnected from iobroker");
    });
    
    //Wird aufgerufen bei Änderungen von Objekten in iobroker. Hier musst Du nach den für Dich interessanten IDs suchen, z.B. Deine eigenen ID´s.
    socket.on('event', function (obj) {
        if (!obj || !obj[0]) {
            return;
        }
    
    	//ID des geänderten Objektes
        var id = obj[0];
    	//Wert des geänderten Objektes
        var val = obj[1];
    	//Timestamp der letzten Änderung
        var ts = obj[2];
    	//ACKnowledge der letzten Änderung
        var ack = obj[3];
    
    	//z.B. wenn ID = javascript.0.Onkyo.Onkyo_Command ODER javascript.0.Onkyo.Onkyo_NET/USB_Artist_Name_Info dann mach etwas
    	//if (obj[0] == javascript.0.Onkyo.Onkyo_Command || obj[0] == javascript.0.Onkyo.Onkyo_NET/USB_Artist_Name_Info) {
      //if (obj[0] == onkyoSettings.firstId || obj[0] == onkyoSettings.ccuID) {  
    
      if (obj[0] == onkyoID + "Onkyo_Command" || obj[0] == onkyoID + "Onkyo_Volume_Zone1" || obj[0] == onkyoID + "Onkyo_Volume_Zone2" || obj[0] == onkyoID + "Onkyo_Tuning_Zone1" || obj[0] == onkyoID + "Onkyo_Tuning_Zone2" || obj[0] == onkyoID + "Onkyo_Internet_Radio_Preset_Zone1" || obj[0] == onkyoID + "Onkyo_Internet_Radio_Preset_Zone2" || obj[0] == onkyoID + "Onkyo_Input_Select_Zone1" || obj[0] == onkyoID + "Onkyo_Input_Select_Zone2" || obj[0] == onkyoID + "Onkyo_Audio_Mute_Zone1" || obj[0] == onkyoID + "Onkyo_Audio_Mute_Zone2" || obj[0] == onkyoID + "Onkyo_Tuner_Preset_Zone1" || obj[0] == onkyoID + "Onkyo_Tuner_Preset_Zone2" || obj[0] == onkyoID + "Onkyo_Power_Zone1" || obj[0] == onkyoID + "Onkyo_Power_Zone2" ) {
      //if (obj[0] == onkyoSettings.firstId) {
    
    	//logger.info("adapter onkyo Event (hier hat sich bei der 100100 (firstID) was geändert): "+id+" "+val+" "+ts+" "+ack+" "+obj);
        if (debug == true) {
            log("adapter Onkyo Event: "+id+" "+val+" "+ts+" "+ack+" "+obj);
    		                                    }
    
    		//Änderung der ersten ID 100101 und Wert ungleich ""
    		//if (id == onkyoSettings.firstId && val != "" || id == onkyoSettings.ccuId && val != "") {
    			if (id == onkyoID + "Onkyo_Command" && val != "") { 
    
        //Array bauen und die Erste onkyoSettings.firstId einlesen
        var myarray = val.split (','); 
    
          if (debug == true) {
    				      log("adapter Onkyo myArray:"+myarray);
                  log("adapter Onkyo myArray:"+myarray.length);        
                          for( var i=0 ; i < myarray.length ; i++ )  {
                                  log("adapter Onkyo myArray:"+myarray[i]);
                                                      }
                                                  }
    
    			//Einen String für den Onkyo zusammenbasteln     
          for( var i=0 ; i < myarray.length ; i++ )  {
               command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211"+myarray[i]+"\x0D");
               socketOnkyo.write(command);
               sleep(50);
    
           //Variablen wieder zurücksetzen
           setState(id, "");
    
                                                      }
                                                  }
    
      //MVL in hex
      if (id == onkyoID + "Onkyo_Volume_Zone1" && ack != true) {
              //convert decimal to hex 
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211MVL"+new_val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    		}
      //ZVL in hex
      if (id == onkyoID + "Onkyo_Volume_Zone2" && obj[3] != true) { 
            //convert decimal to hex
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211ZVL"+new_val+"\x0D");
              if (onkyoSettings.debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    		}    
      //TUN  
      if (id == onkyoID + "Onkyo_Tuning_Zone1" && ack != true) { 
            //String zerlegen, damit TUNDIRECT verwendet werden kann
              val1 = val.substr(0,1);
              val2 = val.substr(1,1);
              val3 = val.substr(2,1);
              val4 = val.substr(4,1);
              val5 = val.substr(5,1);
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLI24\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUNDIRECT\x0D");
            command3 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val1+"\x0D");
            command4 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val2+"\x0D");
            command5 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val3+"\x0D");
            command6 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val4+"\x0D");
            command7 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val5+"\x0D");
    
    				socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
            sleep(50);
            socketOnkyo.write(command3);
            sleep(50);
            socketOnkyo.write(command4);
            sleep(50);
            socketOnkyo.write(command5);
            sleep(50);
            socketOnkyo.write(command6);
            sleep(50);
            socketOnkyo.write(command7);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    
            //Debug     
                 if (debug == true) {
                  log("adapter Onkyo send:"+val);
    				      log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                  log("adapter Onkyo send:"+command3);
                  log("adapter Onkyo send:"+command4);
                  log("adapter Onkyo send:"+command5);
                  log("adapter Onkyo send:"+command6);
                  log("adapter Onkyo send:"+command7);
                                                  }
    		}
      //TUZ  
      if (id == onkyoID + "Onkyo_Tuning_Zone2" && ack != true) { 
            //String zerlegen, damit TUNDIRECT verwendet werden kann
              val1 = val.substr(0,1);
              val2 = val.substr(1,1);
              val3 = val.substr(2,1);
              val4 = val.substr(4,1);
              val5 = val.substr(5,1);
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLZ24\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUNDIRECT\x0D");
            command3 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val1+"\x0D");
            command4 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val2+"\x0D");
            command5 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val3+"\x0D");
            command6 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val4+"\x0D");
            command7 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211TUN"+val5+"\x0D");
    
    				socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
            sleep(50);
            socketOnkyo.write(command3);
            sleep(50);
            socketOnkyo.write(command4);
            sleep(50);
            socketOnkyo.write(command5);
            sleep(50);
            socketOnkyo.write(command6);
            sleep(50);
            socketOnkyo.write(command7);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    
            //Debug     
                 if (debug == true) {
                  log("adapter Onkyo send:"+val);
    			  log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                  log("adapter Onkyo send:"+command3);
                  log("adapter Onkyo send:"+command4);
                  log("adapter Onkyo send:"+command5);
                  log("adapter Onkyo send:"+command6);
                  log("adapter Onkyo send:"+command7);
                                                  }
    		}                
      //NPR in hex
      if (id == onkyoID + "Onkyo_Internet_Radio_Preset_Zone1" && ack != true) { 
            //convert decimal to hex 
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLI2B\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211NPR"+new_val+"\x0D");
              if (debug == true) {
    			  log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                                                  }
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
    		}
    
      //NPZ in hex
      if (id == onkyoID + "Onkyo_Internet_Radio_Preset_Zone2" && ack != true) { 
            //convert decimal to hex 
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLZ2B\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211NPZ"+new_val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                                                  }
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
    		}  
    
      //SLI
      if (id == onkyoID + "Onkyo_Input_Select_Zone1" && ack != true) { 
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLI"+val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    		}    
      //SLZ
      if (id == onkyoID + "Onkyo_Input_Select_Zone2" && ack != true) { 
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLZ"+val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            //Variablen wieder zurücksetzen
            //setState(id, "");
    		}    
      //AMT
      if (id == onkyoID + "Onkyo_Audio_Mute_Zone1" && ack != true) {
            //add support of "true|false"
            if (val == true) {
                val = '01';
                }
            if  (val == false) {
                val = '00';
                } 
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211AMT"+val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
    		}
    
      //ZMT
      if (id == onkyoID + "Onkyo_Audio_Mute_Zone2" && ack != true) { 
            //add support of "true|false"
            if (val == true) {
                val = '01';
                }
            if  (val == false) {
                val = '00';
                } 
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211ZMT"+val+"\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
    		}
    
      //PRS in hex
      if (id == onkyoID + "Onkyo_Tuner_Preset_Zone1" && ack != true) { 
            //convert decimal to hex 
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLI24\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211PRS"+new_val+"\x0D");
            if (debug == true) {
    				      log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                                                  }
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
    		}                
    
      //PRZ in hex
      if (id == onkyoID + "Onkyo_Tuner_Preset_Zone2" && ack != true) { 
            //convert decimal to hex 
            var new_val = parseInt(val);  //string to integer
            new_val = decimalToHex(new_val).toUpperCase();  //call function decimalToHex();
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLZ24\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211PRZ"+new_val+"\x0D");
            if (debug == true) {
    				      log("adapter Onkyo send:"+command1);
                  log("adapter Onkyo send:"+command2);
                                                  }
    
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
    		}   
    
      //PWR
      if (id == onkyoID + "Onkyo_Power_Zone1" && ack != true) { 
            //add support of "true|false"
            if (val == true) {
                val = '01';
                }
            if  (val == false) {
                val = '00';
                }   
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211PWR"+val+"\x0D");
            //init after power on
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211MVLQSTN\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211AMTQSTN\x0D");
            command3 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211LMDQSTN\x0D");
            command4 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211IFAQSTN\x0D");
            command5 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211IFVQSTN\x0D");
            command6 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLIQSTN\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            sleep(50);
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
            sleep(50);
            socketOnkyo.write(command3);
            sleep(50);
            socketOnkyo.write(command4);
            sleep(50);
            socketOnkyo.write(command5);
    	    	sleep(50);
            socketOnkyo.write(command6);
    } 
    
      //ZPW
      if (id == onkyoID + "Onkyo_Power_Zone2" && ack != true) { 
            //add support of "true|false"
            if (val == true) {
                val = '1';
                }
            if  (val == false) {
                val = '0';
                }   
            command = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211ZPW0"+val+"\x0D");
            command1 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211ZVLQSTN\x0D");
            command2 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211ZMTQSTN\x0D");
            command3 = new Buffer("ISCP\x00\x00\x00\x10\x00\x00\x00\x08\x01\x00\x00\x00\x211SLZQSTN\x0D");
              if (debug == true) {
    				      log("adapter Onkyo send:"+command);
                                                  }
    				socketOnkyo.write(command);
            sleep(50);
            socketOnkyo.write(command1);
            sleep(50);
            socketOnkyo.write(command2);
            sleep(50);
            socketOnkyo.write(command3);
    		}       
    
    	}
    
    });
    
    //Ende des Adapters
    function stop() {
        log("adapter onkyo terminating");
        socketOnkyo.end;
    	setTimeout(function () {
            process.exit();
        }, 250);
    }
    
        //Bei Unix SIGINT -->ende
    // process.on('SIGINT', function () {
    //    stop();
    //});
    
        //Bei Unix SIGTERM -->ende
    //process.on('SIGTERM', function () {
    //    stop();
    //});
    
    function setObject(id, obj) {
        objects[id] = obj;
        if (obj.Value) {
            datapoints[obj.Name] = [obj.Value];
        }
        socket.emit("setObject", id, obj);
    }
    
    function setState(id, val) {
    	datapoints[id] = [val];
    	log("adapter onkyo setState "+id+" "+val);
    	socket.emit("setState", [id,val,null,true]);
    }
    
    function decimalToHex(d, padding) {
        var hex = Number(d).toString(16);
        padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
    
        while (hex.length < padding) {
            hex = "0" + hex;
        }
    
        return hex;
    }
    
    function onkyoReconnect() {
      if (onkyoConnected != 'true'){
          connectOnkyo();
          }
    }
    
    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
    }
    
    function OnkyoInit() {
    
    	createState(onkyoID + "Onkyo_Command");
    	createState(onkyoID + "Onkyo_NET/USB_Artist_Name_Info");
    	createState(onkyoID + "Onkyo_NET/USB_Time_Info");
    	createState(onkyoID + "Onkyo_NET/USB_Album_Name_Info");
    	createState(onkyoID + "Onkyo_NET/USB_Track_Info");
    	createState(onkyoID + "Onkyo_NET/USB_Track_Info1");
    	createState(onkyoID + "Onkyo_Volume_Zone1");  
        createState(onkyoID + "Onkyo_Volume_Zone2");
        createState(onkyoID + "Onkyo_Tuning_Zone1");
        createState(onkyoID + "Onkyo_Tuning_Zone2");
        createState(onkyoID + "Onkyo_Internet_Radio_Preset_Zone1");
        createState(onkyoID + "Onkyo_Internet_Radio_Preset_Zone2");
        createState(onkyoID + "Onkyo_Input_Select_Zone1");
        createState(onkyoID + "Onkyo_Input_Select_Zone2");
        createState(onkyoID + "Onkyo_Audio_Mute_Zone1");
        createState(onkyoID + "Onkyo_Audio_Mute_Zone2");
        createState(onkyoID + "Onkyo_Tuner_Preset_Zone1");
        createState(onkyoID + "Onkyo_Tuner_Preset_Zone2");
        createState(onkyoID + "Onkyo_Power_Zone1");
        createState(onkyoID + "Onkyo_Power_Zone2");
    	createState(onkyoID + "Onkyo_NET-MENU-0");
    	createState(onkyoID + "Onkyo_NET-MENU-1");
    	createState(onkyoID + "Onkyo_NET-MENU-2");
    	createState(onkyoID + "Onkyo_NET-MENU-3");
    	createState(onkyoID + "Onkyo_NET-MENU-4");
    	createState(onkyoID + "Onkyo_NET-MENU-5");
    	createState(onkyoID + "Onkyo_NET-MENU-6");
    	createState(onkyoID + "Onkyo_NET-MENU-7");
    	createState(onkyoID + "Onkyo_NET-MENU-8");
    	createState(onkyoID + "Onkyo_NET-MENU-9");
      //Showing the actual position in NET-Mode
    	createState(onkyoID + "Onkyo_NET_NAVIGATION");
      //Point to navigation position in NET-Mode
    	createState(onkyoID + "Onkyo_NET_POSITION");
      //Point to navigation position in NET-Mode
    	createState(onkyoID + "Onkyo_NET_POSITION_SUMM");
    	createState(onkyoID + "Onkyo_Listening_Mode");  
    	createState(onkyoID + "Onkyo_Audio_Information");  
    	createState(onkyoID + "Onkyo_Video_Information");  
    	createState(onkyoID + "Onkyo_NET_Play_Status");  
    	createState(onkyoID + "Onkyo_NET_Repeat_Status");  
    	createState(onkyoID + "Onkyo_NET_Shuffle_Status");  
        createState(onkyoID + "Onkyo_Connect_Status");  
    
    	log("adapter onkyo objects inserted");
    }
    
    log("adapter onkyo start");
    OnkyoInit()
    setInterval(onkyoReconnect,10000);`
    
    wenn ich nun den Befehl "NLA" mit den entsprechendan Params ""Izzzzllxxxx----""an den Onkyo sende sollte ich eigendlich informationen bekommen...
    
    wobei zzzz -> sequence number (0000-FFFF); ll -> number of layer (00-FF); xxxx -> index number (0000-FFFF : 1st to 65536th Item [4 HEX digits] ); ---- -> not used
    
    wenn ich nun folgendes Sende:
    
    [http://192.168.1.142/onkyo.php?command=NLA](http://192.168.1.142/onkyo.php?command=NLA) & params=l0000000000----
    
    bekomme ich als Antwort: script.js.common.test_Onkyo: adapter Onkyo Event Receiver raw:ISCP!1NLTF300000000090000FFFF00NE im iobroker-log
    
    das ist aber nicht die Antwort die kommen sollte...[/i][/i]
    
    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      sveni_lee
      schrieb am zuletzt editiert von
      #2

      ich bin ein wenig weiter…

      die Navigation geht doch...

      mit folgendem Befehl komme ich dierekt in command: NSV param:110, dabei steht 11-> Home-Media, 0-> Acountinfo nein (bei mir ist passwort schon im AVR hinterlegt)

      damit bekomme ich dann folgende Einträre in meine Menüliste:

      Onkyo_NET-MENU-0: TABLET

      Onkyo_NET-MENU-1: GOTHAM-CITY

      Onkyo_NET-MENU-2: FRITZ-NAS

      soweit so gut... Gotham-City ist mein Home-Server! jetzt kann ich mit command: NLS param:L1 eine bene tiefen in Gotham-City browsen und so geht das dann weiter... Problem dabei ist, dass nur 10 Menüpunkte zu verfügung stehen...

      Es gibt aber noch command: NLA

      param: "Lzzzzllxxxxyyyy"

      "specifiy to get the listed data (from Network Control Only)
      zzzz -> sequence number (0000-FFFF)
      ll -> number of layer (00-FF)
      xxxx -> index of start item (0000-FFFF : 1st to 65536th Item [4 HEX digits] )
      yyyy -> number of items (0000-FFFF : 1 to 65536 Items [4 HEX digits] )"
      
      

      param: "Izzzzllxxxx–--"

      "select the listed item (from Network Control Only)
      zzzz -> sequence number (0000-FFFF)
      ll -> number of layer (00-FF)
      xxxx -> index number (0000-FFFF : 1st to 65536th Item [4 HEX digits] )
      ---- -> not used"
      
      

      als Antwort erwartet ich ("NLA" - NET/USB List Info(All item, need processing XML data, for Network Control Only))

      Schema: "tzzzzsurr<…..>"

      "t -> responce type 'X' : XML
      zzzz -> sequence number (0000-FFFF)
      s -> status 'S' : success, 'E' : error
      u -> UI type '0' : List, '1' : Menu, '2' : Playback, '3' : Popup, '4' : Keyboard, ""5"" : Menu List
      rr -> reserved
      <.....> : XML data ( [CR] and [LF] are removed )
       If s='S',
      
       <response status/ok""=""><items offset/xxxx""/totalitems/yyyy""="">…</items></response> 
       If s='E',
      
      xxxx : index of 1st item (0000-FFFF : 1st to 65536th Item [4 HEX digits] )
      yyyy : number of items (0000-FFFF : 1 to 65536 Items [4 HEX digits] )
      aa : Icon ID
       '29' : Folder, '2A' : Folder X, '2B' : Server, '2C' : Server X, '2D' : Title, '2E' : Title X,
       '2F' : Program, '31' : USB, '36' : Play, '37' : MultiAccount,
       for Spotify
       '38' : Account, '39' : Album, '3A' : Playlist, '3B' : Playlist-C, '3C' : starred,
       '3D' : What'sNew, '3E' : Artist, '3F' : Track, '40' : unstarred, '41' : Play, '43' : Search, '44' : Folder
       for AUPEO!
       '42' : Program
      bbb...bbb : Title
      "
      
      

      die frage ist nur, wie wird die Antwort zurückgegeben? jeder Tag in der xml einzeln oder als komplette?

      EDIT:

      Kann es sein das der string der zurückkommt nicht richtig codoert ist?

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

        Ich mache jetzt seit 2 Wochen "try and error" und komm nicht weiter…

        Ich habe nun auch schon erfolgreich den Adapter von Eisbaeeer umgeschrieben damit die NET/USB-Menüpunkte wieder vorhanden sind

        aber auch damit komme ich nicht an eine Liste aller unterordner. Auch der Kontakt zum Onkyo-Support blieb erfoglos, die habe keine

        Ahnung von diesem Protokoll war die lapidare Antwort...

        Das es gehen muss, davon bin ich überzeugt, denn die original Onkyo Remute3 App kann es ja auch...

        Ich habe aber keine Idee mehr wie es noch funktionieren soll/kann...

        auch lässt sich die eiscp-commands.json im node-eiscp nicht mehr auf den neusten Stand der eiscp-commands.yaml bringen.

        Es läuft immr auf einen Fehler hinaus...

        svenilee@Gotham-City:/opt/iobroker/node_modules/iobroker.onkyo-vis/node_modules/eiscp$ node eiscp-commands-convert.js
        /opt/iobroker/node_modules/iobroker.onkyo-vis/node_modules/eiscp/eiscp-commands.yaml:5
            description: System Power Command
                                ^^^^^
        
        SyntaxError: Unexpected identifier
            at createScript (vm.js:56:10)
            at Object.runInThisContext (vm.js:97:10)
            at Module._compile (module.js:549:28)
            at Object.Module._extensions..js (module.js:586:10)
            at Module.load (module.js:494:32)
            at tryModuleLoad (module.js:453:12)
            at Function.Module._load (module.js:445:3)
            at Module.require (module.js:504:17)
            at require (internal/module.js:20:19)
            at Object. <anonymous>(/opt/iobroker/node_modules/iobroker.onkyo-vis/node_modules/eiscp/eiscp-commands-convert.js:22:11)</anonymous> 
        

        Hat eventuell noch jemand einen Tipp für mich?

        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

        809

        Online

        32.6k

        Benutzer

        82.1k

        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