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

Daemon Linux

Le daemon Fundamentum Edge est la solution prête à l'emploi pour connecter un appareil Linux à Fundamentum, au lieu d'écrire votre propre client MQTT. Il gère le provisionnement, les clés, la connexion MQTTS, les heartbeats et les redémarrages, et expose tout le reste à votre application via une interface gRPC locale. Cette page vous montre comment l'installer, provisionner l'appareil et appeler ses services.

Composants Edge : le daemon Linux, la bibliothèque MCU et l'agent de redirection de ports

Avant de commencer

1. Installer le daemon

Le daemon est publié sur crates.io sous le nom fundamentum-edge-daemon (Apache-2.0) :

cargo install fundamentum-edge-daemon

Cette commande installe le binaire fundamentum-edge.

Sur un Linux Yocto construit avec la couche meta-fundamentum, le daemon est déjà inclus et écoute sur le socket Unix /run/fundamentum-edge/grpc.socket.

2. Démarrer le daemon

fundamentum-edge --config /etc/fundamentum-edge/config.toml --state-dir /var/lib/fundamentum-edge

Sans options, le daemon utilise ./config.toml (créé avec les valeurs par défaut s'il n'existe pas), stocke son état dans le répertoire courant et sert gRPC sur 127.0.0.1:8080. Exécutez-le sous votre système d'initialisation (par exemple, un service systemd) afin qu'il démarre au démarrage du système.

Option Effet
-c, --config <path> Fichier de configuration
-s, --state-dir <path> Répertoire de l'état de provisionnement et des clés
--grpc-tcp <addr> Servir gRPC sur une adresse TCP
--grpc-uds <path> Servir gRPC sur un socket Unix
--heartbeat, --no-heartbeat Activer ou désactiver les heartbeats automatiques
--heartbeat-interval <minutes> Intervalle des heartbeats
--pfwd, --no-pfwd Activer ou désactiver la redirection de ports
-v Augmenter la verbosité des journaux

Exécutez fundamentum-edge --help pour obtenir la liste complète. Après une mise à niveau, fundamentum-edge update-config ajoute les nouveaux champs à votre fichier de configuration.

3. Le configurer

Les principaux paramètres de config.toml, avec leurs valeurs par défaut :

Clé Valeur par défaut Description
state_dir Répertoire courant Emplacement des fichiers d'état
[grpc.server] socket TCP 127.0.0.1:8080 Adresse TCP ou socket Unix
[grpc.services.provisioning] default_api_base_url https://devices.fundamentum-iot.com Devices API utilisée pour le provisionnement
[heartbeat] enabled true Heartbeats automatiques
[heartbeat] interval_min 15 Intervalle des heartbeats, en minutes (décimales autorisées)
[reboot] enabled true Gérer la commande de redémarrage
[pfwd] enabled false Redirection de ports ; consultez Port-forwarding agent
[mqtt] keep_alive_sec 60 Keep-alive MQTT
[mqtt] session_expiry_interval_sec 300 Expiration de session MQTT

Par exemple, pour servir gRPC sur un socket Unix :

[grpc.server]
socket = { uds = "/run/fundamentum-edge/grpc.socket" }

4. Provisionner l'appareil

Tant que l'appareil n'est pas provisionné, Provisioning.Provision est le seul appel gRPC qui fonctionne. Utilisez les valeurs du fichier de jeton :

grpcurl -plaintext -d '{
    "api_base_url": "https://devices.fundamentum-iot.com",
    "project_id": <project-id>,
    "region_id": 1,
    "registry_id": <registry-id>,
    "serial_number": "<serial-number>",
    "asset_type_id": <asset-type-id>,
    "access_token": "<registry-provisioning-token>"
  }' \
  127.0.0.1:8080 com.fundamentum.edge.v1.Provisioning.Provision

Le daemon génère la paire de clés, enregistre l'appareil et écrit provisioning.json, rsa_public.pem et rsa_private.pem dans le répertoire d'état. Il se connecte ensuite de lui-même via MQTTS.

Avec un socket Unix, remplacez l'adresse par le chemin du socket :

grpcurl -unix -authority localhost -plaintext -d '{}' \
  /run/fundamentum-edge/grpc.socket com.fundamentum.edge.v1.Configuration.Get

5. Appeler les services depuis votre application

Tous les services se trouvent dans le package com.fundamentum.edge.v1. Le serveur prend également en charge la réflexion gRPC et les contrôles de santé.

Service Appels Usage
Telemetry Publish Envoyer de la télémétrie (sub_topic, qos, payload en base64)
StatesEvent PublishJson Envoyer des états, éventuellement pour des sub_devices
Heartbeat Send, AttachSubDevice Envoyer un heartbeat immédiatement, ou rattacher un sous-appareil au suivant
Configuration Get, UpdateStream Lire la configuration de l'appareil et suivre ses modifications
Actions Subscribe, UpdateStatus Recevoir des actions et signaler leur statut
FirmwareUpdate Subscribe, UpdateStatus Recevoir des mises à jour du micrologiciel et signaler leur progression
FileTransfer Subscribe, DownloadFile, UploadFile, UpdatePreStatus, UpdatePostStatus Transferts de fichiers

Par exemple, pour publier de la télémétrie sur le sous-topic test :

grpcurl -plaintext -d '{"sub_topic": "test", "qos": 0, "payload": "SGVsbG8sIFdvcmxkIQ=="}' \
  127.0.0.1:8080 com.fundamentum.edge.v1.Telemetry.Publish

Le daemon gère lui-même la commande de redémarrage.

Liaisons de langage

Les liaisons générées sont publiées sous le nom fundamentum-edge-proto :

Langage Package
Rust fundamentum-edge-proto sur crates.io
Python fundamentum-edge-proto sur PyPI

Pour les autres langages, générez des stubs client à partir des fichiers .proto avec protoc.

Étapes suivantes