[OT] grafici da serie temporali

Ciao, delo

Uno dei programmi da te elencati plotta anche in tempo reale dati provenienti dalla seriale? Vorrei fare un grafico con orario e frequenza provenienti da una seriale su USB.

--

Reply to
LAB
Loading thread data ...

Ciao NG,

Scusate l'OT ma sono diversi giorni che le sto provando tutte con zero successo. Ho dei dati da un po' di sensori connessi a vari arduini che vorrei plottare in modo decente. Si sprecano vari plotter seriali e altri software ma per un motivo o per l'altro non sono quello che vorrei.

Anzitutto vorrei che il programma fosse entrocontenuto o al massimo via browser, mentre con i plotter seriali devo far partire i programmi di cui è a corredo. Ci sarebbero gephi e kst ma sono adatti ad applicazioni scientifiche di una certa importanza e decisamente poco inclini al "live".

Allora ho trovato Gragfana (grafica spettacolosa) che a sua volta mi ha fatto conoscere Prometheus, entrambi interfaccia web. L'unico protocollo su cui c'è materiale è l'interfaccia tramite MQTT ma non c'è stato verso di compilare il plugin per Grafana, né sotto win né sotto linux. Anche le altre soluzioni comportano una quantità di dipendenze spaventosa e sono giorni che ci sbatto la testa invano. E non è tutto, volutamente le versioni open source sono pressoché prive di tutorial dato che il supporto è la fonte di reddito degli sviluppatori (sacrosanto: sono io che non arrivo a desumere regole e funzionamento). Come sempre i tutorials dicono cose che si desumono dal pannello di controllo mentre i rari esempi guarda caso passano per cloud o usano la wifi che non sto usando, tanto per aggiungere complicazione.

Sto meditando di scrivere qualcosa con PyQT5 che ha librerie grafiche veloci e strepitose ma so che razza di vespaio sia un'applicazione quasi-real time. So che inizierei e non finirei mai.

Riguardo i "desiderata" orientativamente anche 4 fps per

4-5 grafici andrebbero benissimo; ormai sono rassegnato a tanti di quegli strati di software che invece di mandare i valori sparati via seriale o LAN farò su arduino stesso i calcoli statistici di base come valori estremi in intervallo temporale, media, eccetera, in modo da trasmettere poche informazioni a bassa velocità. Questo a maggior ragione implica poter avere più grafici sullo stesso pannello, e poi l'appetito vien mangiando e potrei creare altri grafici che mi farebbero comodo.

Se mi consiglierete qualcosa calcolate che devo partire da zero, o almeno un esempio che non abbia dipendenze tipo generatore di numeri casuali su arduino, LAN e sistema di visualizzazione.

Tenete conto che del protocollo di Prometheus ho capito ZERO; riesco a capire che aggrega dati da fonti diverse e può di fatto dividere un record tra diverse sorgenti ma mai un esempio su cui basarsi.

C'è qualcosa o mi rassegno a tentare il fallimento quasi certo? Scusate ancora l'OT.

Grazie mille!

Reply to
Archaeopteryx

Il 09/10/2022 09:27, El_Ciula ha scritto:

credo che voglia rappresentare dei grafici di tendenza di determinati parametri fisici prodotti da altrettanti sensori.

quando lavoravo e gestivo il sito dipartimentale (linux e tutto free) c'erano della pagine dinamiche per le statistiche di produzione che pescavano i dati da un database mysql, i calcoli statistici di aggregazione dovevi farli tu, ma il software grafico (che era in php, del resto anche wikipedia e', o era, in php) era free.

Essendo passati anni non ricordo il nome del pacchetto, ma il concetto era quello: database, pagine, php.

Reply to
Giacobino da Tradate

Dai un occhio a: gnuplot, octave, Matplotlib numpy

ciao delo

Reply to
delo

Un paio di anni fa ho usato con grande soddisfazione questa libreria:

formatting link
assieme a jQuery.

