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

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

parent 3ce51a0e
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