Ajout d’un Système de Correction Automatique via IoT

Pour aller encore plus loin, nous allons intégrer un système de correction automatique afin d’ajuster la température de la couveuse en fonction des anomalies détectées. Ce module sera piloté via Odoo, un microcontrôleur ESP32/Raspberry Pi et des actionneurs (ventilateurs, résistances chauffantes, etc.).

📌 1️⃣ Fonctionnement Global du Système

ComposantRôle
Caméra Thermique (FLIR Lepton, MLX90640)Capture les températures en temps réel.
Microcontrôleur (ESP32/Raspberry Pi)Analyse les données et active/désactive le chauffage ou le refroidissement.
Capteurs de Température/Humidité (DHT22, BMP280)Mesurent l’environnement global de la couveuse.
Actionneurs (ventilateurs, résistances, relais)Modifient les conditions de la couveuse pour optimiser l’incubation.
Odoo IoTCentralise les données, enregistre l’historique, génère des alertes et ajuste automatiquement les paramètres.

📌 2️⃣ Ajout de la Correction Automatique dans Odoo

Nous allons ajouter une nouvelle fonctionnalité qui corrige automatiquement la température de la couveuse.

📌 Modèle Odoo pour le contrôle automatique

`from odoo import models, fields, api


class IncubatorControl(models.Model):

    _name = 'incubation.control'

    _description = 'Gestion automatique des couveuses'


    name = fields.Char(string="Nom de la couveuse", required=True)

    target_temperature = fields.Float(string="Température cible (°C)", default=37.5)

    target_humidity = fields.Float(string="Humidité cible (%)", default=55.0)

    current_temperature = fields.Float(string="Température actuelle (°C)", compute="_compute_temperature")

    current_humidity = fields.Float(string="Humidité actuelle (%)", compute="_compute_humidity")

    last_adjustment = fields.Datetime(string="Dernier ajustement automatique")


    @api.model

    def adjust_temperature(self):

        """ Ajuste automatiquement la température en activant ou désactivant le chauffage/refroidissement """

        for incubator in self.search([]):

            if incubator.current_temperature < incubator.target_temperature - 0.5:

                self.send_command_to_device(incubator.name, "HEATING_ON")

            elif incubator.current_temperature > incubator.target_temperature + 0.5:

                self.send_command_to_device(incubator.name, "COOLING_ON")

            else:

                self.send_command_to_device(incubator.name, "OFF")

            incubator.last_adjustment = fields.Datetime.now()


    def send_command_to_device(self, device_name, command):

        """ Envoi d’une commande MQTT à l’ESP32 pour ajuster la température """

        import paho.mqtt.client as mqtt

        mqtt_server = "IP_ODDOO_SERVER"

        client = mqtt.Client()

        client.connect(mqtt_server)

        client.publish(f"incubation/{device_name}/control", command)

        client.disconnect()




Ce code permet de gérer automatiquement la température en fonction des valeurs relevées.

📌 3️⃣ Ajout de l’ESP32 pour contrôler le chauffage/refroidissement

Nous allons connecter un ESP32 qui recevra des commandes MQTT depuis Odoo et activera les ventilateurs ou résistances chauffantes.

📌 Installation des Bibliothèques sur l’ESP32

pip3 install paho-mqtt


📌 Code ESP32 pour piloter les actionneurs

import network

import paho.mqtt.client as mqtt

import machine


# Configuration du Wi-Fi

ssid = "VOTRE_WIFI"

password = "VOTRE_MDP"

mqtt_server = "IP_ODDOO_SERVER"


wifi = network.WLAN(network.STA_IF)

wifi.active(True)

wifi.connect(ssid, password)


while not wifi.isconnected():

    pass


# Connexion MQTT

client = mqtt.Client()

client.connect(mqtt_server)


# Définition des relais

heater_relay = machine.Pin(5, machine.Pin.OUT)

cooler_relay = machine.Pin(4, machine.Pin.OUT)


def on_message(client, userdata, msg):

    """ Active ou désactive le chauffage/refroidissement selon la commande reçue """

    command = msg.payload.decode()

    if command == "HEATING_ON":

        heater_relay.on()

        cooler_relay.off()

        print("🔥 Chauffage activé")

    elif command == "COOLING_ON":

        cooler_relay.on()

        heater_relay.off()

        print("❄ Refroidissement activé")

    elif command == "OFF":

        heater_relay.off()

        cooler_relay.off()

        print("🛑 Système désactivé")


client.subscribe("incubation/#")

client.on_message = on_message

client.loop_start()


Ce code active ou désactive le chauffage/refroidissement en fonction des alertes d’Odoo.


📌 4️⃣ Intégration des Données dans Odoo

Nous allons afficher en temps réel les températures et ajustements dans Odoo.

📌 Affichage des températures et ajustements

<record id="view_incubation_control_tree" model="ir.ui.view">

    <field name="name">incubation.control.tree</field>

    <field name="model">incubation.control</field>

    <field name="arch" type="xml">

        <tree string="Contrôle des couveuses">

            <field name="name"/>

            <field name="current_temperature"/>

            <field name="target_temperature"/>

            <field name="last_adjustment"/>

        </tree>

    </field>

</record>


Odoo affiche la température actuelle, la température cible et les ajustements récents.

📌 5️⃣ Automatisation des Ajustements

Nous allons créer une tâche automatique (cron job) qui ajuste la température toutes les 5 minutes.

📌 Planification Automatique dans Odoo


<record id="ir_cron_adjust_temperature" model="ir.cron">

    <field name="name">Ajustement Température Couveuse</field>

    <field name="model_id" ref="model_incubation_control"/>

    <field name="state">code</field>

    <field name="code">model.adjust_temperature()</field>

    <field name="interval_type">minutes</field>

    <field name="interval_number">5</field>

    <field name="numbercall">-1</field>

</record>


Ce cron job ajuste la température toutes les 5 minutes de manière autonome.

6️⃣ Conclusion & Prochaines Améliorations

Automatisation complète du chauffage/refroidissement avec des commandes IoT.

Intégration avec ESP32 et Odoo pour un contrôle centralisé.

Alertes automatiques si la température ne baisse pas correctement.

Visualisation des données en temps réel dans Odoo.

💡 Prochaine amélioration ?Ajout d’un modèle de Machine Learning pour apprendre et prédire les cycles optimaux d’incubation en fonction des données collectées. 🚀

Optimisation des cycles de refroidissement avec des ajustements adaptatifs. 🎯