DRAFT — Preliminary version, do not share. · Version préliminaire, ne pas partager.

Connecteurs

Les connecteurs transmettent les messages des topics de votre projet vers vos propres systèmes dès leur arrivée, de sorte que vous n'avez jamais à interroger la source ni à vous connecter au broker des appareils. Cette page vous montre comment livrer des données à votre broker MQTT (avec TLS mutuel si nécessaire) ou à votre point de terminaison HTTPS sous forme de webhook.

Faire entrer et sortir vos données : les connecteurs transmettent les messages des topics à votre broker MQTT ou à votre point de terminaison HTTPS

Fonctionnement des connecteurs

Un connecteur décrit comment Fundamentum atteint l'un de vos systèmes. Un lien rattache un connecteur à un topic du projet et indique la destination de votre côté :

Un connecteur peut avoir plusieurs liens. La suppression d'un connecteur supprime ses liens ; un connecteur désactivé ne livre rien.

Adaptateur adapter_type Destination
MQTT 1 Votre broker MQTT
MQTTS 2 Votre broker MQTT via TLS 1.2 ou ultérieur, avec TLS mutuel
HTTPS 3 Votre point de terminaison HTTPS (webhook)

Les connecteurs WebSocket sont à venir.

Le sens du lien doit correspondre au type de topic : les liens sortants acceptent les topics telemetry, states, dimension et fact ; les liens entrants acceptent les topics custom_actions, dimension et fact.

Avant de commencer

1. Créer le connecteur

Les paramètres de connexion se placent dans connection_string, sous forme de paires key=value séparées par ;. Les secrets sont écrits sous forme d'espaces réservés (%password%, %ca_cert%, %client_cert%, %client_key%) et leurs valeurs se placent dans placeholders. Les valeurs des secrets ne sont jamais renvoyées par l'API.

Votre broker MQTT

Clé Obligatoire Description
host Oui Nom d'hôte du broker
port Oui Port du broker (généralement 1883 pour MQTT, 8883 pour MQTTS)
clientid Oui ID client que Fundamentum utilise sur votre broker
username, password Non Authentification par mot de passe
ca_cert MQTTS PEM de l'autorité de certification qui a signé le certificat de votre broker
client_cert, client_key MQTTS Certificat client et clé privée au format PEM, pour le TLS mutuel

Écrivez la définition du connecteur dans connector.json :

{
  "name": "plant-broker",
  "adapter_type": 2,
  "is_enabled": true,
  "connection_string": "host=mqtt.example.com;port=8883;clientid=fundamentum-plant;ca_cert=%ca_cert%;client_cert=%client_cert%;client_key=%client_key%",
  "placeholders": {
    "ca_cert": {"value": "-----BEGIN CERTIFICATE-----\n..."},
    "client_cert": {"value": "-----BEGIN CERTIFICATE-----\n..."},
    "client_key": {"value": "-----BEGIN PRIVATE KEY-----\n..."}
  }
}
fun api v1 pub-sub store-connector --project-id <project-id> --body-file connector.json

Lorsque vous mettez à jour un connecteur ultérieurement, définissez "skip_update": true sur un espace réservé pour conserver sa valeur stockée.

Votre point de terminaison HTTPS

Clé Obligatoire Description
host Oui URL de base ; doit commencer par https://
headername, headervalue Non En-tête personnalisé ajouté à chaque requête, par exemple votre clé d'API. Définissez les deux ou aucun.
fun api v1 pub-sub store-connector --project-id <project-id> --body '{
  "name": "erp-webhook",
  "adapter_type": 3,
  "is_enabled": true,
  "connection_string": "host=https://erp.example.com/fundamentum;headername=X-Api-Key;headervalue=<your-key>"
}'

La réponse contient l'id du connecteur.

2. Vérifier la connexion

fun api v1 pub-sub get-connector-status --project-id <project-id> --connector-id <connector-id>
{"status": "success", "data": {"connected": true}}
fun api v1 pub-sub store-link --project-id <project-id> --connector-id <connector-id> \
  --body '{"pubsub_topic_id": <topic-id>, "external_topic_name": "plant/readings", "ingoing": false}'
Champ Description
pubsub_topic_id ID du topic du projet
external_topic_name Topic MQTT sur votre broker (256 caractères au maximum), ou chemin ajouté au host HTTPS
ingoing false pour livrer à votre système, true pour recevoir de celui-ci

Sur un connecteur MQTT, le même topic externe ne peut pas servir à la fois pour un lien entrant et un lien sortant.

4. Recevoir les messages

Sur votre broker, abonnez-vous à external_topic_name. La valeur de chaque message est transmise telle quelle, en QoS 0, et les en-têtes du message deviennent des propriétés utilisateur MQTT 5.

Sur votre point de terminaison HTTPS, Fundamentum envoie une requête par message :

POST https://erp.example.com/fundamentum/plant/readings
Content-Type: application/json
X-Api-Key: <your-key>
Project-Id: <project-id>
Registry-Id: <registry-id>
Serial-Number: <serial-number>
Device-Id: <device-id>
Received-At: 2026-10-22T14:30:00.123456789Z

{"deviceId": "<serial-number>", "data": "<base64-payload>"}

Le corps est le message du topic (ici, la télémétrie d'un appareil, dont l'enveloppe est décrite dans Topics). Les en-têtes du message deviennent des en-têtes HTTP, avec les traits de soulignement remplacés par des tirets.

Répondez avec un statut 2xx dans un délai de 10 secondes. Fundamentum effectue jusqu'à 5 tentatives au total, avec un backoff exponentiel, lorsque votre point de terminaison renvoie 408, 500, 502, 503 ou 504, ou 429 avec un en-tête Retry-After (en secondes), qu'il respecte. Les autres statuts ne donnent lieu à aucune nouvelle tentative.

Tâche Commande
Lister les connecteurs fun api v1 pub-sub get-connectors --project-id <project-id>
Mettre à jour un connecteur fun api v1 pub-sub update-connector --project-id <project-id> --connector-id <connector-id> --body-file connector.json
Supprimer un connecteur et ses liens fun api v1 pub-sub delete-connector --project-id <project-id> --connector-id <connector-id>
Lister les liens d'un connecteur fun api v1 pub-sub get-links --project-id <project-id> --connector-id <connector-id>
Supprimer un lien fun api v1 pub-sub delete-link --project-id <project-id> --connector-id <connector-id> --link-id <link-id>

Étapes suivantes