Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel2
MQTT_TO_INFLUXDB
Commits
2741fb4e
Commit
2741fb4e
authored
1 month ago
by
Gezer
Browse files
Options
Download
Email Patches
Plain Diff
Es tut, aber am besten noch verschönern etc.
parent
3ce51a0e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/mqtt_influx_backend/jsonhandler.py
+1
-2
src/mqtt_influx_backend/jsonhandler.py
src/mqtt_influx_backend/mQTTClientHandler.py
+33
-25
src/mqtt_influx_backend/mQTTClientHandler.py
src/mqtt_influx_backend/mac_to_room.json
+4
-3
src/mqtt_influx_backend/mac_to_room.json
with
38 additions
and
30 deletions
+38
-30
src/mqtt_influx_backend/jsonhandler.py
+
1
-
2
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
:
...
...
This diff is collapsed.
Click to expand it.
src/mqtt_influx_backend/mQTTClientHandler.py
+
33
-
25
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
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
=
"
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
)
...
...
This diff is collapsed.
Click to expand it.
src/mqtt_influx_backend/mac_to_room.json
+
4
-
3
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
This diff is collapsed.
Click to expand it.
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
Menu
Explore
Projects
Groups
Snippets