Buongiorno a tutti!
Chiedo aiuto per trovare una soluzione che mi permetta di leggere uno specifico dato numerico da una pagina web per usarlo successivamente per attivare periferiche del tipo LED, relè, ecc.
Per ora, mi è stato possibile ottenere il seguente output della pagina, usando l'applicazione thingHTTP di Thingspeak:
Ora, la parte d'interesse è "213" e, nello specifico, il valore numerico che in questo caso è "213".
Come posso estrarre tale dato per manipolarlo successivamente?
Grazie a tutti coloro che potranno fornirmi spunti.
Hm, se hai fatto già un programmino di prova posta quello così ti diciamo.
Se non lo hai ancora fatto, direi che il modo sarebbe quello di leggere l'output del server una riga alla volta (in Arduino non hai abbastanza RAM per memorizzare una intera pagina web), e per ogni riga cercare la stringa che precede il tuo dato, ed estrarre i caratteri successivi fino al primo "<".
Domanda: ma questa che ci hai mostrato è solo una parte della pagina, giusto? Perché se fosse l'unico output, si tratta di un metodo dedicato proprio a comunicare quel dato e quindi si farebbe prima a modificare il server (se possibile) mandare in output solamente il valore, senza o altre cose html che non servono se ad interpretare la risposta è un programma e non un umano..
Grazie Docdoc, per la gentile risposta.
La piattaforma su cui sto lavorando è un NodeMCU che dovrebbe avere le risorse sufficienti per gestire la procedura.
ThingHTTP restituisce l'output che ho postato. Quindi ci sarebbe da lavorarci non poco, tenuto conto che la stringa d'interesse è proprio nella parte finale.
La parte di codice sviluppata al momento è quella che consente di collegarsi a ThingSpeak e poi all'applicativo ThingHTTP che, per l'appunto, ha come finalità quella di estrapolare dati da pagine web. Purtroppo, come dicevo, l'output è piuttosto esteso.
Il link che ThingHTTP fornisce per la successiva manipolazione, se visualizzato in un browser, restituisce solo il dato richiesto:
Ho provato quel link e dà il solo valore, ma se vedi la sorgente della pagina di risposta è esattamente quello che vedi nel monitor seriale.
Quindi la risposta è si, leggi la risposta una riga alla volta ossia una funzione del genere che chiami nel loop():
// Se ci sono caratteri da ricevere
// Verifico se il carattere letto è diverso da '\n'
// Si, è diverso, lo accumulo nel buffer
// altrimenti
// cerco nel buffer la stringa
// Trovata?
// Si, la memorizzo
// chiudo la connessione
// restituisco il dato ed esco
// Non c'è, ignoro la riga ossia azzero il buffer per la riga successiva
// Fine "se"
// Fine "se"
// restituisco ""
Ora traduci i commenti in istruzioni, quando hai fatto verifica se funziona come atteso, in caso contrario posta qui il TUO codice così vediamo.
Grazie per tutte le indicazioni che proverò a tradurre in codice (non sono un programmatore).
Per ciò che attiene l'API, nessun problema, non sono dati sensibili.
Grazie ancora!
Skorpio63:
Grazie per tutte le indicazioni che proverò a tradurre in codice (non sono un programmatore).
Beh dato che lo scopo del forum è anche quello di aiutare gli appassionati ma non c'è quello di scrivere codice da zero per conto terzi, se vuoi programmare Arduino o cerchi di imparare il linguaggio (cosa che ti consiglio, almeno un minimo) o paghi qualcuno per farlo per te.
Per cui direi inizia a fare qualche prova, cerca di tradurre i commenti che ti ho messo (sono anche già "indentati" per facilitarti la comprensione), e poi in caso di difficoltà posta qui il codice e cerchiamo di aiutarti ok?