Go Down

Topic: Ethernet.h e intercettare GET (Read 4 times) previous topic - next topic

llluca

PAblos Lo stavo commentando io,
mi hai preceduto di poco


BaBBuino

Ho le orecchie giù...



Eddaje che se no ci metto 6 mesi!

Cmq grazie! :D

BaBBuino


e abbi pazienza e abbi pazienza e abbi pazienza, intanto il tuo home domotic te lo abbiamo fatto noi ... cacchio vai a cercare su internet e capisci come abbiamo fatto noi ... perchè noi siamo informatici? anch'io sono elettronico e non un informatico...


if (query.indexOf("luce") > 0){   // cerca il pezzo LUCE nel totale della stringa che si chiama query!
         String parziale =  query.substring(9,12); //nella stringa ci sono altri valori a seguire il valore on-off composto da 2-3 cifre
char thisChar[query.length() +1]; // preleva i caratteri!
parziale.toCharArray(thisChar, parziale.length()+1) ;
v = atoi(thisChar);     // lo converte in intero!    
                 analogWrite(5, v); // prende l'intero e lo piazza nel comando analogWrite!

Provalo fai un debug e vedi cosa fa sto pezzo ... cerca atoi e vedi a cosa serve, cerca substring e vedi cosa serve
STUDIA!!!


il C lo conosco bene, quindi atoi non mi è sconosciuto. Mi sono sconosciuti tutti i linguaggi "nuovi".

Quanto all'analog write non è un valore analogico il dimmer, ma un intero che mi determina il ritardo dell'impulso PWM rispetto al passaggio per lo zero della sinuosoide.

Ora faccio una prova conm uno scheletro di Web server fuori dal mio progetto,e vedo cosa succede.

pablos

#48
Dec 04, 2011, 09:30 pm Last Edit: Dec 04, 2011, 09:39 pm by pablos71 Reason: 1
Scusa Luca, visto che tu sei esperto di php html js, mi chiariresti una cosa?

Arduino può collegarsi a un sito inviando un istruzione a un file.php in ascolto e questo in teoria alla domanda giusta dovrebbe rispondere.... ecco la mia idea era questa, visto che arduino non possiede un orologio interno se non fatto con un millis un po' medioevale, a ogni reset andrebbe reimpostato, oppure con componenti esterni, vorrei prelevare l'ora pubblicata sui siti dell'ora esatta che sono sincronizzati con l'orologio atomico.

Domanda possiamo prelevare l'ora da qualche sito, riusciamo in qualche modo a leggere la pagina  e prelevare solo quei caratteri?
ad esempio da uno di questi
http://www.miniportale.it/miniportale/orologio.htm
http://www.portale.it/orario.htm
http://www.horlogeparlante.com/it/
http://www.inrim.it/ntp/webclock_i.shtml

Conosci qualche sito dove fare una richiesta dato e farsi restituire un date, un time?
ciao
no comment

llluca

#49
Dec 04, 2011, 10:36 pm Last Edit: Dec 04, 2011, 10:38 pm by llluca Reason: 1
<OT>
Ciao,
Purtroppo non sono un  esperto ...  :~

Si può sincronizzare un pc come dici tu ma come fare con Arduino prorio non saprei
anche perchè php non posso usarlo su arduino, usare un pc per fare questo non mi sembra utile
forse utilizzare Web client e cerca il pezzo giusto boo ...
mi viene in mente  XML e arduino esiste qualche libreria?
</OT>
Rimango ancora molto incerto  su quale librerie usare per interpretare dati senza il Refresh della pagina

BaBBuino

Anchio vorrei sapere come intercettare i dati senza aggiornare la pagina...

Ho bisogno di un suggerimento in HTML:

Ho messo un bottone submit <button type=\"submit\">invia</button> di fianco alla textBox dell'esempio dello slider, ma pur aggiornando la pagina, non mi manda sulla barra degli indirizi la stringa numerica che c'è dentro la TextBox.

Come devo arrangiare un pulsante che mi prenda i valori della TextBox?  :~

pablos

#51
Dec 04, 2011, 10:42 pm Last Edit: Dec 04, 2011, 11:27 pm by pablos71 Reason: 1
@ lluca - va bhe pazienza grazie comunque, vedo se trovo qualcosa sennò mi metto l'animo in pace :)
Code: [Select]
Rimango ancora molto incerto  su quale librerie usare per interpretare dati senza il Refresh della pagina
parli del tinyweb server? pensavo avessi rinunciato a questo.....

Per avere un dato aggiornato sul browser il criterio di base è:
IL client invia ad arduino ogni x ms una stringa ad es "manda_dati" arduino risponde e nella funzione Success ricevi lo status delle porte analog o digit con una stringa che ti strutturi a piacimento, nessuna libreria...... è un comando js
window.setTimeout(funzione del POST, 500, url); // tempo di aggiornamento 500ms, non faccio un reload, ma è come se premessi il tasto invia ogni mezzo secondo dal text box dove scrivi i comandi da inviare ad arduino, non so se mi sono capito :) ... guarda che è davvero facile


@babbuino - sul tuo come è strutturato credo ci sia poco da fare per avere un aggiornamento automatico, e poi scusa su cosa dovremmo lavorare su uno sketch immaginario? Capita che una modifica ti obbliga a rifare tutto il lavoro, quindi l'hai fatto cosi' e tienilo così, altrimenti butta tutto e rifallo da capo con un sistema diverso.
nel tuo caso avendo una pagina html incorporata la butto li, ma dovresti dire ad arduino di inviare un dato all'ip (che dovrà essere statico) del tuo pc dove c'e' un script in ascolto capace di capire la stringa, lo dovrei fare per dirti di preciso come.


no comment

llluca


parli del tinyweb server? pensavo avessi rinunciato a questo.....

No assolutamente ... 
se posso aprofittare....  (aspetto ancora la II puntata)
Anche se il tuo secondo suggerimento è motooooo + semplice

@babbuino Il forum è per questo con + mani forse  arriviamo alla fine ...

pablos

se non riesci dimmelo, domani sera modifico il pezzo
no comment

BaBBuino

Il refresh automatico non è un problema con un TAG del genere:

<meta http-equiv=refresh content=5 >

che mi aggiorna la pagina ogni 5 sec.

Ora mi servirebbe che il pulsante Submit mi succhi la stringa dentro la textBox e la inviii sulla barra degli indirizzi, e per me il gioco è fatto. Questo per passare il valore dello slider alla variabile dimmer (valore che decide la luminosità della lampada) così vario la luce con il dimmer invece che con dei pulsanti che agiscono su deiu numeri preimpostati (scenari)

Agevolo immagine della pagina di prova dello slider, con pulsante tipo Submit-invia di fianco:


BaBBuino


e abbi pazienza e abbi pazienza e abbi pazienza, intanto il tuo home domotic te lo abbiamo fatto noi ... cacchio vai a cercare su internet e capisci come abbiamo fatto noi ... perchè noi siamo informatici? anch'io sono elettronico e non un informatico...


if (query.indexOf("luce") > 0){   // cerca il pezzo LUCE nel totale della stringa che si chiama query!
         String parziale =  query.substring(9,12); //nella stringa ci sono altri valori a seguire il valore on-off composto da 2-3 cifre
char thisChar[query.length() +1]; // preleva i caratteri!
parziale.toCharArray(thisChar, parziale.length()+1) ;
v = atoi(thisChar);     // lo converte in intero!    
                 analogWrite(5, v); // prende l'intero e lo piazza nel comando analogWrite!

Provalo fai un debug e vedi cosa fa sto pezzo ... cerca atoi e vedi a cosa serve, cerca substring e vedi cosa serve
STUDIA!!!


Allora... questo codice io ce l'ho GIA'!

Nel senso che uso un sistema leggermente diverso per interpretare il comando, ma mi funziona già! E io che subito pensavo fosse una roba in Jquery e non mi sono accorto che era codice C per arduino!! Che niubbo!

Ilproblema (ora) è di catturare quel bel valore che va avanti e indietro con lo slider e che mi compare nella TextBox. Devo recuperarlo con un pulsante che appunto poi lo gestisco con la funzione query.indexOf().

Il codice della slider+TextBox è questo:

Code: [Select]
<!DOCTYPE html><html><head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script></head>

<style>#demo-frame > div.demo { padding: 10px !important; };</style>

<script>
$(function() { $( "#slider-vertical" ).slider({orientation: "vertical", range: "min", animate: true, min: 0, max: 255, value: 0,
slide: function( event, ui ) { $( "#amount" ).val( ui.value ); }});
$( "#amount" ).val( $( "#slider-vertical" ).slider( "value" ) );});

</script>

<div class="demo"><p><label for="amount">Luce:</label>
<input type="text" id="amount" style="border:1; color:#ff0000; font-weight:bold;" /></p>
<div id="slider-vertical" style="height:200px;"></div></html>

pitusso

Quote
ecco la mia idea era questa, visto che arduino non possiede un orologio interno se non fatto con un millis un po' medioevale, a ogni reset andrebbe reimpostato, oppure con componenti esterni, vorrei prelevare l'ora pubblicata sui siti dell'ora esatta che sono sincronizzati con l'orologio atomico.

Domanda possiamo prelevare l'ora da qualche sito, riusciamo in qualche modo a leggere la pagina  e prelevare solo quei caratteri?


io avevo studiato uno dei seguenti metodi da accompagnare alla libreria swRTC sviluppata da Leo (http://arduino.cc/forum/index.php/topic,73496.0.html), poprio per l'inizializzazione della data/ora:
1- recupero della data/ora usando un pagina php che, interrogata, torni proprio data e ora (funzione date() di php);
2- recupero della data/ora usando un sito qualsiasi (o quasi): ogni sito, interrogato con una GET, torna anche data/ora formattata in questo modo: Mon, 14 Nov 2011 16:42:03 GMT
da qui si recupera data e ora informato GMT (da qui la mia richiesta a Leo della feature DST, per una conversione corretta  :P)
3- recupero della data/ora facendo una chiamata GET ad Arduino specifica, per passare i parametri necessari; per esempio: http://ip_arduino/settime=2011.12.05.10.39.00
questa chiamata viene gestita da una pagina php attraverso curl; se
Quote
demonizzata
,  questa pagina php può aggiornare data e ora in maniera schedulata.

Alla fine avevo optato per l'opzione 3, più che altro perchè la 1 e 2 richiedono un client (che dovevo istanziare appositamente), mentre la 3 richiede un server (che già ho istanziato).

Nulla vieta di utilizzare un metodo come 1 o 2 abbinato ad uno dei siti da te indicati, l'importante è che data/ora siano scritti in HTML e non su applet JAVA / Flash (come nella maggior parte dei casi).

Non ho elencato qui sopra il metodo che sarebbe il più idoneo, ovvero la chiamata ad un NTP server.
http://arduino.cc/en/Tutorial/UdpNtpClient

veseo

@pitusso,

C'è da considerare che l'NTP ha come vantaggio principale la compensazione del tempo di trasmissione del frame dati contenente l'orario e la data.

Senza una compensazione si riesce a sincronizzare con accuratezza di qualche secondo.

Saluti,
Dario.
Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

pablos

#58
Dec 05, 2011, 07:32 pm Last Edit: Dec 06, 2011, 12:29 am by pablos71 Reason: 1
grazie pitusso
infatti sto studiando il servizio NTP server, quello che usa windows vuole delle chiavi di riconoscimento, altri siti ti forniscono il metodo di richiesta e il formato di risposta, l'ho cercato un po' ieri sera poi provo e vi so dire. Per quello che riguarda il ritardo tra richiesta e risposta direi che è irrilevante anche se fosse 30 sec, teniamo conto che non posso chiedere a un server che non è mio una richiesta ogni secondo. Dopo un ora l'amministratore mi banna l'ip. Figuriamoci se tutto il mondo che ha arduino mette lo stesso script e fa richiesta al server di inviare l'ora ogni minuto, inevitabile intasarlo in pochi secondi sbattendoci fuori a tutti.

la richiesta va fatta una volta al gg o ogni due gg (windows la fa 1 volta a settimana) , per il resto va avanti il millis.
no comment

llluca


Ilproblema (ora) è di catturare quel bel valore che va avanti e indietro con lo slider e che mi compare nella TextBox. Devo recuperarlo con un pulsante che appunto poi lo gestisco con la funzione query.indexOf().


Aggiungi un pulsante :
Code: [Select]
client.print("<form><input type=text name='valore' >");
          client.print("<br> <input type=submit name='intensi' value=intensi ></form>");


oppure + bello il pulsante lo nascondi: con input type=hidden e JavaScript

   
Code: [Select]
client.print(' onchange='this.form.submit()'  />");
     client.print("<input type=hidden name='intensi' value=intensi ></form>");


ma.....
Stiamo usando jquery  quindi....

..........................................


Luca

Go Up