Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Récupération de l'ensemble du code #47

Merged
merged 10 commits into from
Nov 25, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{'temperature': 20.4, 'humidity': 67.5, 'co2': 2689}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{'temperature': 22.2, 'humidity': 55, 'co2': 1088}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{'temperature': 20.4, 'humidity': 67.5, 'co2': 2689}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{'temperature': 22.2, 'humidity': 55, 'co2': 1088}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{'lastUpdateTime': '2024-11-25 12:24:34', 'lifeTimeData': {'energy': 3357308}, 'lastYearData': {'energy': 2876278}, 'lastMonthData': {'energy': 241406}, 'lastDayData': {'energy': 3631}, 'currentPower': {'power': 1753.0835}, 'measuredBy': 'INVERTER'}
55 changes: 55 additions & 0 deletions Code/PHP/includes/DBProdsAccess.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@


<?php
require_once(../connect.inc.php);

function accessProduits(){
$PDOReq = $connect -> prepare('SELECT * FROM PRODUIT');
$PDOReq -> execute();
return $PDOReq -> fetchAll();
}

function accessProduitPrix($idProduit){
$PDOReq = -> $connect -> prepare('SELECT * FROM DISPOFORMAT WHERE idProduit = ?');
$PDOReq -> execute([$idProduit]);
return $PDOReq -> fetchAll();
}

function accessProduitsId($ID){
$PDOReq = $connect -> prepare('SELECT * FROM PRODUIT WHERE idProduit = ?');
$PDOReq -> execute([$ID]);
return $PDOReq -> fetchAll();
}



function accessImagesLinks($prodId){
$PDOReq = $connect -> prepare('SELECT nomFichier FROM IMAGE WHERE idProduit = ?');
$PDOReq -> execute ([$ID]);
return $PDOReq -> fetchAll();
}

function accessCategories(){
$PDOReq = $connect -> prepare('SELECT * FROM CATEGORIE');
$PDOReq -> execute();
return $PDOReq -> fetchAll();
}

function accessFormats(){
$PDOReq = $connect -> prepare('SELECT * FROM FORMAT');
$PDOReq -> execute();
return $PDOReq -> fetchAll();
}

function accessCouleurs(){
$PDOReq = $connect -> prepare('SELECT * FROM COULEUR');
$PDOReq -> execute();
return $PDOReq -> fetchAll();
}

function accessConditionnements(){
$PDOReq = $connect -> prepare('SELECT * FROM CONDITIONNEMENT');
$PDOReq -> execute();
return $PDOReq -> fetchAll();
}
?>
25 changes: 13 additions & 12 deletions Code/Python/clientMQTT.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
AM107_ROOMS = config["MQTT"]["AM107_rooms"].split(", ")
AM107_INFO_TYPES = config["MQTT"]["AM107_info_types"].split(", ")
SOLAREDGE_INFO_TYPES = config["MQTT"]["solaredge_info_types"].split(", ")
BASE_PATH = config["MQTT"]["base_path"]
SEUIL_ALERT = config["MQTT"]["seuil_alert"].split(", ")
PERIOD = int(config["MQTT"]["period"])

Expand All @@ -41,8 +42,8 @@ def on_message(client, userdata, msg):
data = payload

