Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15

    datalogger con prima riga fissa e poi valori ogni 10 minuti su file .csv

    Buon pomeriggio a tutti, sto creando un data logger che preleva i dati da un mio arduino e li salva su un file .csv che ogni giorno cambia nome. questo è il contenuto del file:


    tempint,tempext,umidita,produzione,consumi,voltbat t,statobatt,orebatt,minint,maxint,minext,maxext,ti me
    10.33,13.00,29,0.208,0.01,12.036,48,157.72,6.03,27 .61,9.00,18.00,0:0010.42,13.00,29,0.215,0.01,12.01 2,46,-51.79,6.03,27.61,9.00,18.00,0:0310.33,13.00,29,0.2 16,-0.03,11.938,42,138.00,6.03,27.61,9.00,18.00,0:1010 .23,13.00,29,0.214,-0.03,12.207,58,190.58,6.03,27.61,9.00,18.00,0:2010 .23,13.00,29,0.220,0.01,12.036,48,157.72,6.03,27.6 1,9.00,18.00,0:3010.23,13.00,29,0.208,0.01,12.231, 59,193.86,6.03,27.61,9.00,18.00,0:4010.14,13.00,29 ,0.214,-0.03,12.207,58,190.58,6.03,27.61,9.00,18.00,0:5010 .05,13.00,29,0.218,-0.03,11.890,39,128.15,6.03,27.61,9.00,18.00,1:0010 .05,13.00,29,0.222,0.01,11.963,43,141.29,6.03,27.6 1,9.00,18.00,1:109.96,13.00,29,0.218,0.01,11.963,4 3,141.29,6.03,27.61,9.00,18.00,1:20

    è impostato ogni 10 min, preleva i dati da arduino e li salva sul file.
    ma la prima riga sono costretto ad aggiungerla a mano ogni giorno in ogni file:

    tempint,tempext,umidita,produzione,consumi,voltbat t,statobatt,orebatt,minint,maxint,minext,maxext,ti me

    esiste un modo per scrivere ogni giorno la prima riga fissa? cioè i nomi delle colonne

    tempint,tempext,umidita,produzione,consumi,voltbat t,statobatt,orebatt,minint,maxint,minext,maxext,ti me

    e poi a seguire i valori ogni 10 min, risultato il file cosi:

    tempint,tempext,umidita,produzione,consumi,voltbat t,statobatt,orebatt,minint,maxint,minext,maxext,ti me10.33,13.00,29,0.208,0.01,12.036,48,157.72,6.03, 27.61,9.00,18.00,0:0010.42,13.00,29,0.215,0.01,12. 012,46,-51.79,6.03,27.61,9.00,18.00,0:0310.33,13.00,29,0.2 16,-0.03,11.938,42,138.00,6.03,27.61,9.00,18.00,0:10

    questo è lo script che utilizzo, come imposto la prima riga fissa ogni giorno?grazie mille saluti
    Ultima modifica di tototer; 21-03-2017 a 16:06

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prima di scrivere i dati delle temperature, verifica se il file esiste e se non esiste lo crei inserendo anche la prima riga
    se invece il file esiste già, accodi i nuovi dati

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15
    Grazie mille per la risposta. Mi faresti un esempio con il codice? Scusami ma non sono molto ferrato con php... mi sto avvicinando adesso a questo linguaggio!

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Una cosa tipo questa
    Codice PHP:
    if(!file_exists("nomeDelFileCheCambia.csv")) {
        
    // Apri il file e  scrivi la prima riga con i nomi dei campi come fai ora per i valori, poi vai a capo, scrivi i valori e chiudi il file
    }
    else {
        
    // Apri il file e scrivi i valori come fai ora


  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15
    Grazie infinite, clasku!

    il sistema funziona perfettamente!

    ecco come ho scritto il codice:

    codice:
    $testo = $logger.",".$ora;
    
    
    $link = "dati/".$day."log.csv";
    
    
    $titoli = "tempint,tempext,umidita,produzione,consumi,voltbatt,statobatt,orebatt,minint,maxint,minext,maxext,time";
    
    
    
    
    if(!file_exists("$link")) {
        $var=fopen("dati/".$day."log.csv","a");
        fwrite($var,$titoli);
        fwrite($var,$testo);
        fclose($var);
    }
    else {
        $var=fopen("dati/".$day."log.csv","a");
        fwrite($var,$testo);
        fclose($var);
    }  
    
    
    ?>
    volevo chiedere un altra cosa:

    siccome la stringa che vado scrivendo ogni volta sul file .csv è composta cosi:

    codice:
    $testo = $logger.",".$ora;


    ed essendo la postazione dove è installato arduino in una zona dove il segnale telefonico (quindi il internet arriva a singhiozzo e lento) avvolte la componente
    codice:
    $logger
    non arriva e lo script invece di scrivere una linea completa tipo questa:

    17.62,17.00,27,3.670,0.01,13.696,147,483.01,6.03,2 7.61,9.00,18.00,9:50
    scrive una linea tipo questa:

    ,9:50

    cioè con solo la data, oppure avvolta, cosi:


    17.62,17.00,27,3.670,0.01,13.696,147,483.01,6.03,2 7.61,9.00,18.00,9:50,9:50 (con due orari)


    tutto questo rende il file non digeribile da google chart che non mi sviluppa il grafico se non trova il giusto numero di colonne cioè 13.

    posso fare il modo che se quando richiedo i dati ad arduino e questo non mi restituire la
    componente
    codice:
    $logger
    questo non si scrive completamente?

    grazie mille saluti


    Ultima modifica di tototer; 22-03-2017 a 16:56

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15
    ricordo che richiedo i dati ad arduino ogni 10 min tramite un crowjob, ancora grazie e saluti

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    scusa, ma $logger dove lo valorizzi?

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15
    i dati che mi arrivano da logger sono di questo tipo:

    10.33,13.00,29,0.208,0.01,12.036,48,157.72,6.03,27 .61,9.00,18.00,0:0010.42,13.00,29,0.215,0.01

    mi arrivano grazie ad un data scraping fatto in php da una semplice pagina testuale che mi genera il webserver di arduino.

    scusami se ho omesso il codice oggi pomeriggio... adesso non sono al mio pc ma mi mancano i file...

    cmq tieni conto che $logger mi restituisce una stringa di questo tipo ogni volta:

    10.33,13.00,29,0.208,0.01,12.036,48,157.72,6.03,27 .61,9.00,18.00,0:0010.42,13.00,29,0.215,0.01

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    se chiami un web server (quindi direi un URL) dovresti avere modo per gestire un errore di connessione o, al limite, devi gestire la presenza o meno di dati nella risposta
    in entrambi i casi (gestione errore di connessione o risposta vuota), puoi reiterare la richiesta al web server fino a che non ottieni la risposta che vuoi: ad esempio, metti il controllo in un ciclo while che termina quando hai ottenuto i dati, magari mettendo nel ciclo uno sleep di n secondi per evitare di uccidere il web server con richieste ripetute ogni millisecondo. E visto che ci sei, oltre a controllare che la risposta sia piena, controlla anche che contenga i dati che ti aspetti (numero campi, formato dei valori, ecc)

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    15
    eccoti il codice completo

    codice:
    <?php
    
    
    $uri = 'http://indirizzoipmioserver';
    
    
    $get = file_get_contents($uri);
    
    
    $iniziolog = strpos($get, "<!--INIZIOLOG-->");   // 16 caratteri
    //identifico la prima occorrenza di apertura del tag form
    
    
    $finelog = strpos($get, "<!--FINELOG-->"); 
    //identifico la prima occorrenza di chiusura del tag form a partire da pos1
    
    
    $logger = substr($get,$iniziolog+16,$finelog-$iniziolog-16); 
    //estraggo il codice html ivi contenuto
    //+7 per acquisire anche il tag </form>
    
    
    date_default_timezone_set('Europe/Rome');
    
    
    $data = date("d/m/yyyy");
    
    
    $ora = date("G:i");
    
    
    $day = date("y_m_d_");
    
    
    $testo = $logger.",".$ora;
    
    
    $link = "dati/".$day."log.csv";
    
    
    $titoli = "tempint,tempext,umidita,produzione,consumi,voltbatt,statobatt,orebatt,minint,maxint,minext,maxext,time";
    
    
    
    
    if(!file_exists("$link")) {
        $var=fopen("dati/".$day."log.csv","a");
    	fwrite($var,$titoli);
    	fwrite($var,$testo);
    	fclose($var);
    }
    else {
        $var=fopen("dati/".$day."log.csv","a");
    	fwrite($var,$testo);
    	fclose($var);
    }  
    
    
    ?>
    
    
    <?php
    
    
    $file = "$link";
    $newfile = 'log/dati/today_log.csv';
    
    
    $file = "$link";
    $newfile = 'log/dati/today_log.csv';
    
    
        if (!copy($file, $newfile)) {
        echo "Copia di $file non riuscita ...\n";
    }
    ?>
    mi faresti un esempio di come potrei strutturare la cosa?
    grazie mille saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.