Pachube - EthernetServer EthernetClient

Mi piacerebbe aprire un topic su Pachube, ho cercato un po' in rete, sto leggendo documentazione e le guide ufficiali, guardicchio gli esempi nell'ide ma ho dei dubbi.

IDE 1.0 Arduino2009 con eth shield officiale.
Al momento sull'arduino ho un web server.
Lo inizializzo con la classe EthernetServer server(80);
Tutto ok funziona.

Guardando l'esempio dell'ide per pachube vedo che devo inizializzare il client con EthernetClient client;.
Che faccio li metto entrambi? Oppure basta l'inizializzazione del server?

ciao camionista :slight_smile:

in che senso le metto entrambi? o fai da client o fai da server ... se fai da client sarà arduino il primo a trasmettere e il server risponderà, se fai da server sarà arduino a rispondere alle richieste

ciao

Ciao

sia per aggiornare un feed che per ottenere dati da uno esistente, ti basta la ethernetClient: sei tu infatti a collegarti a Pachube.
bye

@Pablos ciao ragazza Inesperta :stuck_out_tongue:

Spettate, mi spiego meglio.

Il mio arduino al momento fa da web server mostrandomi i valori dei sensori su una pagina web locale.
In più mi logga questi valori sulla sd della eth shield. E rende disponibile il file csv del log dalla suddetta pagina locale.

Già che ci sono vorrei, oltre a fargli fare queste cose, fargli mandare i dati dei sensori anche a Pachube.

Primo intoppo, posso usare l'eth shield al tempo stesso come web server e come client?

Si, la ethernet può fare sia da clent che da server, sinceramente ho provato con successo le 2 parti distinte e separate, ma non ho mai messo su entrambe le cose insieme, però ho visto su google parlare di arduino client/server, perchè ti servirebbero entrambe? come vorresti strutturare l'utilizzo della scheda? facci un esempio di quello che ti serve, è raro lo sviluppo di queste opzioni miscelate, ma potrebbe servire.
ciao

pablos:
Si, la ethernet può fare sia da clent che da server, sinceramente ho provato con successo le 2 parti distinte e separate, ma non ho mai messo su entrambe le cose insieme, però ho visto su google parlare di arduino client/server, perchè ti servirebbero entrambe, come vorresti strutturare l'utilizzo della scheda, facci un esempio di quello che ti serve

Oddio... Non so bene come farti un esempio O_o
Andiamo con ordine.

Al momento ho già tutto fatto e funzionante, tranne la parte di pachube.
Quello che ho è questo:
Ricezione dati via SOFTSERIAL da un altro arduino ogni minuto
I dati vengono immagazzinati e mostrati su una pagina web generata dinamicamente con le sottoclassi della ethernet.h.
Ogni cinque minuti i dati vengono presi, ponderati (viene fatta una media) e loggati su una sd.
La parte del webserver è strutturata secondo il tutorial di ladyada

Quello che vorrei fare io è inserire all'interno del ciclo di recezione dati softserial (che credo viaggi con un interrupt) l'invio dati a pachube.

if (receiveData) {
... store data...
send data to pachube }

e poi la parte del web server

  EthernetClient client = server.available();