if flux_mqtt == "solaredge":
if exists(flux_mqtt):
repertoire = Path("./solaredge/")
if exists(BASE_PATH+flux_mqtt):
repertoire = Path(BASE_PATH+"solaredge/")
liste_fichiers = [f for f in repertoire.iterdir() if f.is_file()]
liste_fichiers_tries = sorted(liste_fichiers, key=lambda f: f.stat().st_mtime)
dernier_fichier = liste_fichiers_tries[-1] if liste_fichiers_tries else None
Expand All @@ -57,7 +58,7 @@ def on_message(client, userdata, msg):
i=0
for info in SOLAREDGE_INFO_TYPES:
donnees = data[info]
message = message + f"{donnees}"
message = message + f"'{info}': {donnees}"
i=i+1
if(i<=nb_info-1):
message = message + ", "
Expand All @@ -68,8 +69,8 @@ def on_message(client, userdata, msg):
if flux_mqtt == "AM107":
salle = parties[2] if len(parties) > 2 else "inconnue"
if salle in AM107_ROOMS or AM107_ROOMS[0] == "all":
if exists(flux_mqtt+"/"+salle):
chemin="./"+flux_mqtt+"/"+salle+"/"
if exists(BASE_PATH+flux_mqtt+"/"+salle):
chemin=BASE_PATH+flux_mqtt+"/"+salle+"/"
repertoire = Path(chemin)
liste_fichiers = [f for f in repertoire.iterdir() if f.is_file()]
liste_fichiers_tries = sorted(liste_fichiers, key=lambda f: f.stat().st_mtime)
Expand All @@ -88,7 +89,7 @@ def on_message(client, userdata, msg):
seuil_alert = SEUIL_ALERT[i]
if(donnees>=int(seuil_alert)):
print("ALERTE (Seuil "+info+" dépassé : "+seuil_alert+") en "+salle+" : "+f"{donnees}")
message = message + f"{donnees}"
message = message + f"'{info}': {donnees}"
i=i+1
if(i<=nb_info-1):
message = message + ", "
Expand All @@ -100,16 +101,16 @@ def enregistrer_donnees(data,topic):
date=datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
parties = topic.split("/")
flux_mqtt = parties[0]
if not exists(flux_mqtt):
os.mkdir(flux_mqtt)
if not exists(BASE_PATH+flux_mqtt):
os.makedirs(BASE_PATH+flux_mqtt)
if flux_mqtt == "solaredge":
with open(flux_mqtt+"/"+date, "a") as f:
with open(BASE_PATH+flux_mqtt+"/"+date, "a") as f:
f.write(data + "\n")
else:
salle=parties[2]
if not exists(flux_mqtt+"/"+salle):
os.mkdir(flux_mqtt+"/"+salle)
with open(flux_mqtt+"/"+salle+"/"+date, "a") as f:
if not exists(BASE_PATH+flux_mqtt+"/"+salle):
os.mkdir(BASE_PATH+flux_mqtt+"/"+salle)
with open(BASE_PATH+flux_mqtt+"/"+salle+"/"+date, "a") as f:
f.write(data + "\n")

def gestion_periode(date_sans_seuil):
Expand Down
1 change: 1 addition & 0 deletions Code/Python/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ topics = AM107, solaredge
AM107_rooms = all
AM107_info_types = temperature, humidity, co2
solaredge_info_types = all
base_path = ../Java/src/main/resources/application/capteur/
seuil_alert = 30, 60, 1000
period = 15
1 change: 0 additions & 1 deletion Code/Python/solaredge/2024-11-22_11-18-03

This file was deleted.

1 change: 0 additions & 1 deletion Code/Python/solaredge/2024-11-22_14-44-29

This file was deleted.

1 change: 0 additions & 1 deletion Code/Python/solaredge/2024-11-22_15-01-01

This file was deleted.

54 changes: 54 additions & 0 deletions Code/java/src/main/java/application/tools/DataReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package application.tools;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

