Università degli Studi di Padova - SIAGAS

Pagina creata da Debora Paoletti
 
CONTINUA A LEGGERE
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova
            Dipartimento di Matematica
           Corso di Laurea in Informatica

  Creazione di un meteo-sensor bot
           per Telegram
                  Tesi di laurea triennale

Relatore                                           Laureando
Prof. Massimo Marchiori           Oleksandr Filinesi Skrypnyk

                  Anno Accademico 2015-2016
Università degli Studi di Padova - SIAGAS
Oleksandr Filinesi Skrypnyk : Creazione di un meteo-sensor bot per Telegram, © Novembre 2016.
Università degli Studi di Padova - SIAGAS
Sommario

Questo documento descrive il lavoro svolto durante il periodo di stage dal
laureando Oleksandr Filinesi Skrypnyk presso l’agenzia ARPAV - Servizio
Informatica e Reti, Padova (PD).

                                       iii
Università degli Studi di Padova - SIAGAS
iv
Università degli Studi di Padova - SIAGAS
Indice

1 L’agenzia..............................................................................................................1
   1.1 Presentazione dell’agenzia............................................................................1
   1.2 Servizio Informatica e Reti............................................................................2
   1.3 Processi dell’agenzia.....................................................................................3
   1.4 Tecnologie.....................................................................................................4
      1.4.1 Sistemi operativi....................................................................................4
      1.4.2 Tecnologie per lo sviluppo.....................................................................4
   1.5 Tipologie di clienti e servizi offerti...............................................................5
2 Il progetto nella strategia dell’azienda..............................................................7
   2.1 L’agenzia e gli stage......................................................................................7
   2.2 Il progetto......................................................................................................8
      2.2.1 Telegram................................................................................................8
      2.2.2 Descrizione del progetto........................................................................9
      2.2.3 Obiettivi...............................................................................................10
   2.3 Vincoli.........................................................................................................10
      2.3.1 Vincoli di tempo...................................................................................10
      2.3.2 Vincoli tecnologici...............................................................................11
3 Il progetto di stage.............................................................................................13
   3.1 Piano di lavoro.............................................................................................13
   3.2 Analisi dei requisiti......................................................................................14
      3.2.1 Requisiti comuni..................................................................................14
      3.2.2 Requisiti IdroBot..................................................................................16
      3.2.3 Requisiti PM10bot...............................................................................17
   3.3 Tecnologie...................................................................................................18
      3.3.1 PHP......................................................................................................18
      3.3.2 Telegram Bot API................................................................................19
      3.3.3 Bash.....................................................................................................19
      3.3.4 MySQL................................................................................................20
   3.4 Progettazione architetturale.........................................................................21
      3.4.1 Architettura complessiva......................................................................21
      3.4.2 Database...............................................................................................21

                                                            v
Università degli Studi di Padova - SIAGAS
3.5 Progettazione di dettaglio............................................................................22
       3.5.1 Considerazioni generali.......................................................................22
       3.5.2 Struttura dei file...................................................................................23
    3.6 Funzionamento dei bot................................................................................23
       3.6.1 Cominciare ad utilizzare il bot.............................................................23
       3.6.2 Ricercare una stazione.........................................................................25
    3.7 Verifica e validazione..................................................................................26
       3.7.1 Verifica.................................................................................................26
       3.7.2 Validazione...........................................................................................27
4 Valutazione retrospettiva..................................................................................29
   4.1 Successo del progetto..................................................................................29
   4.2 Considerazioni sull’agenzia.........................................................................29
   4.3 Sviluppi futuri..............................................................................................29
Glossario................................................................................................................31
Bibliografia...........................................................................................................33

                                                            vi
Università degli Studi di Padova - SIAGAS
Elenco delle figure

Figura 1.1: Logo dell'agenzia ARPAV.....................................................................1
Figura 1.2: Sistemi operativi...................................................................................4
Figura 1.3: Tecnologie per lo sviluppo....................................................................4
Figura 1.4: Tecnologie per la gestione delle informazioni......................................4
Figura 2.1: Logo di Telegram..................................................................................8
Figura 2.2: Logo del Bot che gestisce i Bot di Telegram........................................9
Figura 2.3: Logo di GitHub...................................................................................10
Figura 3.1: Diagramma di Gantt delle attività.......................................................13
Figura 3.2: Logo del linguaggio PHP....................................................................18
Figura 3.3: Schema delle Telegram Bot API.........................................................19
Figura 3.4: Lodo di Bash.......................................................................................20
Figura 3.5: Logo MySQL......................................................................................20
Figura 3.6: Database IdroBot................................................................................22
Figura 3.7: Database PM10bot..............................................................................22
Figura 3.8: Barra di ricerca di Telegram...............................................................24
Figura 3.9: Ricerca di ArpavPM10bot..................................................................24
Figura 3.10: Pulsante di avvio di un bot...............................................................24
Figura 3.11: Messaggio introduttivo del bot ArpavPM10bot................................24
Figura 3.12: Pulsante barra obliqua.......................................................................24
Figura 3.13: Lista di comandi per il bot................................................................25
Figura 3.14: Il comando /stazioni..........................................................................25
Figura 3.15: Elenco scorrevole delle stazioni.......................................................25
Figura 3.16: Comando per dettagli sulla stazione.................................................25
Figura 3.17: Informazioni dettagliate sulla stazione.............................................26
Figura 3.18: Grafico degli andamenti della stazione.............................................26

                                                      vii
