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')