Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273

    Richiesta aiuto per creare grafico da file di testo

    Ciao a tutti,

    dopo quasi un anno di assenza eccomi di nuovo qui
    Non ho abbandonato Linux, ma mi sono dedicato ai sistemi embedded basati su Linux kernel come OpenWrt e Raspberry.

    Ho bisogno di aiuto

    Ho messo su un misuratore di radiazioni ionizzanti (contatore geiger) con un raspberry e un modulo dedicato per arduino.

    Potete trovare maggiori dettagli nel mio forum personale dove metto tutti i miei progetti:
    http://49v.com/viewtopic.php?f=47&t=227&p=518#p518

    Praticamente effettuo una lettura ogni minuto e la inserisco in un file di testo che poi viene visualizzato tramite browser.

    Ora dovrei generare un grafico da mettere in una pagina web con l'andamento della radiazione nel tempo.

    Il file e' cosi' strutturato:

    ven 11 gen 2019 20:45:23 CET: CPM=9
    ven 11 gen 2019 20:45:23 CET: 0.073080 uSv/h
    ven 11 gen 2019 20:46:23 CET: CPM=5
    ven 11 gen 2019 20:46:24 CET: 0.040600 uSv/h
    ven 11 gen 2019 20:47:24 CET: CPM=5
    ven 11 gen 2019 20:47:24 CET: 0.040600 uSv/h
    ven 11 gen 2019 20:48:24 CET: CPM=6
    ven 11 gen 2019 20:48:24 CET: 0.048720 uSv/h
    ven 11 gen 2019 20:49:24 CET: CPM=11
    ven 11 gen 2019 20:49:24 CET: 0.089320 uSv/h
    ven 11 gen 2019 20:50:24 CET: CPM=6
    ven 11 gen 2019 20:50:24 CET: 0.048720 uSv/h
    ven 11 gen 2019 20:51:24 CET: CPM=7
    ven 11 gen 2019 20:51:24 CET: 0.056840 uSv/h
    ven 11 gen 2019 20:52:24 CET: CPM=9
    ven 11 gen 2019 20:52:24 CET: 0.073080 uSv/h
    ven 11 gen 2019 20:53:24 CET: CPM=11
    ven 11 gen 2019 20:53:24 CET: 0.089320 uSv/h
    ven 11 gen 2019 20:54:24 CET: CPM=2
    ven 11 gen 2019 20:54:24 CET: 0.016240 uSv/h
    ven 11 gen 2019 20:55:24 CET: CPM=7
    ven 11 gen 2019 20:55:24 CET: 0.056840 uSv/h
    ven 11 gen 2019 20:56:24 CET: CPM=5
    ven 11 gen 2019 20:56:24 CET: 0.040600 uSv/h
    ven 11 gen 2019 20:57:24 CET: CPM=9
    ven 11 gen 2019 20:57:24 CET: 0.073080 uSv/h
    ven 11 gen 2019 20:58:24 CET: CPM=10
    ven 11 gen 2019 20:58:24 CET: 0.081200 uSv/h
    ven 11 gen 2019 20:59:24 CET: CPM=9
    ven 11 gen 2019 20:59:24 CET: 0.073080 uSv/h
    ven 11 gen 2019 21:00:24 CET: CPM=8
    ven 11 gen 2019 21:00:24 CET: 0.064960 uSv/h

    c'e' un'anima pia che puo' indicarmi come posso fare?

    P.S.: gnuplot non mi fuziona perche' non ho nessun server X (headless).
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  2. #2
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  3. #3
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Questo e' lo script che mi spara i dati dentro la dir /var/www/rad in un file che ha il nome della data (ogni giorno cambia):

    codice:
    root/geiger_tube/geiger_tube 2>&1 | awk '{ print strftime("%c: "), $0; fflush(); }' | tee /var/www/rad/$( date '+%d-%m-%Y' ) &
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  4. #4
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Qualcosa sono riuscito a fare, non mi soddisfa ancora ma e' un inizio ,
    innanzitutto ho importato i dati dal file CSV in un DB MySQL, poi ho usato python, pandas e ploty

    https://plot.ly/~pilovis/6/utext-uus...-uunix-time/#/

    nell'asse delle X c'e' il Unix_time, in quello delle Y c'e' il valore di radiazione in microSievert/ora, l'intervallo di misura e' di un minuto, il grafico si riferisce ad oggi, i dati sono reali.
    Ultima modifica di pilovis; 12-01-2019 a 22:45
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  5. #5
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Qui ho riportato tutta la storia fino a questo punto, con codici e spiegazioni:
    http://49v.com/viewtopic.php?f=47&t=227
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  6. #6
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Giusto per completezza di informazione ecco il codice che ho creato in una notte insonne per importare i dati dal file csv in MySQL e il codice per inviare i dati da MySQL al programma di plottaggio:

    esportare i dati nel file csv
    print_rad2csv.sh
    codice:
    #!/bin/bash
    /root/geiger_tube/measure 2>&1 | awk '{ print strftime("%s %Y-%m-%d %H:%M:%S"), $0; fflush(); }' | sed -e 's/\s\+/,/g;w /var/www/rad/readings.csv' &

    nota: l'output generato e' cosi' strutturato:
    [unix-time,date,time,value,unit of measure]
    1547278704,2019-01-12,08:38:24,0.024360,uSv/h
    il unix_time mi serve come chiave univoca nel DB per evitare di importare doppioni

    importare i dati dal file csv in MySQL
    import_csv2sql.sh
    codice:
    #!/bin/bash
    /usr/bin/mysql -upilovis -pSECRET --local_infile=1 data -e "LOAD DATA LOCAL INFILE '/var/www/rad/readings.csv' INTO TABLE letture_radiazioni FIELDS TERMINATED BY ',' enclosed by '\"



    inviare i dati al programma di plottaggio web
    plot_graph.py
    codice:
    import MySQLdb
    conn = MySQLdb.connect(host="localhost", user="pilovis", passwd="SECRET", db="data")
    cursor = conn.cursor()
    cursor.execute('select unix_time, date, time, value, unit from letture_radiazioni');
    rows = cursor.fetchall()
    import pandas as pd
    df = pd.DataFrame( [[ij for ij in i] for i in rows] )
    df.rename(columns={0: 'unix_time', 1: 'date', 2: 'time', 3: 'value', 4: 'unit'}, inplace=True);
    df = df.sort(['value'], ascending=[1]);
    import plotly.plotly as py
    from plotly.graph_objs import *
    py.sign_in('pilovis', 'SECRET')
    unit = df['unit']
    
    trace1 = Scatter(
         x=df['unix_time'],
         y=df['value'],
         text=unit,
         mode='markers'
    )
    layout = Layout(
         xaxis=XAxis( type= 'linear', title='unix_time' ),
         yaxis=YAxis( type= 'linear', title='uSv/h' )
    )
    data = Data([trace1])
    
    fig = Figure(data=data, layout=layout)
    py.iplot(fig, filename='radiation')
    Ultima modifica di pilovis; 12-01-2019 a 23:18
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  7. #7
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Per il momento ho abbandonato l'idea di creare un grafico in tempo reale, troppo casino per avere qualcosa che sia free

    Ho comunque creato una pagina web che mostra le misure di radiazione Gamma e permette anche di vedere il file csv giornaliero con le ultime misure effettuate oltre alla possibilita' di scaricare il dump completo del database (mysql) con lo storico di tutte le misurazioni.

    qui c'e la pagina web aggiornata in tempo reale: http://ditta.com:887/

    ho messo online anche un'altra pagina web che mostra invece i valori di unidita', temperatura e pressione atmosferica: http://vinchio.ditta.com:888/



    Ultima modifica di pilovis; 16-01-2019 a 05:43
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  8. #8
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Scusate, questo e' il link giusto:

    http://vinchio.org
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  9. #9
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,658
    dopo tutti questi post solitari... scrivo per ringraziarti della tua condivisione.

    non volevo farti sentire solo

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    puoi cercare nel link
    https://www.highcharts.com/demo

    vi sono molti esempi tra cui un paio "live", ogni esempio é fornito di codice
    il codice é privo di costi per "uso personale"

    lo sto usando dal 2011 ed é particolarmente valido

    ho creato una base js (qualcosa come un'interfaccia) che riceve i dati da php e visualizza il grafico
    ogni script php raccoglie i dati necessari per lo specifico grafico e richiama il js

    per farmi capire, ti posto alcune righe di js che ricevono i valori da php
    codice:
    $(document).ready(function()
    {
     var SPW_Chart = '<?php echo ( empty($SPW_Chart) ? ''  : $SPW_Chart );  ?>',
      SPW_Title = '<?php echo ( empty($SPW_Title) ? 'Title' : $SPW_Title );  ?>',
     var SPW_xAxis = <?php echo json_encode($SPW_xAxis);   ?>;
     var SPW_yAxis = <?php echo json_encode($SPW_yAxis);   ?>;
     var SPW_ySeries = <?php echo json_encode($SPW_ySeries); ?>;

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 © 2024 vBulletin Solutions, Inc. All rights reserved.