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