code-grappe/mqtt-python.py
2024-05-30 17:19:25 +02:00

96 lines
2.9 KiB
Python

#!/usr/bin/python3
#lib pour faire le timestamp
#from datetime import datetime
#lib pour ecoute mqtt
import paho.mqtt.client as mqttClient
import time
import sys
#http request lib
import requests
from aiohttp import ClientSession
##################################################################################################
#var mqtt
TOPIC = "test"
broker_address= "localhost"
port = 1883
nom_client = "serveur-test"
#var influx
influx_bucket = "Fablab" #database
influx_token = "QRzx929_X67sunqmY6xpS65fM7ff7Gy_Fz4ZD2qAT7eaR8Jps-9CZtEkot5Z01CQ-q1tq87IRyahXGebsSEzxV==" #token
influx_org="Fablab"
influx_url=f"http://localhost:8086/api/v2/write?org={influx_org}&bucket={influx_bucket}&precision=s"
#########################################################################################################
#http
async def get(session: object, url: object) -> object:
async with session.get(url) as response:
return await response.text()
#enregistre dans un fichier pour debug
def log(time):
f = open("/var/log/mqtt-influxdb/date.txt", "a")
f.write(time + "\n")
f.close()
def dump_log(text):
f = open("/var/log/mqtt-influxdb/dumped_message_thermo-bibli_test", "a")
f.write(text + "\n")
f.close()
#envois les donnees a influx via l'apiv2
def addData(time, numero_grappe, numero_capteur, temp, hum, batterie): # ajoute donnée à base de donnée influxDB
Headers = {"Authorization": f"Token {influx_token}"}
#data envoye a l'api
Data=f"{numero_grappe},numero_capteur={numero_capteur} temperature={temp},humidite={hum},batterie={batterie} {time}"
response = requests.post(influx_url, headers=Headers, data=Data)
#debug api, fonctionne correctement malgres le code retour 204, quand il y a un code 204 le json response fait une erreur
#print("Status Code", response.status_code)
#print("JSON Response ", response.json())
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(TOPIC, 2)
def on_message(client, userdata, message):
message = (message.payload).decode("utf-8") # convertit type bytes en string
print("Message reçu")
tab = message.split("|")
temp = tab[2].split()
hum = tab[3].split()
batterie = tab[4]
L = len(temp)
time=tab[0]
#envois la valeur temps reçu pour le debug
#log(time + " reçu")
for i in range(L):
addData(time, tab[1], "capteur" + str(i+1), temp[i], hum[i], batterie)
#log("---------")
#dump_log(message)
client = mqttClient.Client(nom_client, False)
client.username_pw_set(username="capteurs",password="Fablab")
client.on_connect= on_connect #callback
client.on_message= on_message #callback
client.connect(broker_address, port, 65535)
client.loop_start()
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
print ("exiting")
client.disconnect()
client.loop_stop()