From 3ce51a0e00cfbb8bbc8bc0fce6d6cb1b9d515d3a Mon Sep 17 00:00:00 2001
From: Patrick Ade <21adpa1bif@hft-stuttgart.de>
Date: Thu, 17 Apr 2025 17:53:49 +0200
Subject: [PATCH] created jsonhandler (untested), refactoring

---
 src/mqtt_influx_backend/Main.py               | 39 ----------------
 .../{InfluxDBWriter.py => influxDBWriter.py}  |  0
 src/mqtt_influx_backend/jsonhandler.py        | 16 +++++++
 ...TClientHandler.py => mQTTClientHandler.py} | 37 +++++++++-------
 .../{mac_to_room => mac_to_room.json}         |  0
 src/mqtt_influx_backend/main.py               | 44 +++++++++++++++++++
 6 files changed, 80 insertions(+), 56 deletions(-)
 delete mode 100644 src/mqtt_influx_backend/Main.py
 rename src/mqtt_influx_backend/{InfluxDBWriter.py => influxDBWriter.py} (100%)
 create mode 100644 src/mqtt_influx_backend/jsonhandler.py
 rename src/mqtt_influx_backend/{MQTTClientHandler.py => mQTTClientHandler.py} (74%)
 rename src/mqtt_influx_backend/{mac_to_room => mac_to_room.json} (100%)
 create mode 100644 src/mqtt_influx_backend/main.py

diff --git a/src/mqtt_influx_backend/Main.py b/src/mqtt_influx_backend/Main.py
deleted file mode 100644
index 4b52edd..0000000
--- a/src/mqtt_influx_backend/Main.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from dotenv import load_dotenv
-import os
-import logging
-from  src.mqtt_influx_backend.MQTTClientHandler import MQTTClientHandler
-from src.mqtt_influx_backend.InfluxDBWriter import InfluxDBWriter
-
-def get_logger(name: str = "default_logger") -> logging.Logger:
-    logger = logging.getLogger(name)
-    if not logger.handlers:  # Verhindert doppelte Handler bei mehrfacher Initialisierung
-        logger.setLevel(logging.DEBUG)
-        handler = logging.StreamHandler()
-        formatter = logging.Formatter(
-            '[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s'
-        )
-        handler.setFormatter(formatter)
-        logger.addHandler(handler)
-    return logger
-
-
-load_dotenv()
-
-def main():
-    influx_writer = InfluxDBWriter(
-    url=os.getenv("INFLUXDB_URL"),
-    token=os.getenv("INFLUXDB_TOKEN"),
-    org=os.getenv("INFLUXDB_ORG"),
-    bucket=os.getenv("INFLUXDB_BUCKET")
-    )
-
-    mqtt_handler = MQTTClientHandler(
-    broker_url=os.getenv("MQTT_BROKER_URL"),
-    topic=os.getenv("MQTT_TOPIC"),
-    influx_writer=influx_writer
-    )
-
-    mqtt_handler.start()
-
-if __name__ == "__main__":
-    main()
diff --git a/src/mqtt_influx_backend/InfluxDBWriter.py b/src/mqtt_influx_backend/influxDBWriter.py
similarity index 100%
rename from src/mqtt_influx_backend/InfluxDBWriter.py
rename to src/mqtt_influx_backend/influxDBWriter.py
diff --git a/src/mqtt_influx_backend/jsonhandler.py b/src/mqtt_influx_backend/jsonhandler.py
new file mode 100644
index 0000000..cbfddea
--- /dev/null
+++ b/src/mqtt_influx_backend/jsonhandler.py
@@ -0,0 +1,16 @@
+import json
+
+file_name = "mac_to_room.json"
+
+
+def load_json():
+    with open(file_name) as f:
+        mac_room_mapping = json.load(f)
+    return mac_room_mapping
+
+
+def write_json(mac_room_mapping: dict):
+    with open(file_name, "w") as f:
+        f.seek(0)
+        json.dump(mac_room_mapping, f, indent=4)
+        f.truncate()  # TODO Check if truncate is necessary?
diff --git a/src/mqtt_influx_backend/MQTTClientHandler.py b/src/mqtt_influx_backend/mQTTClientHandler.py
similarity index 74%
rename from src/mqtt_influx_backend/MQTTClientHandler.py
rename to src/mqtt_influx_backend/mQTTClientHandler.py
index 478024d..8e8d3f3 100644
--- a/src/mqtt_influx_backend/MQTTClientHandler.py
+++ b/src/mqtt_influx_backend/mQTTClientHandler.py
@@ -1,18 +1,20 @@
 import json
 from datetime import datetime
 import paho.mqtt.client as mqtt
