# Programme de récupération des adresses de sondes DS18B20 et envoie dans table Sondes.Tracker. import paho.mqtt.client as mqtt import mysql.connector import re # Import de la bibliothèque des expressions régulières # Configuration de la base de données MySQL db_config = { 'user': 'superviseur', # Remplacez par votre utilisateur MySQL 'password': 'Bto7Lm_z]m!BFH!*', # Remplacez par votre mot de passe MySQL 'host': '54.36.188.119', # Adresse de votre serveur MySQL (localhost si en local) 'database': 'Sondes' # Nom de la base de données MySQL } def convertir_rom_id_en_hexa(rom_id): # On découpe la chaîne rom_id en paires de deux caractères hex_parts = [f"0x{rom_id[i:i + 2]}" for i in range(0, len(rom_id), 2)] return ",".join(hex_parts) # Connexion à la base de données MySQL def connect_db(): return mysql.connector.connect(**db_config) # Fonction pour vérifier si la sonde est déjà présente dans la base def sonde_deja_presente(rom_id): conn = connect_db() cursor = conn.cursor() try: # Vérifier si la sonde existe déjà dans la base cursor.execute("SELECT COUNT(*) FROM Tracker WHERE rom_id = %s", (rom_id,)) result = cursor.fetchone() return result[0] > 0 # Si le nombre est supérieur à 0, la sonde est déjà présente except mysql.connector.Error as err: print(f"Erreur MySQL lors de la vérification de la sonde : {err}") return False finally: cursor.close() conn.close() # Fonction pour insérer les sondes dans la base de données def inserer_sonde(rom_id): if sonde_deja_presente(rom_id): print(f"Sonde {rom_id} déjà présente dans la base de données. Aucune insertion effectuée.") return conn = connect_db() cursor = conn.cursor() try: # Conversion en hexadécimal rom_id_hexa = convertir_rom_id_en_hexa(rom_id) # Insertion de rom_id et de sa version hexa dans la base cursor.execute("INSERT INTO Tracker (rom_id, hexa) VALUES (%s, %s)", (rom_id, rom_id_hexa)) conn.commit() print(f"Sonde {rom_id} insérée dans la base de données avec son format hexa {rom_id_hexa}.") except mysql.connector.Error as err: print(f"Erreur MySQL : {err}") finally: cursor.close() conn.close() # Fonction de callback pour gérer les messages MQTT def on_message(_client, _userdata, message): payload = message.payload.decode() print(f"Message reçu : {payload}") # Utilisation de re pour extraire les ROM IDs (Sonde [rom_id]) rom_ids = re.findall(r"[0-9a-fA-F]{16}", payload) # Capturer les IDs de 16 caractères if rom_ids: for rom_id in rom_ids: inserer_sonde(rom_id) else: print("Aucun ROM ID trouvé dans le message.") # Configuration du client MQTT mqtt_broker = "46.105.92.116" mqtt_port = 1883 # Vérifiez si votre broker utilise un autre port mqtt_user = "Bwps" mqtt_password = "scJ5ACj2keRfI^" mqtt_topic = "Tracker/sondes" client = mqtt.Client() # Authentification MQTT client.username_pw_set(mqtt_user, mqtt_password) # Configuration du callback pour les messages MQTT client.on_message = on_message # Connexion au broker MQTT client.connect(mqtt_broker, mqtt_port, 60) # Souscription au topic Tracker/sondes client.subscribe(mqtt_topic) # Démarrer la boucle MQTT client.loop_forever()