leggere un XML prodotto da Arduino

Buon anno a tutti !
vi chiedo un aiuto perché non so come uscirne.
Il mio Arduino collegato alla rete risponde con un codice XML ad un determinata richiesta ma non riesco a leggerlo tramite una pagina php.
La pagina php che cerca di leggere l’XML dell’Arduino è:

$url = 'http://...............................:801/?aggiorna_XML';
$xml=simplexml_load_file(urlencode($url));
print_r($xml);

La pagina in se funziona perché ho provato a leggere XML di altri siti.
L’errore che mi restituisce è:

Warning: simplexml_load_file(http://......com:801/?aggiorna_XML): failed to open stream: Connection timed out in /web/htdocs/............................php on line 40 Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://................................com:801/?aggiorna_XML" in /web/htdocs/........................................php on line 40

La pagina sembra funzionare perché se vado con un browser vedo perfettamente l’XML.
Questo la parte di codice dell’Arduino che produce la pagina:

 client.println("HTTP/1.1 200 OK");
          if (HTTP_req.indexOf("aggiorna_XML") > -1) {
            client.println("Content-Type: text/xml");
            client.println("Connection: keep-alive");
            client.println();
            XML_response(client);
          }

void XML_response(EthernetClient cl){
  cl.print("<?xml version = \"1.0\" ?>");
  cl.print("<inputs>");
  
  cl.print("<orario1>");
  
       if (hour()<10){
          cl.print("0");
       }
       cl.print(hour());
       cl.print(":");
       if (minute()<10){
        cl.print("0");
       }
       cl.print(minute());
       cl.print(":");
       if (second()<10){
        cl.print("0");
       }
       cl.print(second());
  cl.println("</orario1>");
 etc.......

  cl.print("</inputs>");

}

Qualche consiglio ?

è un timout generico, senza conoscere bene la rete e fare qualche test non è semplice risponderti. La domanda però sorge spontanea, perche XML, è un formato obsoleto per il passaggio di dati generici, perche non adoperare il Json, piu semplice da creare, inviare e parsare.

RobertoBochet: è un timout generico, senza conoscere bene la rete e fare qualche test non è semplice risponderti. La domanda però sorge spontanea, perche XML, è un formato obsoleto per il passaggio di dati generici, perche non adoperare il Json, piu semplice da creare, inviare e parsare.

Se dici che è meglio provo a darli una occhiata, hai qualche guida in particolare da suggerire ?

json.org

RobertoBochet: è un timout generico, senza conoscere bene la rete e fare qualche test non è semplice risponderti. La domanda però sorge spontanea, perche XML, è un formato obsoleto per il passaggio di dati generici, perche non adoperare il Json, piu semplice da creare, inviare e parsare.

Ho provato con qualcosa che ho trovato in rete ma il problema sembra sempre lo stesso, il codice arduino:

 client.println("HTTP/1.1 200 OK");
......
 else if (HTTP_req.indexOf("aggiorna_Json") > -1) {
            client.println("Content-Type: application/json;charset=utf-8");
          client.println("Server: Arduino");
          client.println("Connection: close");
          client.println();
          client.println("[{\"tempIn\":23.2, \"tempOut\":16.8, \"unit\":\"Celcius\" }]");
          client.println();
          }

la pagine web si vede bene :

[{"tempIn":23.2, "tempOut":16.8, "unit":"Celcius" }]

ma con la richiesta php:

$url = 'http://.........................com:801/?aggiorna_Json';
$content = file_get_contents($url);
$json = json_decode($content, true);
   echo $json["unit"]."\n";

Mi da il solito errore:

Warning: file_get_contents(http://...........................com:801/?aggiorna_Json): failed to open stream: Connection timed out in /web/htdocs/www.............................../bro.php on line 47

Ho capito una cosa in più ma non mi ha portato alla soluzione, se guardo il Serial mi accorgo che se vado alla pagina don il Json da browser (http://..........:801/?aggiornoXml) arduino riceve il get e manda la risposta. Se invece apro il file php Arduino non riceve nessun get quindi non risponde file php

$url = 'http://192.168.0.117:801/?aggiorna_Json';
$content = file_get_contents($url);
$json = json_decode($content, true);
echo $json["unit"]."\n";

Qualche suggerimento ?

Servirebbe capire la tipologia della rete. Usi un ip interno, quindi immagino che il web server php sia interno alla rete, in particolare sullo stesso computer dove provi a connetterti con il browser, giusto?

RobertoBochet: Servirebbe capire la tipologia della rete. Usi un ip interno, quindi immagino che il web server php sia interno alla rete, in particolare sullo stesso computer dove provi a connetterti con il browser, giusto?

Sia Arduino che il pc sono nella stessa rete locale ma dato che ho un indirizzo ip statico utilizzo quello remoto al posto che l'ip della Lan. Comunque il problema c'è qualsiasi indirizzo si usa.

Errore configurazione del interprete? Io tenterei con una richiesta curl. Il dubbio mi viene sul supporto dei protocolli e delle porte dell'end point, non sono sicuro che la porta poassa essere specificata nel dns diversa da 80 con file_get_contents. Prova con curl e facci sapere.