Commit 3ce51a0e authored by Patrick Ade's avatar Patrick Ade
Browse files

created jsonhandler (untested), refactoring

parent 57c9cb62
Showing with 80 additions and 17 deletions
+80 -17
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?
import json import json
from datetime import datetime from datetime import datetime
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
from mqtt_influx_backend import InfluxDBWriter from src.mqtt_influx_backend import influxDBWriter
class MQTTClientHandler:
class MQTTClientHandler:
# Konstruktor # Konstruktor
def __init__(self, broker_url: str, topic: str, influx_writer: InfluxDBWriter): def __init__(
#logger sollte hier zugeweist werden self, broker_url: str, topic: str, influx_writer: influxDBWriter
):
# logger sollte hier zugeweist werden
self.broker_url = broker_url self.broker_url = broker_url
self.topic = topic self.topic = topic
self.influx_writer = influx_writer self.influx_writer = influx_writer
self.client = mqtt.Client() self.client = mqtt.Client()
# Events werden hier methoden # Events werden hier methoden
self.client.on_connect = self.on_connect self.client.on_connect = self.on_connect
self.client.on_message = self.on_message self.client.on_message = self.on_message
...@@ -20,25 +22,25 @@ class MQTTClientHandler: ...@@ -20,25 +22,25 @@ class MQTTClientHandler:
# log # log
print("Connected with result code " + str(rc)) print("Connected with result code " + str(rc))
client.subscribe(self.topic) client.subscribe(self.topic)
#def save_mapping(self): # def save_mapping(self):
#with open(self.mapping_file, "w") as f: # with open(self.mapping_file, "w") as f:
# json.dump(self.mac_to_room, f, indent=4) # json.dump(self.mac_to_room, f, indent=4)
# eventuell refactorn und die Aufgaben in Methoden aufteilen # eventuell refactorn und die Aufgaben in Methoden aufteilen
def on_message(self, client, userdata, msg): def on_message(self, client, userdata, msg):
""" """
Wenn das Topic eine Nachricht bekommt wird diese Methode ausgeführt 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 # log
msg = json.loads(msg.payload) msg = json.loads(msg.payload)
metadate = msg["metadata"] metadate = msg["metadata"]
# key: mac : value : room # 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 # wenn nicht trage es in mac_to_room leer ein
# "aa:bb:cc:dd:ee:ff" : "" # "aa:bb:cc:dd:ee:ff" : ""
mac = metadate["mac"] mac = metadate["mac"]
# ToImplement # ToImplement
""" """
...@@ -49,23 +51,24 @@ class MQTTClientHandler: ...@@ -49,23 +51,24 @@ class MQTTClientHandler:
room = self.mac_to_room[mac] room = self.mac_to_room[mac]
""" """
try: try:
self.influx_writer.write_point( self.influx_writer.write_point(
measurement="sensor_data", measurement="sensor_data",
tags={ tags={
# ToDo "room": metadate["todo"], # ToDo "room": metadate["todo"],
"mac": metadate["mac-address"] "mac": metadate["mac-address"]
}, },
fields={ fields={
"co2": msg["co2"], "co2": msg["co2"],
"temperature": msg["temp"], "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: except Exception as e:
# log # log
print("Error processing message:", e) print("Error processing message:", e)
......
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
import logging import logging
from src.mqtt_influx_backend.MQTTClientHandler import MQTTClientHandler from src.mqtt_influx_backend.mQTTClientHandler import MQTTClientHandler
from src.mqtt_influx_backend.InfluxDBWriter import InfluxDBWriter from src.mqtt_influx_backend.influxDBWriter import InfluxDBWriter
def get_logger(name: str = "default_logger") -> logging.Logger: def get_logger(name: str = "default_logger") -> logging.Logger:
logger = logging.getLogger(name) logger = logging.getLogger(name)
if not logger.handlers: # Verhindert doppelte Handler bei mehrfacher Initialisierung if (
not logger.handlers
): # Verhindert doppelte Handler bei mehrfacher Initialisierung
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler() handler = logging.StreamHandler()
formatter = logging.Formatter( formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s' "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
) )
handler.setFormatter(formatter) handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
...@@ -19,21 +22,23 @@ def get_logger(name: str = "default_logger") -> logging.Logger: ...@@ -19,21 +22,23 @@ def get_logger(name: str = "default_logger") -> logging.Logger:
load_dotenv() load_dotenv()
def main(): def main():
influx_writer = InfluxDBWriter( influx_writer = InfluxDBWriter(
url=os.getenv("INFLUXDB_URL"), url=os.getenv("INFLUXDB_URL"),
token=os.getenv("INFLUXDB_TOKEN"), token=os.getenv("INFLUXDB_TOKEN"),
org=os.getenv("INFLUXDB_ORG"), org=os.getenv("INFLUXDB_ORG"),
bucket=os.getenv("INFLUXDB_BUCKET") bucket=os.getenv("INFLUXDB_BUCKET"),
) )
mqtt_handler = MQTTClientHandler( mqtt_handler = MQTTClientHandler(
broker_url=os.getenv("MQTT_BROKER_URL"), broker_url=os.getenv("MQTT_BROKER_URL"),
topic=os.getenv("MQTT_TOPIC"), topic=os.getenv("MQTT_TOPIC"),
influx_writer=influx_writer influx_writer=influx_writer,
) )
mqtt_handler.start() mqtt_handler.start()
if __name__ == "__main__": if __name__ == "__main__":
main() main()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment