Skip to content
Snippets Groups Projects
Commit 171cb0a6 authored by Elisa Giglio's avatar Elisa Giglio
Browse files

update elisa

parent 79d336ec
No related branches found
No related tags found
No related merge requests found
{"soglia":30,"stato":0,"valore":1,"tempoAllarme":"2022-09-29T10:48:55.183695"}
\ No newline at end of file
{"soglia":30,"stato":0,"valore":0,"tempoAllarme":"2022-10-13T17:47:23.624881"}
\ No newline at end of file
......@@ -132,7 +132,7 @@ public class Antifurto {
SubscribeCallback subCall = new SubscribeCallback(this, publisher, esec, automa);
mqttClient.setCallback(subCall);
mqttClient.connect(options);
for(String t: topicsSub)
......@@ -154,76 +154,6 @@ public class Antifurto {
/*
* Abbiamo 3 tipi di eventi:
* to Command Events - mi viene richiesto di eseguire un comando --> sottoscrivo
* from Status Events - io annuncio un cambiamento di stato
* (inviato a tutti i client che hanno sottoscritto il topic su cui faccio la publish)
* rpc Query Events - richiesta di inviare uno stato a un client (o microservizio). --> sottoscrivo
* Query implementati come coppia di eventi: <query event, status event>
* RICORDIAMO COME ABBIAMO IMPLEMENTATO LA RPC SU MQTT
*
*
*
* Il cuore della nostra business logic e' un metodo in cui mi metto in attesa su mqtt e:
* se arriva un comando, chiamo il metodo responsabile per eseguire quel comando;
* se arriva un evento di stato, chiamo il metodo responsabile per gestire quell'evento di stato;
* se arriva una remote procedure call, attivo la risposta sulla remote procedure call
*
*
*
* Capire come gestire sistema a regole (vedi slide "Esempio" in "Applicazioni IoT "Cloud Based"")
*
*
*
* Sicurezza gestita con TLS
*
*
*
* FILE DA FARE per un servizio: (?)
* file che contiene le informazioni per connettersi al mosquitto locale
* file che dice qual'e' la porta che lui deve esporre
* file che mi dice tutte le cose che lo configurano, ad esempio quanti device deve guardare
* ...
*
* I file di configurazione sono in JSON o in XML
* I dati persistiti si troveranno nella sottodirectory (chiamata con il nome del servizio) di Home
*
*
* Nella fase di configurazione potremo ancora modificare i file di configurazione (ad esempio aggiungendo device,
* regole). Dopodiche' quando si fa partire il servizio si iniziera' a usare l'altra parte di file system (ovvero il Local
* Dynamic File System) dove si andranno a salvare gli stati per renderli persistenti.
*
*
*
* Ho un processo principale che come unico compito ha quello di fare una fork() e creare un processo figlio.
* Sara' questo processo figlio a eseguire effettivamente il programma. Se il processo figlio termina (PER UN QUALCHE
* PROBLEMA), allora il processo padre se ne accorge e fa ripartire un nuovo processo figlio.
*
*
* Devo avere una thread di configurazione che obbedisce ai miei comandi (dati sulla HAT interface andando su
* 192.168.0.101:9001/configure.html (dove 192.168.0.101 e' l'indirizzo della beaglebone)
*
*
* Ho una classe che implementa l'automa a stati finiti
*
*
*
*
* NOTA:
* All'avvio, leggo il file stato e mi imposto di conseguenza. Poi interrogo la beaglebone per sapere SOLO lo stato
* dell'antifurto (luce rossa), ovvero se l'antifurto e' on o off. Lo stato del sensore di suono, non mi interessa: poiche'
* sono solo io a impostarlo (la web app si comporta in conseguenza dei miei messaggi).
* Mi serve interrogare la beaglebone per lo stato dell'antifurto perche' puo' succedere che l'antifurto abbia avuto
* dei problemi e quindi non abbia funzionato per un po' e nel mentre l'utente ha attivato l'antifurto dagli scenari.
* Quindi proprio perche' sia il mio antifurto sia gli scenari comandano lo stesso antifurto, devo fare questa richiesta
* alla beaglebone.
* Dopo aver chiesto lo stato dell'antifurto alla beaglebone, so esattamente lo stato in cui devo essere --> mi imposto
* di conseguenza!
*/
public static void main(String args[]) throws JSONException, IOException {
boolean exc = true;
System.out.println("antifurto started");
......
......@@ -69,9 +69,10 @@ public class Esecutore extends Thread {
}
else {
if(automa.allarme()) {
LocalDateTime tempoAttuale = LocalDateTime.now();
long durata = Math.abs(Duration.between(tempoAllarme, tempoAttuale).toMinutes());
if(valore < soglia || durata >= DURATA_SUONO || !automa.antifurtoAttivo() ) {
LocalDateTime tempoAttuale = LocalDateTime.now();
Long durata = null;
if(tempoAllarme != null) durata = Math.abs(Duration.between(tempoAllarme, tempoAttuale).toMinutes());
if(valore < soglia || (durata != null && durata >= DURATA_SUONO) || !automa.antifurtoAttivo() ) {
publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+antifurto.getNomeOutputSuono(), "{cmd:0}"); // l'allarme viene disattivato
}
}
......@@ -88,7 +89,11 @@ public class Esecutore extends Thread {
}
if(!automa.antifurtoAttivo()) {
reset();
try {
reset();
} catch (JSONException | IOException e) {
e.printStackTrace();
}
}
}
}
......@@ -98,9 +103,12 @@ public class Esecutore extends Thread {
codaVal.send(n);
}
public void reset() {
public void reset() throws JSONException, IOException {
valore = 0;
codaVal.removeAll();
JSONObject js = new JSONObject(Helper.leggiFile(Automa.FILE_STATO));
js.put("valore", valore);
Helper.scriviFile(js, Automa.FILE_STATO);
}
public static int getSoglia() {
......
......@@ -395,5 +395,4 @@ public class SubscribeCallback implements MqttCallback {
}
// to/gruppo2/luci/antifurto/luceAntifurto
}
......@@ -26,28 +26,11 @@
<body id="body-id">
<div id="alert-message" role="alert" class="alert invisible">
<!-- <div class="d-flex justify-content-around container-fluid">
<i class="fa-solid fa-exclamation-circle fa-4x" aria-hidden="true"></i>
<div>
<h4 class="alert-heading">Attenzione</h4>
<p>Stai registrando uno scenario, termina la registrazione per attivare l'antifurto.</p>
</div>
</div> -->
<!-- any error or confirmation goes here (updated by JS) -->
<!-- alert-danger -->
<!-- alert-success -->
</div>
<h1>Pissir SmartHome</h1>
<!-- <a href="http://$DOMAIN/realms/$REALM/protocol/openid-connect/auth?
response_type=code&
code_challenge=$MY_CODE_CHALLENGE&
code_challenge_method=S256&
client_id=myclient&
redirect_uri=$MY_REDIRECT_URI&
scope=openid&
nonce=a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d&
response_mode=fragment&
state=$MY_STATE" id="my-link">I'm the best at logging in :p</a> -->
<div class="container-fluid table-responsive">
<table class="table table-striped">
......@@ -116,51 +99,6 @@
<div id="valid-domainName" class="valid-feedback"></div>
<div id="invalid-domainName" class="invalid-feedback"></div>
<!--<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="${nomeServizio}"/>
<label class="form-check-label" for="#${nomeServizio}">
${nomeServizio}
</label>
</div>-->
<!--<fieldset class="is-invalid">
<legend>Scegli uno o piu' servizi</legend>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio}"/>
<label class="form-check-label" for="#${nomeServizio}">
${nomeServizio}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio2}"/>
<label class="form-check-label" for="#${nomeServizio2}">
${nomeServizio}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio3}"/>
<label class="form-check-label" for="#${nomeServizio3}">
${nomeServizio}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio4}"/>
<label class="form-check-label" for="#${nomeServizio4}">
${nomeServizio}
</label>
</div>
</fieldset> -->
<!--<div id="utente0">
<label for="#nuovoUtente" class="form-label">Nuovo utente</label>
<input type="text" class="form-control" id="nuovoUtente" aria-describedby="#nuovoUtenteHelp">
<div id="nuovoUtenteHelp" class="form-text">Inserisci il nome del nuovo utente.</div>
<label for="#passwordUtente" class="form-label">Password utente</label>
<input type="text" class="form-control" id="passwordUtente" aria-describedby="#passwordUtenteHelp">
<div id="passwordUtenteHelp" class="form-text">Inserisci la password del nuovo utente.</div>
</div>-->
</div>
<div class="modal-footer justify-content-around">
<button type="button" class="btn btn-dark" id="add-user-button">Aggiungi utente</button>
......
......@@ -11,7 +11,7 @@ class RequestToDomain {
* sui domini dell'utente che ha effettuato il login
*/
static async getMyDomains() {
const responseDomain = await fetch(`${getDomainURL()}secured/domains/`, { // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager
const responseDomain = await fetch(`${getDomainURL()}secured/domains/`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${await getToken()}`
......@@ -58,7 +58,7 @@ class RequestToDomain {
* disponibili.
*/
static async getAllServices() {
const responseDomain = await fetch(`${getDomainURL()}secured/services`, { // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager
const responseDomain = await fetch(`${getDomainURL()}secured/services`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${await getToken()}`
......
......@@ -140,11 +140,13 @@ function timeoutRefresh() {
clearTimeout(oldTimeout);
return setTimeout(async () => {
console.log("fired!",{alreadyRefreshed})
if(!alreadyRefreshed) {
await requestUsingRefreshToken();
alreadyRefreshed = false;
console.log("refreshed!")
}
}, 10000);//(token.refresh_expires_in*1000)-5000);
}, (token.expires_in*1000)-5000); // richiedo il nuovo token 5 secondi prima che il token scada
}
......
......@@ -4,34 +4,12 @@
<head>
<meta charset="utf-8">
<title id="title">SmartHome</title>
<!--<link rel="icon" href="res/favicon.png">-->
<!-- link all other useful scripts -->
<!-- link bootstrap -->
<!--<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin="anonymous"></script>-->
<!-- link fontawesome (for icons)-->
<!-- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> -->
<!-- <script defer src="https://kit.fontawesome.com/a1635545b7.js" crossorigin="anonymous"></script> -->
<!-- link my scripts and styles -->
<!-- <link rel="stylesheet" href="css/style.css" type="text/css">
<link rel="stylesheet" href="css/buttons.css" type="text/css"> -->
<!-- <script defer src="https://github.com/nodejs/node/blob/v18.8.0/lib/crypto.js" type="text/javascript"></script> -->
<!-- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> -->
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
<!-- <script defer src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script defer src="js/authentication/axios.min.js"></script> -->
<script defer src="js/authentication/moment.min.js"></script>
<script defer src="js/authentication/script.js" type="module"></script>
</head>
<body>
<!--<h1>Pissir SmartHome</h1>-->
<a href="http://$DOMAIN/realms/$REALM/protocol/openid-connect/auth?
response_type=code&
code_challenge=$MY_CODE_CHALLENGE&
......@@ -41,6 +19,6 @@
scope=openid&
nonce=a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d&
response_mode=fragment&
state=$MY_STATE" id="my-link" style="visibility: hidden">I'm the best at logging in :p</a>
state=$MY_STATE" id="my-link" style="visibility: hidden"></a>
</body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment