From 69935ecbd929dab8dde76c89cd52dc303af229f7 Mon Sep 17 00:00:00 2001 From: Atilla Date: Sun, 10 Mar 2024 22:21:01 +0100 Subject: [PATCH] MQTT Werkend gekregen --- mqtt/__pycache__/db_connect.cpython-311.pyc | Bin 0 -> 937 bytes mqtt/db_connect.py | 16 +++++ mqtt/publisher.py | 68 ++++++++++++++++++++ mqtt/subscribe.py | 34 ++++++++++ 4 files changed, 118 insertions(+) create mode 100644 mqtt/__pycache__/db_connect.cpython-311.pyc create mode 100644 mqtt/db_connect.py create mode 100644 mqtt/publisher.py create mode 100644 mqtt/subscribe.py diff --git a/mqtt/__pycache__/db_connect.cpython-311.pyc b/mqtt/__pycache__/db_connect.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6e3c70a65885660aabb83a560280e741dc06272 GIT binary patch literal 937 zcmZWnUrQ8G6hC)nXPuqhO|5pzaAVf?Wx-uReTa}?DUl#7vL3Vn8TSslHal1EjBSQS zL=S#|KqvyAtgya8FMfeoMR2(w1kr;%ZPR>B`=e&^4p+1L8>R?q$%e8tB@v+VYnYNLnSgBQ(7!&OB|;hHobjUX1_+}e z<9GB8X&oZq1t+NIv2YU`LCGM{(3DV#$~5#@*$e?};n&0}tiXn!^$a#Kvek}qX$2<0 z$zB6bZ3iI(ymys&(bEVGuaI}}UfRTdw%R=rn8eXn$qVABO=Gl^KaiK1lu3KT83YD6kIb*uk^PXGGajc?O zVvat3XY`>yYuQUrytJOlhJ{jIb{B0CDK_sgE;?GKh?U&wmTgh)??NaGyySRUNocJD z%qfWF`m5FTlgGsy#v^RQH5e;fj&aYiZu8PpOV8=$8TOzw@7Sh8jfvtMWA?mha(!?p zH#ltEA2JGe3&t2uHP)EQC@*@RL1%*c`GsZC6$}&vc>=5Y59Yo_dI@z&Qw9zaSKdtT zC;E32{k87iTKA<|0wrCKKr;6ml%)2@r!}n}gIIDu+P53++lglOqM167$kp0~R5g~W z%V-||jCNs6891c_HC{cJ`b)?Mbl5O4OJ?Q#BkvoEf#R#cE WvKmMY($)W^9*Pm1<}C5cnBX6P2=7w> literal 0 HcmV?d00001 diff --git a/mqtt/db_connect.py b/mqtt/db_connect.py new file mode 100644 index 0000000..bc4922c --- /dev/null +++ b/mqtt/db_connect.py @@ -0,0 +1,16 @@ +import mysql.connector +from mysql.connector import Error + +def database_connect(): + try: + connection = mysql.connector.connect( + host="localhost", + user="root", + password="", + database="goodgarden" + ) + if connection.is_connected(): + return connection + except Error as e: + print(f"Connection NIET gelukt! ${e}") + return None \ No newline at end of file diff --git a/mqtt/publisher.py b/mqtt/publisher.py new file mode 100644 index 0000000..df4c4c2 --- /dev/null +++ b/mqtt/publisher.py @@ -0,0 +1,68 @@ +import requests +import time +import paho.mqtt.client as mqtt +from db_connect import database_connect + +mqtt_broker = "localhost" +mqtt_port = 1883 +publish_interval = 300 # Secondes om een aanvraag te doen + +api_endpoints = [ + {"url": "https://garden.inajar.nl/api/devices/", "topic": "goodgarden/devices"}, + {"url": "https://garden.inajar.nl/api/relative_humidity_events/", "topic": "goodgarden/relative_humidity"}, + {"url": "https://garden.inajar.nl/api/battery_voltage_events/", "topic": "goodgarden/battery_voltage"}, + {"url": "https://garden.inajar.nl/api/soil_electric_conductivity_events/", "topic": "goodgarden/soil_electric_conductivity"}, + {"url": "https://garden.inajar.nl/api/soil_relative_permittivity_events/", "topic": "goodgarden/soil_electric_permittivity"}, + {"url": "https://garden.inajar.nl/api/soil_temperature_events/", "topic": "goodgarden/soil_temperature"}, + {"url": "https://garden.inajar.nl/api/par_events/", "topic": "goodgarden/par_events"} +] + +client = mqtt.Client() +client.connect(mqtt_broker, mqtt_port, 60) +client.loop_start() + +def publish_to_mqtt(topic, data): + """ + Publiceer de opgehaalde data naar een MQTT-topic. + """ + client.publish(topic, str(data)) + print(f"Data published to MQTT topic {topic}.") + +def fetch_and_publish_data(): + """ + Haal data op van alle endpoints en publiceer naar MQTT. + """ + for endpoint in api_endpoints: + url = endpoint["url"] + mqtt_topic = endpoint["topic"] + access_token = "33bb3b42452306c58ecedc3c86cfae28ba22329c" + try: + headers = { + "Authorization": f"Token {access_token}" + } + response = requests.get(url, headers=headers) + response.raise_for_status() + data = response.json() + print(f"Data from {url}:") + print(data) + # Publiceer naar MQTT voordat de data wordt geladen in de database + publish_to_mqtt(mqtt_topic, data) + # Hier kan je de data laden naar je database + load_data(data) + except requests.exceptions.RequestException as e: + print(f"Error fetching data from {url}: {e}") + +def load_data(data): + """ + Implementeer de database logica hier. + Deze functie moet mogelijk worden aangepast om te werken met verschillende datastructuren van verschillende endpoints. + """ + print("Data processing and loading logic goes here.") + +if __name__ == "__main__": + while True: + fetch_and_publish_data() + print("Waiting for the next retrieval action...") + time.sleep(publish_interval) + +client.loop_stop() diff --git a/mqtt/subscribe.py b/mqtt/subscribe.py new file mode 100644 index 0000000..7fa4e71 --- /dev/null +++ b/mqtt/subscribe.py @@ -0,0 +1,34 @@ +import paho.mqtt.client as mqtt + +mqtt_broker = "localhost" +mqtt_port = 1883 + +# Lijst waarop je je wil subscriben +mqtt_topics = ["goodgarden/devices", "goodgarden/relative_humidity"] + +# Callback functie voor wanneer de client verbindt met de broker +def on_connect(client, userdata, flags, rc): + print("Connected with result code " + str(rc)) + # Abonneer op alle topics in de mqtt_topics lijst + for topic in mqtt_topics: + client.subscribe(topic) + print(f"Subscribed to {topic}") + +# Callback functie voor wanneer een bericht is ontvangen van de server +def on_message(client, userdata, msg): + # Decodeer de payload van bytes naar string + message = msg.payload.decode() + print(f"Message received on topic {msg.topic}: {message}") + # Hier kun je code toevoegen om iets te doen met het ontvangen bericht + # Bijvoorbeeld: de data opslaan, een actie uitvoeren, etc. + +# Maak de MQTT Client aan +client = mqtt.Client() +client.on_connect = on_connect +client.on_message = on_message + +# Verbind met de broker +client.connect(mqtt_broker, mqtt_port, 60) + +# Start loop +client.loop_forever()