Consiglio su dove memorizzare i dati

Buongiorno a tutti,
ho realizzato un progetto (monitoraggio energia casalinga) con l’aiuto di molti di voi.
Ormai è in funzione da quasi 4 mesi.

I dati generati dall’Arduino vengono memorizzati su una SD da 4 Gb.
Ho cosi la possibilità di esportarli in Excel oppure, di rileggere gli ultimi valori in caso di Reset.

Problema : Dopo 4 mesi il file generato sulla SD si aggira a circa 15Mb , l’arduino ci mette un bel po ad aggiungere i dati ! (rallentandomi il ciclo di misura)
Per non parlare di un reset, i tempi di attesa si allungano a quasi 4 minuti !!

Ultimamente pero l’arduino non riusciva piu a inizializzare la SD, cancellando tutti i dati l’Arduino rifunziona correttamente.

Questa variante di scrittura/lettura dati mi sembrava la piu facile ma purtroppo non si è rivelata la piu efficiente.

Mi chiedevo se esiste la possibilita di inviare tutto su un WebServer(pubblico) che abbia la possibilita di memorizzarmi anche tutti i dati (in modo da rileggere gli ultimi valori).

Ho provato con Xively (www.xively.com) funzionerebbe se non fosse che i tempi di risposta del server funziona a singhiozzi (certe volte anche un minuto!!), rallentandomi i tempi di calcolo di tutto il sistema !

In allegato la visualizzazione del mio progetto su un TFT 7"

Grazie e buona giornata
Remo

Io ti consiglio di creare un file per ogni log, con una parte fissa nel nome ed una variabile (es. data).
log20130903.txt
log20130902.txt
ecc..

In questo modo l'accesso al file è veloce

leo72:
log20130903.txt
log20130902.txt

Ho paura che come nome file quello sia troppo lungo

20130903.TXT
20130902.TXT

così potrebbe andare

Però potrebbe diventare macchinoso se non hai rtc a bordo, e c'è da gestire il passaggio tra le 23.59 e le 00.00 del giorno seguente.

Potresti generare un file che si chiama LAST.TXT che contiene solo l'ultima lettura, e ad ogni passaggio lo sovrascrivi (non append), mentre nello stesso momento appendi i dati nel log di pertinenza.
Per fare lo stesso mestiere attraverso un webserver devi avere ovviamente l'harware per accedere alla rete, e poi avere abbastanza risorse nella MCU per gestire il codice di send/retrieve dei dati .

Ciao Leo,
grazie del consiglio, leggendolo mi hai fatto venire un’altra idea.

Al momento scrivo su SD ad ogni impulso ricevuto che tradotto in numeri di righe :

1 Min : circa 3 righe
1 Ora : circa 180 righe
24 h : circa 4300 righe !!
1 mese: circa 129000 righe !! Arghhhh
1 anno : circa 1.500.000 righe !! Aiutooooo

Soluzione : in fondo mi basta il valore ad ogni ora che ridurrebbe di mooooltooo i dati contenuti sulla SD….circa 8500 righe annuali contro il milione e mezzo !!

Grazie del consiglio, provero a modificare lo sketch, salvera ogni ora inclusi i picchi di massimo consumo.

Anche se la cosa del WebServer mi stuzzica :--))

Grazie ancora e buona giornata

Remo

niki77:

leo72:
log20130903.txt
log20130902.txt

Ho paura che come nome file quello sia troppo lungo

20130903.TXT
20130902.TXT

così potrebbe andare

Però potrebbe diventare macchinoso se non hai rtc a bordo, e c'è da gestire il passaggio tra le 23.59 e le 00.00 del giorno seguente.

Potresti generare un file che si chiama LAST.TXT che contiene solo l'ultima lettura, e ad ogni passaggio lo sovrascrivi (non append), mentre nello stesso momento appendi i dati nel log di pertinenza.
Per fare lo stesso mestiere attraverso un webserver devi avere ovviamente l'harware per accedere alla rete, e poi avere abbastanza risorse nella MCU per gestire il codice di send/retrieve dei dati .