Università degli Studi di Padova - SIAGAS
viii
Capitolo 1

L’agenzia

Questo capitolo tratta dettagliatamente della agenzia ospitante lo stage.

1.1 Presentazione dell’agenzia
ARPAV (Agenzia Regionale per la Protezione Ambientale del Veneto) è un
agenzia istituita in Veneto con la Legge Regionale n°32 del 18 ottobre 1996 e
diventata operativa il 3 ottobre 1997.
L’agenzia ha come obiettivi:
   •   La protezione, attraverso i controlli ambientali che tutelano la salute della
       popolazione e la sicurezza del territorio;
   •   La prevenzione, attraverso la ricerca, la formazione, l’informazione e
       l’educazione ambientale.

                      Figura 1.1: Logo dell'agenzia ARPAV.

Le attività dell'agenzia sono:
   •   prevenzione e controllo ambientale;
   •   previsione, informazione ed elaborazione meteo-climatica e
       radar-meteorologica;
   •   organizzazione e gestione del sistema informativo regionale per il
       monitoraggio ambientale ed epidemiologico in relazione ai fattori
       ambientali;

                                         1
•   promozione di attività di educazione ambientale ed informazione
       ambientale;
   •   fornitura di supporto tecnico-scientifico per la valutazione di impatto
       ambientale e per la determinazione del danno ambientale;
   •   promozione di iniziative di ricerca di base ed applicata sulle forme di
       tutela ambientale.

L’agenzia si articola in una Direzione Centrale, due Dipartimenti Regionali e sette
Dipartimenti Provinciali.

1.2 Servizio Informatica e Reti
SIER (Servizio Informatica e Reti) è collocato nell’Area Amministrativa della
Direzione Centrale dell’ARPAV.
Lo stage è stato svolto presso l'ufficio SIER.
Le mansioni del SIER sono:
   •   Gestisce l’infrastruttura informatica e le risorse strumentali hardware di
       tutta l’agenzia;
   •   Gestisce e coordina il mantenimento delle banche dati dell’Agenzia ed i
       servizi di assistenza su tutte le applicazioni informatiche dell’Agenzia, con
       particolare riferimento al Sistema Informativo Regionale Ambientale del
       Veneto (SIRAV);
   •   Realizza, anche mediante la collaborazione con le altre strutture
       dell’Agenzia, i rapporti integrati sugli indicatori ambientali e la
       definizione degli stessi;
   •   Svolge il ruolo di riferimento unitario aziendale in termini di standard
       operativi, architetture delle realizzazioni, attivazione e gestione tecnica dei
       portali internet/intranet;
   •   Coordina e svolge la gestione della connettività aziendale voce e dati,
       nonché la telefonia fissa e mobile, ed i servizi collegati;
   •   Coordina e svolge la gestione tecnico operativa per il funzionamento, la
       manutenzione e la connettività delle reti di monitoraggio dell’Agenzia;
   •   Organizza, coordina ed ha la responsabilità sulle attività, sulle risorse
       umane direttamente assegnate, anche per gli aspetti disciplinari, e sulle
       risorse strumentali afferenti al Servizio;
   •   Svolge le funzioni di dirigente per le attività di servizio ai sensi della
       normativa sulla sicurezza del lavoro (D.Lgs. n. 81/2008);

                                          2
•   Applica le procedure inerenti la gestione del budget e degli obiettivi
       aziendali;
    • Applica il Sistema di Gestione della Qualità.

1.3 Processi dell’agenzia
Il processo di sviluppo di un nuovo servizio è composto da cinque fasi:
   1. La richiesta di un servizio da parte di una delle aree dell’ARPAV.
   2. Istituzione di una commissione interna composta da personale della
      struttura richiedente e dai membri del SIER..
       La commissione valuta le esigenze e la fattibilità della richiesta. Vengono
       valutati i seguenti aspetti:
       •   Esistenza di servizi interni già in grado di soddisfare la richiesta;
       •   La disponibilità di risorse sia finanziarie che umane;
       •   La complessità del servizio richiesto;
       •   Le competenze necessarie per la creazione del servizio.
       Se l’esito della valutazione è positivo si decide se sviluppare il prodotto
       internamente o se, mediante una gara d’appalto, affidare lo sviluppo ad un
       ente esterno.
   3. Viene svolta l’analisi dei requisiti. Quindi a seconda della decisione nella
      fase precedente si procede allo sviluppo del servizio:
       •   Internamente: viene nominato un gruppo di sviluppo coordinato da
           un direttore, vengono inoltre previste delle riunioni atte a verificare
           l’avanzamento del progetto.
       •   Esternamente: vengono nominati due coordinatori uno interno e uno
           esterno facente parte dell’ente vincitore della gara d’appalto. I
           coordinatori seguiranno lo sviluppo del software mediante riunioni
           periodiche e verbalizzate.
   4. La manutenzione a seconda di come deciso può essere fatta internamente
      o affidata ad un ente esterno.
   5. Il servizio viene dismesso se ritenuto obsoleto o se diventa non conforme
      ad obblighi istituzionali.

                                          3
1.4 Tecnologie
In questa sezione vengono descritte le tecnologie adoperate dall’agenzia.

1.4.1 Sistemi operativi
Vengono utilizzati sia i sistemi operativi liberi come la distribuzione Ubuntu del
sistema operativo Linux, sia i sistemi operativi proprietari quali le varie versioni
di Microsoft Windows.

                           Figura 1.2: Sistemi operativi.

