Pre-Final
- Removed all the TODO - Fixed some code - Added missing Docs
This commit is contained in:
@@ -10,11 +10,6 @@
|
|||||||
## Descrizione
|
## Descrizione
|
||||||
Il nostro progetto nasce per aiutare nella quotidianità persone anziane che non possono essere seguite da assistenti e che quindi possono trarre vantaggio da un sistema automatizzato che interagisca attraverso un assistente vocale in modo da permettere al soggetto di controllare i dispositivi collegati alla Home Station. In caso di stress (rilevato attraverso battito cardiaco), le luci vengono soffuse così da creare un ambiente più rilassante e nel caso in cui la situazione non migliori contatti medico o familiari; inoltre viene consigliata in questo caso musica rilassante che il soggetto può avviare con comando vocale. Inoltre il soggetto viene sollecitato vocalmente in caso di sedentarietà. Si mantiene anche il contatto con persone esterne, medico e familiari, i quali possono controllare le attività del soggetto poiché verranno mantenute statistiche su di esse.
|
Il nostro progetto nasce per aiutare nella quotidianità persone anziane che non possono essere seguite da assistenti e che quindi possono trarre vantaggio da un sistema automatizzato che interagisca attraverso un assistente vocale in modo da permettere al soggetto di controllare i dispositivi collegati alla Home Station. In caso di stress (rilevato attraverso battito cardiaco), le luci vengono soffuse così da creare un ambiente più rilassante e nel caso in cui la situazione non migliori contatti medico o familiari; inoltre viene consigliata in questo caso musica rilassante che il soggetto può avviare con comando vocale. Inoltre il soggetto viene sollecitato vocalmente in caso di sedentarietà. Si mantiene anche il contatto con persone esterne, medico e familiari, i quali possono controllare le attività del soggetto poiché verranno mantenute statistiche su di esse.
|
||||||
|
|
||||||
# TODO
|
|
||||||
- Documentazione per capire meglio
|
|
||||||
- Main da iniziare e finire
|
|
||||||
|
|
||||||
|
|
||||||
[Jack]: <https://github.com/Berack96>
|
[Jack]: <https://github.com/Berack96>
|
||||||
[Giulia]: <https://github.com/Giuliavago>
|
[Giulia]: <https://github.com/Giuliavago>
|
||||||
[D]: <https://github.com/DawitG96>
|
[D]: <https://github.com/DawitG96>
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class Fitbit {
|
|||||||
private final Map<Class<?>, Long> latestRequest = new HashMap<>();
|
private final Map<Class<?>, Long> latestRequest = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Un calendario in modo da sapere la data per i dati
|
* Un calendario in modo da sapere la data per prendere i dati
|
||||||
*/
|
*/
|
||||||
private final Calendar calendar = Calendar.getInstance();
|
private final Calendar calendar = Calendar.getInstance();
|
||||||
|
|
||||||
@@ -156,8 +156,7 @@ public class Fitbit {
|
|||||||
* Ricevi tutti i dati presenti per il sonno di questo giorno.
|
* Ricevi tutti i dati presenti per il sonno di questo giorno.
|
||||||
* La lista contiene per ogni volta che l'utente ha dormito:<br>
|
* La lista contiene per ogni volta che l'utente ha dormito:<br>
|
||||||
* - la data di quando si e' addormentato<br>
|
* - la data di quando si e' addormentato<br>
|
||||||
* - la durata del sonno<br>
|
* - la durata del sonno
|
||||||
* - la data di fine<br>
|
|
||||||
* @return una lista contenente ogni volta che l'utente ha dormito
|
* @return una lista contenente ogni volta che l'utente ha dormito
|
||||||
*/
|
*/
|
||||||
public synchronized List<Sleep.SleepData> getDetailedSleep() {
|
public synchronized List<Sleep.SleepData> getDetailedSleep() {
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class Hue {
|
|||||||
/**
|
/**
|
||||||
* Cerca le luci Philips Hue nell'indirizzo specificato e con l'utente specificato.<br>
|
* Cerca le luci Philips Hue nell'indirizzo specificato e con l'utente specificato.<br>
|
||||||
* Una volta trovate le luci le setta tutte alla stessa luminosita' e allo stesso colore<br>
|
* Una volta trovate le luci le setta tutte alla stessa luminosita' e allo stesso colore<br>
|
||||||
* (per ora fa una media e poi assegna il valore risultante a tutte)
|
* (luminosità massima e colore bianco)
|
||||||
* @param ip l'indirizzo IP (seguito dalla porta se e' diversa dalla solita 8000)
|
* @param ip l'indirizzo IP (seguito dalla porta se e' diversa dalla solita 8000)
|
||||||
* @param user l'utente
|
* @param user l'utente
|
||||||
* @throws NullPointerException se non trova nessun bridge
|
* @throws NullPointerException se non trova nessun bridge
|
||||||
@@ -80,23 +80,8 @@ public class Hue {
|
|||||||
if(allLights.isEmpty())
|
if(allLights.isEmpty())
|
||||||
throw new NullPointerException("Non e' stato possibile connettersi alle luci");
|
throw new NullPointerException("Non e' stato possibile connettersi alle luci");
|
||||||
|
|
||||||
// TODO GIOVEDI impostare una luminosita' e un colore di default
|
setBrightness(100);
|
||||||
double bri = 0;
|
changeColor("bianco");
|
||||||
double hue = 0;
|
|
||||||
for (String name: allLights.keySet()) {
|
|
||||||
Map<String, Object> state = (Map<String, Object>)allLights.get(name).get("state");
|
|
||||||
bri += (Double) state.get("bri");
|
|
||||||
hue += (Double) state.get("hue");
|
|
||||||
}
|
|
||||||
bri = bri/allLights.size();
|
|
||||||
hue = hue/allLights.size();
|
|
||||||
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
|
||||||
map.put("bri", (int)bri);
|
|
||||||
map.put("hue", (int)hue);
|
|
||||||
setState(map);
|
|
||||||
|
|
||||||
brightness.set((bri*MAX_BRIGHTNESS)/100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import de.fh_zwickau.informatik.sensor.model.devices.Device;
|
|||||||
import de.fh_zwickau.informatik.sensor.model.devices.DeviceList;
|
import de.fh_zwickau.informatik.sensor.model.devices.DeviceList;
|
||||||
import support.ZWaySimpleCallback;
|
import support.ZWaySimpleCallback;
|
||||||
|
|
||||||
// TODO GIOVEDI da mettere a posto secondo me, dato che da un po di problemi IRL
|
|
||||||
/**
|
/**
|
||||||
* Sensore che permette di registrare vari dati dell'ambiente
|
* Sensore che permette di registrare vari dati dell'ambiente
|
||||||
*/
|
*/
|
||||||
@@ -99,13 +98,4 @@ public class Sensor {
|
|||||||
device.update();
|
device.update();
|
||||||
} catch (Exception e) { }
|
} catch (Exception e) { }
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
public boolean IsLowLuminescence(int Luminescence) {
|
|
||||||
if (dev.getProbeType().equalsIgnoreCase("Luminescence"))
|
|
||||||
if (Integer.parseInt(dev.getMetrics().getLevel()) < Luminescence)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,20 @@
|
|||||||
package device.fitbitdata;
|
package device.fitbitdata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calsse che serve ad avere una data collegata al dato preso dal fitbit
|
||||||
|
*/
|
||||||
public abstract class FitbitData {
|
public abstract class FitbitData {
|
||||||
private long millisec = 0;
|
private long millisec = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setta la data collegato al dato preso dal fitbit
|
||||||
|
* @param millisec la data in millisecondi
|
||||||
|
*/
|
||||||
public void setDate(long millisec) { this.millisec = millisec; }
|
public void setDate(long millisec) { this.millisec = millisec; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ricevi la data collegata al dato richiesto dal fitbit
|
||||||
|
* @return la data in millisec
|
||||||
|
*/
|
||||||
public long getDate() { return this.millisec; }
|
public long getDate() { return this.millisec; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,16 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe per vedere il dato del battito cardiaco
|
||||||
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class HeartRate extends FitbitData {
|
public class HeartRate extends FitbitData {
|
||||||
|
|
||||||
private double average;
|
private double average;
|
||||||
|
|
||||||
@JsonProperty("activities-heart-intraday")
|
@JsonProperty("activities-heart-intraday")
|
||||||
public void setAverage(Map<String, Object> map) {
|
private void setAverage(Map<String, Object> map) {
|
||||||
List<Map> data = (List) map.get("dataset");
|
List<Map> data = (List) map.get("dataset");
|
||||||
|
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
@@ -24,6 +27,15 @@ public class HeartRate extends FitbitData {
|
|||||||
average = 0;
|
average = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setta il vaore medio del battito cardiaco
|
||||||
|
* @param average il valore medio del battito
|
||||||
|
*/
|
||||||
public void setAverage(double average) { this.average = average; }
|
public void setAverage(double average) { this.average = average; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ricevi il valore medio del battito cardiaco
|
||||||
|
* @return il valore medio
|
||||||
|
*/
|
||||||
public double getAverage() { return average; }
|
public double getAverage() { return average; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,28 +10,23 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe per i dati del sonno dell'utente
|
||||||
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class Sleep {
|
public class Sleep {
|
||||||
|
|
||||||
private int minutesAsleep;
|
private long minutesAsleep;
|
||||||
|
|
||||||
private List<SleepData> datas;
|
private List<SleepData> datas;
|
||||||
|
|
||||||
public int getMinutesAsleep() {
|
|
||||||
return minutesAsleep;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SleepData> getDatas() {
|
|
||||||
return datas;
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonProperty("summary")
|
@JsonProperty("summary")
|
||||||
public void setMinutesAsleep(Map<String, Object> map) {
|
private void setMinutesAsleep(Map<String, Object> map) {
|
||||||
minutesAsleep = (int) map.get("totalMinutesAsleep");
|
minutesAsleep = (long) map.get("totalMinutesAsleep");
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty("sleep")
|
@JsonProperty("sleep")
|
||||||
public void setSleepsList(Map<String, Object>[] array) {
|
private void setSleepsList(Map<String, Object>[] array) {
|
||||||
datas = new ArrayList<>();
|
datas = new ArrayList<>();
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat();
|
SimpleDateFormat sdf = new SimpleDateFormat();
|
||||||
for(Map<String, Object> map : array) {
|
for(Map<String, Object> map : array) {
|
||||||
@@ -47,8 +42,33 @@ public class Sleep {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* I minuti totali che l'utente ha avuto di sonno durante il giorno
|
||||||
|
* @return i minuti totali
|
||||||
|
*/
|
||||||
|
public long getMinutesAsleep() {
|
||||||
|
return minutesAsleep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ricevi i dati più specifici riguardo al sonno
|
||||||
|
* @return una lista con i dati specifici del sonno
|
||||||
|
*/
|
||||||
|
public List<SleepData> getDatas() {
|
||||||
|
return datas;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe utilizzata per avere i dati più specifici del sonno
|
||||||
|
*/
|
||||||
public class SleepData {
|
public class SleepData {
|
||||||
|
/**
|
||||||
|
* La data d'inizio del sonno in millisec
|
||||||
|
*/
|
||||||
public final long start_date;
|
public final long start_date;
|
||||||
|
/**
|
||||||
|
* La durata del sonno in millisec
|
||||||
|
*/
|
||||||
public final long duration;
|
public final long duration;
|
||||||
|
|
||||||
SleepData(Date start_date, long duration) {
|
SleepData(Date start_date, long duration) {
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe che serve a vedere i passi fatti secondo il fitbit
|
||||||
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class Steps extends FitbitData {
|
public class Steps extends FitbitData {
|
||||||
|
|
||||||
@@ -31,7 +34,21 @@ public class Steps extends FitbitData {
|
|||||||
stepsData = new ArrayList<>((List<Map<String, Object>>) map.get("dataset"));
|
stepsData = new ArrayList<>((List<Map<String, Object>>) map.get("dataset"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assegna il valore dei passi
|
||||||
|
* @param steps i passi
|
||||||
|
*/
|
||||||
public void setSteps(int steps) { this.steps = steps; }
|
public void setSteps(int steps) { this.steps = steps; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* I passi totali fatti durante il giorno
|
||||||
|
* @return i passi totali
|
||||||
|
*/
|
||||||
public int getSteps() { return steps; }
|
public int getSteps() { return steps; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prendi i dati specifici dei passi
|
||||||
|
* @return una lista contenente una mappa con delle ore e minuti ad un valore del
|
||||||
|
*/
|
||||||
public List<Map<String, Object>> getStepsData() { return stepsData; }
|
public List<Map<String, Object>> getStepsData() { return stepsData; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by 20015159 on 28/08/2018.
|
|
||||||
* Ci si puo' interfacciare con l'assistente tramite Telegram o dal sito di ngrok.
|
* Ci si puo' interfacciare con l'assistente tramite Telegram o dal sito di ngrok.
|
||||||
*/
|
*/
|
||||||
public class SeniorAssistant {
|
public class SeniorAssistant {
|
||||||
@@ -33,7 +32,6 @@ public class SeniorAssistant {
|
|||||||
* <ul>
|
* <ul>
|
||||||
* <li>hueAddress</li>
|
* <li>hueAddress</li>
|
||||||
* <li>hueUser</li>
|
* <li>hueUser</li>
|
||||||
* <li>sensorAddress</li>
|
|
||||||
* <li>autoBrightness</li>
|
* <li>autoBrightness</li>
|
||||||
* <li>sensorNode</li>
|
* <li>sensorNode</li>
|
||||||
* <li>remoteDbUser</li>
|
* <li>remoteDbUser</li>
|
||||||
@@ -41,14 +39,12 @@ public class SeniorAssistant {
|
|||||||
* @param args i possibili argomenti da passare al programma
|
* @param args i possibili argomenti da passare al programma
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//TODO magari aggiungere un arg con la path per la musica in modo che si possa ampliare in futuro
|
|
||||||
VariousThreads threads = new VariousThreads(); // this should be the first action of the main
|
VariousThreads threads = new VariousThreads(); // this should be the first action of the main
|
||||||
Map<String, String> arguments = getArgsMap(args);
|
Map<String, String> arguments = getArgsMap(args);
|
||||||
|
|
||||||
// list of arguments to use in the classes
|
// list of arguments to use in the classes
|
||||||
String hueAddress = arguments.get("hueaddress");
|
String hueAddress = arguments.get("hueaddress");
|
||||||
String hueUser = arguments.get("hueuser");
|
String hueUser = arguments.get("hueuser");
|
||||||
//TODO GIOVEDI String sensorAddress = arguments.get("sensorAddress");
|
|
||||||
Integer sensorNode = getInt(arguments.get("sensornode"));
|
Integer sensorNode = getInt(arguments.get("sensornode"));
|
||||||
String remoteDbUser = arguments.get("remotedbuser");
|
String remoteDbUser = arguments.get("remotedbuser");
|
||||||
boolean autoBrightness = arguments.containsKey("autobrightness");
|
boolean autoBrightness = arguments.containsKey("autobrightness");
|
||||||
@@ -90,23 +86,6 @@ public class SeniorAssistant {
|
|||||||
LOG.info("FINE MAIN");
|
LOG.info("FINE MAIN");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
AUTOMATIC:
|
|
||||||
|
|
||||||
XXX Gestione DB in modo che si aggiorni ogni ora
|
|
||||||
XXX Gestione luci in modo che la luminosità sia sempre la stessa
|
|
||||||
XXX Gestione luci a seconda del battito cardiaco
|
|
||||||
XXX Ogni X ore/minuti guarda i passi e se sono pochi dillo
|
|
||||||
XXX Se i battiti sono troppo bassi/alti avvisare il tizio
|
|
||||||
|
|
||||||
USER-INTERACTION:
|
|
||||||
|
|
||||||
XXX Dati del sonno/battito/passi che l'utente puo' richiedere
|
|
||||||
XXX Gestione luci secondo le esigenze dell'utente ( settare Dialogflow e server + risolvere bug )
|
|
||||||
XXX Gestione musica tramite comando vocale //TODO inserire qualche canzone
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------
|
||||||
Le funzioni qui sotto servono solamente per gli argomenti passati al main
|
Le funzioni qui sotto servono solamente per gli argomenti passati al main
|
||||||
------------------------------------------------------------------------------------ */
|
------------------------------------------------------------------------------------ */
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ public class VariousThreads {
|
|||||||
* Costruttore
|
* Costruttore
|
||||||
*/
|
*/
|
||||||
public VariousThreads() {
|
public VariousThreads() {
|
||||||
// audio = new AudioFile(); se si vuole solamente questo e non YT
|
audio = new AudioFile(); // se si vuole solamente questo e non YT
|
||||||
audio = System.getProperty("os.name").startsWith("Windows")? new Musich():new AudioFile();
|
// audio = System.getProperty("os.name").startsWith("Windows")? new Musich():new AudioFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,8 +89,6 @@ public class VariousThreads {
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
df.addOnAction("StopMusic", (params) -> { audio.stop(); return null; });
|
df.addOnAction("StopMusic", (params) -> { audio.stop(); return null; });
|
||||||
|
|
||||||
// TODO GIOVEDI aggiungere un orario magari? se no va bene cosi
|
|
||||||
df.addOnAction("ReqHearthbeat", (params) -> {
|
df.addOnAction("ReqHearthbeat", (params) -> {
|
||||||
double rate = fitbit.getHeartRate(60);
|
double rate = fitbit.getHeartRate(60);
|
||||||
return "Il battito medio dell'ultima ora e' di "+rate;
|
return "Il battito medio dell'ultima ora e' di "+rate;
|
||||||
@@ -196,15 +194,15 @@ public class VariousThreads {
|
|||||||
}
|
}
|
||||||
average = count!=0? sum/count:0;
|
average = count!=0? sum/count:0;
|
||||||
|
|
||||||
//TODO avvisare con una voce registrata? far partire musica rilassante?
|
|
||||||
double rateNow = fitbit.getHeartRate(minutes);
|
double rateNow = fitbit.getHeartRate(minutes);
|
||||||
if (Math.abs(rateNow-average) > delta ) {
|
if (Math.abs(rateNow-average) > delta ) { // ALTO
|
||||||
lights.decreaseBrightness();
|
lights.decreaseBrightness();
|
||||||
audio.play("Tullio.wav");
|
audio.playRandom("relax");
|
||||||
|
new AudioFile().play("molti battiti.wav");
|
||||||
}
|
}
|
||||||
else if (Math.abs(rateNow-average) < delta) {
|
else if (Math.abs(rateNow-average) < delta) { // BASSO avvisa ma niente musica
|
||||||
lights.increaseBrightness();
|
lights.increaseBrightness();
|
||||||
audio.play("Tullio.wav");
|
audio.play("pochi battiti.wav");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, minutes, "lights-with-heartbeat");
|
}, minutes, "lights-with-heartbeat");
|
||||||
@@ -219,13 +217,10 @@ public class VariousThreads {
|
|||||||
* @param database da dove vediamo se si sono fatti abbastanza passi
|
* @param database da dove vediamo se si sono fatti abbastanza passi
|
||||||
*/
|
*/
|
||||||
public void startCheckSteps(final Database database) {
|
public void startCheckSteps(final Database database) {
|
||||||
final int minute = 24 * 60; // ogni ventiquattro ore circa
|
|
||||||
final int norm = 4500;
|
final int norm = 4500;
|
||||||
final int delta = 1500; // average steps for 60 year old -> 3.500-5.500 or so they say
|
final int delta = 1500; // average steps for 60 year old -> 3.500-5.500 or so they say
|
||||||
final Audio audio = new AudioFile();
|
final Audio audio = new AudioFile();
|
||||||
|
|
||||||
// ma la domanda e': ad una certa ora o ad ogni X ore?
|
|
||||||
// AD UNA DETERMINATA ORA
|
|
||||||
Thread thread = getThreadStartingAt(new Runnable() {
|
Thread thread = getThreadStartingAt(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public synchronized void run() {
|
public synchronized void run() {
|
||||||
@@ -237,20 +232,10 @@ public class VariousThreads {
|
|||||||
sum += steps.getSteps();
|
sum += steps.getSteps();
|
||||||
final long average = size!=0? (long)(sum/size):0;
|
final long average = size!=0? (long)(sum/size):0;
|
||||||
|
|
||||||
/* Con normale dettata dal tizio e average e' il primo risultato della lista
|
|
||||||
List<Steps> list = database.getStepDataOfLast(15);
|
|
||||||
|
|
||||||
//for
|
|
||||||
|
|
||||||
final long norm = size!=0? (long)(sum/size):0;
|
|
||||||
final long average = size!=0? list.get(0).getSteps():0;
|
|
||||||
*/
|
|
||||||
|
|
||||||
//TODO avvisare con una voce registrata?
|
|
||||||
if (Math.abs(norm-average) > delta )
|
if (Math.abs(norm-average) > delta )
|
||||||
audio.play("Tullio.wav");
|
audio.play("molti passi.wav");
|
||||||
else if (Math.abs(norm-average) < delta)
|
else if (Math.abs(norm-average) < delta)
|
||||||
audio.play("Tullio.wav");
|
audio.play("pochi passi.wav");
|
||||||
|
|
||||||
}
|
}
|
||||||
}, 20, "checking-steps");
|
}, 20, "checking-steps");
|
||||||
|
|||||||
@@ -24,17 +24,17 @@ public class AudioFile implements Audio {
|
|||||||
/**
|
/**
|
||||||
* L'ultimo audio fatto partire
|
* L'ultimo audio fatto partire
|
||||||
*/
|
*/
|
||||||
private static AudioStream lastIn = null;
|
private AudioStream lastIn = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serve per crearsi una mapp di tutte le canzoni
|
* Serve per crearsi una mapp di tutte le canzoni
|
||||||
*/
|
*/
|
||||||
private Map<String, File> files = getAllFiles(PATH_AUDIO);
|
private final static Map<String, File> files = getAllFiles(PATH_AUDIO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mappa che serve ad avere per ogni sotto-dir di audio una lista di ogni file audio che c'e'
|
* Mappa che serve ad avere per ogni sotto-dir di audio una lista di ogni file audio che c'e'
|
||||||
*/
|
*/
|
||||||
private Map<String, List<File>> dirs = getAllDirs(PATH_AUDIO);
|
private final static Map<String, List<File>> dirs = getAllDirs(PATH_AUDIO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fa partire una canzone che si trova nella cartella audio o in una delle sue sottocartelle
|
* Fa partire una canzone che si trova nella cartella audio o in una delle sue sottocartelle
|
||||||
@@ -79,7 +79,7 @@ public class AudioFile implements Audio {
|
|||||||
* @param path la path iniziale
|
* @param path la path iniziale
|
||||||
* @return una mappa di NomeFile -> File
|
* @return una mappa di NomeFile -> File
|
||||||
*/
|
*/
|
||||||
private Map<String, File> getAllFiles(String path) {
|
private static Map<String, File> getAllFiles(String path) {
|
||||||
File folder = new File(path);
|
File folder = new File(path);
|
||||||
File[] listOfFiles = folder.listFiles();
|
File[] listOfFiles = folder.listFiles();
|
||||||
Map<String, File> map = new HashMap<>();
|
Map<String, File> map = new HashMap<>();
|
||||||
@@ -99,7 +99,7 @@ public class AudioFile implements Audio {
|
|||||||
* @param path la path iniziale
|
* @param path la path iniziale
|
||||||
* @return una mappa di directory con i loro file
|
* @return una mappa di directory con i loro file
|
||||||
*/
|
*/
|
||||||
private Map<String, List<File>> getAllDirs(String path) {
|
private static Map<String, List<File>> getAllDirs(String path) {
|
||||||
File folder = new File(path);
|
File folder = new File(path);
|
||||||
File[] listOfFiles = folder.listFiles();
|
File[] listOfFiles = folder.listFiles();
|
||||||
List<File> list = new LinkedList<>();
|
List<File> list = new LinkedList<>();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package support.audio;
|
|||||||
|
|
||||||
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
|
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
|
||||||
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
|
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
|
||||||
|
import org.apache.http.annotation.Obsolete;
|
||||||
import support.Rest;
|
import support.Rest;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@@ -16,6 +17,7 @@ import java.util.Map;
|
|||||||
/**
|
/**
|
||||||
* Classe che serve a far partire un video di youtube in una frame
|
* Classe che serve a far partire un video di youtube in una frame
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public class Musich implements Audio {
|
public class Musich implements Audio {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ import java.util.List;
|
|||||||
|
|
||||||
import static main.VariousThreads.*;
|
import static main.VariousThreads.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interfaccia per collegarsi al database
|
||||||
|
*/
|
||||||
public interface Database {
|
public interface Database {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
BIN
src/main/resources/audio/relax/Marconi Union - Weightless.wav
Normal file
BIN
src/main/resources/audio/relax/Marconi Union - Weightless.wav
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/main/resources/audio/relax/Slow down - Paul Collier.wav
Normal file
BIN
src/main/resources/audio/relax/Slow down - Paul Collier.wav
Normal file
Binary file not shown.
BIN
src/main/resources/audio/relax/the xx - Intro.wav
Normal file
BIN
src/main/resources/audio/relax/the xx - Intro.wav
Normal file
Binary file not shown.
Reference in New Issue
Block a user