Ci ho fatto un carico attivo gestito da un ESP32 programmato in modalita' Arduino, con interfaccia web animata puramente lato client in javascript, cosi' l'interfaccia web lato server e' risultata costituita da semplici file html e js. Il contenuto dinamico l'ho prodotto con dei semplici $.post("/command?command_code=<numero>[eventuali altri parametri]") che, lato Arduino, sono intercettati da un'unica funzione commandExec(), avendo registrato in setup(): // configure POST callbacks server.on("/command", commandExec);

I valori di tensione e corrente acquisiti sono visibili in tempo reale su un line chart, aggiornato da javascript con un codice del tipo:

function AjaxTimer() { if (bRunning) { $.post("/command?command_code=3", function (data, status) { if (data.success == "1") { // update chart lineChartData.datasets[0].data.push(data.I); lineChartData.datasets[0].data.shift(); lineChartData.datasets[1].data.push(data.V); lineChartData.datasets[1].data.shift(); window.lineChart.update(); } }); } }

Purtroppo e' passato tempo e da allora non ho piu' programmato in js, per cui faccio una fatica boia a ricordarmi i dettagli, ma non e' stato tanto difficile e su Chart.js trovi parecchi esempi.

Ciao,

Reply to
RoV

Con Matplotlib, da Python, si riesce a fare grafici in real-time. Pero' e' una lotta...

Ciao,

Reply to
RoV

Infatti; avevo cominciato a scrivere un'interfaccia tra seriale e sockets da una parte e un'uscita matplotlib-friendly. Mi sembrava impossibile avere messo in piedi lo scheletro del codice in due giorni e difatti...

La libreria su cui contavo moltissimo mi manda tutto in crash. Non so usare il debugger quindi ho iniziato con printf sparsi, ma niente, chiamo una funzione e il programma non ci entra nemmeno. Per l'ennesima volta lascio perdere un progetto iniziato; incredibile che l'unico forum italiano di programmazione sia un ambiente veramente poco amichevole, mentre i vari di lingua inglese hanno un livello medio che mi scordo e non sarebbe la prima volta che non capirei una risposta che mi venisse data. Sempre così tutta la mia vita :D

Reply to
Archaeopteryx

Il 11/10/22 22:38, Archaeopteryx ha scritto:

Ciao Cor,

non buttarti giù, ormai il livello di specializzazione richiesto in qualsiasi cosa uno voglia fare è enorme, e noi non abbiamo più l'elasticità mentale di un tempo (tu hai anche uno standard personale molto alto, sei sempre stato molto esigente nei confronti di te stesso).

Sono dell'idea che quando uno si sente frustrato deve fare solo una cosa: chiudere il PC e uscire!

Un caro saluto. Flavio

Reply to
Flavio

Il /08 ott 2022/, *Archaeopteryx* ha scritto:

Ciao,

per il mio sistemino domotico utilizzo Grafana + InfluxDB, girano su un raspberry ZERO W con un uso della CPU minimo. InfluxDB è un database ottimizzato per timeseries e supportato nativamente da Grafana, creare una pagina con oggetti (grafici, indicatori, ecc) che riportano i dati archiviati nel DB è semplicissimo.

Una volta installato il tutto, per scrivere dati nel DB InfluxDB, volendo basta una POST request all'endpoint /write :

in c# usando la classe webclient, DB 'PROVA', measurement 'sensori', valore 'TempSoggiorno=22.3'

static WebClient clientInflux = new WebClient();

. . .

try { var response = ClientInflux.UploadString("http://127.0.0.1:8086/write?db=PROVA","sensori TempSoggiorno=22.3);

} . . .

InfluxDB si arrangia ed archivia in modo efficiente i dati, aggiungendo il timestamp.

Puoi mandare i dati ad un raspberry via rs485 ad esempio, lui li riceve e fa la POST ad InfluxDB oppure, se il tuo dispositivo ha ethernet o wifi, può scrivere direttamente.

esempio :

formatting link
formatting link

Ciao, Pier.

Reply to
Pier GSi

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.