[Python] suggerimenti applicazione python

Daniele Tricoli eriol a mornie.org
Ven 3 Apr 2020 04:39:10 CEST


Ciao Andrea,

On Thu, Apr 02, 2020 at 06:12:58PM +0200, Andrea D'alessandro wrote:
> Bella la tua soluzione ma i sensori comunicano via mail, e non c'e' verso
> di cambiare cio'....

Ok!

> Per quanto riguardo i database a grafo devo studiare perche' non sapevo
> neanche che esistevano fino a quando non e' arrivata la tua mail.

Prendi quello che segue come suggerimento, in realtà come avrai capito ci sono
molteplici soluzioni altrettanto valide, che ti permettono di spaziare e
studiare tutto quello che più ti aggrada. Inoltre ciascuno ha il proprio stack
tecnologico ben rodato e di cui conosce i minimi dettagli.

Pure io ti suggerisco un database specifico per i dati: quelle con cui hai a
che fare sono serie temporali, per cui la base di dati che userei io è un
TSDB (time series database).
L'ultima volta che in questa lista ho indicato semplicemente una lista di tool,
mi è stato giustamente fatto notare (con un volo un po' pindarico), che non è 
di grossa utilità una lista di cose che non conosce per chi deve già affrontare
un problema, ed è effettivamente vero! Per cui quello che segue e un
suggerimento che va più nel dettaglio. :)

Quindi ti direi di usare InfluxDB[¹] poiché pensato anche per l'IoT, e puoi
tranquillamente farne il deploy su un raspberry pi.

La parte web, come ti dicevo, non la scriverei proprio perché mi limiterei a
usare Grafana[²].
Trovi qui un esempio di dashboard per farti un'idea del risultato che puoi
ottenere qui: https://play.grafana.org/

Quello che ti rimarrebbe da scrivere è la parte dell'inserimento dei dati in
InfluxDB.
A seconda che tu voglia o meno interfacciarti col database, potresti
addirittura demandare l'inserimento in InfluxDB ad un terzo tool:
Telegraf[³]. Quest'ultimo è semplicemente un tool per collezionare metriche da
diverse fonti, processarle e riscriverle nel formato richiesto dalla
destinazione (oltre InfluxDB supporta anche altri database).

Nel tuo caso ti permetterebbe di evitare del tutto di dover vedere come
scrivere i dati su InfluxDB, ti basterebbe estrarre dalle email le due serie
temporali e scrivere un singolo file di log (con 2 topic) o due file di log da
dare in pasto a telegraf. Quest'ultimo li scriverebbe in InfluxDB e ti
basterebbe poi fruirli con Grafana.

Quindi, ricapitolando, avresti  l'architettura che segue:

    +------+   +----------+   +----------+   +---------+
    |      |   |          |   |          |   |         |
    | mail +-->+ Telegraf +-->+ InfluxDB +-->+ Grafana |
    |      |   |          |   |          |   |         |
    +------+   +----------+   +----------+   +---------+

Dove il blocco "mail" rappresenta il tuo tool/demone per prendere i dati e
scrivere il/i log da dare in pasto a telegraf.
Questo dovrebbe prendere le email coi tuoi dati, per esempio, nel caso in cui
tu stia usando IMAP dovresti usare il modulo imaplib[⁴] ed estrare poi gli
allegati col modulo email[⁵].
Nel caso in cui tu volessi scrivere direttamente su InfluxDB per eliminare
telegraf, puoi usare: https://github.com/influxdata/influxdb-python

Il tutto gira tranquillamente in un raspberry pi. Il vantaggio di questa
soluzione è che hai meno codice da mantenere, ma se il tuo è un progetto di
studio su come realizzare una soluzione del genere, certo 3 blocchi su 4 te
li ritrovi pronti e si tratterebbe di studiare solo come si usano.

Vedi un po' tu, tutto dipende da cosa vuoi studiare, quanto tempo hai a
disposizione, ecc...

Per completezza, scritto in Python, ci sarebbe Graphite[⁶] che ti realizza nel
diagramma che ho disegnato sopra i blocchi da telegraf a grafana, ma non l'ho
mai usato.

Chiudo con un articolo da cui potresti trarre spunto, nel caso decidessi di
seguire questa strada:
https://www.influxdata.com/blog/how-to-use-grafana-with-influxdb-to-monitor-time-series-data/

Ciao,

[¹] https://en.wikipedia.org/wiki/InfluxDB
    https://www.influxdata.com/products/influxdb-overview/
[²] https://en.wikipedia.org/wiki/Grafana
    https://grafana.com/
[³] https://www.influxdata.com/time-series-platform/telegraf/
[⁴] https://docs.python.org/3/library/imaplib.html
[⁵] https://docs.python.org/3/library/email.html
[⁶] https://en.wikipedia.org/wiki/Graphite_(software)

P.S. Però evita MongoDB, davvero! :)

-- 
  Daniele Tricoli 'eriol'
  https://mornie.org
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        signature.asc
Tipo:        application/pgp-signature
Dimensione:  833 bytes
Descrizione: non disponibile
URL:         <http://lists.python.it/pipermail/python/attachments/20200403/df7ab4ca/attachment-0001.sig>


Maggiori informazioni sulla lista Python