import paho.mqtt.client as mqttClient
from influxdb import InfluxDBClient
import time

TOPIC = "test1"
broker_address= "localhost"  
port = 1883                        
database = "thermo-bibli"
nom_client = "capteurs1"
 
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(TOPIC, 2)

def addData(database, time, numero_grappe, numero_capteur, temp, hum, batterie): # ajoute donnée à base de donnée influxDB
    client = InfluxDBClient(host='localhost', port=8086)
    client.create_database(database)
    client.switch_database(database)
    data = [
        {
            "measurement": numero_grappe,
            "tags": {"numero_capteur": numero_capteur},
            "time": time, 
            "fields": {"temperature": temp, "humidite": hum, "batterie": batterie}

        }
    ]
    client.write_points(data)

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)
    for i in range(L):
        addData(database, tab[0], tab[1], "capteur" + str(i+1), temp[i], hum[i], batterie)

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()