Forge IoT — module opt-in pour la réception et l'exposition de données IoT : subscriber MQTT, stockage iot_events, API HTTP JSON en lecture seule et commandes CLI forge iot:*.
Project description
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
Alpha (Development Status :: 3 - Alpha). 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 Alpha 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.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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file forge_mvc_iot-1.0.0b13-py3-none-any.whl.
File metadata
- Download URL: forge_mvc_iot-1.0.0b13-py3-none-any.whl
- Upload date:
- Size: 46.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e560afd2c9ac484a5223a4129c586a1e63a110aa40f622e3352185b08ffecde5
|
|
| MD5 |
fb376277138b5a6bc5e094b44f7f2eb9
|
|
| BLAKE2b-256 |
3109b8ff5db1e02daccd19b896980cbb227b636e5b9e794fbb03e85c7790161f
|