Faire remonter les données de température et d'humidité des couveuses dans Odoo
Pour intégrer les données des capteurs de température et d’humidité dans Odoo, il est possible d’utiliser Odoo IoT Box, MQTT, ou une API REST en fonction des équipements utilisés.
1️⃣ Choisir une méthode de récupération des données
📡 Méthodes possibles :
Méthode | Avantages |
---|---|
Odoo IoT Box | Solution native, plug & play avec Odoo. Connexion via USB, Wi-Fi ou Bluetooth. |
MQTT (Mosquitto, etc.) | Idéal pour les capteurs IoT communicants en temps réel. Compatible avec Raspberry Pi et ESP32. |
API REST | Compatible avec les couveuses modernes disposant d’une API. Permet une gestion centralisée des données. |
Connexion directe via un Raspberry Pi | Alternative si l’IoT Box n’est pas disponible, en utilisant Odoo IoT Framework. |
2️⃣ Intégration avec Odoo
🔹 Via MQTT (IoT - Communication temps réel)
Si votre couveuse utilise un capteur DHT11/DHT22, AM2302, ou un capteur connecté via un microcontrôleur (ESP8266, ESP32, Arduino), voici comment envoyer les données à Odoo :
📌 Installation du broker MQTT
Sur le serveur Odoo, installez Mosquitto :
sudo apt update
sudo apt install mosquitto mosquitto-clients
📌 Connexion du capteur à MQTT
Sur votre ESP32/ESP8266 (MicroPython) :
import network
from umqtt.simple import MQTTClient
import dht
import machine
import time
# Configuration WiFi
ssid = "VOTRE_WIFI"
password = "VOTRE_MDP"
mqtt_server = "ADRESSE_IP_ODDOO"
# Connexion WiFi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
while not wifi.isconnected():
pass
# Connexion au broker MQTT
client = MQTTClient("esp32_couveuse", mqtt_server)
client.connect()
# Lecture des capteurs et envoi des données à MQTT
capteur = dht.DHT22(machine.Pin(4)) # Modifier selon votre connexion GPIO
while True:
capteur.measure()
temp = capteur.temperature()
humidity = capteur.humidity()
client.publish("couveuse/temperature", str(temp))
client.publish("couveuse/humidity", str(humidity))
time.sleep(10) # Envoi toutes les 10 secondes
📌 Récupération dans Odoo
Dans Odoo (module personnalisé) :
import paho.mqtt.client as mqtt
from odoo import models, fields, api
class Incubator(models.Model):
_name = 'incubation.management'
_description = 'Gestion des couveuses'
name = fields.Char(string="Nom de la couveuse", required=True)
temperature = fields.Float(string="Température (°C)")
humidity = fields.Float(string="Humidité (%)")
@api.model
def update_sensor_data(self, topic, message):
""" Met à jour les données de la couveuse avec les valeurs des capteurs """
incubator = self.search([], limit=1) # Supposons une seule couveuse gérée
if topic == "couveuse/temperature":
incubator.temperature = float(message)
elif topic == "couveuse/humidity":
incubator.humidity = float(message)
# Fonction de callback MQTT
def on_message(client, userdata, msg):
odoo_model = userdata['odoo_model']
odoo_model.update_sensor_data(msg.topic, msg.payload.decode())
client = mqtt.Client()
client.user_data_set({'odoo_model': Incubator})
client.on_message = on_message
client.connect("ADRESSE_IP_ODDOO")
client.subscribe("couveuse/#")
client.loop_start()
🔹 Via une API REST
Si votre couveuse dispose d’une API, on peut faire une requête GET pour récupérer les valeurs :
import requests
from odoo import models, fields, api
class Incubator(models.Model):
_name = 'incubation.management'
_description = 'Gestion des couveuses'
name = fields.Char(string="Nom de la couveuse", required=True)
temperature = fields.Float(string="Température (°C)")
humidity = fields.Float(string="Humidité (%)")
@api.model
def fetch_sensor_data(self):
""" Récupère les données de la couveuse via API """
url = "http://couveuse_ip/api/data"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
incubator = self.search([], limit=1)
incubator.temperature = data['temperature']
incubator.humidity = data['humidity']
🔹 Ensuite, planifier cette requête toutes les 10 minutes avec un cron job Odoo.
3️⃣ Représentation des données dans Odoo
Une fois les données récupérées, voici les meilleurs modules pour les visualiser :
Module Odoo | Utilité |
---|---|
Graphes dans Odoo Studio | Affichage simple sous forme de courbes dans le module Incubation. |
Odoo BI (Tableau de Bord) | Personnalisation des dashboards pour suivre l’évolution des données. |
Odoo IoT Box | Visualisation native pour les capteurs IoT. |
Odoo Web Charts (OCA) | Intégration avancée pour des graphiques plus détaillés. |
Matplotlib avec Odoo | Génération de rapports avec courbes de température/humidité. |
🔹 Créer un Graphique avec Odoo (Vue XML)
Ajoutez un graphique de température/humidité dans Odoo Studio ou via du XML :
<record id="view_incubator_graph" model="ir.ui.view">
<field name="name">incubator.management.graph</field>
<field name="model">incubation.management</field>
<field name="arch" type="xml">
<graph string="Évolution Température/Humidité">
<field name="temperature"/>
<field name="humidity"/>
<field name="create_date" interval="day"/>
</graph>
</field>
</record>
🔹 Visualisation avancée avec Matplotlib
Si vous voulez générer des rapports détaillés :
import matplotlib.pyplot as plt
from odoo import models, api
class IncubatorReport(models.Model):
_name = 'incubation.report'
@api.model
def generate_graph(self):
data = self.env['incubation.management'].search([])
temperatures = [x.temperature for x in data]
humidities = [x.humidity for x in data]
dates = [x.create_date for x in data]
plt.figure(figsize=(10, 5))
plt.plot(dates, temperatures, label="Température (°C)", color='r')
plt.plot(dates, humidities, label="Humidité (%)", color='b')
plt.legend()
plt.title("Évolution Température & Humidité")
plt.xlabel("Date")
plt.ylabel("Valeurs")
plt.grid()
plt.savefig("/mnt/data/incubator_report.png")
4️⃣ Conclusion
✔ Récupération des données via MQTT, API REST ou Odoo IoT Box
✔ Stockage et gestion des valeurs dans Odoo Livestock ou un module personnalisé
✔ Visualisation et analyse avec graphiques Odoo, BI, ou Matplotlib