1.4.2 Tecnologie per lo sviluppo
Per lo sviluppo di applicazioni sono largamente adoperate le tecnologie quali PHP
e JavaScript.

                      Figura 1.3: Tecnologie per lo sviluppo.

Per la parte di gestione delle informazioni vengono principalmente utilizzati i
software della Oracle e PostgreSQL.

            Figura 1.4: Tecnologie per la gestione delle informazioni.

                                          4
1.5 Tipologie di clienti e servizi offerti
I clienti dell’ARPAV possono essere racchiusi in tre categorie:
    •   Amministrazioni Pubbliche regionali;
    •   Enti pubbliche e private;
    •   Cittadini.
I seguenti servizi sono accessibili a tutte e tre le categorie:
    •   Analisi e relazioni tecniche ambientali;
    •   Servizio di informazione e formazione;
    •   Meteorologia ed agro-meteorologia;
    •   Neve e valanghe.
Il servizio di Supervisione sedimenti marini è accessibile alle prime due categorie
di clienti.
Mentre i seguenti servizi sono accessibili soltanto alle Amministrazioni Pubbliche
regionali:
    •   Monitoraggio qualità delle acque;
    •   Monitoraggio aria ed emissioni;
    •   Monitoraggio sullo stato dei suoli e delle attività estrattive;
    •   Monitoraggio sulla produzione e gestione rifiuti.

                                            5
6
Capitolo 2

Il progetto nella strategia
dell’agenzia

Questo capitolo descrive il progetto di stage le motivazioni dietro alla proposta di
stage da parte dell’agenzia. Vengono inoltre descritti i vari vincoli imposti sul
progetto.

2.1 L’agenzia e gli stage
Lo stage è uno strumento che presenta vantaggi sia per lo stagista che per
l’agenzia.
Per l’agenzia ci sono svariati lati positivi derivanti dallo stage, tra i quali:
    •   Permette di valutare le capacità dello stagista per una possibile futura
        collaborazione.
    •   In alcuni casi apporta innovazione al interno dell’agenzia.
    •   L’agenzia ha la possibilità di cimentarsi nei progetti innovativi e
        sperimentali mitigando i costi e i rischi che si avrebbero impiegando il
        personale interno all’agenzia stessa.
Anche per lo stagista i vantaggi dello stage sono molteplici:
    •   Di fondamentale importanza è l’acquisizione dell’esperienza lavorativa
        concreta.
    •   Possibilità di collaborazioni future con l’agenzia mediante dei contratti a
        progetto.
    •   Arricchimento del proprio curriculum vitae.

                                            7
Nel caso specifico la motivazione da parte dell’agenzia nella proposta dello stage
è stata guidata dalla voglia di cimentarsi in un campo innovativo sconosciuto e
non sperimentato, bot per Telegram, ampliando in questo modo i propri canali di
consegna dell’informazione.

2.2 Il progetto
In questa sezione viene descritto il progetto e gli obiettivi dello stage proposto
dall’agenzia.

2.2.1 Telegram
Per parlare del progetto è necessario introdurre il servizio Telegram.

2.2.1.1        Descrizione di Telegram
Telegram è un servizio di messaggistica istantanea basato su cloud ed erogato
senza fini di lucro dalla società Telegram LLC.

                           Figura 2.1: Logo di Telegram

Per poter utilizzare il servizio di Telegram c’è bisogno di:
   •   Un numero di cellulare, al quale viene associato il profilo utente.
   •   Un client per Telegram, ne esistono per cellulari, browser e computer.
   •   Una connessione internet.
Mediante Telegram è possibile comunicare con altri utenti di Telegram mandando
messaggi di testo, immagini, file audio, posizione geografica e tante altre tipologie
di contenuto.
Un basilare utilizzo di Telegram consiste nel:
   •   Trovare un utente mediante la barra di ricerca.
   •   Mandargli un messaggio.
   •   Ricevere una risposta.

                                          8
2.2.1.2         I Bot per Telegram
Un utente, oltre a ricercare altri utenti, può ricercare i bot.
La modalità di conversazione con un bot è analoga alla conversazione con altri
utenti (si manda un messaggio e si riceve una risposta).
I bot sono delle applicazioni che ricevono i messaggi degli utenti, gli elaborano
per capirne il contenuto e mandano un messaggio in risposta. Queste applicazioni
sono in esecuzione sugli server (o semplicemente sugli computer) predisposti da
chi gli ha creati, quindi non sui server di Telegram.

              Figura 2.2: Logo del Bot che gestisce i Bot di Telegram.

Quindi a grandi linee durante una conversazione di un utente con un bot, Telegram
funge da mero tramite dei messaggi.

2.2.2 Descrizione del progetto
La descrizione dello stage nel piano di lavoro è la seguente:
“Lo stage sarà finalizzato alla creazione di un bot per Telegram. Più nello
specifico il bot permetterà la consultazione dei dati relativi al livello idrografico
dei corsi d’acqua e ai parametri meteo.”
Dalle riunioni successive si è capito che la dicitura “parametri meteo” significava:
il livello di concentrazione di PM10 (materiale particolato il cui diametro
aerodinamico è uguale o inferiore a 10µm), è uno degli indicatori della qualità
dell’aria.
I dati relativi ai livelli idrometrici dei corsi d’acqua sono forniti dalle stazioni
idrometriche situate presso diversi corpi idrici del Veneto. Invece i dati relativi
alle concentrazioni di PM10 sono prelevati dalle stazioni che misurano la qualità
dell’aria, dislocate nel territorio del Veneto
Nell’agenzia sono presenti i sistemi che gestiscono, memorizzano e trasformano i
flussi di dati generati dalle varie stazioni, sia idro che quelle relative alla

                                            9
