From 21566a65c309de64891dd0136102f4dd0104408c Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Fri, 6 Mar 2026 11:27:14 +0000 Subject: [PATCH 1/4] Using a print statement to see if I have branched properly --- sensor_base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sensor_base.py b/sensor_base.py index e69de29..8a218be 100644 --- a/sensor_base.py +++ b/sensor_base.py @@ -0,0 +1 @@ +print("This is the sensor base class") \ No newline at end of file From 043cdf0c27ebc0a4c33c50d9645c0a6a6fd11001 Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Tue, 10 Mar 2026 13:54:52 +0000 Subject: [PATCH 2/4] Created a sensor base class --- sensor_base.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/sensor_base.py b/sensor_base.py index 8a218be..e0d6ad9 100644 --- a/sensor_base.py +++ b/sensor_base.py @@ -1 +1,33 @@ -print("This is the sensor base class") \ No newline at end of file +import json +from datetime import datetime, timezone + + +class SensorBase: + """ + This will be the base class for all sensor types. + Stores information about the sensor and provides a method to generate + a formatted JSON sensor reading. + """ + + def __init__(self, sensor_type: str, room_id: str): + """ + This function initializes the sensor with its type and room ID. + """ + self.sensor_type = sensor_type + self.room_id = room_id + + def generate_reading(self, value, unit): + """ + This function generates a JSON formatted sensor reading + with the value read from the sensor and unit of measurement. + """ + + message = { + "sensor_type": self.sensor_type, + "room": self.room_id, + "value": value, + "unit": unit, + "timestamp": datetime.now().astimezone().isoformat() #to show local timezone + } + + return json.dumps(message) \ No newline at end of file From b719bbb087868a3fa33bf86d8d2879192cace294 Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Tue, 10 Mar 2026 13:55:54 +0000 Subject: [PATCH 3/4] Created the temperature sensor class inheriting from the sensor base class --- temperature_sensor.py | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/temperature_sensor.py b/temperature_sensor.py index e69de29..8767759 100644 --- a/temperature_sensor.py +++ b/temperature_sensor.py @@ -0,0 +1,52 @@ +import random +import time +from sensor_base import SensorBase + + +class TemperatureSensor(SensorBase): + """ + Temperature sensor that simulates gradual temperature drift. + """ + + def __init__(self, room_id): + super().__init__("temperature", room_id) + + # Start somewhere within the realistic range + self.current_value = random.uniform(18, 30) + + def read_value(self): + """ + Simulate gradual drift in temperature rather than random jumps. + Each reading changes slightly from the previous one. + """ + + # Small drift step + drift = random.uniform(-0.5, 0.5) + + self.current_value += drift + + # Clamp value within realistic range + self.current_value = max(18, min(30, self.current_value)) + + return round(self.current_value, 2) + + def generate_temperature_reading(self): + """ + Generate a formatted JSON temperature reading. + """ + value = self.read_value() + return self.generate_reading(value, "C") + + +# ------------------------ +# Manual Test +# ------------------------ + +if __name__ == "__main__": + sensor = TemperatureSensor("Room101") + + print("Testing temperature drift:\n") + + for _ in range(5): + print(sensor.generate_temperature_reading()) + time.sleep(1) #to implement a natural delay between readings \ No newline at end of file From 2229e06a485581a503c840b5fe5b398d3fda5bdb Mon Sep 17 00:00:00 2001 From: Jaja Mba Date: Tue, 10 Mar 2026 17:15:58 +0000 Subject: [PATCH 4/4] Created co2 sensor script --- co2_sensor.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 co2_sensor.py diff --git a/co2_sensor.py b/co2_sensor.py new file mode 100644 index 0000000..036f86a --- /dev/null +++ b/co2_sensor.py @@ -0,0 +1,53 @@ +import random +import time +from sensor_base import SensorBase + + +class CO2Sensor(SensorBase): + """ + CO2 sensor that simulates gradual drift in CO2 concentration. + Values range from 400 ppm (fresh air) to 1500 ppm (poor air quality). + """ + + def __init__(self, room_id): + super().__init__("co2", room_id) + + # Start somewhere within the normal CO2 range + self.current_value = random.uniform(400, 800) + + def read_value(self): + """ + Simulate gradual CO2 drift rather than random jumps. + """ + + # Small drift step + drift = random.uniform(-50, 50) + + self.current_value += drift + + # Clamp value within realistic range + self.current_value = max(400, min(1500, self.current_value)) + + return round(self.current_value, 2) + + def generate_co2_reading(self): + """ + Generate a formatted JSON CO2 reading. + """ + value = self.read_value() + return self.generate_reading(value, "ppm") + + +# ------------------------ +# Manual Test +# ------------------------ + +if __name__ == "__main__": + + sensor = CO2Sensor("Room101") + + print("Testing CO2 drift:\n") + + for _ in range(5): + print(sensor.generate_co2_reading()) + time.sleep(1) \ No newline at end of file