diff --git a/src/mqtt_influx_backend/MQTTClientHandler.py b/src/mqtt_influx_backend/MQTTClientHandler.py index 1048fc2dba0baae69193aab4f787d5eaaa9e2323..478024dea3da10a4ea140d00f86bd3dc02b9205c 100644 --- a/src/mqtt_influx_backend/MQTTClientHandler.py +++ b/src/mqtt_influx_backend/MQTTClientHandler.py @@ -4,37 +4,70 @@ import paho.mqtt.client as mqtt from mqtt_influx_backend import InfluxDBWriter class MQTTClientHandler: + + # Konstruktor 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 self.client.on_connect = self.on_connect self.client.on_message = self.on_message def on_connect(self, client, userdata, flags, rc): + # log print("Connected with result code " + str(rc)) client.subscribe(self.topic) + + #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 + """ + # log msg = json.loads(msg.payload) - print(msg) metadate = msg["metadata"] - print(metadate["mac"]) - try: - - value = float(msg.get("co2")) + # key: mac : value : room + # 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"] + # ToImplement + """ + if mac not in self.mac_to_room: + print(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.") + self.mac_to_room[mac] = "" # leerer Platzhalter + self.save_mapping() + + room = self.mac_to_room[mac] + """ + + try: self.influx_writer.write_point( measurement="sensor_data", - tags={"time": metadate["mac"]}, - tags={"mac": metadate["mac"]}, - fields={"value": value}, - timestamp=metadate["timestamp"] + tags={ + # ToDo "room": metadate["todo"], + "mac": metadate["mac-address"] + }, + + fields={ + "co2": msg["co2"], + "temperature": msg["temp"], + "humidity": msg["rh"] + }, + timestamp=metadate["time"] ) - print("Wrote to InfluxDB:", value) + print("Wrote to InfluxDB:", msg) # muss später rausgeschmiessen werden except Exception as e: + # log print("Error processing message:", e) def start(self): diff --git a/src/mqtt_influx_backend/Main.py b/src/mqtt_influx_backend/Main.py index 22b69554eaf652c1addb8eda0a3a0b8327ba6d9d..4b52eddcd5e44f2f4b44f0568524baaf00fd959b 100644 --- a/src/mqtt_influx_backend/Main.py +++ b/src/mqtt_influx_backend/Main.py @@ -1,9 +1,22 @@ 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(): diff --git a/src/mqtt_influx_backend/mac_to_room b/src/mqtt_influx_backend/mac_to_room new file mode 100644 index 0000000000000000000000000000000000000000..dfbc6ed30aad9ba5966e03e78e4e2b803ad705f6 --- /dev/null +++ b/src/mqtt_influx_backend/mac_to_room @@ -0,0 +1,5 @@ +{ + "AA:BB:CC:DD:EE:FF": "Wohnzimmer", + "11:22:33:44:55:66": "Küche", + "77:88:99:AA:BB:CC": "Schlafzimmer" +} \ No newline at end of file