concentrazione di PM10. Quindi i dati d’interesse per il progetto sono reperibili in
formato XML o JSON.

2.2.3 Obiettivi
All’inizio dello stage gli obbiettivi erano i seguenti:
   •   Creare un bot per Telegram con le seguenti caratteristiche:
       ◦ Permette la consultazione dei dati relativi ai livelli idrometrici dei
         corsi d’acqua della regione del Veneto.
       ◦ Permette la consultazione dei dati relativi alle concentrazioni di PM10
         rilevate dalle stazioni della regione del Veneto.
       ◦ Al superamento di certe soglie di criticità, sia per i livelli dell’acqua
         sia per le concentrazioni di PM10, viene inviata una notifica agli utenti
         iscritti alla stazione che ha superato il livello di criticità.
       ◦ Permette di visualizzare i grafici degli andamenti sia per le stazioni
         idro si per quelle relative al PM10.
       ◦ Permette di trovare le stazioni vicine alla posizione geografica
         indicata.
   •   Creare un sito web che spiega il come usare il bot.
   •   Redigere la documentazione per il bot.
   •   Pubblicare il codice sorgente del software prodotto su GitHub.

                            Figura 2.3: Logo di GitHub.

2.3 Vincoli
Questa sezione descrive i vari vincoli sul progetto.

2.3.1 Vincoli di tempo
La durata dello stage deve essere obbligatoriamente compresa tra 300 e 320 ore.
Con l’agenzia è stato concordato un impiego di 320 ore che corrispondono a 40
giorni di lavoro a tempo pieno.

                                          10
2.3.2 Vincoli tecnologici
L’agenzia ha imposto due vincoli sulle tecnologie per il progetto:
   •   Il sistema operativo del server su cui sarà in esecuzione il bot deve essere
       Ubuntu.
   •   Il software deve essere distribuito con la licenza GNU GPL.

                                        11
12
Capitolo 3

Il progetto di stage

Questo capitolo tratta nel dettaglio il progetto di stage svolto.

3.1 Piano di lavoro
Per poter accedere allo stage è necessario stilare un piano di lavoro, che riporta le
principali attività previste per lo stage.

                  Figura 3.1: Diagramma di Gantt delle attività.

Sono state previste tre fasi principali con attribuiti a ciascuna di esse anche i tempi
di svolgimento stimato (in ore):
   •   (80) Studio e analisi: questa fase è dedicata a:
       ◦ (24) Studio del servizio Telegram per capire i limiti e le potenzialità
         di questo servizio;
       ◦ (24) Analisi dei sistemi dell'agenzia per capire le fonti dei dati e
         possibili componenti riutilizzabili.
       ◦ (32) Studio dei bot per Telegram per capire quali caratteristiche deve
         possedere un software di questo tipo.

                                          13
•    (40) Progettazione: questa fase è dedicata alla riflessione sulla struttura
        che deve assumere il codice.
   •    (200) Implementazione: questa fase è composta da:
        ◦ (40) Realizzazione del prototipo del bot: per via della natura
          sperimentale del progetto si è preferito introdurre questa prima
          versione per poter esplorare e comprendere più a fondo le potenzialità
          e i vincoli derivanti dallo sviluppo di un bot per Telegram, che non
          sono evidenti da una mera analisi delle documentazioni e dei sistemi
          esistenti.
        ◦ (120) Realizzazione della versione finale del bot: si tratta di una
          versione stabile, che viene arricchita di funzionalità in modo
          incrementale.
        ◦ (40) Verifica del codice: si tratta di una attività finale che prevede la
          revisione di tutto il codice, alla ricerca di eventuali incongruenze,
          mancanze o bug tralasciati durante il regolare processo di sviluppo.
          Questa attività permette la correzione del codice ma non l’incremento
          di funzionalità.

3.2 Analisi dei requisiti

3.2.1 Requisiti comuni
I requisiti sono stati adeguati ed incrementati durante tutta la fase di sviluppo del
software, si è preferito adottare un approccio che favorisse la massima flessibilità
nell’evoluzione del software.
Essendo un progetto innovativo e stato ritenuto strategico dare una più grande
importanza alla reattività del software alle valutazioni, commenti e critiche
raccolte durante la realizzazione incrementale del software stesso.
Dopo la fase di studio dei bot per Telegram si è visto che era meglio creare due
bot distinti:
    •   Uno che si occupa delle funzionalità relative ai livelli dei corsi d’acqua;
    •   E’ un altro che si occupa delle funzionalità relative alle concentrazioni di
        PM10.
I due bot di seguito sono riferiti tramite i nominativi: IdroBot e PM10bot.
Il codice sorgente dei due bot è commentato seguendo le convenzioni di Javadoc.

                                         14
