diff --git a/mqtt/src/__init__.py b/backend/__init__.py
similarity index 100%
rename from mqtt/src/__init__.py
rename to backend/__init__.py
diff --git a/backend/app/influxdb_service.py b/backend/app/influxdb_service.py
index fb766e6f0548e1cc7284883ce1f26487576dc5e5..391c9595828581a294b6d1883c3d391a66f79736 100644
--- a/backend/app/influxdb_service.py
+++ b/backend/app/influxdb_service.py
@@ -14,5 +14,5 @@ client = InfluxDBHelper(
 tables = client.get_all_data()
 
 for table in tables:
-  for record in table.records:
-    print(record)
\ No newline at end of file
+    for record in table.records:
+        print(record)
diff --git a/backend/app/views.py b/backend/app/views.py
index 7bff2a9e70abf3f8e6590ac58906a1dcaa551079..6934b6337f69e34e773a95964cdb28d984087440 100644
--- a/backend/app/views.py
+++ b/backend/app/views.py
@@ -32,7 +32,7 @@ def login_view(request):
     user = authenticate(request, username=email, password=password)
 
     if user:
-        login(request, user) # also creates a session in the browser
+        login(request, user)  # also creates a session in the browser
         return JsonResponse({"success": True})
     return JsonResponse(
         {"success": False, "message": "Invalid credentials"}, status=401
@@ -40,7 +40,7 @@ def login_view(request):
 
 
 def logout_view(request):
-    logout(request) 
+    logout(request)
     return JsonResponse({"message": "Logged out"})
 
 
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index 20d648f6b9103fbfc716072298e184ebc1babc7b..ecbddeb5425a3891bc9ebd7e5dff34ebe92377a1 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
 description = "backend of co2 web service"
 authors = [
   {name = "Patrick Ade",    email = "21adpa1bif@hft-stuttgart.de"},
-  {name = "Morten Stetter", email = "22?stmo1bif@hft-stuttgart.de"},
+  {name = "Morten Stetter", email = "22stmo1bif@hft-stuttgart.de"},
   {name = "Aaron Mele",     email = "21meaa1bif@hft-stuttgart.de"},
   {name = "Emre Gezer",     email = "21geem1bif@hft-stuttgart.de"},
 ]
@@ -19,7 +19,8 @@ dependencies = [
     "django>=5.2",
     "django-cors-headers>=4.7.0",
     "influxdb-client>=1.40",
-    "python-dotenv",
+    "python-dotenv>=1.1",
+    "paho-mqtt>=2.1",
 ]
 
 [dependency-groups]
@@ -34,3 +35,14 @@ line-length = 80
 [tool.ruff.lint]
 # Add the `line-too-long` rule to the enforced rule set.
 extend-select = ["E501"]
+
+
+#[build-system]
+#requires = ["setuptools" ] #"wheel"
+#build-backend = "setuptools.build_meta"
+
+#[tool.setuptools]
+#package-dir = {"" = "."}
+
+#[tool.setuptools.packages.find]
+#where = ["backend"]
diff --git a/mqtt/src/mqtt_influx_backend/__init__.py b/backend/stream_processing/__init__.py
similarity index 100%
rename from mqtt/src/mqtt_influx_backend/__init__.py
rename to backend/stream_processing/__init__.py
diff --git a/mqtt/src/mqtt_influx_backend/influxDBWriter.py b/backend/stream_processing/influxDBWriter.py
similarity index 87%
rename from mqtt/src/mqtt_influx_backend/influxDBWriter.py
rename to backend/stream_processing/influxDBWriter.py
index 398a7f4c23e3d1de08f10ba86cbd6579f2ebbf0a..0213e5654b99aae06f1e9a7aea6e7e9aeab4cfa8 100644
--- a/mqtt/src/mqtt_influx_backend/influxDBWriter.py
+++ b/backend/stream_processing/influxDBWriter.py
@@ -1,6 +1,7 @@
 from influxdb_client import InfluxDBClient, Point, WritePrecision
 from influxdb_client.client.write_api import SYNCHRONOUS
 
+
 class InfluxDBWriter:
     def __init__(self, url: str, token: str, org: str, bucket: str):
         self.client = InfluxDBClient(url=url, token=token, org=org)
@@ -8,7 +9,9 @@ class InfluxDBWriter:
         self.bucket = bucket
         self.org = org
 
-    def write_point(self, measurement: str, tags: dict, fields: dict, timestamp=None):
+    def write_point(
+        self, measurement: str, tags: dict, fields: dict, timestamp=None
+    ):
         point = Point(measurement)
         for k, v in tags.items():
             point.tag(k, v)
diff --git a/mqtt/src/mqtt_influx_backend/jsonhandler.py b/backend/stream_processing/jsonhandler.py
similarity index 76%
rename from mqtt/src/mqtt_influx_backend/jsonhandler.py
rename to backend/stream_processing/jsonhandler.py
index 6d2744f5b8f8fe334d074625710f0d24f74aaeb4..8be10f99e3f4dea04307d7b3d5d8d961773bef4b 100644
--- a/mqtt/src/mqtt_influx_backend/jsonhandler.py
+++ b/backend/stream_processing/jsonhandler.py
@@ -1,11 +1,12 @@
 import json
 import os
 
-def load_json(file_name: str)  -> dict:
+
+def load_json(file_name: str) -> dict:
     """
-    ladet eine JSON Datei, wenn diese existiert, 
+    ladet eine JSON Datei, wenn diese existiert,
     und gibt diese als dictionary zurück
-    key : value 
+    key : value
     """
     if not os.path.exists(file_name):
         return {}
@@ -13,9 +14,10 @@ def load_json(file_name: str)  -> dict:
         mac_room_mapping = json.load(f)
     return mac_room_mapping
 
+
 def write_json(mac_room_mapping: dict, file_name: str):
     """
-    Nimmt ein dictionary und schreibt dessen 
+    Nimmt ein dictionary und schreibt dessen
     Inhalte in eine JSON Datei
     """
     with open(file_name, "w") as f:
diff --git a/mqtt/src/mqtt_influx_backend/mQTTClientHandler.py b/backend/stream_processing/mQTTClientHandler.py
similarity index 71%
rename from mqtt/src/mqtt_influx_backend/mQTTClientHandler.py
rename to backend/stream_processing/mQTTClientHandler.py
index 7695e7bbafd7bb645a8bb5e87c93fe1c3f2119d9..3338cf4107599d31065791454330a559b0749b28 100644
--- a/mqtt/src/mqtt_influx_backend/mQTTClientHandler.py
+++ b/backend/stream_processing/mQTTClientHandler.py
@@ -1,14 +1,14 @@
 import json
 
-from mqtt_influx_backend.loggingFactory import LoggerFactory
+from utils.loggingFactory import LoggerFactory
 from datetime import datetime
 import paho.mqtt.client as mqtt
-from mqtt_influx_backend import jsonhandler
+from stream_processing import jsonhandler
 from utils.influx import InfluxDBHelper
 
-class MQTTClientHandler:
 
-    MAPPING_FILE_NAME = "src/mqtt_influx_backend/mac_to_room.json"
+class MQTTClientHandler:
+    MAPPING_FILE_NAME = "stream_processing/mac_to_room.json"
     MEASUREMENT_NAME = "sensor_data"
     TAG_ROOM = "room"
     TAG_MAC = "mac"
@@ -17,7 +17,9 @@ class MQTTClientHandler:
     FIELD_HUMIDITY = "humidity"
 
     # Konstruktor
-    def __init__(self, broker_url: str, topic: str, influx_writer: InfluxDBHelper):
+    def __init__(
+        self, broker_url: str, topic: str, influx_writer: InfluxDBHelper
+    ):
         self.logger = LoggerFactory.get_logger(__name__)
         # key: mac : value : room
         self.mac_to_room = jsonhandler.load_json(self.MAPPING_FILE_NAME)
@@ -25,58 +27,61 @@ class MQTTClientHandler:
         self.topic = topic
         self.influx_writer = influx_writer
         self.client = mqtt.Client()
-        # Methoden werden hier Events zugeteilt 
+        # Methoden werden hier Events zugeteilt
         self.client.on_connect = self.on_connect
         self.client.on_message = self.on_message
 
     def on_connect(self, client, userdata, flags, rc):
         self.logger.info("Connected with result code " + str(rc))
         client.subscribe(self.topic)
-        self.logger.info("Subscribed to " + self.topic )
+        self.logger.info("Subscribed to " + self.topic)
 
     # eventuell refactorn und die Aufgaben in Methoden aufteilen
     def on_message(self, client, userdata, msg):
         """
         Wenn das Topic eine Nachricht bekommt wird diese Methode ausgeführt
-        self: ist die MQTTClientHandler instanz, die wird gebraucht um die Einträge in 
+        self: ist die MQTTClientHandler instanz, die wird gebraucht um die Einträge in
         die InfluxDB zu schreiben
         """
         msg = json.loads(msg.payload)
         metadate = msg["metadata"]
-        
+
         # hier prüfen, ob die Mac-Adresse einen Raum hat,
         # wenn nicht trage es in mac_to_room leer ein
         # "aa:bb:cc:dd:ee:ff" : ""
         mac = metadate["mac-address"]
-        
+
         if mac not in self.mac_to_room:
-            self.logger.warning(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.")
+            self.logger.warning(
+                f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt."
+            )
             self.mac_to_room[mac] = ""  # leerer Platzhalter
             jsonhandler.write_json(self.mac_to_room, self.MAPPING_FILE_NAME)
             self.mac_to_room = jsonhandler.load_json(self.MAPPING_FILE_NAME)
             return
-        
-        self.write_to_influxDB(msg,metadate)
 
+        self.write_to_influxDB(msg, metadate)
 
-    def write_to_influxDB(self, msg : dict, metadate: dict):
+    def write_to_influxDB(self, msg: dict, metadate: dict):
         try:
             self.influx_writer.write_point(
                 measurement=self.MEASUREMENT_NAME,
                 tags={
-                    self.TAG_ROOM : self.mac_to_room[metadate["mac-address"]],
-                    self.TAG_MAC: metadate["mac-address"]
+                    self.TAG_ROOM: self.mac_to_room[metadate["mac-address"]],
+                    self.TAG_MAC: metadate["mac-address"],
                 },
                 fields={
                     self.FIELD_CO2: msg["co2"],
                     self.FIELD_TEMP: msg["temp"],
                     self.FIELD_HUMIDITY: msg["rh"],
                 },
-                timestamp=metadate["time"], #fix
+                timestamp=metadate["time"],  # fix
             )
-            print("Wrote to InfluxDB:", msg)  # muss später rausgeschmiessen werden
+            print(
+                "Wrote to InfluxDB:", msg
+            )  # muss später rausgeschmiessen werden
         except Exception as e:
-            self.logger.error(f"Failed writing to InfluxDb: {e}")    
+            self.logger.error(f"Failed writing to InfluxDb: {e}")
 
     def start(self):
         self.client.connect(self.broker_url)
diff --git a/mqtt/src/mqtt_influx_backend/mac_to_room.json b/backend/stream_processing/mac_to_room.json
similarity index 76%
rename from mqtt/src/mqtt_influx_backend/mac_to_room.json
rename to backend/stream_processing/mac_to_room.json
index 2e88a4cf09eb9f95cbaaeecf0b7cf6f79f2134cd..65c29eccebfc21fd7d8c39a9e08f1d29d4c84844 100644
--- a/mqtt/src/mqtt_influx_backend/mac_to_room.json
+++ b/backend/stream_processing/mac_to_room.json
@@ -8,5 +8,7 @@
     "lK:AD:BE:EF:12:34": "",
     "MK:AD:BE:EF:12:34": "",
     "AB:AD:BE:EF:12:34": "",
-    "EF:AD:BE:EF:12:34": ""
+    "EF:AD:BE:EF:12:34": "",
+    "Tx:AD:BE:EF:12:34": "",
+    "T\u00dc:AD:BE:EF:12:34": ""
 }
\ No newline at end of file
diff --git a/mqtt/src/mqtt_influx_backend/main.py b/backend/stream_processing/main.py
similarity index 89%
rename from mqtt/src/mqtt_influx_backend/main.py
rename to backend/stream_processing/main.py
index bebebe8d1385bb7ffd66408fc27bb762cc4e61bc..4679c3afb2670c97bc5953b2ccd97a51b43f2686 100644
--- a/mqtt/src/mqtt_influx_backend/main.py
+++ b/backend/stream_processing/main.py
@@ -1,12 +1,12 @@
 from dotenv import load_dotenv
 import os
-from mqtt_influx_backend.mQTTClientHandler import MQTTClientHandler
+from stream_processing.mQTTClientHandler import MQTTClientHandler
 from utils.influx import InfluxDBHelper
 
 load_dotenv()
 
-def main():
 
+def main():
     influx_writer = InfluxDBHelper(
         url=os.getenv("INFLUXDB_URL"),
         token=os.getenv("INFLUXDB_TOKEN"),
diff --git a/utils/influx.py b/backend/utils/influx.py
similarity index 83%
rename from utils/influx.py
rename to backend/utils/influx.py
index 963f5e747c83c325f6bb83d8c9dd6eed5bb125e7..54fb86f423a85c994ca170e196cf9b5c9e63817b 100644
--- a/utils/influx.py
+++ b/backend/utils/influx.py
@@ -2,6 +2,7 @@ import os
 from influxdb_client import InfluxDBClient, Point, WritePrecision
 from influxdb_client.client.write_api import WriteOptions
 
+
 class InfluxDBHelper:
     def __init__(self, url: str, token: str, org: str, bucket: str):
         self.client = InfluxDBClient(url=url, token=token, org=org)
@@ -9,12 +10,14 @@ class InfluxDBHelper:
         self.org = org
         self.query_api = self.client.query_api()
         # self.write_api = self.client.write_api(write_options=SYNCHRONOUS) good for debug
-        self.write_api = self.client.write_api(write_options=WriteOptions(batch_size=1000, flush_interval=10000))
+        self.write_api = self.client.write_api(
+            write_options=WriteOptions(batch_size=1000, flush_interval=10000)
+        )
 
-    def write_point(self, measurement: str, tags: dict, fields: dict, timestamp=None):
-        '''
-        
-        '''
+    def write_point(
+        self, measurement: str, tags: dict, fields: dict, timestamp=None
+    ):
+        """ """
         point = Point(measurement)
         for k, v in tags.items():
             point.tag(k, v)
@@ -25,8 +28,7 @@ class InfluxDBHelper:
         self.write_api.write(bucket=self.bucket, org=self.org, record=point)
 
     def get_all_data(self):
-        '''
-        '''
+        """ """
         query = f'''
             from(bucket: "{self.bucket}")
                 |> range(start: -20d)
@@ -35,8 +37,7 @@ class InfluxDBHelper:
         return self.query_api.query(org=self.org, query=query)
 
     def get_latest_room_data(self, room_id: str):
-        '''
-        '''
+        """ """
         query = f'''
             from(bucket: "{self.bucket}")
                 |> range(start: -5m)
diff --git a/utils/init.py b/backend/utils/init.py
similarity index 100%
rename from utils/init.py
rename to backend/utils/init.py
diff --git a/mqtt/src/mqtt_influx_backend/loggingFactory.py b/backend/utils/loggingFactory.py
similarity index 62%
rename from mqtt/src/mqtt_influx_backend/loggingFactory.py
rename to backend/utils/loggingFactory.py
index 99618a839c22235ee3cc1f147430e366e103095d..2cc12bf6f4162805eec6c80ce2edfd83ff1d1c8f 100644
--- a/mqtt/src/mqtt_influx_backend/loggingFactory.py
+++ b/backend/utils/loggingFactory.py
@@ -6,11 +6,11 @@ LOG_DIR = "logs"
 LOG_FILE = "app.log"
 LOG_PATH = os.path.join(LOG_DIR, LOG_FILE)
 
-class LoggerFactory:
 
-    #logger.info("Connected with result code %s", str(rc))
-    #logger.warning("Neue MAC-Adresse gefunden: %s", mac)
-    #logger.error("Failed writing to InfluxDb: %s", e)
+class LoggerFactory:
+    # logger.info("Connected with result code %s", str(rc))
+    # logger.warning("Neue MAC-Adresse gefunden: %s", mac)
+    # logger.error("Failed writing to InfluxDb: %s", e)
 
     @staticmethod
     def get_logger(name: str, level=logging.DEBUG) -> logging.Logger:
@@ -24,11 +24,13 @@ class LoggerFactory:
         logger.setLevel(level)
 
         formatter = logging.Formatter(
-            '[%(asctime)s] %(levelname)s in %(name)s: %(message)s',
-            datefmt='%Y-%m-%d %H:%M:%S'
+            "[%(asctime)s] %(levelname)s in %(name)s: %(message)s",
+            datefmt="%Y-%m-%d %H:%M:%S",
         )
 
-        file_handler = RotatingFileHandler(LOG_PATH, maxBytes=5_000_000, backupCount=5)
+        file_handler = RotatingFileHandler(
+            LOG_PATH, maxBytes=5_000_000, backupCount=5
+        )
         file_handler.setFormatter(formatter)
         logger.addHandler(file_handler)
 
diff --git a/backend/uv.lock b/backend/uv.lock
index 14bce673b74992908e4d1d848ac0047eb7ee25b7..497e2a0364a7eb9b6725ea0e3435759d1f4de543 100644
--- a/backend/uv.lock
+++ b/backend/uv.lock
@@ -19,6 +19,7 @@ dependencies = [
     { name = "django" },
     { name = "django-cors-headers" },
     { name = "influxdb-client" },
+    { name = "paho-mqtt" },
     { name = "python-dotenv" },
 ]
 
@@ -32,7 +33,8 @@ requires-dist = [
     { name = "django", specifier = ">=5.2" },
     { name = "django-cors-headers", specifier = ">=4.7.0" },
     { name = "influxdb-client", specifier = ">=1.40" },
-    { name = "python-dotenv" },
+    { name = "paho-mqtt", specifier = ">=2.1" },
+    { name = "python-dotenv", specifier = ">=1.1" },
 ]
 
 [package.metadata.requires-dev]
@@ -90,6 +92,15 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/5c/b3/1edc89584b8d1bc5226cf508b67ab64da3ba83041cab348861e6f4392326/influxdb_client-1.48.0-py3-none-any.whl", hash = "sha256:410db15db761df7ea98adb333c7a03f05bcc2ceef4830cefb7071b888be2b827", size = 746177 },
 ]
 
+[[package]]
+name = "paho-mqtt"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/39/15/0a6214e76d4d32e7f663b109cf71fb22561c2be0f701d67f93950cd40542/paho_mqtt-2.1.0.tar.gz", hash = "sha256:12d6e7511d4137555a3f6ea167ae846af2c7357b10bc6fa4f7c3968fc1723834", size = 148848 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/c4/cb/00451c3cf31790287768bb12c6bec834f5d292eaf3022afc88e14b8afc94/paho_mqtt-2.1.0-py3-none-any.whl", hash = "sha256:6db9ba9b34ed5bc6b6e3812718c7e06e2fd7444540df2455d2c51bd58808feee", size = 67219 },
+]
+
 [[package]]
 name = "python-dateutil"
 version = "2.9.0.post0"