Si ho RTC a bordo e riesco a gestire il cambio delle 23.59
LAvoro con um Arduino Mega R3 che gestisce un TFT 7" (external supply),un RTC,un sensore di P/T/H,un Xbee.
pensi sia sufficiente per la gestione delle risorse ?

Saluti

Non è il 'quanto ce l'hai grosso' ma quanto lo usi :grin:

Quando compili vedi quanta flash utilizzi e ti regoli in base a quanta è la flash totale di quella MCU per vedere quanta memoria programma hai disponibile.
Non penso che tu abbia problemi di quel tipo, mentre invece non hai specificato se tra tutti i tuoi dispositivi hai l'adattatore di rete , sia essa cablata o wifi.

Scusa, nel post mio precedente ho dimenticato di menzionarlo.
Sono anche connesso alla rete tramite modulo ethernet.
allo stesso tempo mando i dati qui --> • Sen.se – The Internet of Things starts here
Pero non mi piace tanto poiche non posso fare un log nel passato.

Saluti
Remo

remino:
Pero non mi piace tanto poiche non posso fare un log nel passato.

Quella è una limitazione imposta dal servizio che stai usando.

Le alternative sono che ti vai a scrivere i dati letti su un db remoto mySql, poi derivi da quest'ultimo i dati per fare tutte le interrogazioni che ti servono.
Per fare questo però ti serve di avere un database, che sia in rete locale o remota poco importa, purchè sia raggiungibile.
Una volta che ti sei salvato tutti i dati su un server remoto hai infinite possibilità di visualizzazione e statistica, e sempre attraverso una semplice query recuperare l'ultima serie di dati letti.
Ovviamente tutto questo discorso sta in piedi fino a quando hai raggiungibilità tra il tuo dispositivo ed il database remoto.
Qualora questo non sia possibile meglio la soluzione SD , perlomeno per il recupero dati a seguito di reset.

Grazie Niki,
vedro di informarmi su quesi Database's, non sono molto ferrato in tema Mysql ecc...

Comunque mi piacerebbe poterli mandare su un DB remoto raggiungibile da ovunque, pero dovro farmene una cultura prima poiche io e mysql non ci conosciamo (ancora) :slight_smile:

Grazie delle info
Saluti
Remo

Guarda , il tema database è ampio ma anche molto interessante.

Una buona occasione per accrescere le tue conoscenze in materia.
Poi, per come fruire di tali servizi tramite arduino, chiedi pure , una mano non la si nega a nessuno!

Ti/vi ringrazio,
sto leggendomi qualcosa su Google Drive, vediamo un po cosa succede.

Saluti
Remo

Non è per scoraggiarti, ma google drive a parte non essere un database, è un cloud nemmeno troppo semplice da usare.
Io nei miei sistemi linux sono dovuto passare a dropbox (che ti sconsiglio ugualmente da utilizzare con Arduino perchè richiede una procedura di autenticazione e gestione mooolto complessa)

niki77:
Non è per scoraggiarti, ma google drive a parte non essere un database, è un cloud nemmeno troppo semplice da usare.
Io nei miei sistemi linux sono dovuto passare a dropbox ........

... esattamente la mia stessa esperienza ! +1

Guglielmo

Sto studiandomi la possibilita di mandare i dati su "pushingBox" che risolve i problemi dell'https.
Da li poi su Google docs....

Se avro news o domande a proposito mi rifaró vivo.

Intanto grazie per le dritte.

Saluti
R.

Seguendo questo Tutorial riesco a inviare i dati dall Arduino su Google Docs, passando da PushingBox.

http://www.jola.ro/proiecte/index.php/ethernet/arduino-si-google-docs (è in Rumeno ma con il Translator e un po di fantasia si capisce)

Ora sto studiando come rileggerli in caso di Reset.

Saluti
Remo

Qualche onsiglio su come rileggere i dati memorizzati dal google Docs sull'Arduino ?

PushingBox non offre purtroppo questa possibilita.

Grazie per qualsiasi dritta

Remo