import time
import json
import random
from umqtt.simple import MQTTClient
import network
# Paramètres MQTT
SERVER = ""
CLIENT_ID = ""
TOPIC_DHT = ""
TOPIC_RELAY1 = ""
TOPIC_RELAY2 = ""
MQTT_USER = ""
MQTT_PASSWORD = ""
# WiFi
WIFI_SSID = ""
WIFI_PASSWORD = ""
# État simulé des relais
relay1_state = "OFF"
relay2_state = "OFF"
# Connexion WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connexion WiFi...")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
pass
print("Connecté WiFi :", wlan.ifconfig())
# Simuler données capteurs
def read_fake_sensor():
temperature = round(random.uniform(20, 40), 1)
humidity = random.randint(30, 70)
return temperature, humidity
# Publier température et humidité uniquement
def publish_sensor_data(temp, hum):
data = {
"temperature": temp,
"humidity": hum
}
mqtt_client.publish(TOPIC_DHT, json.dumps(data))
print("Publié sur", TOPIC_DHT, ":", data)
# Callback : recevoir commandes relais1 / relais2
def on_message(topic, message):
global relay1_state, relay2_state
topic = topic.decode("utf-8")
print("Message reçu - Topic:", topic, "Message:", message)
try:
data = json.loads(message.decode("utf-8"))
if "etat" in data:
etat = data["etat"].upper()
if topic == TOPIC_RELAY1:
relay1_state = "ON" if etat == "ON" else "OFF"
print("→ Relais 1 :", relay1_state)
elif topic == TOPIC_RELAY2:
relay2_state = "ON" if etat == "ON" else "OFF"
print("→ Relais 2 :", relay2_state)
except Exception as e:
print("Erreur de décodage JSON :", e)
# Connexion
connect_wifi()
mqtt_client = MQTTClient(CLIENT_ID, SERVER, user=MQTT_USER, password=MQTT_PASSWORD)
mqtt_client.set_callback(on_message)
mqtt_client.connect()
mqtt_client.subscribe(TOPIC_RELAY1)
mqtt_client.subscribe(TOPIC_RELAY2)
print("Connecté MQTT et abonné aux relais.")
# Boucle principale
while True:
try:
# Simuler lecture capteur
temp, hum = read_fake_sensor()
# Publier uniquement les capteurs
publish_sensor_data(temp, hum)
# Vérifier messages MQTT pour relais
mqtt_client.check_msg()
time.sleep(3)
except Exception as e:
print("Erreur :", e)
time.sleep(1)