if (client) {

Si capisce qualcosa di quello che ho scritto?
Se hai direttamente i link della combinata client/server passameli che me li studio e se poi mi inchiodo torno qui :slight_smile:

Certo che arduino corredato di Ethernet shield può fare da client e allo stesso tempo da server. Anzi se ti interessa questo è proprio il nuovo trend tecnologico dei sistemi embedded, prendono il nome di embedded web server. Le applicazioni non sono così "rare": pensa ad un web server come quello che hai realizzato tu che immagino serva ai Client pagine HTML statiche all'interno delle quali visualizzi informazioni circa lo stato dei sensori connessi al sistema e al verificarsi di un certo evento(superamento di una certa soglia ecc) vuoi che il sistema invii una mail d'allarme ad un indirizzo preventivamente memorizzato. Bhè il sistema ora dovrà funzionare da Client perchè dovrà accedere ad un server SMTP, gestire la comunicazione secondo il protocollo SMTP al fine di inviare la mail.
Per la programmazione la risposta è affermativa: dovrai definire un server come hai già fatto, ma anche un Client con il quale potrai effettuare le tue richieste al server Pachube.

Ok, penso effettivamente di esserci riuscita, tirando un po' all'ugello di canide però...
Piazzando questo codice di prova, all'interno del void loop e nello specifico all'interno di un ciclo if...
effettivamente ottengo "connected".

    EthernetClient client;
    Serial.println(F("connecting..."));
    // if you get a connection, report back via serial:
    if (client.connect("www.pachube.com", 80)) {
      Serial.println(F("connected"));
      client.stop();
    } 
    else {
      // kf you didn't get a connection to the server:
      Serial.println(F("connection failed"));
      client.stop();
    }

Però ho notato che se faccio una richiesta al web server MENTRE il web client sta tentando la connessione il web server non è disponibile.
Confermate ciò o sono io che sbaglio qualcosa?

EDIT: No, no, no.
Questo codice non va. Se metto la connessione offline... comunque ottengo connected.

Manu, suggerimenti su come strutturare questo codice di cui mi dici? :\

Ciao,
qui :http://community.pachube.com/node/693 c'è un esempio di come far parlare arduino con pachube.
dò per scontato che non ci siano altri problemi di rete ad impedire il corretto funzionamento.

Sull'ide 1.0 ci sono esempi un pò datati dell'uso di pachube, infatti fanno uso delle vecchie api e gli esempi non sono del tutto compatibili con le nuove api di pachube.
La cosa la segnalai a suo tempo a Massimo Banzi ma.... gli esempi non sono stati aggiornati.
Sul mio blog trovi il codice di come utilizzare pachube con le sue nuove api.

E comunque sia, non mi sento di consigliarti pachube, ho trovato un servizio che fa la stessa cosa ma senza limitazioni ed è open: https://thingspeak.com/
Funziona allo stesso modo di pachube, se non meglio perchè open.

O cavoletti. Ce l'ho fatta. O_o
Ora ho web server su lan interna, sd logging e datastream a thing speak.
Al momento invio solo un valore, non ho ancora lavorato per comporre la stringa definitiva, però funziona tutto O_O
Non pensavo mica di riuscirci.

Per far convivere web client e web server mi è stato molto d'aiuto un post sul forum internazionale con il codice di esempio.
Ethernet client ed Ethernet server possono convivere, a patto di assegnare porte diverse (ho messo il server sulla 84).
Bisogna ricordarsi di stoppare il client alla fine del ciclo if che lo attiva ed aggiungerci un piccolo delay (500);
EDIT: Altrimenti capita che al secondo ciclo non riesca ad effettuare la connessione.
Questa cosa è fondamentale, altrimenti il web client non riesce a convivere con il web server e fallisce tutte connessioni successive alla prima.

Ho dovuto usare l'IDE 22 però.
L'ide 1.0 è troppo dispendioso in termini di ram e di sketch. Le librerie aggiornate sono spesso significativamente più grosse.
Con IDE 22 sembra starci tutto ed ho ancora 380 di FREERAM e 4 k di sketch per comporre la mia stringa finale.

@Trisonic
Alla fine ho usato thingspeak, perché mi sembrava più semplice comporre il codice da inviare.
Però ha il limite di massimo 8 stream, o sbaglio? Pachube da stream illimitati.
Cmq lascio su ad inviare un paio di ore, come test.
Poi inizierò a lavorare alla stringa... e mi sa che vi romperò le scatole perché ho delle float ed un unsigned long :\

Ok, sto fisicamente iniziando ad odiare pachube...
I tutorial sono tutti diversi sulla sintassi, c'è confusione, ci capisco poco.
Thinkspeak ha funzionato in due minuti.
@Brain l'esempio del tuo link non sono riuscita a farlo andare.

Btw, questa è la PUT che eseguo ma su pachube non appare nulla.
Segue il Serial.print:

Connecting to Pachube...
PUT /v2/feeds/46722.csv HTTP/1.1
Host: api.pachube.com
X-PachubeApiKey: la-mia-key
Content-Length: 5
Connection: close

A,600

Su pachube ho un datastream chiamato A. Vedete qualche errore nella sintassi? (dando per scontato che la key sia corretta).
In alternativa qualcuno può passarmi il listato corretto ed aggiornato dei client.print per pachube?
Grazie :slight_smile:

così a occhio sembra ok... prova a stampare il return code di pachube e vedi se ti da codice "200" (= ok):

DanielaES:
Ok, sto fisicamente iniziando ad odiare pachube...
I tutorial sono tutti diversi sulla sintassi, c'è confusione, ci capisco poco.

non ho usato thingspeak ma so che è una valida alternativa a pachube.

è vero, ci sono molti tutorial, ma la maggior parte di questi usano le VECCHIE api di pachube.... leggi gli esempi sul mio blog che fanno uso delle NUOVE api di pachube... prendi quelli ed usali come riferimento.

Trisonic:
è vero, ci sono molti tutorial, ma la maggior parte di questi usano le VECCHIE api di pachube.... leggi gli esempi sul mio blog che fanno uso delle NUOVE api di pachube... prendi quelli ed usali come riferimento.

Volete farvi due risate?
Ero già andata sul sito di trisonic, la prima volta che me lo aveva consigliato qui sul topic, ma mi sono distratta guardando la foto di lui da bambino, ho vagato un po' tra i ricordi della mia infanzia ed ho chiuso il sito dimenticandomi perché lo avevo aperto -______-'
Quando ho riaperto il sito ho detto "ehi ma io questa foto l'ho già vista!"
Oro olimpico storditi 2012 - 2016? :smiley:
Cmq ho implementato il tuo esempio con un singolo datastream nel mio codice... funziona :slight_smile:

Però, cazzarola, è obbligatorio usare un round robin per mandare più datastream??
Primo, il round robin non lo capisco, secondo faccio fatica a programmarlo in PROGMEM.
Non c'è davvero modo di comporre una stringa con pachube e mandare quella?
Leggendo i tutorial del sito su pachube sembra di si ma oramai non capisco più cosa è obsoleto e cosa no...

DanielaES:
Non c'è davvero modo di comporre una stringa con pachube e mandare quella?

1 richiesta http => 1 aggiornamento datastream

Pare che non ci sia altro modo... è un pò antipatica come cosa.

PS
Capita spesso anche a me andare in qualche sito e dimenticare perchè ci son capitato....

PPSS
Per essere più precisi, probabilmente, è meglio dire "polling" che "round robin".

Trisonic:

DanielaES:
Non c'è davvero modo di comporre una stringa con pachube e mandare quella?

1 richiesta http => 1 aggiornamento datastream
Pare che non ci sia altro modo... è un pò antipatica come cosa.

E' moltissimo antipatica.
Pachube addio, benvenuto thingspeak.
Vado a studiarmi sprintf per vedere di mettere quelle float nella stringa :slight_smile:

EDIT: questo topic si può considerare risolto... visto che alla fine sono riuscita a congiungere web server e web client e che pachube, con le sue noiose limitazioni, cmq alla fine va.

DanielaES:
Pachube addio, benvenuto thingspeak.

appena puoi, potresti elencare le eventuali limitazioni di thingspeak?

Trisonic:

DanielaES:
Pachube addio, benvenuto thingspeak.

appena puoi, potresti elencare le eventuali limitazioni di thingspeak?

Yes, appena riesco a mettere su la stringa volentieri, ho già visto un paio di cose non propriamente comode... ma considerato che pachube non accetta le stringe, me le faccio andar bene.
Anyway se interessa dopo aver testato un po' thingspeak apro un topic appositamente per recensirlo :slight_smile:

DanielaES:
apro un topic appositamente per recensirlo :slight_smile:

dovrebbero fare una sezione ad hoc solo per te!!!!
mai pensato ad un blog!?