Commit 2741fb4e authored by Gezer's avatar Gezer
Browse files

Es tut, aber am besten noch verschönern etc.

parent 3ce51a0e
No related merge requests found
Showing with 38 additions and 30 deletions
+38 -30
import json import json
file_name = "mac_to_room.json" file_name = "src/mqtt_influx_backend/mac_to_room.json"
def load_json(): def load_json():
with open(file_name) as f: with open(file_name) as f:
......
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 src.mqtt_influx_backend import jsonhandler
from src.mqtt_influx_backend import influxDBWriter from src.mqtt_influx_backend import influxDBWriter
class MQTTClientHandler: class MQTTClientHandler:
MEASUREMENT_NAME = "sensor_data"
TAG_ROOM = "room"
TAG_MAC = "mac"
FIELD_CO2 = "co2"
FIELD_TEMP = "temperature"
FIELD_HUMIDITY = "humidity"
# Konstruktor # Konstruktor
def __init__( def __init__(self, broker_url: str, topic: str, influx_writer: influxDBWriter):
self, broker_url: str, topic: str, influx_writer: influxDBWriter
):
# logger sollte hier zugeweist werden # logger sollte hier zugeweist werden
self.mac_to_room = jsonhandler.load_json()
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 # Methoden werden hier Events zugeteilt
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
...@@ -23,46 +31,44 @@ class MQTTClientHandler: ...@@ -23,46 +31,44 @@ class MQTTClientHandler:
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):
# 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 # 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 um die Einträge in
die InfluxDB zu schreiben
""" """
# 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-address"]
# ToImplement
"""
if mac not in self.mac_to_room: if mac not in self.mac_to_room:
# log
print(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.") print(f"Neue MAC-Adresse gefunden: {mac}. Mapping wird ergänzt.")
self.mac_to_room[mac] = "" # leerer Platzhalter self.mac_to_room[mac] = "" # leerer Platzhalter
self.save_mapping() jsonhandler.write_json(self.mac_to_room)
self.mac_to_room = jsonhandler.load_json()
return
self.write_to_influxDB(msg,metadate)
room = self.mac_to_room[mac]
"""
def write_to_influxDB(self, msg, metadate):
try: try:
self.influx_writer.write_point( self.influx_writer.write_point(
measurement="sensor_data", measurement=self.MEASUREMENT_NAME,
tags={ tags={
# ToDo "room": metadate["todo"], self.TAG_ROOM : self.mac_to_room[metadate["mac-address"]],
"mac": metadate["mac-address"] self.TAG_MAC: metadate["mac-address"]
}, },
fields={ fields={
"co2": msg["co2"], self.FIELD_CO2: msg["co2"],
"temperature": msg["temp"], self.FIELD_TEMP: msg["temp"],
"humidity": msg["rh"], self.FIELD_HUMIDITY: msg["rh"],
}, },
timestamp=metadate["time"], timestamp=metadate["time"],
) )
...@@ -71,7 +77,9 @@ class MQTTClientHandler: ...@@ -71,7 +77,9 @@ class MQTTClientHandler:
) # muss später rausgeschmiessen werden ) # muss später rausgeschmiessen werden
except Exception as e: except Exception as e:
# log # log
print("Error processing message:", e) print("Failed writing to InfluxDb: ",e)
def start(self): def start(self):
self.client.connect(self.broker_url) self.client.connect(self.broker_url)
......
{ {
"AA:BB:CC:DD:EE:FF": "Wohnzimmer", "AA:BB:CC:DD:EE:FF": "Wohnzimmer",
"11:22:33:44:55:66": "Küche", "11:22:33:44:55:66": "K\u00fcche",
"77:88:99:AA:BB:CC": "Schlafzimmer" "77:88:99:AA:BB:CC": "Schlafzimmer",
"DE:AD:BE:EF:12:34": ""
} }
\ No newline at end of file
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