2016-05-02 18 views
10

Sto provando a implementare la mia scansione UPNP, è in gran parte funzionante e per dimostrare che non sono io ho un programma Windows che consente di inviare pacchetti e vedere cosa la risposta ritorna.L'esecuzione di una scansione UPNP non restituisce il bridge Philips Hue

io mando un pacchetto per 239.255.255.250 sulla porta 1900 e io mando i seguenti dati:

M-SEARCH * HTTP/1.1 
Host: 239.255.255.250:1900 
Man: "ssdp:discover" 
MX: 10 
ST: ssdp:all 

Proprio per ulteriori informazioni, nel mio codice Java (Android) Ho il seguente, ma ottengo lo stesso risposta come l'applicazione del pacchetto tester:

try 
     { 
      byte[] sendData = new byte[1024]; 
      //byte[] receiveData = new byte[1024]; 
      byte[] receiveData; 
      String mSearch = "M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n\r\n"; 
      sendData = mSearch.getBytes(); 

      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900); 

      DatagramSocket clientSocket = new DatagramSocket(); 
      clientSocket.send(sendPacket); 

      while (keepGoing) 
      { 
       receiveData = new byte[1024]; 
       receivePacket = new DatagramPacket(receiveData, receiveData.length); 
       clientSocket.receive(receivePacket); 

       String response = new String(receivePacket.getData()); 

       if (response == null || response.length() == 0) 
       { 
        keepGoing = false; 
       } 
       else 
       { 
        iupnpScan.updateText(response); 
       } 

      } 
      iupnpScan.complete(true); 
      return true; 
     } 
     catch (UnknownHostException ex) 
     { 
      Log.e("MainActivity", "Unknown Host Exception: " + ex.toString()); 
     } 
     catch (SocketException ex) 
     { 
      Log.e("MainActivity", "Socket Exception: " + ex.toString()); 
     } 
     catch (IOException ex) 
     { 
      Log.e("MainActivity", "IO Exception: " + ex.toString()); 
     } 
     iupnpScan.complete(false); 
     return false; 

sto ottenendo alcuni dispositivi ritornano, come il mio smart TV, router e NAS, ma le philips ponte Hue non viene mai restituito nella risposta.

Philips Hue Bridge implementa UpNP in modo diverso, tutto quello che riesco a vedere è la risposta che restituiscono ora tutto ciò che è necessario per trovarlo.

Grazie

+0

Stai utilizzando un bel grande valore MX. 10 secondi è valido per UPnP 1.0 ma v1.1 consiglia un valore compreso nell'intervallo [1..5]. Potresti provare a ridurre il valore MX a 5 secondi per escludere che il dispositivo Philips rifiuti MSEARCH come malformato. Si noti inoltre che alcuni dispositivi UPnP ignorano MSEARCH, affidandosi invece all'invio di frequenti annunci multicast ALIVE. Potresti provare ad ascoltare annunci multicast e risposte unicast MSEARCH e vedere se questo aiuta. – simonc

+0

Grazie Ho provato a cambiare il valore MX a 5, ma nessuna differenza. È interessante notare che ho un ispettore UPNP per Windows da http://coherence.beebits.net/wiki/UPnP-Inspector#DownloadandInstallation e su Bridge non viene visualizzato né quello – Boardy

+0

Quando stavo lavorando con upnp ho trovato che molti pacchetti nativi/Le librerie sono abbastanza incoerenti nel rispondere alle richieste di scoperta. Se è possibile eseguire un test di dimensioni ridotte, provare a utilizzare la libreria cyberlink o cybergarage se il dispositivo incorporato continua a non rispondere alle richieste di rilevamento, potrebbe esserci qualche problema con il dispositivo. – Ichthyocentaurs

risposta

1

Anche Philips site note che supporta UPnP, non so se è vero o no.

Proverei a scansionare l'intera rete e testare IP per IP. Sì, lo so, questo non è quello che dice lo standard, ma a volte la realtà è folle.

Questa scoperta è già implementata là fuori this way.

Ho programmato una ricerca di rete in passato (cercando un Raspberry PI) e il metodo migliore che potevo usare era quello di far corrispondere gli indirizzi MAC con il mio indirizzo conosciuto. Fortunatamente, Philips publish their MAC addresses range.

0

Ero anche alle prese con questo comportamento. Dopo alcune prove ed errori, mi sono reso conto che l'Hue Bridge non sembra comprendere lo " attorno allo ssdp: scoprire il valore. Queste le virgolette non sono inoltre presenti nel progetto di IETF: https://tools.ietf.org/html/draft-cai-ssdp-v1-03

A seguito della richiesta ha avuto successo per me:

M-SEARCH * HTTP/1.1 
ST: ssdp:all 
MX: 3 
MAN: ssdp:discover 
HOST: 239.255.255.250:1900 

Questa è la risposta che ho ricevuto:

HTTP/1.1 200 OK 
HOST: 239.255.255.250:1900 
EXT:CACHE-CONTROL: max-age=100 
LOCATION: http://192.168.xxx.xxx:80/description.xml 
SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.16.0 
hue-bridgeid: 001788FFFE29D301 
ST: urn:schemas-upnp-org:device:basic:1 
USN: uuid:2f402f80-da50-11e1-9b23-00178829d301