Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel2
Web
Commits
2741fb4e
Commit
2741fb4e
authored
Apr 18, 2025
by
Gezer
Browse files
Es tut, aber am besten noch verschönern etc.
parent
3ce51a0e
Changes
3
Show whitespace changes
Inline
Side-by-side
src/mqtt_influx_backend/jsonhandler.py
View file @
2741fb4e
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
:
...
...
src/mqtt_influx_backend/mQTTClientHandler.py
View file @
2741fb4e
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
room = self.mac_to_room[mac]
self
.
write_to_influxDB
(
msg
,
metadate
)
"""
def
write_to_influxDB
(
self
,
msg
,
metadate
):
try
:
try
:
self
.
influx_writer
.
write_point
(
self
.
influx_writer
.
write_point
(
measurement
=
"
se
nsor_data"
,
measurement
=
se
lf
.
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
)
...
...
src/mqtt_influx_backend/mac_to_room.json
View file @
2741fb4e
{
{
"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
\u
00fcche"
,
"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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment