Skip to main content

01 - Application "pont" BDD

Parc MySQL icon – MQTT mosquitto icon → App "pont" python icon

Un programme fiable et efficace qui fait le pont entre le broker MQTT Mosquitto et la base de données MySQL du projet.

Programme génére à l'aide de ClaudeCode claude icon


Architecture

[IoT sensors / controleurs]
        │  MQTT  serre/X/bac/Y
        ▼
 ┌─────────────┐         ┌──────────────────────┐
 │  Mosquitto  │ ───────▶│  bridge.py (Python)  │ ──▶  MySQL (external)
 │  (broker)   │         │  subscribe + persist │
 └─────────────┘         └──────────────────────┘
 Docker container             Docker container

Les 2 conteneurs partages le même réseau docker (parc-net). Le serveur MySQL n'est pas géré sur cette machine.


MQTT topics

Format topic MQTT Description
serre/<numero1>/bac/<numero2> Mesure du bac numero2 dans la serre numero1

Format du payload (JSON)

{ "temperatureAmbiante": 28.5 }
{ "humiditeAmbiante": 65.3, "temperatureAmbiante": 22.1 }
{ "humiditeAmbiante": 65.3, "temperatureAmbiante": 22.1, "humiditeSol": 58.6 }

Chaque payload peut contenir une seule ou plusieurs mesures.

Capteurs

Clé JSON id_capteur
humiditeAmbiante 1
humiditeSol 2
temperatureAmbiante 3

Support des erreurs

L'intégralité des erreurs sont enregistré dans la table error avec chacune une valeure dans la table type_erreur:

Code Déclencheur
BAC_NOT_FOUND Numéro de bac ou serre non présent en base de données
UNKNOWN_SENSOR La clé du capteur n'est pas dans la liste connu
INVALID_PAYLOAD Erreur de format du JSON ou contenu du payload incorrect
INVALID_VALUE Valeur non numérique reçu
VALUE_OUT_OF_RANGE Valeur hors limite des valeurs min/max du capteur
INVALID_ENCODING Non-UTF-8 payload
MQTT_DISCONNECT Déconnexion du broker
DB_ERROR Communications avec la base de données échoué
DB_INSERT_ERROR Echec d'insertion d'une mesure en base de donnée
UNEXPECTED_ERROR Erreur générale (cas non prévu)

Quand une valeur est hors plage du capteur, le minimum / maximum est écrit en base de donné et un ligne d'erreur est inséré.


Variables d'environment

Variable valeur par défaut Description
DB_HOST (requis) hébergeur MySQL
DB_PORT 3306 port du serveur MySQL
DB_NAME parc nom de la base de données
DB_USER (requis) utilisateur MySQL
DB_PASSWORD (requis) mot de passe MySQL
MQTT_HOST mosquitto nom de l'hébergeur Broker
MQTT_PORT 1883 port du Broker
MQTT_KEEPALIVE 60 MQTT keepalive (seconde)
MQTT_USER (vide) utilisateur du Broker (optionel)
MQTT_PASSWORD (vide) mot de passe du Broker (optionel)
DB_RETRY_DELAY 5 secondes entre les essais d'écriture en bdd
MQTT_RETRY_DELAY 5 secondes entre les essais MQTT
LOG_LEVEL INFO DEBUG/INFO/WARNING/ERROR

Arborescence des fichiers

.
└── mqtt-bridge
    ├── bridge.py
    ├── docker-compose.yml
    ├── Dockerfile
    ├── mosquitto
    │   ├── client-certs
    │   │   ├── client.crt
    │   │   ├── client.csr
    │   │   └── client.key
    │   ├── clients-certs.sh
    │   ├── config
    │   │   ├── mosquitto.conf
    │   │   └── mosquitto.conf.bak
    │   ├── server-certs
    │   │   ├── ca.crt
    │   │   ├── ca.key
    │   │   ├── ca.srl
    │   │   ├── server.crt
    │   │   ├── server.csr
    │   │   └── server.key
    │   ├── server-certs.sh
    │   └── v3.ext
    ├── README.md
    └── requirements.txt