public class DataReader {
public static List<Float> getTemps(List<File> datasToFetch){
List <Float> tempsToReturn = new ArrayList<>();
for(File currentFile : datasToFetch){
try {
String data = Files.readString(currentFile.toPath());
data = data.replace("{","").replace("}","");
String[] splittedValues = data.split(", ");
tempsToReturn.add(Float.parseFloat(splittedValues[0]));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tempsToReturn;
}

public static List<Float> getHumidities(List<File> datasToFetch){
List <Float> humiditiesToReturn = new ArrayList<>();
for(File currentFile : datasToFetch){
try{
String data = Files.readString(currentFile.toPath());
data = data.replace("{","").replace("}","");
String[] splittedValues = data.split(", ");
humiditiesToReturn.add(Float.parseFloat(splittedValues[1]));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return humiditiesToReturn;
}

public static List<Float> getCo2(List<File> datasToFetch){
List <Float> co2ToReturn = new ArrayList<>();
for(File currentFile : datasToFetch){
try{
String data = Files.readString(currentFile.toPath());
data = data.replace("{","").replace("}","");
String[] splittedValues = data.split(", ");
co2ToReturn.add(Float.parseFloat(splittedValues[2]));
} catch(IOException e){
throw new RuntimeException(e);
}
}
return co2ToReturn;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,19 @@
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.scene.input.MouseEvent;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;

import netscape.javascript.JSObject;

public class DonneesActuellesController {
private enum TEXTVALUES{
Expand All @@ -36,6 +46,19 @@ private String getDisplayText(){
return displayText;
}
}

public class JSBridge {
public void handleClick(String room) {
System.out.println("Room clicked: " + room);
displayedListUpdate(room);
try {
getCorrespondingData(room);
} catch (URISyntaxException | IOException e) {
throw new RuntimeException(e);
}
}
}

private Stage containingStage;
@FXML
private VBox buttonsHolder;
Expand All @@ -48,13 +71,42 @@ private String getDisplayText(){
@FXML
private CheckBox humidity;

private IoTMainFrame main;
@FXML
private WebView iutschematics;
private WebEngine webEngine;
private JSBridge jsBridge = new JSBridge();
private IoTMainFrame main = new IoTMainFrame();

public void initContext(Stage _containingStage) {
this.containingStage = _containingStage;
this.buttons_setup();
this.initWeb();
}

private void initWeb(){
String pathSvg = Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/svg/demoSVG.html")).toString();

webEngine = iutschematics.getEngine();
webEngine.load(pathSvg);

webEngine.documentProperty().addListener((observable, oldValue, newValue) -> {
if(newValue != null){
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("javaBridge", jsBridge);

webEngine.executeScript("""
document.querySelectorAll('g').forEach(function(element) {
element.addEventListener('click', function(event) {
// Get the id of the <g> element itself
var id = element.getAttribute('id');
// Pass the id to the Java method
javaBridge.handleClick(id);
});
});
""");
}
});
}

public void displayDialog(){
this.containingStage.show();
}
Expand Down Expand Up @@ -118,7 +170,7 @@ private void updateDisplayedDatas(){


public void displayedListUpdate(String room){
Boolean deleted = false;
boolean deleted = false;
Node toDelete = null;
for(Node n : displayedDatas.getChildren()){
if(n instanceof TitledPane checking){
Expand Down Expand Up @@ -174,18 +226,20 @@ public void displayedListUpdate(String room){
}else displayedDatas.getChildren().remove(toDelete);
}

public void buttons_setup(){
for (Node titledPaneNode : buttonsHolder.getChildren()) {
if(titledPaneNode instanceof TitledPane titledPane) {
GridPane gridPane = (GridPane) titledPane.getContent();
for(Node buttonNode : gridPane.getChildren()){
if (buttonNode instanceof ToggleButton button){
button.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
displayedListUpdate(button.getText());
});
}
private void getCorrespondingData(String room) throws URISyntaxException, IOException {
room=room.toUpperCase();
File folder = new File(Objects.requireNonNull(DonneesActuellesController.class.getClassLoader().getResource("application/AM107/"+room)).toURI());
if(folder.exists()) {
File[] allDatas = folder.listFiles();
System.out.println(allDatas.length);
assert allDatas != null;
File captorData = allDatas[0];
for(File current : allDatas){
if(current.lastModified() > captorData.lastModified()){
captorData = current;
}
}
System.out.println(Files.readString(captorData.toPath()));
}
}
}
Loading
Loading