Skip to main content

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-mvc ne dépend jamais de forge-mvc-iot. La présence ou l'absence du module IoT ne change rien au fonctionnement du framework.
  • forge-mvc-iot dé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 (teste iot_events en base) et --mqtt (connexion brève au broker).
  • forge iot:init — copie la migration SQL embarquée vers mvc/migrations/ du projet. Aucune exécution SQL, idempotente ; puis lancer forge migration:apply.
  • forge iot:listen — relie le flux local broker → MqttSubscriber → IotEventRepository.insert() → iot_events.
  • forge iot:simulate — publie des mesures factices conformes au contrat MQTT sur forge/{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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

forge_mvc_iot-1.0.0b17.tar.gz (40.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

forge_mvc_iot-1.0.0b17-py3-none-any.whl (47.4 kB view details)

Uploaded Python 3

File details

Details for the file forge_mvc_iot-1.0.0b17.tar.gz.

File metadata

  • Download URL: forge_mvc_iot-1.0.0b17.tar.gz
  • Upload date:
  • Size: 40.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for forge_mvc_iot-1.0.0b17.tar.gz
Algorithm Hash digest
SHA256 bf956b43b59c4bfd1c7284b11ae73145c0ccf8f5849f6d37f8b55add8e2b1acf
MD5 2b93ac964400cd146a63b25e02684369
BLAKE2b-256 3be03ff3c2476fe174c838fac645fe405d77d69387de87bd8093b6189818c921

See more details on using hashes here.

File details

Details for the file forge_mvc_iot-1.0.0b17-py3-none-any.whl.

File metadata

File hashes

Hashes for forge_mvc_iot-1.0.0b17-py3-none-any.whl
Algorithm Hash digest
SHA256 1976cb716372872c43151192a3093b040c8a114e6eed204573af07881922704b
MD5 8a63d7d5149c834870f72322914ed85c
BLAKE2b-256 b6a620cbadf9f63670c0498912305d7b9e42b36d43b76fcef59290d63c7b1f93

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page