@@ -125,27 +136,27 @@ wheels = [
 
 [[package]]
 name = "ruff"
-version = "0.11.5"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/45/71/5759b2a6b2279bb77fe15b1435b89473631c2cd6374d45ccdb6b785810be/ruff-0.11.5.tar.gz", hash = "sha256:cae2e2439cb88853e421901ec040a758960b576126dab520fa08e9de431d1bef", size = 3976488 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/23/db/6efda6381778eec7f35875b5cbefd194904832a1153d68d36d6b269d81a8/ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b", size = 10103150 },
-    { url = "https://files.pythonhosted.org/packages/44/f2/06cd9006077a8db61956768bc200a8e52515bf33a8f9b671ee527bb10d77/ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077", size = 10898637 },
-    { url = "https://files.pythonhosted.org/packages/18/f5/af390a013c56022fe6f72b95c86eb7b2585c89cc25d63882d3bfe411ecf1/ruff-0.11.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4bfd80a6ec559a5eeb96c33f832418bf0fb96752de0539905cf7b0cc1d31d779", size = 10236012 },
-    { url = "https://files.pythonhosted.org/packages/b8/ca/b9bf954cfed165e1a0c24b86305d5c8ea75def256707f2448439ac5e0d8b/ruff-0.11.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0947c0a1afa75dcb5db4b34b070ec2bccee869d40e6cc8ab25aca11a7d527794", size = 10415338 },
-    { url = "https://files.pythonhosted.org/packages/d9/4d/2522dde4e790f1b59885283f8786ab0046958dfd39959c81acc75d347467/ruff-0.11.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad871ff74b5ec9caa66cb725b85d4ef89b53f8170f47c3406e32ef040400b038", size = 9965277 },
-    { url = "https://files.pythonhosted.org/packages/e5/7a/749f56f150eef71ce2f626a2f6988446c620af2f9ba2a7804295ca450397/ruff-0.11.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6cf918390cfe46d240732d4d72fa6e18e528ca1f60e318a10835cf2fa3dc19f", size = 11541614 },
-    { url = "https://files.pythonhosted.org/packages/89/b2/7d9b8435222485b6aac627d9c29793ba89be40b5de11584ca604b829e960/ruff-0.11.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56145ee1478582f61c08f21076dc59153310d606ad663acc00ea3ab5b2125f82", size = 12198873 },
-    { url = "https://files.pythonhosted.org/packages/00/e0/a1a69ef5ffb5c5f9c31554b27e030a9c468fc6f57055886d27d316dfbabd/ruff-0.11.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5f66f8f1e8c9fc594cbd66fbc5f246a8d91f916cb9667e80208663ec3728304", size = 11670190 },
-    { url = "https://files.pythonhosted.org/packages/05/61/c1c16df6e92975072c07f8b20dad35cd858e8462b8865bc856fe5d6ccb63/ruff-0.11.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80b4df4d335a80315ab9afc81ed1cff62be112bd165e162b5eed8ac55bfc8470", size = 13902301 },
-    { url = "https://files.pythonhosted.org/packages/79/89/0af10c8af4363304fd8cb833bd407a2850c760b71edf742c18d5a87bb3ad/ruff-0.11.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068befab73620b8a0cc2431bd46b3cd619bc17d6f7695a3e1bb166b652c382a", size = 11350132 },
-    { url = "https://files.pythonhosted.org/packages/b9/e1/ecb4c687cbf15164dd00e38cf62cbab238cad05dd8b6b0fc68b0c2785e15/ruff-0.11.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5da2e710a9641828e09aa98b92c9ebbc60518fdf3921241326ca3e8f8e55b8b", size = 10312937 },
-    { url = "https://files.pythonhosted.org/packages/cf/4f/0e53fe5e500b65934500949361e3cd290c5ba60f0324ed59d15f46479c06/ruff-0.11.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ef39f19cb8ec98cbc762344921e216f3857a06c47412030374fffd413fb8fd3a", size = 9936683 },
-    { url = "https://files.pythonhosted.org/packages/04/a8/8183c4da6d35794ae7f76f96261ef5960853cd3f899c2671961f97a27d8e/ruff-0.11.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b2a7cedf47244f431fd11aa5a7e2806dda2e0c365873bda7834e8f7d785ae159", size = 10950217 },
-    { url = "https://files.pythonhosted.org/packages/26/88/9b85a5a8af21e46a0639b107fcf9bfc31da4f1d263f2fc7fbe7199b47f0a/ruff-0.11.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:81be52e7519f3d1a0beadcf8e974715b2dfc808ae8ec729ecfc79bddf8dbb783", size = 11404521 },
-    { url = "https://files.pythonhosted.org/packages/fc/52/047f35d3b20fd1ae9ccfe28791ef0f3ca0ef0b3e6c1a58badd97d450131b/ruff-0.11.5-py3-none-win32.whl", hash = "sha256:e268da7b40f56e3eca571508a7e567e794f9bfcc0f412c4b607931d3af9c4afe", size = 10320697 },
-    { url = "https://files.pythonhosted.org/packages/b9/fe/00c78010e3332a6e92762424cf4c1919065707e962232797d0b57fd8267e/ruff-0.11.5-py3-none-win_amd64.whl", hash = "sha256:6c6dc38af3cfe2863213ea25b6dc616d679205732dc0fb673356c2d69608f800", size = 11378665 },
-    { url = "https://files.pythonhosted.org/packages/43/7c/c83fe5cbb70ff017612ff36654edfebec4b1ef79b558b8e5fd933bab836b/ruff-0.11.5-py3-none-win_arm64.whl", hash = "sha256:67e241b4314f4eacf14a601d586026a962f4002a475aa702c69980a38087aa4e", size = 10460287 },
+version = "0.11.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d9/11/bcef6784c7e5d200b8a1f5c2ddf53e5da0efec37e6e5a44d163fb97e04ba/ruff-0.11.6.tar.gz", hash = "sha256:bec8bcc3ac228a45ccc811e45f7eb61b950dbf4cf31a67fa89352574b01c7d79", size = 4010053 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/6e/1f/8848b625100ebcc8740c8bac5b5dd8ba97dd4ee210970e98832092c1635b/ruff-0.11.6-py3-none-linux_armv6l.whl", hash = "sha256:d84dcbe74cf9356d1bdb4a78cf74fd47c740bf7bdeb7529068f69b08272239a1", size = 10248105 },
+    { url = "https://files.pythonhosted.org/packages/e0/47/c44036e70c6cc11e6ee24399c2a1e1f1e99be5152bd7dff0190e4b325b76/ruff-0.11.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9bc583628e1096148011a5d51ff3c836f51899e61112e03e5f2b1573a9b726de", size = 11001494 },
+    { url = "https://files.pythonhosted.org/packages/ed/5b/170444061650202d84d316e8f112de02d092bff71fafe060d3542f5bc5df/ruff-0.11.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f2959049faeb5ba5e3b378709e9d1bf0cab06528b306b9dd6ebd2a312127964a", size = 10352151 },
+    { url = "https://files.pythonhosted.org/packages/ff/91/f02839fb3787c678e112c8865f2c3e87cfe1744dcc96ff9fc56cfb97dda2/ruff-0.11.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63c5d4e30d9d0de7fedbfb3e9e20d134b73a30c1e74b596f40f0629d5c28a193", size = 10541951 },
+    { url = "https://files.pythonhosted.org/packages/9e/f3/c09933306096ff7a08abede3cc2534d6fcf5529ccd26504c16bf363989b5/ruff-0.11.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a4b9a4e1439f7d0a091c6763a100cef8fbdc10d68593df6f3cfa5abdd9246e", size = 10079195 },
+    { url = "https://files.pythonhosted.org/packages/e0/0d/a87f8933fccbc0d8c653cfbf44bedda69c9582ba09210a309c066794e2ee/ruff-0.11.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5edf270223dd622218256569636dc3e708c2cb989242262fe378609eccf1308", size = 11698918 },
+    { url = "https://files.pythonhosted.org/packages/52/7d/8eac0bd083ea8a0b55b7e4628428203441ca68cd55e0b67c135a4bc6e309/ruff-0.11.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f55844e818206a9dd31ff27f91385afb538067e2dc0beb05f82c293ab84f7d55", size = 12319426 },
+    { url = "https://files.pythonhosted.org/packages/c2/dc/d0c17d875662d0c86fadcf4ca014ab2001f867621b793d5d7eef01b9dcce/ruff-0.11.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d8f782286c5ff562e4e00344f954b9320026d8e3fae2ba9e6948443fafd9ffc", size = 11791012 },
+    { url = "https://files.pythonhosted.org/packages/f9/f3/81a1aea17f1065449a72509fc7ccc3659cf93148b136ff2a8291c4bc3ef1/ruff-0.11.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01c63ba219514271cee955cd0adc26a4083df1956d57847978383b0e50ffd7d2", size = 13949947 },
+    { url = "https://files.pythonhosted.org/packages/61/9f/a3e34de425a668284e7024ee6fd41f452f6fa9d817f1f3495b46e5e3a407/ruff-0.11.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15adac20ef2ca296dd3d8e2bedc6202ea6de81c091a74661c3666e5c4c223ff6", size = 11471753 },
+    { url = "https://files.pythonhosted.org/packages/df/c5/4a57a86d12542c0f6e2744f262257b2aa5a3783098ec14e40f3e4b3a354a/ruff-0.11.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4dd6b09e98144ad7aec026f5588e493c65057d1b387dd937d7787baa531d9bc2", size = 10417121 },
+    { url = "https://files.pythonhosted.org/packages/58/3f/a3b4346dff07ef5b862e2ba06d98fcbf71f66f04cf01d375e871382b5e4b/ruff-0.11.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:45b2e1d6c0eed89c248d024ea95074d0e09988d8e7b1dad8d3ab9a67017a5b03", size = 10073829 },
+    { url = "https://files.pythonhosted.org/packages/93/cc/7ed02e0b86a649216b845b3ac66ed55d8aa86f5898c5f1691797f408fcb9/ruff-0.11.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bd40de4115b2ec4850302f1a1d8067f42e70b4990b68838ccb9ccd9f110c5e8b", size = 11076108 },
+    { url = "https://files.pythonhosted.org/packages/39/5e/5b09840fef0eff1a6fa1dea6296c07d09c17cb6fb94ed5593aa591b50460/ruff-0.11.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:77cda2dfbac1ab73aef5e514c4cbfc4ec1fbef4b84a44c736cc26f61b3814cd9", size = 11512366 },
+    { url = "https://files.pythonhosted.org/packages/6f/4c/1cd5a84a412d3626335ae69f5f9de2bb554eea0faf46deb1f0cb48534042/ruff-0.11.6-py3-none-win32.whl", hash = "sha256:5151a871554be3036cd6e51d0ec6eef56334d74dfe1702de717a995ee3d5b287", size = 10485900 },
+    { url = "https://files.pythonhosted.org/packages/42/46/8997872bc44d43df986491c18d4418f1caff03bc47b7f381261d62c23442/ruff-0.11.6-py3-none-win_amd64.whl", hash = "sha256:cce85721d09c51f3b782c331b0abd07e9d7d5f775840379c640606d3159cae0e", size = 11558592 },
+    { url = "https://files.pythonhosted.org/packages/d7/6a/65fecd51a9ca19e1477c3879a7fda24f8904174d1275b419422ac00f6eee/ruff-0.11.6-py3-none-win_arm64.whl", hash = "sha256:3567ba0d07fb170b1b48d944715e3294b77f5b7679e8ba258199a250383ccb79", size = 10682766 },
 ]
 
 [[package]]