Per i due bot è stato deciso di stilare la documentazione e di creare delle pagine
web che introducono l’utilizzo dei bot agli utenti.
Requisiti validi per entrambi i bot:
   •   I bot sono in grado di accettare i comandi nel seguente formato:
       “/nomeComando [parametro]”
   •   Il comando stazione: “/stazione 42” visualizza le informazioni sulla
       stazione avente l’identificativo 42;
   •   Gestione degli errori: gli errori di utilizzo dei comandi da parte
       dell’utente vengono segnalati mediante un messaggio, e viene visualizzato
       un esempio di uso corretto del comando.
   •   Il comando segui: “/segui 42” permette di iscriversi alle segnalazioni della
       stazione avente l’identificativo 42;
   •   Il comando nonseguire: “/nonseguire 42” permette di disiscriversi dalla
       stazione avente l’identificativo 42;
   •   Il comando stazioni: “/stazioni” visualizza l’elenco di tutte le stazioni;
   •   I bot sono in grado di ricevere e memorizzare la posizione geografica
       inviata dall’utente;
   •   Dopo che un utente ha mandato una posizione geografica, tra le
       informazioni relative alle stazioni comparirà anche la distanza della
       stazione dalla posizione indicata.
   •   Il comando posizione: “/posizione” visualizza la posizione mandata
       dall’utente;
   •   Il comando seguikm: “/seguikm 100” iscrive l’utente alle stazioni nel
       raggio di 100 chilometri dalla posizione geografica precedentemente
       mandata;
   •   Il comando stazionikm: “/stazionikm 100” visualizza l’elenco delle
       stazioni nel raggio di 100 chilometri dalla posizione geografica
       precedentemente mandata dall’utente;
   •   Il comando stazionikm visualizza le stazioni ordinate per distanza, se
       l’utente ha precedentemente mandato una posizione geografica;
   •   Il comando help: “/help” visualizza i comandi disponibili;
   •   Il comando help con un parametro: “/help nomeComando” visualizza la
       descrizione dettagliata del comando “nomeComando”;
   •   Vendono visualizzati dei messaggi introduttivi all’apertura di una
       conversazione con i bot;

                                         15
•   Nella sintassi dei comandi il carattere spazio “ ” è interscambiabile con il
        carattere trattino basso “_”. Di conseguenza tutti i comandi presentati dai
        bot possono essere eseguiti premendo su di essi;
    •   Il comando stop: “/stop” disiscrive l’utente da tutte le stazioni è cancella
        la posizione geografica associata ad esso;
    •   Il comando iscrizioni: “/iscrizioni” mostra le stazioni a cui un utente è
        iscritto;
    •   Vengono generati dei file di log che riportano i comportamenti anomali dei
        bot e dei sistemi con cui i bot interagiscono;
    •   Gestione della grandezza dei file di log: i file di log sono gestiti in modo
        che la loro grandezza non cresca in modo eccessivo;
    •   Avvio automatico dei bot: i bot si riavviano automaticamente dopo il
        riavvio del server.

3.2.2 Requisiti IdroBot
Questo bot tratta le stazioni idrometriche.
I requisiti per il bot IdroBot:
    •   Le informazioni relative ad una stazione idrometrica sono:
        ◦ Il nome della stazione;
        ◦ La provincia;
        ◦ Il comune;
        ◦ L’identificativo della stazione;
        ◦ Il grafico degli andamenti del livello dell’acqua della stazione;
        ◦ ora della misurazione più recente;
        ◦ il livello dell'acqua più recente.
    •   Per alcune stazioni idrometriche sono disponibili anche i livelli di
        criticità, che sono dei valori del livello dell’acqua associati al grado di
        criticità. Il grado di criticità può essere: ordinario, moderato o elevato. E’
        possibile iscriversi soltanto alle stazioni idrometriche che hanno il livello
        di criticità definito;
    •   Il comando nonseguirenessuno: “/nonseguirenessuno” permette di
        disiscriversi da tutte le stazioni;

                                         16
•   Il meccanismo delle segnalazioni: quando il livello di criticità di una
        stazione viene superato viene mandata una segnalazione a tutti gli utenti
        iscritti alla stazione;
    •   Il comando stazioni visualizza le stazioni ordinate per distanza, se
        l’utente ha precedentemente mandato una posizione geografica;
    •   Il comando fiumi: “/fiumi” visualizza l’elenco dei corsi d’acqua che
        hanno delle stazioni associate;
    •   Il comando stazionifiume: “/stazionifiume Muson dei Sassi” visualizza
        l’elenco delle stazioni relativa al fiume Muson dei Sassi;
    •   Il comando stazionicriticitadefinita: “/stazionicriticitadefinita” visualizza
        l’elenco delle stazioni che hanno definiti i livelli di criticità dell'acqua.

3.2.3 Requisiti PM10bot
Questo bot tratta solo le stazioni relative alla misura della qualità dell’aria, che
hanno dei rilevatori della concentrazione del PM10.
I requisiti per il bot PM10bot:
    •   Le informazioni relative ad una stazione, ricavate dal più recente
        bollettino dei dati validati:
        ◦ Nome della stazione;
        ◦ Provincia;
        ◦ Data di creazione del bollettino;
        ◦ Data a cui sono riferiti i dati indicati;
        ◦ Media giornaliera della concentrazione di PM10;
        ◦ Numero di superamenti della concentrazione limite di PM10 da inizio
          anno;
        ◦ Indice di qualità dell’aria della stazione.
    •   Il bot si occupa anche della generazione del grafico degli andamenti
        delle concentrazioni di PM10 partendo dai dati non validati (dati in diretta)
        degli ultimi 7 giorni;
    •   Per tutte le stazioni le concentrazioni critiche sono fissate ai seguenti
        valori:
        ◦ 50 µg/m3 valore soglia di concentrazione del PM10;
        ◦ 100 µg/m3 concentrazione doppia del valore soglia.

                                          17
