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

feature/team04 #7

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions TEAM.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Καλογεράς Γεώργιος ( ΑΜ 2007 )
Στράντζαλη Σταυρούλα ( ΑΜ 2026 )

Σενάριο
Δημιουργία ενός living lab για την επιτήρηση και τον έλεγχο εσωτερικών συνθηκών ενός εργαστηρίου ανάπτυξης εμβολίων κατά ιών που προσβάλλουν τον άνθρωπο. Εξαιτίας της εξαιρετικά ευαίσθητης φύσης του εργαστηρίου υπάρχει ανάγκη για real time monitoring της θερμοκρασίας, υγρασίας, ποιότητας αέρα για ανίχνευση μικροβίων και ρύπων, και εσωτερικής πίεσης αέρα καθώς θέλουμε να λειτουργεί η εγκατάσταση σε υπερπίεση. Με τη λογική αυτή έχουν τοποθετηθεί αισθητήρες που ελέγχουν τα 4 αυτά στοιχεία και οι τιμές τους δίνουν εντολές σε ενεργοποιητές που ελέγχουν τον κλιματισμό, την ύγρανση και τον αερισμό του χώρου ώστε να είμαστε πάντα μέσα σε αποδεκτά πλαίσια. Σε περίπτωση που ξεπεραστεί κάποιο threshold έχουμε έκδοση alert.
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,60 @@ public EventDTO processData(SensorDTO sensorDTO){
EventDTO eventDTO = new EventDTO();

// @TODO Implement your own rules and populate the eventDTO object
if (sensorDTO.getValue() <= 15) {
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Value " + sensorDTO.getValue() + " received.Something wrong with the air condition");
} else if (sensorDTO.getValue() >= 15 && sensorDTO.getValue() <= 20) {
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Value " + sensorDTO.getValue() + " received. Too high, you must heat the environment!");
} else if (sensorDTO.getValue() > 20 && sensorDTO.getValue() < 28) {
eventDTO.setLevel(EventLevel.NORMAL);
eventDTO.setMessage("Value " + sensorDTO.getValue() + " received. Everything seems ok.");
} else if (sensorDTO.getValue() >= 28 && sensorDTO.getValue() <= 32){
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Value " + sensorDTO.getValue() + " received. Too high, you must cool the environment!");
}else if (sensorDTO.getValue() > 32){
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Value " + sensorDTO.getValue() + " received.Something wrong with ventilation");
}

if (sensorDTO.getLabel() == "temp") {
if (sensorDTO.getValue() < 16) {
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Temperature value " + sensorDTO.getValue() + " received. Temperature too low.");
} else if (sensorDTO.getValue() >= 16 && sensorDTO.getValue() <= 19) {
eventDTO.setLevel(EventLevel.NORMAL);
eventDTO.setMessage("Temperature value " + sensorDTO.getValue() + " received. Optimal conditions!");
} else if (sensorDTO.getValue() > 19 && sensorDTO.getValue() < 21) {
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Temperature value " + sensorDTO.getValue() + " received. Temperature needs to be regulated.");
} else if (sensorDTO.getValue() >= 21){
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Temperature value " + sensorDTO.getValue() + " received. Alert!!! Too high, you must cool the environment!");
}
} else if (sensorDTO.getLabel() == "relhum") {
if (sensorDTO.getValue() <= 50) {
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Relative humidity is " + sensorDTO.getValue() + " %. Supply humid air");
} else if (sensorDTO.getValue() >= 50 && sensorDTO.getValue() <= 55) {
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Relative humidity is " + sensorDTO.getValue() + " %. Warning, air losing humidity");
} else if (sensorDTO.getValue() > 55 && sensorDTO.getValue() < 60) {
eventDTO.setLevel(EventLevel.NORMAL);
eventDTO.setMessage("Relative humidity is " + sensorDTO.getValue() + " %. Optimal conditions.");
} else if (sensorDTO.getValue() >= 60 && sensorDTO.getValue() <= 65){
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Relative humidity is " + sensorDTO.getValue() + " %. Too high, remove moisture!");
}else if (sensorDTO.getValue() > 65){
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Relative humidity is " + sensorDTO.getValue() + " %. Turn on ventilation");
}
} else if (sensorDTO.getLabel() == "press") {
if (sensorDTO.getValue() < 1.0) {
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Air pressure is " + sensorDTO.getValue() + " atm. Seal doors");
} else if (sensorDTO.getValue() >= 1.0 && sensorDTO.getValue() <= 1.2) {
eventDTO.setLevel(EventLevel.NORMAL);
eventDTO.setMessage("Air pressure is " + sensorDTO.getValue() + " atm. Pressure within limits");
} else if (sensorDTO.getValue() > 1.2){
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Air pressure is " + sensorDTO.getValue() + " atm. Pressure out of normal value range!");
}
} else if (sensorDTO.getLabel() == "quality") {
if (sensorDTO.getValue() >= 500 && sensorDTO.getValue() <= 600) {
eventDTO.setLevel(EventLevel.NORMAL);
eventDTO.setMessage("Concentration is " + sensorDTO.getValue() + " ppm. Ideal");
} else if (sensorDTO.getValue() > 600 && sensorDTO.getValue() < 650) {
eventDTO.setLevel(EventLevel.WARN);
eventDTO.setMessage("Concentration is " + sensorDTO.getValue() + " ppm. Start ventilation");
} else if (sensorDTO.getValue() >= 650){
eventDTO.setLevel(EventLevel.DANGER);
eventDTO.setMessage("Concentration is " + sensorDTO.getValue() + " ppm. Wear protective equipment!");
}
}
// Return the eventDTO object
return eventDTO;
}
Expand Down
10 changes: 8 additions & 2 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@ mqtt:
username: username
password: password
broker-url: tcp://${BROKER_DOMAIN:test.mosquitto.org}:${BROKER_PORT:1883} # The address and port of your own server need to be changed
# broker-url: tcp://${BROKER_DOMAIN:test.mosca.io}:${BROKER_PORT:80}
clientID: client1 # This change is not optional, but different clients must not be the same
topics: # Topics, update accordingly
sensors: hmmy/msc/101/sensors
events: hmmy/msc/101/events
tmp-sensors: hmmy/msc/101/tmp-sensors
humsensors: hmmy/msc/101/rel-hum-sensors
presssensors: hmmy/msc/101/int-press-sensors
qualitysensors: hmmy/msc/101/air-quality-sensors
tmpevents: hmmy/msc/101/tmp-events
pressevents: hmmy/msc/101/press-events
qualityevents: hmmy/msc/101/airq-events
92 changes: 76 additions & 16 deletions src/test/java/gr/esdalab/msc101/dataconsumer/RulesTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,21 @@ class RulesTests {
private static final Logger log = LogManager.getLogger(RulesTests.class);


SensorDTO outOfOperationLowSensorDTO = new SensorDTO("temp", 5.0);
SensorDTO outOfOperationHighSensorDTO = new SensorDTO("temp", 50.0);
SensorDTO heatSensorDTO = new SensorDTO("temp", 32.0);
SensorDTO coolSensorDTO = new SensorDTO("temp", 16.0);
SensorDTO normalSensorDTO = new SensorDTO("temp", 22.0);
SensorDTO tempLowSensorDTO = new SensorDTO("temp", 15.0);
SensorDTO tempNormalSensorDTO = new SensorDTO("temp", 18.0);
SensorDTO tempHighSensorDTO = new SensorDTO("temp", 20.0);
SensorDTO tempOutOfBoundsSensorDTO = new SensorDTO("temp", 25.0);
SensorDTO relHumLowSensorDTO = new SensorDTO("relhum", 43.0);
SensorDTO relHumSubNormalSensorDTO = new SensorDTO("relhum", 52.0);
SensorDTO relHumNormalSensorDTO = new SensorDTO("relhum", 56.5);
SensorDTO relHumOverNormalSensorDTO = new SensorDTO("relhum", 62.0);
SensorDTO relHumOutOfBoundsSensorDTO = new SensorDTO("relhum", 70.2);
SensorDTO pressLowSensorDTO = new SensorDTO("press", 0.8);
SensorDTO pressNormalSensorDTO = new SensorDTO("press", 1.1);
SensorDTO pressHighSensorDTO = new SensorDTO("press", 1.3);
SensorDTO concentrNormalSensorDTO = new SensorDTO("quality", 580.0);
SensorDTO concentrRisingSensorDTO = new SensorDTO("quality", 620.0);
SensorDTO concentrHighSensorDTO = new SensorDTO("quality", 735.0);

@Autowired
RuleService ruleService;
Expand All @@ -34,28 +44,78 @@ public static void init(){
}

@Test
void testOutOfOperationLow() {
assertEquals(EventLevel.DANGER, ruleService.processData(outOfOperationLowSensorDTO).getLevel());
void testTempLow() {
assertEquals(EventLevel.DANGER, ruleService.processData(tempLowSensorDTO).getLevel());
}

@Test
void testOutOfOperationHigh() {
assertEquals(EventLevel.DANGER, ruleService.processData(outOfOperationHighSensorDTO).getLevel());
void testTempNormal() {
assertEquals(EventLevel.NORMAL, ruleService.processData(tempNormalSensorDTO).getLevel());
}

@Test
void testHeat() {
assertEquals(EventLevel.WARN, ruleService.processData(heatSensorDTO).getLevel());
void testTempHigh() {
assertEquals(EventLevel.WARN, ruleService.processData(tempHighSensorDTO).getLevel());
}

@Test
void testCool() {
assertEquals(EventLevel.WARN, ruleService.processData(coolSensorDTO).getLevel());
void testTempOut() {
assertEquals(EventLevel.DANGER, ruleService.processData(tempOutOfBoundsSensorDTO).getLevel());
}

@Test
void testNormal() {
assertEquals(EventLevel.NORMAL, ruleService.processData(normalSensorDTO).getLevel());
void testHumLow() {
assertEquals(EventLevel.DANGER, ruleService.processData(relHumLowSensorDTO).getLevel());
}

@Test
void testHumSub() {
assertEquals(EventLevel.WARN, ruleService.processData(relHumSubNormalSensorDTO).getLevel());
}


@Test
void testHumNormal() {
assertEquals(EventLevel.NORMAL, ruleService.processData(relHumNormalSensorDTO).getLevel());
}

@Test
void testHumOver() {
assertEquals(EventLevel.WARN, ruleService.processData(relHumOverNormalSensorDTO).getLevel());
}

@Test
void testHumOut() {
assertEquals(EventLevel.DANGER, ruleService.processData(relHumOutOfBoundsSensorDTO).getLevel());
}

@Test
void testPressLow() {
assertEquals(EventLevel.DANGER, ruleService.processData(pressLowSensorDTO).getLevel());
}

@Test
void testPressNormal() {
assertEquals(EventLevel.NORMAL, ruleService.processData(pressNormalSensorDTO).getLevel());
}

@Test
void testPressHigh() {
assertEquals(EventLevel.WARN, ruleService.processData(pressHighSensorDTO).getLevel());
}

@Test
void testConcentrNormal() {
assertEquals(EventLevel.NORMAL, ruleService.processData(concentrNormalSensorDTO).getLevel());
}

@Test
void testConcentrHigh() {
assertEquals(EventLevel.WARN, ruleService.processData(concentrRisingSensorDTO).getLevel());
}

@Test
void testConcentrOut() {
assertEquals(EventLevel.DANGER, ruleService.processData(concentrHighSensorDTO).getLevel());
}

}