This release is a pre-release and may not be stable for production use.
forge-mvc-iot
Module opt-in pour Forge MVC — réception et exposition de données IoT (capteurs, périphériques connectés) via MQTT. Le module reçoit la télémétrie depuis un broker MQTT, la stocke en base (SQL visible) et l'expose via une API HTTP JSON en lecture seule.
Statut
Beta (Development Status :: 4 - Beta). Le module est fonctionnel
de bout en bout pour un usage local et pédagogique. Les briques
suivantes sont implémentées :
- subscriber MQTT (
paho-mqtt) avec contrat de message validé ; - stockage des événements dans la table
iot_events(migration SQL embarquée) ; - API HTTP JSON en lecture seule, protection Bearer optionnelle ;
- commandes CLI
forge iot:doctor,iot:init,iot:listen,iot:simulate; - TLS MQTT optionnel.
Limites assumées : pas de JWT/OAuth/RBAC sur l'API (Bearer global
uniquement), pas de politique de rétention sur iot_events, rate-limit
non distribué. Voir la section « Limites ».
Décisions verrouillées
- Forge Core reste indépendant.
forge-mvcne dépend jamais deforge-mvc-iot. La présence ou l'absence du module IoT ne change rien au fonctionnement du framework. forge-mvc-iotdépend de Forge Core. Le module réutilise routeur, contrôleurs, accès base de données, conventions applicatives.- MQTT est le protocole d'entrée, pas une API front. Mosquitto est le broker recommandé en environnement local (BTS CIEL, ateliers pédagogiques) ; un broker MQTT cloud reste possible.
- Forge Design IoT consomme l'API HTTP JSON exposée par Forge (via ce module), jamais directement le broker MQTT.
Voir Architecture Forge IoT pour la doctrine complète et les règles de séparation.
Installation
pip install forge-mvc-iot
Depuis le monorepo, en mode développement :
pip install -e packages/forge-mvc-iot
La dépendance paho-mqtt est installée automatiquement.
Configuration
Le module lit sa configuration depuis l'environnement
(load_iot_config()), avec des valeurs par défaut adaptées à un broker
local :
| Variable | Défaut | Rôle |
|---|---|---|
FORGE_IOT_MQTT_HOST |
localhost |
hôte du broker MQTT |
FORGE_IOT_MQTT_PORT |
1883 |
port du broker |
FORGE_IOT_MQTT_TOPIC |
forge/+/+/telemetry |
topic d'abonnement |
FORGE_IOT_MQTT_CLIENT_ID |
forge-iot |
identifiant client MQTT |
FORGE_IOT_MQTT_USERNAME |
(aucun) | authentification broker (optionnelle) |
FORGE_IOT_MQTT_PASSWORD |
(aucun) | authentification broker (optionnelle) |
FORGE_IOT_MQTT_TLS_ENABLED |
false |
active TLS vers le broker |
FORGE_IOT_MQTT_TLS_CA_FILE |
(aucun) | CA pour la vérification TLS |
FORGE_IOT_API_TOKEN |
(aucun) | si défini, exige Authorization: Bearer <token> sur l'API |
Commandes CLI
forge iot:doctor— diagnostic statique par défaut (config, package, présence de la migration). Options explicites :--db(testeiot_eventsen base) et--mqtt(connexion brève au broker).forge iot:init— copie la migration SQL embarquée versmvc/migrations/du projet. Aucune exécution SQL, idempotente ; puis lancerforge migration:apply.forge iot:listen— relie le flux localbroker → MqttSubscriber → IotEventRepository.insert() → iot_events.forge iot:simulate— publie des mesures factices conformes au contrat MQTT surforge/{site}/{device_id}/telemetry, sans capteur physique (pédagogique).
Flux complet de démonstration :
forge iot:doctor --mqtt → forge iot:simulate → forge iot:listen
→ iot_events → GET /api/iot/events
API HTTP
Branchement explicite dans mvc/routes/__init__.py (jamais automatique) :
from forge_mvc_iot import register_iot_routes
register_iot_routes(router)
Routes exposées (GET, lecture seule, JSON) :
| Route | Rôle |
|---|---|
GET /api/iot/events |
derniers événements (paramètre limit) |
GET /api/iot/events/{site}/{device_id} |
événements d'un device |
GET /api/iot/devices/{site}/{device_id}/count |
nombre d'événements |
Sécurité : si FORGE_IOT_API_TOKEN est défini, les trois routes
exigent Authorization: Bearer <token> (comparaison en temps constant
via secrets.compare_digest). Sinon l'API est ouverte — acceptable en
atelier local, à proscrire en production publique.
Limites
- Authentification API globale (Bearer unique) : pas de scope par site, par device, ni de rotation de clé.
- Pas de politique de rétention / purge / agrégation sur
iot_events. - Rate-limit non distribué.
- API en lecture seule : aucune écriture/commande device via HTTP.
Licence
LicenseRef-Forge-Proprietary — voir le dépôt Forge pour les conditions complètes.
Release files for forge-mvc-iot 1.0.0rc5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forge_mvc_iot-1.0.0rc5.tar.gz | 42.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forge_mvc_iot-1.0.0rc5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 90.6 kB
Release files / forge_mvc_iot-1.0.0rc5.tar.gz
| Download URL | forge_mvc_iot-1.0.0rc5.tar.gz |
|---|---|
| Size | 42.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee7e5ed7b5ec05d813f1a451a1b141756f7e704f81e67fa2954093cb3c26a6b6
|
|
BLAKE2b-256 checksum How to use checksums |
a3fea546d28424e35c301e803d9ecdee65afe9783a160404d84d40d2414a550d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / forge_mvc_iot-1.0.0rc5-py3-none-any.whl
| Download URL | forge_mvc_iot-1.0.0rc5-py3-none-any.whl |
|---|---|
| Size | 48.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
373b582583ee3bd5965683e2639ef650cb0dc3495df1c68e90a766bc3e2d5987
|
|
BLAKE2b-256 checksum How to use checksums |
bc01277532b8023b3cf2447c2ec586693de06680bf52888811e36f1bc3f4baf0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|