96 lines
2.9 KiB
Python
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()
|