diff --git a/mqtt/Dockerfile b/mqtt/Dockerfile
deleted file mode 100644
index b2c96ab27aced46b94a26cd235198f34e8e21caf..0000000000000000000000000000000000000000
--- a/mqtt/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM python:3.12-slim
-
-# Arbeitsverzeichnis im Container
-WORKDIR /app
-
-# Projektdateien kopieren
-COPY . .
-
-# uv installieren
-RUN pip install uv
-
-# Installiere Abhängigkeiten aus pyproject.toml
-RUN uv pip install . --no-cache-dir --system
-
-# Startkommando
-CMD ["uv", "run", "-m", "mqtt_influx_backend.main"]
diff --git a/mqtt/console.txt b/mqtt/console.txt
deleted file mode 100644
index 4832f2c20cbf6572fa1db52c38351a6c9df7c05a..0000000000000000000000000000000000000000
--- a/mqtt/console.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-mosquitto_pub -h 172.20.10.12 -t co2/esp32 -m "{
-  "metadata": {
-    "timestamp": "2025-04-12T14:22:35Z",
-    "mac": "AA:BB:CC:DD:EE:FF",
-    "room": "A123"
-  },
-  "co2": 615.3,
-  "temperature": 21.8,
-  "humidity": 45.2
-}"
diff --git a/mqtt/pyproject.toml b/mqtt/pyproject.toml
deleted file mode 100644
index f3b0a3f5b8ecb896315a53255d0c6927836a8a66..0000000000000000000000000000000000000000
--- a/mqtt/pyproject.toml
+++ /dev/null
@@ -1,31 +0,0 @@
-[project]
-name = "mqtt-influx-backend"
-version = "0.1.0"
-description = "Backend to write MQTT sensor data to InfluxDB"
-readme = "README.md"
-authors = [
-  {name = "Patrick Ade",    email = "21adpa1bif@hft-stuttgart.de"},
-  {name = "Morten Stetter", email = "22?stmo1bif@hft-stuttgart.de"},
-  {name = "Aaron Mele",     email = "21meaa1bif@hft-stuttgart.de"},
-  {name = "Emre Gezer",     email = "21geem1bif@hft-stuttgart.de"},
-]
-maintainers = [
-  {name = "Max Mustermann", email = "mustermann@example.com"}
-]
-keywords = ["co2", "sensor", "temperature", "humidity", "monitor", "monitoring", "air quality"]
-requires-python = ">=3.10"
-dependencies = [
-    "paho-mqtt",
-    "influxdb-client",
-    "python-dotenv",
-]
-
-[build-system]
-requires = ["setuptools", "wheel"]
-build-backend = "setuptools.build_meta"
-
-[tool.setuptools]
-package-dir = {"" = "src"}
-
-[tool.setuptools.packages.find]
-where = ["src"]
diff --git a/mqtt/uv.lock b/mqtt/uv.lock
deleted file mode 100644
index 91d64efb95c8e697807398c55e93edacc1939a89..0000000000000000000000000000000000000000
--- a/mqtt/uv.lock
+++ /dev/null
@@ -1,123 +0,0 @@
-version = 1
-revision = 1
-requires-python = ">=3.10"
-
-[[package]]
-name = "certifi"
-version = "2025.1.31"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
-]
-
-[[package]]
-name = "influxdb-client"
-version = "1.48.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "certifi" },
-    { name = "python-dateutil" },
-    { name = "reactivex" },
-    { name = "setuptools" },
-    { name = "urllib3" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/11/47/b756380917cb4b968bd871fc006128e2cc9897fb1ab4bcf7d108f9601e78/influxdb_client-1.48.0.tar.gz", hash = "sha256:414d5b5eff7d2b6b453f33e2826ea9872ea04a11996ba9c8604b0c1df57c8559", size = 386415 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/5c/b3/1edc89584b8d1bc5226cf508b67ab64da3ba83041cab348861e6f4392326/influxdb_client-1.48.0-py3-none-any.whl", hash = "sha256:410db15db761df7ea98adb333c7a03f05bcc2ceef4830cefb7071b888be2b827", size = 746177 },
-]
-
-[[package]]
-name = "mqtt-influx-backend"
-version = "0.1.0"
-source = { editable = "." }
-dependencies = [
-    { name = "influxdb-client" },
-    { name = "paho-mqtt" },
-    { name = "python-dotenv" },
-]
-
-[package.metadata]
-requires-dist = [
-    { name = "influxdb-client" },
-    { name = "paho-mqtt" },
-    { name = "python-dotenv" },
-]
-
-[[package]]
-name = "paho-mqtt"
-version = "2.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/39/15/0a6214e76d4d32e7f663b109cf71fb22561c2be0f701d67f93950cd40542/paho_mqtt-2.1.0.tar.gz", hash = "sha256:12d6e7511d4137555a3f6ea167ae846af2c7357b10bc6fa4f7c3968fc1723834", size = 148848 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/c4/cb/00451c3cf31790287768bb12c6bec834f5d292eaf3022afc88e14b8afc94/paho_mqtt-2.1.0-py3-none-any.whl", hash = "sha256:6db9ba9b34ed5bc6b6e3812718c7e06e2fd7444540df2455d2c51bd58808feee", size = 67219 },
-]
-
-[[package]]
-name = "python-dateutil"
-version = "2.9.0.post0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "six" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
-]
-
-[[package]]
-name = "python-dotenv"
-version = "1.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 },
-]
-
-[[package]]
-name = "reactivex"
-version = "4.0.4"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
-    { name = "typing-extensions" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/ef/63/f776322df4d7b456446eff78c4e64f14c3c26d57d46b4e06c18807d5d99c/reactivex-4.0.4.tar.gz", hash = "sha256:e912e6591022ab9176df8348a653fe8c8fa7a301f26f9931c9d8c78a650e04e8", size = 119177 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/69/3f/2ed8c1b8fe3fc2ed816ba40554ef703aad8c51700e2606c139fcf9b7f791/reactivex-4.0.4-py3-none-any.whl", hash = "sha256:0004796c420bd9e68aad8e65627d85a8e13f293de76656165dffbcb3a0e3fb6a", size = 217791 },
-]
-
-[[package]]
-name = "setuptools"
-version = "78.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a9/5a/0db4da3bc908df06e5efae42b44e75c81dd52716e10192ff36d0c1c8e379/setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", size = 1367827 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8", size = 1256108 },
-]
-
-[[package]]
-name = "six"
-version = "1.17.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
-]
-
-[[package]]
-name = "typing-extensions"
-version = "4.13.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 },
-]
-
-[[package]]
-name = "urllib3"
-version = "2.4.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 }
-wheels = [
-    { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 },
-]