Skip to content
Snippets Groups Projects
relazione.md 14.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    # Introduzione
    Il progetto presentato dal gruppo2 si occupa di fornire ad un utente funzionalità di domotica in una LAN, e sono le seguenti: controllo remoto delle luci, sistema di antifurto e metodo di deterrenza delle intrusioni.
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    # 1. Specifiche funzionali
    ## 1.1. Controllo tramite sensori ed attuatori
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    Il sistema nella LAN è costituito da una beaglebone (con attuatori e led) e un arduino (che presenta un sensore di luminosità).
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    Gli attuatori simulano gli interruttori e i sensori di movimento. Questi ultimi controllano l'attivazione dell'allarme dell'antifurto e, assieme agli interruttori e al sensore di luminosità, lo stato delle luci.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    ## 1.2. Accessibilita' via internet
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    La parte in cloud consiste di un server che fornisce una webapp, dalla quale poter controllare gli elementi della LAN; il servizio di autenticazione con Keycloak; il domain manager, responsabile di mantenere la consistenza dei dati; e il cloud app manager, il quale s'interfaccia con il broker mosquitto che è connesso in bridge con la beaglebone della LAN.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    I servizi sono stati resi sicuri con l'implementazione di HTTPS e per il broker con TLS (e WSS).
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    # 2. Analisi
    ## 2.1. Installazione del sistema in reti private
    
    A C's avatar
    A C committed
    L'installazione del sistema avviene senza configurazioni particolari poiché l'uso di mosquitto, con la configurazione da noi impostata, rende il sistema plug-n-play, ovvero è sufficiente collegarlo alla rete domestica per avere le funzionalità disponibili.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    ## 2.2. Accessibilita' da rete pubblica e da rete privata
    
    Tutti i microservizi comunicano tra di loro grazie a connessioni ai broker mosquitto. I due broker sono connessi tra loro grazie al bridging, che ci permette di effettuare lo scambio di comandi su entrambi i servizi.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    A C's avatar
    A C committed
    La connettibilità è indistintamente garantita sia da LAN sia da remoto grazie all'impiego di brokers Mosquitto. L'architettura che ne garantisce il funzionamento è la seguente: un broker è posizionato in remoto con IP pubblico e statico (smartcity) al quale si connettono il broker della LAN, della webApp ed il CloudAppManager. In questo modo, con il bridging effettuato a smartcity, siamo in grado di inviare e ricevere messaggi su ongi microservizio che lo richieda.
    In entrambi i casi, il login è gestito tramite Keycloak che permette l'accesso alla webapp che si interfaccia al resto del sistema.
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    Grazie a questa caratteristica, l'accesso può avvenire sia dalla rete pubblica che da quella privata, senza distinzioni.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    ## 2.3. Caratteristiche del traffico dati da sostenere e vincoli in tempo reale
    
    A C's avatar
    A C committed
    Essendo un sistema di domotica, è necessario che i comandi impartiti dall'utente vengano attutati una ed una sola volta ed in tempo utile, in modo tale da non inficiare l'esperienza dell'utente.(..esperienza migliore di analogica...) La quantità di traffico da gestire non è eccessiva, dal momento che le uniche 2 fonti di produzione di messaggi oltre a quella umana sono la BBGPIO che pubblica a tempo costante di 10s ed il microservizio dell'antifurto che pubblica ogni 8s.
    La componente umana la riteniamo non precisamente quantificabile, ma proporzionale nella quantità di messaggi prodotti rispetto al numero di lampadine e sensori/interruttori.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    ## 2.4. Tecniche viste a lezione con cui soddisfare i requisiti
    
    Per soddisfare i requisiti, e' possibile usare delle chiamate REST o il protocollo MQTT. Entrambe queste modalita' sono utilizzabili poiche' permettono la comunicazione tra servizi diversi.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    L'implementazione dei microservizi permette un tempo di installazione minore grazie alla dimensione inferiore dei file. Inoltre la scalabilita' del sistema viene semplificata di molto, infatti ...
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    # 3. Approccio tecnologico
    ## 3.1. Vantaggi dell'uso di un message broker e come lo giudichiamo rispetto alle altre scelte
    
    Il message broker risulta fondamentale nello sviluppo di un'applicazione formata da vari microservizi, poiche' permette a questi di registrarsi all'ascolto di topic specifici dai quali ricevere i messaggi degli altri microservizi. In questo modo il lavoro svolto da ognuno e' inferiore rispetto ad un progetto dello stesso tipo che non si avvale dell'utilizzo di mqtt.
    
    L'utilizzo di mosquitto assicura il recapito di oggi messaggio nel numero a noi necessario.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    A C's avatar
    A C committed
    La scelta effettuata risulta migliore rispetto all'uso di chiamate REST per la sua scalabilità. Volendo rappresentare il sistmea con un grafo non orientato in cui i nodi sono i microservizi e gli archi le connessioni tra i di essi, grazie al message broker otteniamo un grafo molto più sparso, in cui i microservizi comunicano con esso, anzichè istanziare una connessione per ogni altro microservizio.
    Anche la manutenibilità migliora.
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    # 4. Architettura del software
    ## 4.1. Organizzazione del software (evidenziandone i moduli)
    
    ### 4.1.1. Webserver e Webapp
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    Il Webserver, configurato per usare HTTPS, fornisce la Webapp al client grazie all'uso di API REST. Il Webserver e' in grado di mantenere molteplici sessioni allo stesso tempo.
    
    Ogni richiesta effettuata tramite API e' gestita da un nuovo Thread, il quale esegue il codice di una classe; una volta gestita la richiesta, il Thread viene eliminato.
    
    ### 4.1.2. Keycloak
    
    ### 4.1.3. Domain Manager
    
    A C's avatar
    A C committed
    Il Domain Manager e' un microservizio che opera in cloud, con funzionalita' sia da server REST sia da client con interazioni con il database (DB) dell'intero sistema. Si occupa di soddisfare le richieste provenienti dalla Webapp, controllandone la validita' e la consistenza con il DB e inoltrarle al Cloud App Manager (CAM). Dopo aver verificato l'autorizzazione tramite token di Keycloak interagisce con il DB ed effettua la chiamata al CAM. Terminate queste due interazioni, viene servita la risposta alla Webapp.
    
    ### 4.1.4. BeagleBone (BB)
    - Mosquitto
    
    A C's avatar
    A C committed
    - Luci: Microservizio che opera in LAN che si occupa di gestire l'accensione e lo spegnimento delle lampadine sia tramite interruttore sia tramite sensori di movimento. I comandi e gli stati delle lampadine vengono letti e scritti su due topic distinti del broker Mosquitto presente sulla BB. La persistenza dello stato del microservizio e' mantenuta in locale su un file testuale in formato JSON, che viene aggiornato ad ogni variazione dello stato, ad esempio accensione o spegnimento di una lampadina, aggiunta di una nuova lampadina e modifica del sensore di movimento.
    
    - Scenari: gestisce la deterrenza delle intrusioni riproponendo uno schema di accensione e spegnimento delle luci quando l'utente attiva l'antifurto. Lo schema segue precisamente lo stato delle luci scelto dall'utente dopo che questo ha attivato la modalita' di apprendimento; una volta disattivata, lo schema e' disponibile poiche' viene immediatamente salvato su un file come sequenza di JSON. La persistenza e' garantita grazie all'uso di tre file che vengono aggiornati in momenti diversi: uno ricorda quale schema e' attivo; il secondo permette il funzionamento dell'automa e memorizza lo stato attuale; mentre il terzo e' usato per salvare gli interruttori e la luce attualmente in uso.
    - Antifurto
    ### 4.1.5. Arduino
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    Questo componente della LAN scrive sul broker Mosquitto della BB i valori del sensore di luminosita', usato dal microservizio delle luci.
    
    ### 4.1.6. Cloud App Manager
    
    A C's avatar
    A C committed
    
    
    ### 4.1.7. Broker Mosquitto (smartcity)
    
    A C's avatar
    A C committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    ## 4.2. Distribuzione delle funzionalita' tra i moduli, attivita' e loro interazione
    
    A C's avatar
    A C committed
    (ognuno si scriva i suoi 2)
    
    (cosa fa ogni modulo)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    # 5. Descrizione dell'implementazione
    ## 5.1. UML delle classi implementate
    
    
    A C's avatar
    A C committed
    -DomainManager:
    	La classe principale del DomainManager è Domain.java. Essa funge da server REST su Https. 
    
    A C's avatar
    A C committed
    	Espone le rotte che vengono richiamate dalla WebApp per avviare, installare, creare ed eliminare i domini, oltre a fornire servizi per la corretta  visualizazione degli elementi in app.
    
    A C's avatar
    A C committed
    	Prima di operare da server esso effettua una chiamata al nostro repository gitlab per popolare la tabella dei moduli del DB.
    	In qualità di server si avvale di un threadPoolExecutor e per ogni nuova chiamata istanzia un nuovo thread per servirla.
    	A seconda dell'URI richiamato viene istanziato un handler diverso, che verifica il token JWT tramite la classe Helper che a sua volta richiama TokenHandler.
    
    A C's avatar
    A C committed
    	Da qui viene effettuata una chiamata all'URI della nostra istanza di Keycloak per ottenere la chiave pubblica. Dopo di ciò il body del JWT che era stato precedentemente inviato nel payload della richiesta della Webapp viene firmato con la chiave pubblica e se il risultato è uguale alla firma inviata nel JWT stesso allora l'utente è verificato.
    	Una volta verificato è possibile ottenere il nome dell'utente e distinguere i domini di cui è utente comune o amministratore. Da questo punto a seconda dei servizi richiesti dalla WebApp si aprono diversi scenari di interazione con il DB ed il CloudApp (Install, Delete, Start, Stop).
    	Le chiamate si risolvono una volta che il CloudApp risponde al Domain, ossia possiamo considerare la chiamata al CloudApp incapsulata in termini di tempo all'interno della chiamata da parte della WebApp al Domain.
    
    A C's avatar
    A C committed
    	La persistenza del sistema è affidata ad un DB SQLite locale.
    
    A C's avatar
    A C committed
    	
    
    A C's avatar
    A C committed
    -Luci:
    	Il microservizio Luci opera in LAN e serve a gestire l'accensione e spegnimento delle lampade nella casa.
    
    A C's avatar
    A C committed
    	la classe principale è Luci.java che opera su un ArrayList di oggetti di tipo Luce, che è la struttura dati fondamentale per il funzionamento del microservizio.
    
    A C's avatar
    A C committed
    	L'oggetto Luce è definito dal quartetto input, output, stato e nome.
    
    A C's avatar
    A C committed
    	Input è la stringa "IN" seguita dal numero che rappresenta quella sorgente in input della GPIO, ovvero un attuatore.
    	Output è la string "OUT" seguita dal numero che rappresenta quello specifico output della GPIO.
    
    A C's avatar
    A C committed
    	Stato è un boolean che corrisponde all'accensione o spegnimento della lampadina.
    	Nome è il nome della sala a cui appartiene la luce ed è il suo ID.
    
    A C's avatar
    A C committed
    	La classe Subscriber serve a leggere i comandi dai topic e ad attuarli. Per essere istanziata necessita di un Esecutore, Luci ed il sensore di movimento.
    	Esecutore è la classe che si occupa di attuare l'accensione a tempo delle luci, sfruttando un timer. Necessita di Luci per accedere all'ArrayList<Luce>. Qualora dovesse arrivare un segnale di accensione da parte del sensore di movimento e le luci fossero già accese, Subscriber provvede ad eliminare il vecchio timer e istanziarne uno nuovo.
    
    A C's avatar
    A C committed
    	Il sensore di luminosità presente sull'arduino impedisce ai sensori di movimento di operare se la stanza è troppo illuminata, ovvero se è giorno.
    	Questo meccanismo è trasparente al sistema degli attuatori "tradizionali", quindi se un utente vuole accendere una luce tramite interruttore potrà farlo sempre e comunque.
    
    A C's avatar
    A C committed
    	Ad ogni modifica dello stato delle luci corrisponde una modifica del file di stato locale(zona.json), al fine di mantenere le ultime impostazioni in caso di malfunzionamenti o cali di tensione. Questo file viene letto all'avvio del microservizio ed è ciò che garantisce la persistenza.
    
    A C's avatar
    A C committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    ## 5.2. Descrizione della UI
    
    A C's avatar
    A C committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    ### 5.2.1. Autenticazione
    La prima pagina che viene fornita serve per ridirigere l'utente alla pagina di login su Keycloak.
    ### 5.2.2. Lista di domini
    In questa pagina vengono mostrati tutti i domini appartenenti all'utente autenticato. Nel caso in cui questi sia amministratore di un dominio, a destra dello stato viene mostrato un cestino, per poterlo eliminare; inoltre il bottone dello stato e' cliccabile, consentento la sua attivazione/spegnimento. Al contrario, se non e' un amministratore e il dominio e' attualmente attivo, egli puo' solamente accedere alla pagina d'interazione.
    ### 5.2.3. Interazione con il proprio dominio
    Questa e' la pagina principale del progetto, in cui si possono vedere tutti i dettagli del dominio installato. In alto si trovano fino a 3 bottoni che rappresentano i microservizi installati nel dominio scelto. Alla loro pressione, mostrano la UI relativa al loro microservizio, con la quale interagire per apportare modifiche.
    - Visione d'insieme
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    La pagina principale della Webapp permette l'interazione completa con il sistema. Questo significa che il suo utilizzo permette di avere sia una visione real-time di ciò che accade nella LAN, sia di comandare da remoto gli attuatori connessi.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    All'avvio della Webapp, viene fatta una RPC ad ogni microservizio installato nel dominio per mostrare correttamente tutti i dati disponibili all'utente; inoltre viene richiesto al server se l'utente è in realtà l'amministratore del dominio, per mostrare funzionalità aggiuntive.
    
    In alto si trovano fino a 3 bottoni che, una volta premuti, mostrano la pagina corrispondente al loro microservizio.
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    - Luci
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    La pagina è formata da una tabella in cui sono mostrati il nome della luce ed il suo stato. La luce può venire accesa/spenta semplicemente cliccando lo switch che ne mostra lo stato.
    
    Al fondo dell'elenco delle luci, è presente un bottone che permette la creazione di una nuova luce. Questo processo richiede all'utente di scegliere il luogo/nome della luce, un pulsante libero e un led libero della BBGPIO. Nel momento in cui la Webapp riceve la conferma di creazione dal microservizio, la luce appena creata viene mostrata a schermo.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    - Scenari
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    La pagina è composta da una tabella e da dei bottoni al fondo di essa. Nella tabella vengono mostrati gli scenari (il nome, la data di creazione e lo stato). I bottoni permettono di attivare la funzione di apprendimento e l'antifurto. Nel caso in cui il visualizzatore sia l'amministratore del dominio, è anche presente un terzo bottone per modificare gli interruttori usati.
    
    
    In ogni momento è possibile cambiare lo stato attuale in quello di apprendimento, di antifurto o di attesa.
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    Mentre l'antifurto è spento, tutti gli scenari sono spenti e non è possibile attivarli; viceversa all'attivazione dell'antifurto viene immediatamente attivato uno scenario da parte del microservizio, che può essere cambiato (attivando uno scenario diverso) o disabilitato (spegnendo lo scenario attivo).
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    - Antifurto
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    La pagina presenta una barra di attenzione, una campanella e lo stato dell'antifurto; inoltre nel caso in cui si sia amministratore del dominio, è presente un pulsante che permette la configurazione delle porte, l'aggiunta di un sensore di movimento e la modifica della soglia (ovvero del valore oltre il quale far scattare l'allarme).
    
    Dalla Webapp, un utente normale può solamente attivare/disattivare l'antifurto e controllare il valore a cui è arrivato l'antifurto (oltre a sapere se l'allarme è stato attivato).
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    # 6. Validazione del software
    ## 6.1. Procedure usate per verificare il corretto funzionamento del sistema
    
    Test procedurali