•   Il meccanismo delle segnalazioni: quando il livello di criticità di una
       stazione viene superato viene mandata una segnalazione a tutti gli utenti
       iscritti alla stazione;
   •   Il meccanismo delle segnalazioni: viene mandata una segnalazione a tutti
       gli utenti iscritti ad una stazione se la concentrazione media del PM10 del
       bollettino esaminato, relativo alla stazione, supera una delle
       concentrazioni critiche. La segnalazione mandata informa anche quale
       concentrazione critica è stata superata. Per ciascuna stazione le
       segnalazioni vengono mandate una sola volta al giorno;
   •   Il comando seguitutte: “/seguitutte” permette di iscriversi da tutte le
       stazioni;
   •   Il comando nonseguirenessuna: “/nonseguirenessuna” permette di
       disiscriversi da tutte le stazioni.

3.3 Tecnologie
Questo capitolo motiva la scelta delle principali tecnologie utilizzate durante il
progetto.

3.3.1 PHP
Per realizzare i bot c’era un ampia scelta di linguaggi tra cui: Java, Python, PHP
C#, Rubby, Go, Lua, Haskell, Scala, OCaml.

                       Figura 3.2: Logo del linguaggio PHP.

E’ stato scelto di usare il PHP per conformarsi ai linguaggi usati nell’agenzia,
poiché questo permette una più facile manutenzione del software da parte del
personale dell’agenzia stessa.

                                         18
3.3.2 Telegram Bot API
Telegram mette a disposizione delle API apposite per la creazione dei bot. Sono
documentate molto bene, e risultano di facile utilizzo.

                   Figura 3.3: Schema delle Telegram Bot API.

Nel interfacciare un bot con Telegram bisogna scegliere il modo in cui farlo, ci
sono due modi: Webhook e Long polling.
Webhook: consiste nel indicare a Telegram una funzione del bot da richiamare
quando Telegram riceve da un utente un messaggio destinato al bot stesso
(callback).
Long Polling consiste in:
   •   Il bot manda una richiesta a Telegram per scoprire se ci sono degli
       aggiornamenti;
   •   Telegram mantiene la richiesta aperta finché non sono disponibili degli
       aggiornamenti;
   •   Quando gli aggiornamenti sono disponibili Telegram gli invia al bot.
Si è preferito adottare il Long Polling perché risulta di più facile manutenibilità,
poiché non richiede di aprire l’accesso al server dall’esterno, ed inoltre richiede
una meno approfondita conoscenza del funzionamento di Telegram.

3.3.3 Bash
Sono stati scritti degli script da eseguire mediante l’interprete di comandi bash
per realizzare le funzionalità di:
   •   Riavvio automatico dei bot al riavvio del server;
   •   Gestione della grandezza dei file di log.

                                         19
Figura 3.4: Lodo di Bash.

Gli script realizzano le funzionalità richieste mediante il comando crontab messo
a disposizione dal sistema operativo Ubuntu.

3.3.4 MySQL
E’ stato adottato il MySQL come sistema per la gestione di basi di dati relazionali
(RDBMS).
Lo si è preferito in un ottica che sottolinea l’importanza data alla manutenibilità.
I principali motivi per la sua scelta sono:
   •   E’ ampiamente conosciuto dal personale dell’agenzia;
   •   Presenta una vasta documentazione, ed una comunità di sostegno attiva;
   •   E’ perfettamente adatto per la realizzazione delle funzionalità richieste dal
       progetto.

                             Figura 3.5: Logo MySQL.

Le funzionalità che hanno richiesto l’utilizzo di una base di dati:
   •   Memorizzazione della posizione geografica inviata dall’utente;
   •   Gestione delle sottoscrizioni alle stazioni;
   •   Gestione del meccanismo di notifiche.

                                          20
3.4 Progettazione architetturale
Questa sezione descrive la struttura dell’applicazione ad un alto livello di
astrazione.

3.4.1 Architettura complessiva
Nonostante la grande somiglianza della struttura del codice dei due bot si è
preferito mantenere il loro codice scisso per garantire una maggior chiarezza del
loro funzionamento, e rendere così il codice più comprensibile in modo da
velocizzare il tempo necessario per un intervento di manutenzione adattiva.
Le componenti principali dei due bot:
   •   La base di dati;
   •   Modulo di parsing dei messaggi ricevuti dagli utenti;
   •   L’insieme dei comandi;
   •   La componente che si occupa dell’avvio e dell’arresto del bot;
   •   Le componenti responsabili del reperimento dei dati relativi alla parte di
       business del progetto, quali:
       ◦ Le informazioni sulle stazioni;
       ◦ I dati delle stazioni;
       ◦ I grafici degli andamenti delle misurazioni.
   •   Il modulo concerne la gestione delle notifiche;
   •   Per il bot PM10 la componente responsabile della generazione dei grafici
       degli andamenti.

3.4.2 Database
I bot interagiscono con la base di dati mediante l’uso di apposite procedure
memorizzate su MySQL, questo permette un maggior controllo sul accesso al
database.
Inoltre per accedere al database i bot hanno degli account appositi con permessi
adeguatamente ristretti.
Di seguito è riportato il diagramma E-R (Entity-Relationship) per la base di dati
relativa al bot IdroBot.

                                         21
Figura 3.6: Database IdroBot.

Invece cui di seguito è riportato il diagramma E-R per la base di dati utilizzata dal
bot PM10bot.

                          Figura 3.7: Database PM10bot.

3.5 Progettazione di dettaglio

