Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Onkyo NET/USB Steuerung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Onkyo NET/USB Steuerung

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sveni_lee last edited by

      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 Reply Last reply Reply Quote 0
      • S
        sveni_lee last edited by

        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 Reply Last reply Reply Quote 0
        • S
          sveni_lee last edited by

          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 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          800
          Online

          31.7k
          Users

          79.9k
          Topics

          1.3m
          Posts

          1
          3
          630
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo