Skip to main content

01 - Application "pont" BDD

Parc MySQL icon – MQTT mosquitto iconMySQLApp Bridge"pont" python icon

AUn lightweightprogramme Pythonfiable serviceet thatefficace bridgesqui afait le pont entre le broker MQTT Mosquitto MQTTet brokerla tobase ade données MySQL databasedu for the Parc greenhouse monitoring system.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

BothLes containers2 shareconteneurs apartages privatele Dockermême networkréseau docker (parc-net). TheLe serveur MySQL servern'est ispas externalgéré (managedsur separately).cette machine.


MQTT topics

PatternFormat topic MQTT Description
serre/<numeronumero1>/bac/<numeronumero2> MeasurementsMesure fromdu bac <numero>numero2 insidedans la serre <numero>numero1

PayloadFormat formatdu payload (JSON)

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

MultipleChaque sensorpayload keyspeut cancontenir coexistune inseule aou singleplusieurs payload.mesures.

Supported sensorsCapteurs

Clé JSON key id_capteur
humiditeAmbiante 1
humiditeSol 2
temperatureAmbiante 3

ErrorSupport handlingdes erreurs

AllL'intégralité errorsdes areerreurs persistedsont toenregistré thedans la table error avec chacune une valeure dans la table with one of these type_erreur values::

Code TriggerDéclencheur
BAC_NOT_FOUND SerreNuméro orde bac numberou notserre innon theprésent databaseen base de données
UNKNOWN_SENSOR SensorLa keyclé notdu incapteur then'est knownpas listdans la liste connu
INVALID_PAYLOAD Erreur de format du JSON parseou errorcontenu or non-objectdu payload incorrect
INVALID_VALUE Non-numericValeur valuenon fornumérique a sensorreçu
VALUE_OUT_OF_RANGE ValueValeur clampedhors tolimite sensordes valeurs min/max du capteur
INVALID_ENCODING Non-UTF-8 payload
MQTT_DISCONNECT UnexpectedDéconnexion du broker disconnection
DB_ERROR TransientCommunications databaseavec queryla failurebase de données échoué
DB_INSERT_ERROR FailedEchec tod'insertion insert ad'une mesure rowen base de donnée
UNEXPECTED_ERROR UnhandledErreur exceptiongénérale (catch-all)cas non prévu)

WhenQuand aune valuevaleur isest outhors ofplage range,du thecapteur, clampedle valueminimum (min/ ormaximum max)est isécrit writtenen tobase mesurede donné andet anun errorligne rowd'erreur isest inserted.inséré.


QuickVariables start

1. Prerequisites

  • Docker ≥ 24 with Compose plugin
  • An accessible MySQL / MariaDB server with the parc schema applied

2. Configuration

cp .env.example .env
# Edit .env and fill in DB_HOST, DB_USER, DB_PASSWORD, etc.

3. Start

docker compose up -d --build

4. Verify

# Follow bridge logs
docker compose logs -f bridge

# Test with a dummy publish
docker run --rm --network parc-net eclipse-mosquitto:2 \
  mosquitto_pub -h mosquitto -t "serre/1/bac/1" \
  -m '{"humiditeAmbiante": 65, "temperatureAmbiante": 22}'

Environment variablesd'environment

Variable Defaultvaleur par défaut Description
DB_HOST (required)requis) hébergeur MySQL host
DB_PORT 3306 port du serveur MySQL port
DB_NAME parc Databasenom namede la base de données
DB_USER (required)requis) utilisateur MySQL user
DB_PASSWORD (required)requis) mot de passe MySQL password
MQTT_HOST mosquitto nom de l'hébergeur Broker hostname
MQTT_PORT 1883 port du Broker port
MQTT_KEEPALIVE 60 MQTT keepalive (s)seconde)
MQTT_USER (empty)vide) utilisateur du Broker username (optional)optionel)
MQTT_PASSWORD (empty)vide) mot de passe du Broker password (optional)optionel)
DB_RETRY_DELAY 5 Secondssecondes betweenentre DBles retriesessais d'écriture en bdd
MQTT_RETRY_DELAY 5 Secondssecondes betweenentre les essais MQTT retries
LOG_LEVEL INFO DEBUG/INFO/WARNING/ERROR

FileArborescence layoutdes 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