3.5.1 Considerazioni generali
Per rendere il processo di sviluppo dell’applicazione flessibile e reattivo, è stato
scelto di effettuare la progettazione di dettaglio a pari passo con l’attività di
codifica, quindi si è riportato il dettaglio della progettazione direttamente nel
codice mediante i commenti in stile Javadoc. Con un tale approccio è stato
ritenuto importante mantenere la struttura del codice semplice, in modo da rendere
comprensibile ed evidente il comportamento dell’applicazione.

                                         22
3.5.2 Struttura dei file
Questa è la struttura dei file del bot PM10bot:
ArpavPM10bot (cartella radice)
   •   ArpavPM10bot.log – File contenente i log generati dal bot.
   •   ArpavPM10bot.php – Contiene il codice del bot.
   •   ArpavPM10botLauncher.php – Parte del codice che eseguire il bot.
   •   connect_DB.php – Parte del codice necessaria per connettersi al
                        database.
   •   descrizione_comandi.txt - Descrizioni dei comandi per il bot.
   •   start.sh – Script da invocare per avviare il bot in background.
   •   stop.sh – Script da invocare per fermare l'esecuzione del bot.
   •   mysql_database (cartella)
       ◦ createDB.sql – Contiene le istruzioni SQL che richiamano le istruzioni
                        di creazione delle tabelle e delle procedure.
       ◦ createProcedures.sql – Contiene le istruzioni SQL per la creazione
                                delle procedure.
       ◦ createTables.sql – Contiene le istruzioni SQL per la creazione delle
                            tabelle.
       ◦ dropDB.sql – Contiene le istruzioni SQL che richiamano le istruzioni
                      di eliminazione delle tabelle e delle procedure.
       ◦ dropProcedures.sql - Contiene le istruzioni SQL per l’eliminazione
                              delle procedure.
       ◦ dropTables.sql
   •   pChart (cartella) – Contiene i file necessari per la generazione dei grafici.

3.6 Funzionamento dei bot
Questa sezione mostra l’utilizzo più comune del bot PM10bot da parte di un
utente di Telegram.

3.6.1 Cominciare ad utilizzare il bot
Mediante la funzionalità di ricerca di uno dei client di Telegram,

                                        23
Figura 3.8: Barra di ricerca di Telegram.

si ricerca il bot di interesse, nel nostro caso PM10bot che in Telegram è stato
registrato con il nome ArpavPM10bot.

                       Figura 3.9: Ricerca di ArpavPM10bot.

Premendo sul icona del bot trovato e successivamente sul pulsante “Avvia”,

                      Figura 3.10: Pulsante di avvio di un bot.

viene visualizzato il messaggio introduttivo del bot.

           Figura 3.11: Messaggio introduttivo del bot ArpavPM10bot.

Ora il bot è avviato. Per procedere con l’utilizzo del bot si può premere sul
pulsante rappresentante il carattere barra obliqua “/”, messo a disposizione dal
client di Telegram,

                        Figura 3.12: Pulsante barra obliqua.

per visualizzare la lista scorrevole di tutti i comandi disponibili per il bot.

                                           24
Figura 3.13: Lista di comandi per il bot.

3.6.2 Ricercare una stazione
Inviando al bot il comando “/stazioni”,

                        Figura 3.14: Il comando /stazioni.
viene visualizzata una lista ordinata e scorrevole di tutte le stazioni dell’agenzia
che hanno i sensori per la rilevazione della concentrazione di PM10.

                  Figura 3.15: Elenco scorrevole delle stazioni.

Premendo sul comando riportato sotto la dicitura “Dettagli:” di una delle stazioni
(nel nostro caso sul comando “/Stazione_500021975”),

                Figura 3.16: Comando per dettagli sulla stazione.

                                          25
vengono visualizzate le informazioni dettagliate sulla stazione,

               Figura 3.17: Informazioni dettagliate sulla stazione.

e il grafico degli andamenti della stazione.

               Figura 3.18: Grafico degli andamenti della stazione.

3.7 Verifica e validazione

3.7.1 Verifica
Dopo ogni incremento significativo delle funzionalità, per verificare il coretto
comportamento dei due bot sono stati predisposti dei comandi di test da eseguire
in sequenza. I comandi di test sono stati scritti in modo da comprendere tutte le
tipologie di input. Inoltre l’ambiente di esecuzione del software è stato stressato in
modo da simulare dei malfunzionamenti dei sistemi con cui i bot interagiscono.
Ecco un esempio di comandi di test eseguiti per un test parziale del comando
“/stazione”:
   •   /stazione
   •   /stazione a b

                                         26
•   /stazione abc
   •   /stazione 400000000
   •   /stazione 500000106
   •   /stazione 500000079
   •   /stazione 500015004
I parametri usati appartengono a diverse classi di input, quindi richiamano
funzionalità diverse del comando.
Identificativi delle stazioni con a fianco descritta la categoria di appartenenza:
   •   400000000 – Rappresenta una stazione inesistente;
   •   500000079 – Identifica una stazione non di fondo (stazione situata lontano
                    dalle strade e dal traffico);
   •   500000106 – Identifica una stazione di fondo senza i dati per PM10;
   •   500015004 - Identifica una stazione di fondo con i dati per PM10.
Altre categorie di parametri:
   •   abc – Provoca l’errore di sintassi;
   •   a b - Provoca l’errore “numero di parametri errato".
Tutti gli errori generati da un uso errato dei comandi vengono gestiti informando
l’utente della causa dell’errore, ed fornendogli un messaggio di aiuto.

3.7.2 Validazione
Nella fase finale del progetto è stato fatto un controllo per verificare che il
software scritto fosse valido rispetto ai requisiti fissati. Grazie alla natura
incrementale della metodologia di sviluppo tutti i requisiti sono stati soddisfatti.

                                          27
28
Capitolo 4

Valutazione retrospettiva

Questo capitolo descrive brevemente considerazioni fatte sul progetto.

4.1 Successo del progetto
Il progetto è stato concluso con successo, i due bot per Telegram dono diventati
dei servizi ufficiali dell’ARPAV. Inoltre l’agenzia è rimasta molto soddisfatta del
lavoro svolto.

4.2 Considerazioni sull’agenzia
Il personale dell’agenzia ha fatto una fantastica impressione, la loro sincera
disponibilità ed il costante impegno nel lavoro sono fortemente motivanti.
L’ambiente di lavoro predisposto è stato molto confortevole ed incentivante.

4.3 Sviluppi futuri
Se nel tempo si vede che il servizio dei bot viene usato ed apprezzato dagli utenti,
si potrebbe considerare la creazione di un sistema centralizzato di controllo dei
bot e l’adozione o lo sviluppo di un framework specializzato nella creazione dei
bot con le funzionalità di notifica delle criticità e di consultazione dei dati.

                                         29
30
Glossario

A
API
  Application Programming Interface: indica ogni insieme di procedure
  disponibili al programmatore, di solito raggruppate a formare un set di
  strumenti specifici per adempire a un determinato compito all’interno di un
  certo programma. Spesso con tale termine si intendono le librerie software
  disponibili in un certo linguaggio di programmazione.
     Pag. 16
ARPAV
  Agenzia Regionale per la Protezione Ambientale del Veneto.
     Pag. 1-3, 5, 24, 27

B
Bot
  Sono dei programmi che imitano il modo di fare o di comunicare degli umani.
    Pag. 1, 2, 5-17, 19-21, 23, 24, 27

C
Cloud
  In informatica con il termine inglese cloud computing si indica un paradigma
  di erogazione di risorse informatiche, come l’archiviazione, l’elaborazione o la
  trasmissione di dati, caratterizzato dalla disponibilità su richiesta attraverso
  Internet.
     Pag. 7

D
Database
  Il termine database, in italiano base di dati o banca dati (a volte abbreviato con
  la sigla DB), indica un insieme organizzato di dati. Le informazioni contenute
  in un database sono strutturate e collegate tra loro secondo un particolare
  modello logico scelto dal progettista del database (ad es. relazionale,
  gerarchico, reticolare o a oggetti).
      Pag. 19

                                         31
F
Framework
  È una struttura logica di supporto allo sviluppo di software. Alla base ci sono
  una serie di librerie di codice, utilizzabili con uno o più linguaggi di
  programmazione.
     Pag. 24

G
GitHub
   Servizio web di hosting per lo sviluppo di progetti software, che usa il sistema
   di controllo di versione Git. GitHub offre la possibilità di gestire pository
   privati a pagamento o pubblici, molto utilizzati per lo sviluppo di progetti open
   source.
      Pag. 9
GNU GPL
   GNU General Public License è una licenza per software libero ampiamente
   utilizzata, che garantisce agli utenti finali la libertà di eseguire, studiare,
   condividere e modificare il software.
      Pag. 10

P
PM10
  Materiale particolato il cui diametro aerodinamico è uguale o inferiore a 10µm.
    Pag. 8, 9, 12, 15, 16, 19, 22, 27

S
SIER
  Servizio Informatica e Reti.
     Pag. 2, 3
SIRAV
  Sistema Informativo Regionale Ambientale del Veneto.
     Pag. 2

W
Windows
  È una famiglia di ambienti operativi e sistemi operativi dedicati ai personal
  computer, sviluppato da Microsoft Corporation.
     Pag. 4

                                         32
Bibliografia

“Presentazione dell’agenzia ARPAV.”
   ➔ http://www.arpa.veneto.it/arpav/chi-e-arpav
“Cos’è Telegram?”
   ➔ https://telegram.org/faq
“Client di Telegram per il browser.”
   ➔ https://web.telegram.org
“Cosa sono i bot per Telegram?”
   ➔ https://core.telegram.org/bots
“Codice sorgente del bot IdroBot.”
   ➔ https://github.com/venetoarpa/ArpavIdroBot
“Codice sorgente del bot PM10bot.”
   ➔ https://github.com/venetoarpa/ArpavPM10bot
“Cos’è il PM10?”
   ➔ http://www.arpa.veneto.it/temi-ambientali/aria/qualita-
     dellaria/metodologia/approfondimenti/inquinanti-atmosferici#pm
“Sito del linguaggio di programmazione PHP”
   ➔ https://php.net/
“Sito di MySQL”
   ➔ https://www.mysql.com
“Telegram Bot API”
   ➔ https://core.telegram.org/bots/api
“Manuale di Bash”
   ➔ https://www.gnu.org/software/bash/manual/html_node/index.html

                                       33
“Il comando crontab di Linux.”
   ➔ http://www.computerhope.com/unix/ucrontab.htm
“Pagina web di descrizione del bot ArpavIdroBot”
   ➔ http://www.arpa.veneto.it/temi-ambientali/idrologia/arpavidrobot
“Pagina web di descrizione del bot ArpavPM10bot”
   ➔ http://www.arpa.veneto.it/temi-ambientali/aria/arpavpm10bot

                                     34
Puoi anche leggere