From 62a6af88239620e0565f6dae8e429264b407e06b Mon Sep 17 00:00:00 2001 From: gkalogeras Date: Mon, 12 Jul 2021 12:25:00 +0300 Subject: [PATCH 1/2] commit changes --- .../dataconsumer/service/RuleService.java | 71 ++++++++++---- src/main/resources/application.yml | 10 +- .../msc101/dataconsumer/RulesTests.java | 92 +++++++++++++++---- 3 files changed, 138 insertions(+), 35 deletions(-) diff --git a/src/main/java/gr/esdalab/msc101/dataconsumer/service/RuleService.java b/src/main/java/gr/esdalab/msc101/dataconsumer/service/RuleService.java index d01698d..2057781 100644 --- a/src/main/java/gr/esdalab/msc101/dataconsumer/service/RuleService.java +++ b/src/main/java/gr/esdalab/msc101/dataconsumer/service/RuleService.java @@ -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; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index aac00df..6375874 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -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 diff --git a/src/test/java/gr/esdalab/msc101/dataconsumer/RulesTests.java b/src/test/java/gr/esdalab/msc101/dataconsumer/RulesTests.java index 387506f..fb9f457 100644 --- a/src/test/java/gr/esdalab/msc101/dataconsumer/RulesTests.java +++ b/src/test/java/gr/esdalab/msc101/dataconsumer/RulesTests.java @@ -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; @@ -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()); } - } From 2e7d4fa003eba2f1c808d5598e297fc30075b1e6 Mon Sep 17 00:00:00 2001 From: gkalogeras Date: Mon, 12 Jul 2021 12:37:12 +0300 Subject: [PATCH 2/2] final --- TEAM.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 TEAM.md diff --git a/TEAM.md b/TEAM.md new file mode 100644 index 0000000..90f6b72 --- /dev/null +++ b/TEAM.md @@ -0,0 +1,5 @@ +Καλογεράς Γεώργιος ( ΑΜ 2007 ) +Στράντζαλη Σταυρούλα ( ΑΜ 2026 ) + +Σενάριο +Δημιουργία ενός living lab για την επιτήρηση και τον έλεγχο εσωτερικών συνθηκών ενός εργαστηρίου ανάπτυξης εμβολίων κατά ιών που προσβάλλουν τον άνθρωπο. Εξαιτίας της εξαιρετικά ευαίσθητης φύσης του εργαστηρίου υπάρχει ανάγκη για real time monitoring της θερμοκρασίας, υγρασίας, ποιότητας αέρα για ανίχνευση μικροβίων και ρύπων, και εσωτερικής πίεσης αέρα καθώς θέλουμε να λειτουργεί η εγκατάσταση σε υπερπίεση. Με τη λογική αυτή έχουν τοποθετηθεί αισθητήρες που ελέγχουν τα 4 αυτά στοιχεία και οι τιμές τους δίνουν εντολές σε ενεργοποιητές που ελέγχουν τον κλιματισμό, την ύγρανση και τον αερισμό του χώρου ώστε να είμαστε πάντα μέσα σε αποδεκτά πλαίσια. Σε περίπτωση που ξεπεραστεί κάποιο threshold έχουμε έκδοση alert.