Commit 67ebe9e0 authored by Patrick Ade's avatar Patrick Ade
Browse files

preparation for integration in web project

No related merge requests found
Showing with 0 additions and 190 deletions
+0 -190
# InfluxDB config
INFLUXDB_URL=http://localhost:8086
INFLUXDB_ORG=docs
INFLUXDB_BUCKET=co2-test
INFLUXDB_TOKEN=jTTnLJmL5w2Z1IlkKJzkwDreWJ62HdDWT5_RS0J3Rbm28AxPkUZfU_sIPaG3aoLQ5MklO_Gn9y23HtU38yR0Nw==
# (Optional) MQTT config, falls du das auch variabel machen willst
MQTT_BROKER_URL="172.20.10.12"
MQTT_TOPIC="co2/#"
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
class InfluxDBWriter:
def __init__(self, url: str, token: str, org: str, bucket: str):
self.client = InfluxDBClient(url=url, token=token, org=org)
self.write_api = self.client.write_api(write_options=SYNCHRONOUS)
self.bucket = bucket
self.org = org
def write_point(self, measurement: str, tags: dict, fields: dict, timestamp=None):
point = Point(measurement)
for k, v in tags.items():
point.tag(k, v)
for k, v in fields.items():
point.field(k, v)
if timestamp:
point.time(timestamp, WritePrecision.NS)
self.write_api.write(bucket=self.bucket, org=self.org, record=point)
import json
from datetime import datetime
import paho.mqtt.client as mqtt
from mqtt_influx_backend import InfluxDBWriter
class MQTTClientHandler:
def __init__(self, broker_url: str, topic: str, influx_writer: InfluxDBWriter):
self.broker_url = broker_url
self.topic = topic
self.influx_writer = influx_writer
self.client = mqtt.Client()
self.client.on_connect = self.on_connect
self.client.on_message = self.on_message
def on_connect(self, client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe(self.topic)
def on_message(self, client, userdata, msg):
utfMgs = msg.payload.decode("utf-8")
#dictionary = json.loads(utfMgs)
print(utfMgs)
print(utfMgs)
print(utfMgs)
data = utfMgs
try:
value = float(data.get("co2"))
self.influx_writer.write_point(
measurement="temperature",
tags={"topic": msg.topic},
fields={"value": value},
timestamp=datetime.utcnow()
)
print("Wrote to InfluxDB:", value)
except Exception as e:
print("Error processing message:", e)
def start(self):
self.client.connect(self.broker_url)
self.client.loop_forever()
from dotenv import load_dotenv
import os
from mqtt_influx_backend.MQTTClientHandler import MQTTClientHandler
from mqtt_influx_backend.InfluxDBWriter import InfluxDBWriter
load_dotenv()
def main():
influx_writer = InfluxDBWriter(
url=os.getenv("INFLUXDB_URL"),
token=os.getenv("INFLUXDB_TOKEN"),
org=os.getenv("INFLUXDB_ORG"),
bucket=os.getenv("INFLUXDB_BUCKET")
)
mqtt_handler = MQTTClientHandler(
broker_url=os.getenv("MQTT_BROKER_URL"),
topic=os.getenv("MQTT_TOPIC"),
influx_writer=influx_writer
)
mqtt_handler.start()
if __name__ == "__main__":
main()
import json
from datetime import datetime
import influxdb_client, os, time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
# InfluxDB config
INFLUXDB_URL = os.environ.get("INFLUXDB_URL")
INFLUXDB_TOKEN = os.environ.get("INFLUXDB_TOKEN")
INFLUXDB_ORG = os.environ.get("INFLUXDB_ORG")
INFLUXDB_BUCKET = os.environ.get("INFLUXDB_BUCKET")
write_client = influxdb_client.InfluxDBClient(url=INFLUXDB_URL, token=INFLUXDB_TOKEN, org=INFLUXDB_ORG)
bucket="co2-test"
write_api = write_client.write_api(write_options=SYNCHRONOUS)
# MQTT config
MQTT_BROKER_URL = os.environ.get("MQTT_BROKER_URL")
MQTT_PUBLISH_TOPIC = os.environ.get("MQTT_TOPIC")
for value in range(5):
point = (
Point("measurement1")
.tag("mac-adress", "22:de:aa:21::a2")
.field("ppm", value)
)
write_api.write(bucket=bucket, org=INFLUXDB_ORG, record=point)
time.sleep(1) # separate points by 1 second
'''
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe(MQTT_PUBLISH_TOPIC)
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
try:
# Decode JSON payload (z. B. {"value": 22.5, "unit": "C"})
data = json.loads(msg.payload.decode())
value = float(data.get("value"))
# Create data point
point = Point("temperature") \
.tag("topic", msg.topic) \
.field("value", value) \
.time(datetime.utcnow())
# Write to InfluxDB
write_api.write(bucket=INFLUXDB_BUCKET, org=INFLUXDB_ORG, record=point)
print("Wrote to InfluxDB:", point)
except Exception as e:
print("Error processing message:", e)
'''
# Start MQTT client
'''
mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.connect(MQTT_BROKER_URL)
mqttc.loop_forever()
'''
File moved
File moved
File moved
File moved
Metadata-Version: 2.4
Name: mqtt-influx-backend
Version: 0.1.0
Summary: MQTT subscriber that stores data in InfluxDB
Author-email: Dein Name <deine.email@example.com>
Requires-Python: >=3.8
Requires-Dist: influxdb-client
Requires-Dist: paho-mqtt
Requires-Dist: python-dotenv
mqtt_to_influx.py
pyproject.toml
mqtt_influx_backend.egg-info/PKG-INFO
mqtt_influx_backend.egg-info/SOURCES.txt
mqtt_influx_backend.egg-info/dependency_links.txt
mqtt_influx_backend.egg-info/requires.txt
mqtt_influx_backend.egg-info/top_level.txt
\ No newline at end of file
influxdb-client
paho-mqtt
python-dotenv
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