Go Down

Topic: Webbino - Server web "dinamico" per Arduino (Read 38598 times) previous topic - next topic

SukkoPera

Uhm ok, apparentemente sembra tutto a posto allora. Prova a pingarlo.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

droidprova

Ed ecco la gradita sorpresa di oggi:



Ora provare Webbino è ancora più semplice, non avete più scuse :).
Grande Sukko!

Grazie 1000 per il tuo lavoro condiviso

As_Needed

#17
Nov 10, 2016, 05:55 pm Last Edit: Nov 10, 2016, 05:58 pm by As_Needed
Uhm ok, apparentemente sembra tutto a posto allora. Prova a pingarlo.
Già, infatti ho pingato sulla cmd e risponde... strano

Non è che sul config devo mettere porta 80 qui ?

#define SERVER_PORT 8000
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

SukkoPera

Ah erm, credo proprio di sì, ho lasciato quel default? Prova a contattarlo sulla porta 8000 allora!
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

As_Needed

#19
Nov 10, 2016, 06:13 pm Last Edit: Nov 10, 2016, 06:29 pm by As_Needed
Ah erm, credo proprio di sì, ho lasciato quel default? Prova a contattarlo sulla porta 8000 allora!
Contattandolo alla porta 8000 funziona tutto correttamente, svelato il mistero :) :) Comunque sì, era di default 8000

Cambia qualcosa di pratico da porta 80 a 8000?


Comunque oltre a essere più semplice e più efficiente a come posso notare ho risparmiato pure circa 4/5kb di memoria flash ;)
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

SukkoPera

#20
Nov 10, 2016, 09:08 pm Last Edit: Nov 10, 2016, 09:09 pm by SukkoPera
Accidenti, primo test primo bug! Correggo ASAP. Se vuoi avere il privilegio di aprire il primo issue o fare la prima pull request... ;)

Non cambia niente, se non che se la porta è 80 puoi evitare di specificarla nell'URL. Avevo messo 8000 perché sulla DigiX la porta 80 è occupata dall'interfaccia di configurazione e non può essere usata. Cosa geniale :smiley-confuse:. Però non volevo renderlo il default, era solo un cambiamento temporaneo!

Il risparmio di flash è dovuto alla nuova Link-Time Optimization aggiunta alla toolchain nelle ultime versioni. È davvero notevole, se conti che non ho cambiato niente!
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

As_Needed

#21
Nov 10, 2016, 09:42 pm Last Edit: Nov 10, 2016, 10:59 pm by As_Needed
Può capitare :) Comunque penso di lasciare porta 8000 perché accedo veramente poche volte in locale (al massimo se devo farlo basta mettere :8000, non è che è complicato :D ), sempre in remoto e quindi la porta interna è impostata per l'ip 192.168.1.51 dal modem nel port mapping e quindi non devo inserirla io ogni volta che accedo. ;)
Comunque sempre buono il risparmio di flash, meglio così!
Riguardo all'issue o pullrequest... anche io sono un niubbo totale di GitHub :D Ma per un issue non ci vuole niente. ;) Te lo apro volendo, ma se hai già risolto non c'è motivo.


Che poi nella config avevi scritto così, si vede benissimo che ti sei dimenticato poi di ricambiarla

* NOTE: Port 80 can not be used with DigiFi
 * NOTE: Currently changing this will have no effect with most cards, FIXME
 */
#define SERVER_PORT 8000


P.S. Comunque già che c'ero l'ho aperto un piccolo issue ;)

P.P.S. Nei link dei progetti che usano webbino, nel mio ho aggiornato il codice in allegato con anche un riferimento a questo topic per webbino ;)
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

tototer

Buongiorno a tutti,
Era tanto che volevo scrivere questo messaggio ma per problemi di tempo, non sono riuscito a scrivere. Dopo avere configurato tutto il webserver webbino e lavorato abbastanza bene sempre in locale. Era arrivato il momento di aprire le porte del router e vedere i dati da remoto.

Qui cominciano i problemi:

inizialmente ero convinto che i problemi derivassero dalla mia linea ADSL. Premetto che tutto il mio sistema arduino è alimentato da fotovoltaico offgrid e si collega al router principale tramite wifi (un access point da esterno prima con un antenna da 5dbi e da ieri con in antenna da 16dbi da quale esce un cavetto ethernet che collego ad arduino) visto che mi viene impossibile passare un cavo Ethernet da casa fino a dopo ho installato arduino.

Bene, pensavo fosse un problema di comunicazione ma non lo è. In quanto verificando il Ping tra il router principale ed arduino è di circa 54ms. Mentre per aprire il web server da remoto ci sta davvero tanto. Si parla di circa 8 secondi per caricare tutta la pagina (sono pochi kb) ed avvolte nemmeno riesce a caricarsi del tutto perché la pagina va in timeout e si chiude.

A questo punto ho dato un occhiata al web server del amico as_needed ed ho notato che anche la sua pagina è davvero lenta a caricare (credo tu l abbia direttamente collegata al router con un cavo Ethernet, guardando le foto foto del progetto o no?)

A questo punto chiedo cosa può essere perché è ingestibile una caricamento pagina così. 

pablos71

Hai provato con un altro sketch tipo webserver presente nell'ide, praticamente pagina non ce ne, però c'è tutta una serie di negoziazioni e messaggi tra server e client che non vedi, ma fa perdere tempo.
In teoria ci dovrebbe stare 4 secondi a te, comunque troppo. Se è così è un problema di rete tuo, verifica, dovrebbe essere praticamente immediato.
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

tototer

Grazie Pablos, mi hai dato un ottimo consiglio. Proverò quanto prima. Sai cosa mi ha fatto pensare che probabilmente non è dovuto al collegamento Wi-Fi il problema? Che quando sono con un pc connesso all access point riesco a navigare molto
Bene, naviga perfettamente come se fossi collegato direttamente al router principale
Che si trova a casa. Un altro indirizzo è stato pure che se con il computer di casa (piano terra) digito indirizzo arduino (terrazza) questo si carica lentamente, non come se fosse da remoto ma quasi. Mentre se digito l indirizzo del acces point (che si trova sempre in terrazza) riesco ad entrare nella configurazione perfettamente. Ciò mi fa pensare che il dati non si perdono nel collegamento wireless perché non riuscirei neppure a collegarmi al acces point. Quindi dovrebbe essere Bell ultimo tratto il problema (access point - arduino) molto probabilmente sul web server Arduino probabilmente perch  se provate ad andare sul web server di as_need vedrete che il caricamento per pochi kb di pagina è davvero lento

As_Needed

#25
Nov 13, 2016, 01:17 pm Last Edit: Nov 13, 2016, 01:21 pm by As_Needed
Io l'ho collegata con un power line al modem tramite cavi ethernet. La mia è lenta per un "problema" che dovrei risolvere con un standalone che per adesso non posso integrare. Praticamente ho un ciclo for che fa perdere del tempo per gestire delle interferenze derivate dall'anemometro senza far sballare i suoi dati. In ogni caso è tipo una decina di kb la mia pagina, poi ci devi contare che le risorse HW di Arduino sono veramente basse... Comunque non conosco il tuo caso, non posso sapere se sono tanti 8 secondi oppure no. Nel mio caso, non sono molti per via di quel problema che ho citato, ma comunque mi bastano, perché non ho bisogno di tanta velocità, se l'avessi è meglio ovvio, però almeno per ora mi accontento.
C'è anche una cosa che mi aveva consigliato pablos per velocizzare il loop che consiste nel non usare la seriale (se hai finito di fare le tue prove) e commentare un if nel main.cpp

P.S. Se ad esempio provassi a inibire la lettura dell'anemometro (l'ho già fatto una volta per vedere) la pagina si caricherebbe in qualche secondo ;) Almeno la mia sia chiaro
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

SukkoPera

#26
Nov 13, 2016, 01:32 pm Last Edit: Nov 13, 2016, 01:32 pm by SukkoPera
Ci sono due cose di cui tenere conto, per quanto riguarda la lentezza di caricamento:

La prima è interna a Webbino: la pagina viene inviata al "driver" della scheda di rete (la libreria che la gestisce, insomma) un byte alla volta. Ora, se il driver non fa buffering (e credo che nessuno lo faccia), ogni byte viene inviato al client in un pacchetto separato, cosa che causa un overhead enorme, visto che per trasmettere un byte ne viaggeranno almeno un centinaio sulla rete, tra header IP, TCP e ACK di risposta.

Questo è noto ma, per mia esperienza, sulle connessioni cablate non crea un grosso problema, le pagina si caricano comunque in maniera accettabile. Sulle connessioni wireless però è un problema più pesante, vista la maggiore latenza, lentezza e perdita di pacchetti. Per questo nei driver wifi Webbino implementa un buffer, in modo da mitigare il problema.

Ovviamente se il tuo Arduino è collegato via Ethernet ma poi in mezzo c'è un ponte radio, il buffering andrebbe fatto, ma Webbino non può essere a conoscenza di questo. Potrei forse spostare il buffering più ad alto livello e mettere una direttiva di configurazione per forzarne l'utilizzo, che ne pensate? Non dite "abilitalo sempre" perché la RAM è preziosa ;).

Altro problema è la sostituzione dei tag, che viene effettuata "in diretta" mentre la pagina viene inviata al client. Se la funzione che gestisce il tag impiega 5 secondi, ovviamente l'invio della pagina è sospeso per 5 secondi. Lì sta a voi scrivere uno sketch "furbo" che sostituisca i tag il più rapidamente possibile. Ad esempio, io non farei mai leggere i sensori in diretta, li leggerei per conto mio in background ogni tanto (1 minuto, 5 minuti) e salverei i risultati in una variabile, in modo da poter ritornare subito questa variabile al momento della sostituzione del tag.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

tototer

sei stato chiarissimo sukkopera, cosa mi consigli di fare a questo punto? da dove mi conviene partire?

As_Needed

Chiara la spiegazione Sukko. Dipende sempre da quanta RAM uno già spreca ;) Io per esempio ne utilizzo il 33% del Mega. Come ho detto va lento a caricarsi per quel ciclo for, mentre invece per quanto riguarda il caricamento completo della pagina penso sia dovuto al buffer ;)
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

SukkoPera

#29
Nov 13, 2016, 04:40 pm Last Edit: Nov 13, 2016, 04:41 pm by SukkoPera
Beh, sulla Mega la RAM non manca ed effettivamente potrebbe avere senso avere il buffer, ma Webbino vuole anche poter girare su una Uno con un ENC28J60, dove la RAM è praticamente satura.

Credo che farò come ho detto sopra, così salviamo capra e cavoli.

Per l'anemometro, fai come ho detto: non leggerlo al momento della richiesta della pagina, ma fallo a intervalli regolari e restituisci l'ultimo dato letto.

Idem per @tototer: che sensori hai?
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Go Up