-from mqtt_influx_backend import InfluxDBWriter
+from src.mqtt_influx_backend import influxDBWriter
 
-class MQTTClientHandler:
 
+class MQTTClientHandler:
     # Konstruktor
-    def __init__(self, broker_url: str, topic: str, influx_writer: InfluxDBWriter):
-        #logger sollte hier zugeweist werden
+    def __init__(
+        self, broker_url: str, topic: str, influx_writer: influxDBWriter
+    ):
+        # logger sollte hier zugeweist werden
         self.broker_url = broker_url
         self.topic = topic
         self.influx_writer = influx_writer
         self.client = mqtt.Client()
-        # Events werden hier methoden 
+        # Events werden hier methoden
         self.client.on_connect = self.on_connect
         self.client.on_message = self.on_message
 
@@ -20,25 +22,25 @@ class MQTTClientHandler:
         # log
         print("Connected with result code " + str(rc))
         client.subscribe(self.topic)
-    
-    #def save_mapping(self):
-    #with open(self.mapping_file, "w") as f:
+
+    # def save_mapping(self):
+    # with open(self.mapping_file, "w") as f:
     #    json.dump(self.mac_to_room, f, indent=4)
 
     # 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    
+        self: ist die MQTTClientHandler instanz, die wird gebraucht
         """
         # log
         msg = json.loads(msg.payload)
         metadate = msg["metadata"]
         # key: mac : value : room
-        # hier prüfen, ob die Mac-Adresse einen Raum hat, 
+        # 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"] 
+        mac = metadate["mac"]
 
         # ToImplement
         """
@@ -49,23 +51,24 @@ class MQTTClientHandler:
 
         room = self.mac_to_room[mac]
         """
-        
+
         try:
             self.influx_writer.write_point(
                 measurement="sensor_data",
                 tags={
-                    # ToDo "room":  metadate["todo"], 
+                    # ToDo "room":  metadate["todo"],
                     "mac": metadate["mac-address"]
                 },
-                
                 fields={
                     "co2": msg["co2"],
                     "temperature": msg["temp"],
-                    "humidity": msg["rh"]
+                    "humidity": msg["rh"],
                 },
-                timestamp=metadate["time"]
+                timestamp=metadate["time"],
             )
-            print("Wrote to InfluxDB:", msg) # muss später rausgeschmiessen werden
+            print(
+                "Wrote to InfluxDB:", msg
+            )  # muss später rausgeschmiessen werden
         except Exception as e:
             # log
             print("Error processing message:", e)
diff --git a/src/mqtt_influx_backend/mac_to_room b/src/mqtt_influx_backend/mac_to_room.json
similarity index 100%
rename from src/mqtt_influx_backend/mac_to_room
rename to src/mqtt_influx_backend/mac_to_room.json
diff --git a/src/mqtt_influx_backend/main.py b/src/mqtt_influx_backend/main.py
new file mode 100644
index 0000000..ef8397f
--- /dev/null
+++ b/src/mqtt_influx_backend/main.py
@@ -0,0 +1,44 @@
+from dotenv import load_dotenv
+import os
+import logging
+from src.mqtt_influx_backend.mQTTClientHandler import MQTTClientHandler
+from src.mqtt_influx_backend.influxDBWriter import InfluxDBWriter
+
+
+def get_logger(name: str = "default_logger") -> logging.Logger:
+    logger = logging.getLogger(name)
+    if (
+        not logger.handlers
+    ):  # Verhindert doppelte Handler bei mehrfacher Initialisierung
+        logger.setLevel(logging.DEBUG)
+        handler = logging.StreamHandler()
+        formatter = logging.Formatter(
+            "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
+        )
+        handler.setFormatter(formatter)
+        logger.addHandler(handler)
+    return logger
+
+
+load_dotenv()
+
+
+def main():
+    influx_writer = InfluxDBWriter(
+        url=os.getenv("INFLUXDB_URL"),
+        token=os.getenv("INFLUXDB_TOKEN"),
+        org=os.getenv("INFLUXDB_ORG"),
+        bucket=os.getenv("INFLUXDB_BUCKET"),
+    )
+
+    mqtt_handler = MQTTClientHandler(
+        broker_url=os.getenv("MQTT_BROKER_URL"),
+        topic=os.getenv("MQTT_TOPIC"),
+        influx_writer=influx_writer,
+    )
+
+    mqtt_handler.start()
+
+
+if __name__ == "__main__":
+    main()
-- 
GitLab