from machine import Pin, ADC, PWM
import time
import dht
import onewire
import ds18x20
import urequests  # Pour envoyer les alertes via API comme Twilio ou Pushbullet

# Définir les broches et initialiser les capteurs
ambiante1 = dht.DHT22(Pin(22))
ambiante2 = dht.DHT22(Pin(21))
ambiante3 = dht.DHT22(Pin(20))
ambiante4 = dht.DHT22(Pin(19))

light1 = ADC(Pin(28))
light2 = ADC(Pin(27))

# Relais pour les actionneurs
relay_chauffage = Pin(17, Pin.OUT)  # Relais chauffage
relay_extractor = Pin(18, Pin.OUT)  # Relais extracteur
relay_brumisateur = Pin(15, Pin.OUT)  # Relais brumisateur
relay_pad_cooling = Pin(14, Pin.OUT)  # Relais pad cooling

# Température sol (DS18B20)
dat = Pin(16)
ow = onewire.OneWire(dat)
sensor = ds18x20.DS18X20(ow)
roms = sensor.scan()

# Seuils
TEMP_SOL_MIN = 22
TEMP_SOL_MAX = 26
TEMP_AMBIANTE_MIN = 20
TEMP_AMBIANTE_MAX = 24
HUMIDITE_MIN = 70
HUMIDITE_MAX = 85
HUMIDITE_SOL_MIN = 50
HUMIDITE_SOL_MAX = 60

# Envoi des alertes (exemple via Twilio, Pushbullet, ou autre service)
def envoyer_alerte(message):
    url = "https://api.pushbullet.com/v2/pushes"
    headers = {
        "Access-Token": "VOTRE_TOKEN_PUSHBULLET"
    }
    data = {
        "type": "note",
        "title": "Alerte Serre",
        "body": message
    }
    response = urequests.post(url, json=data, headers=headers)
    print(response.json())

# Fonction de gestion de la température du sol
def gestion_temperature_sol(temp_sol):
    if temp_sol < TEMP_SOL_MIN:
        print("Température du sol trop basse. Allumer chauffage...")
        relay_chauffage.value(1)  # Allumer chauffage
    elif temp_sol > TEMP_SOL_MAX:
        print("Température du sol trop haute. Éteindre chauffage.")
        relay_chauffage.value(0)  # Éteindre chauffage

# Fonction de gestion de la température ambiante
def gestion_temperature_ambiante(temp_ambiante):
    if temp_ambiante > TEMP_AMBIANTE_MAX:
        print("Température trop haute. Activer extraction et refroidissement...")
        relay_extractor.value(1)  # Activer extracteur
        if temp_ambiante > 24:
            print("Température toujours élevée. Activer brumisateur...")
            relay_brumisateur.value(1)  # Activer brumisateur
    elif temp_ambiante < TEMP_AMBIANTE_MIN:
        print("Température trop basse. Rien à faire.")
        relay_extractor.value(0)  # Désactiver extracteur
        relay_brumisateur.value(0)  # Désactiver brumisateur

# Fonction de gestion de l'humidité
def gestion_humidite(humidite_ambiante, humidite_sol):
    # Humidité ambiante
    if humidite_ambiante < HUMIDITE_MIN:
        print("Humidité ambiante trop basse. Activer brumisateur...")
        relay_brumisateur.value(1)  # Activer brumisateur
    elif humidite_ambiante > HUMIDITE_MAX:
        print("Humidité ambiante trop élevée. Activer extracteur...")
        relay_extractor.value(1)  # Activer extracteur

    # Humidité du sol
    if humidite_sol < HUMIDITE_SOL_MIN:
        print("Humidité du sol trop basse. Activer brumisateur...")
        relay_brumisateur.value(1)  # Activer brumisateur
    elif humidite_sol > HUMIDITE_SOL_MAX:
        print("Humidité du sol trop élevée. Éteindre brumisateur...")
        relay_brumisateur.value(0)  # Désactiver brumisateur

# Fonction principale de gestion des capteurs et actionneurs
def boucle_principale():
    while True:
        # Lire les données des capteurs DHT22 et DS18B20
        ambiante1.measure()
        t1 = ambiante1.temperature()
        h1 = ambiante1.humidity()
        print("Température coin 1:", t1, "Humidité coin 1:", h1)

        ambiante2.measure()
        t2 = ambiante2.temperature()
        h2 = ambiante2.humidity()
        print("Température coin 2:", t2, "Humidité coin 2:", h2)

        ambiante3.measure()
        t3 = ambiante3.temperature()
        h3 = ambiante3.humidity()
        print("Température coin 3:", t3, "Humidité coin 3:", h3)

        ambiante4.measure()
        t4 = ambiante4.temperature()
        h4 = ambiante4.humidity()
        print("Température coin 4:", t4, "Humidité coin 4:", h4)

        # Lire la température du sol
        if roms:
            sensor.convert_temp()
            time.sleep(1)  # Attendre la conversion de température
            temp_sol = sensor.read_temp(roms[0])  # Lire la première sonde de température du sol
            print("Température du sol:", temp_sol)

            # Gestion de la température du sol
            gestion_temperature_sol(temp_sol)

        # Gestion de la température ambiante (par exemple pour le coin 1)
        gestion_temperature_ambiante(t1)

        # Gestion de l'humidité (par exemple pour le coin 1)
        gestion_humidite(h1, h1)  # Vous pouvez ajouter d'autres capteurs d'humidité du sol ici

        # Attendre avant la prochaine lecture
        time.sleep(5)

# Démarrer la boucle principale
if __name__ == "__main__":
    boucle_principale()
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module