diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java index cc0d4dc..6367b4a 100644 --- a/src/launcher/Launch.java +++ b/src/launcher/Launch.java @@ -12,6 +12,7 @@ import javafx.scene.layout.StackPane; import javafx.scene.text.Text; import javafx.stage.Stage; import model.Capteur; +import model.CapteurCPU; import model.CapteurIntervalle; import model.CapteurRealiste; import view.CapteurView; @@ -32,7 +33,8 @@ public class Launch extends Application { public void start(Stage primaryStage) throws IOException, InterruptedException { Capteur captorS = new Capteur(1,"Capteur Simple"); CapteurIntervalle captorI = new CapteurIntervalle(2,"Capteur Intervalle",0.0,10.0); - CapteurRealiste captorR = new CapteurRealiste(2,"Capteur Realiste", 5.0, 10.0); + CapteurRealiste captorR = new CapteurRealiste(3,"Capteur Realiste", 5.0, 10.0); + CapteurCPU captorC = new CapteurCPU(4,"Capteur CPU"); // FXML NOT WORKING /*Stage thermostatStage = new Stage(); @@ -47,10 +49,12 @@ public class Launch extends Application { captorS.genTemp(); captorI.genTemp(); captorR.genTemp(); + captorC.genTemp(); try { System.out.println(captorS.getNom() + ": " + captorS.getTemp().getValue() + " °C"); System.out.println(captorI.getNom() + ": " + captorI.getTemp().getValue() + " °C"); System.out.println(captorR.getNom() + ": " + captorR.getTemp().getValue() + " °C"); + System.out.println(captorC.getNom() + ": " + captorC.getTemp().getValue() + " °C"); sleep(4000); } catch (InterruptedException e) { throw new RuntimeException(e); diff --git a/src/model/CapteurCPU.java b/src/model/CapteurCPU.java index 6f56e7a..45932c9 100644 --- a/src/model/CapteurCPU.java +++ b/src/model/CapteurCPU.java @@ -2,13 +2,25 @@ package model; import javafx.beans.property.ObjectProperty; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + + public class CapteurCPU extends CapteurAbstrait { - CapteurCPU(int id, String nom) { + public CapteurCPU(int id, String nom) { super(id, nom); } @Override public ObjectProperty genTemp() { - return null; + try{ + String temp = new String(Files.readAllBytes(Paths.get("/sys/class/thermal/thermal_zone0/temp"))); + double tempClesius = Double.parseDouble(temp)/1000.0; + this.setTemp(tempClesius); + } catch (IOException e) { + throw new RuntimeException(e); + } + return this.getTemp(); } } diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java index 65a29c2..4d86a87 100644 --- a/src/model/CapteurVirtuel.java +++ b/src/model/CapteurVirtuel.java @@ -4,33 +4,37 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import java.util.List; +import java.util.Map; public class CapteurVirtuel extends CapteurAbstrait { - private List capteurs; + private Map capteurs; - CapteurVirtuel(List cs, int id, String nom){ + CapteurVirtuel(Map cs, int id, String nom){ super(id, nom); this.capteurs = cs; } - public void addCapteur(CapteurAbstrait c){ - capteurs.add(c); + public void addCapteur(CapteurAbstrait c, int p){ + this.capteurs.put(c,p); } public void removeCapteur(CapteurAbstrait c){ - capteurs.remove(c); + this.capteurs.remove(c); } @Override // calcule la temperature moyenne des capteurs sa collection de capteurs public ObjectProperty genTemp() { - ObjectProperty avg = new SimpleObjectProperty<>(); - avg.setValue((double) 0); - - for (CapteurAbstrait c: capteurs) { - avg.setValue(c.genTemp().getValue() + avg.getValue()); + double sum = 0; + int count = 0; + for (Map.Entry entry : capteurs.entrySet()) { + CapteurAbstrait c = entry.getKey(); + int p = entry.getValue(); + sum += c.getTemp().getValue() * p; + count += p; } - avg.set(avg.getValue()/capteurs.size()); - return avg; + double avg = sum / count; + ObjectProperty avgProp = new SimpleObjectProperty<>(avg); + return avgProp; } }