Nouveau : le pare-feu IA surveille chaque module et explique chaque incident en termes simples. Découvrez comment ça marche

Envoi de commandes aux appareils

Définissez un catalogue de commandes avec des niveaux, envoyez des commandes, suivez leurs états et leur expiration, répondez-y sur l'appareil et recevez les requêtes des appareils.

Une commande (aussi appelée RPC) demande à un appareil d’effectuer une action : redémarrage, commutation d’une sortie, lancement d’un test. Chaque commande est enregistrée comme une requête, et vous pouvez en suivre l’état jusqu’à ce que l’appareil réponde. Les commandes ne sont envoyées que par des sessions TLS (sauf si le profil autorise une commande en clair), jamais par les flux qui traitent la télémétrie, et chacune est vérifiée par rapport aux permissions de l’expéditeur.

Le catalogue des commandes

Chaque profil d’appareil dispose d’un onglet Commands : « Les commandes que les opérateurs peuvent envoyer aux appareils de ce profil ; chaque niveau nécessite sa propre permission. » Sa modification nécessite la permission de gérer les commandes (administrateurs).

Sélectionnez Add command et renseignez :

ChampSignification
MethodLe nom sur le réseau, namespace.verb, par exemple sys.info. Lettres, chiffres, _ et ..
Label, DescriptionCe que voient les opérateurs.
TierBasic, Privileged ou Critical : qui peut l’envoyer (voir ci-dessous).
High impact (asks for a confirmation)L’expéditeur doit confirmer ; la commande est envoyée au plus une fois et tracée dans l’audit.
Typed confirmation phraseFacultatif, uniquement pour les commandes à fort impact : l’opérateur la saisit pour envoyer (par exemple REBOOT).
One-way (no answer)L’appareil ne répond pas.
Long-running (the answer only says it started)L’appareil répond immédiatement et signale le résultat plus tard.
Default timeout (ms)1 000 à 600 000. Vide : la valeur de Default RPC timeout du profil.
Persistent by default (delivered when the device comes back)Met la commande en file d’attente pendant que l’appareil est hors ligne.
ParametersConstruits avec Fields (nom, libellé, type Text, Number, Yes / no, Choice ou Any value (JSON), obligatoire, min, max, choices) ou sous forme de Advanced (JSON). Jusqu’à 50 paramètres.
Masked parametersNoms de paramètres dont les valeurs n’apparaissent jamais dans l’historique.

From a template pré-remplit le formulaire à partir d’une commande que la plateforme envoie déjà (comme une commande de carte de contrôle). Import remplace tout le catalogue par un export ({"commands": [ … ]}) ; Export affiche le catalogue au format JSON. Un profil contient jusqu’à 200 commandes.

Niveaux

NiveauQui peut l’envoyer (par défaut)
BasicUtilisateurs
PrivilegedAdministrateurs
CriticalAdministrateurs
Brute (une méthode absente du catalogue)Propriétaires

Remarque

Certaines commandes ne sont jamais envoyées, quel que soit le demandeur : réinitialisation d’usine, appairage, oubli du Wi-Fi et cloud.forget. Certaines familles de méthodes appartiennent à un module, et seul ce module les envoie (par exemple tunnel.* pour l’accès à distance et esim.*). Les profils qui n’utilisent que le schéma de topics Legacy compatible ne comportent aucune commande : « Le RPC n’est pas disponible pour les appareils en schéma Legacy compatible ; utilisez les attributs partagés (onglet Attributes) pour envoyer des réglages. »

Envoyer une commande

  1. Ouvrez l’appareil et son onglet Commands.
  2. Choisissez une commande sous Choose a command (ou Other method (raw), réservé aux propriétaires) et renseignez ses Parameters.
  3. Définissez les options si besoin :
OptionSignificationPar défaut
Do not wait for an answer (one-way)L’appareil ne répond pas.Désactivé (aller-retour)
Answer timeout (seconds)Durée d’attente de la réponse, de 1 à 600 secondes.La valeur par défaut de la commande, sinon 10 secondes
Deliver when the device comes back (persistent)Garde la commande en file d’attente pendant que l’appareil est hors ligne.La valeur par défaut de la commande
Give up after (minutes)Délai au terme duquel une commande en attente est abandonnée.24 heures ; 7 jours au maximum
  1. Sélectionnez Send. Une commande à fort impact demande Send {method}? (« Cette commande a un impact sur l’appareil (il peut redémarrer ou perdre sa session). ») et, si elle comporte une phrase, Type {phrase} to confirm.

Si l’appareil est hors ligne, l’onglet affiche : « L’appareil est hors ligne : sans « persistent », la commande échoue immédiatement. »

Les tableaux de bord, les symboles SCADA, les règles et les flux peuvent également envoyer des commandes. Une carte de contrôle n’envoie que des commandes de niveau basic. Voir Control cards.

États des commandes

ÉtatAffiché commeSignification
QUEUEDQueuedEnregistrée, en attente de l’appareil.
SENTSentEnvoyée à l’appareil.
DELIVEREDDeliveredL’appareil l’a reçue.
SUCCESSFULSuccessfulL’appareil a répondu avec succès.
FAILEDFailedL’appareil a répondu par une erreur.
TIMEOUTTimed outAucune réponse à temps. Cela signifie « aucune réponse n’est arrivée », et non « elle ne s’est pas exécutée ».
EXPIREDExpiredElle a expiré avant de pouvoir être remise.
CANCELLEDCancelledAnnulée par un utilisateur.

Une commande longue affiche Running on the device jusqu’à l’arrivée de son résultat ; une commande expirée affiche No answer: the outcome is unknown ; une réponse arrivée après la fin affiche Answered after the end.

L’historique

L’History de l’onglet Commands liste Method, Status, Sent by (Console, API, A flow, Firmware update, An alarm action, A dashboard control), Created, Completed et Duration. Ouvrez une commande pour voir sa Request, sa Response et sa Progress, pour Cancel command tant qu’elle est en attente ou envoyée, ou pour Send again. Les paramètres secrets sont masqués.

Limites par défaut : 10 commandes par appareil et par minute, et 600 par organisation et par minute ; paramètres jusqu’à 16 Kio de JSON ; réponse jusqu’à 64 Kio. L’historique est conservé 90 jours.

Sur l’appareil

L’appareil s’abonne à v1/rpc/req/+ et reçoit :

PUBLISH v1/rpc/req/42
{"method": "sys.ping", "params": {"host": "8.8.8.8", "count": 3}}

Pour une commande à aller-retour, il répond avec le même identifiant :

PUBLISH v1/rpc/res/42
{"ok": true, "result": {"sent": 3, "received": 3, "avg_ms": 18.2}}

Règles pour l’appareil :

  • Une commande peut arriver deux fois. Mémorisez au moins les 32 derniers identifiants de requête pendant 10 minutes et n’exécutez jamais deux fois le même identifiant.
  • Si la requête contient expirationTime et qu’elle est dépassée, ne l’exécutez pas ; répondez {"ok": false, "error": "expired"}.
  • Si la requête est plus grande que ce que l’appareil peut traiter, ne l’exécutez pas ; répondez {"ok": false, "error": "payload_too_large"}.
  • Les commandes ne sont livrées qu’après que l’appareil s’est abonné à v1/rpc/req/+ sur cette connexion.

Les appareils HTTP attendent les commandes avec GET /api/v1/rpc et répondent avec POST /api/v1/rpc/{id}. Voir Device HTTP API.

Commandes longues

PUBLISH v1/rpc/res/43
{"ok": true, "accepted": true, "job_id": "43"}

PUBLISH v1/attributes
{"rpc_result": {"job_id": "43", "method": "sys.traceroute", "ok": true, "result": {...}, "ts": 1759572042000}}

Requêtes émises par l’appareil

Un appareil peut aussi interroger le cloud : il publie sur v1/rpc/up/req/{id} avec {"method": …, "params": …} et lit la réponse sur v1/rpc/up/res/{id}. Vos flux reçoivent et traitent ces requêtes.

LoRaWAN et enfants de passerelle

Par API

POST/tenant/{tenantId}/api/iot/devices/{deviceId}/rpc

Envoyer une commande à un appareil. Champs du corps : method (obligatoire), params, oneway, persistent, timeoutMs (1 000 à 600 000), expiresInS (1 à 604 800), wait, confirm, confirmText, source (console, api ou dashboard_control). params est limité à 16 Kio de JSON. Un appel bidirectionnel, non persistant, avec un délai d’au plus 30 secondes attend la fin et répond 200. Tout autre appel répond 202 immédiatement. Une commande à fort impact nécessite "confirm": true.

Corps de la requête application/json

{
    "method": "sys.ping",
    "params": {
        "host": "8.8.8.8",
        "count": 3
    },
    "timeoutMs": 10000
}

Exemple curl

curl -X POST 'https://<your-host>/tenant/{tenantId}/api/iot/devices/{deviceId}/rpc' \
  -H 'Content-Type: application/json' \
  -d '{"method":"sys.ping","params":{"host":"8.8.8.8","count":3},"timeoutMs":10000}'

Réponses

200OK
{
    "rpc": {
        "rpcId": "…",
        "deviceId": "…",
        "method": "sys.ping",
        "status": "SUCCESSFUL",
        "outcome": null,
        "response": {
            "ok": true,
            "result": {
                "sent": 3,
                "received": 3,
                "avg_ms": 18.2
            }
        },
        "tier": "basic",
        "highImpact": false,
        "source": "api",
        "…": "…"
    }
}
202Accepted
{
    "rpc": {
        "rpcId": "…",
        "deviceId": "…",
        "method": "sys.reboot",
        "status": "QUEUED",
        "…": "…"
    }
}
400Bad Request
{
    "message": "This command needs confirm: true.",
    "code": "VALIDATION_ERROR",
    "details": {
        "reason": "confirm_required"
    }
}
403Forbidden

Aucun corps de réponse.

404Not Found
{
    "message": "Device not found.",
    "code": "NOT_FOUND"
}
429Too Many Requests

Aucun corps de réponse.

Lisez une commande avec GET /tenant/{tenantId}/api/iot/rpc/{rpcId} et annulez-la avec POST …/rpc/{rpcId}/cancel (uniquement pendant QUEUED ou SENT ; action journalisée). Le champ outcome affiche running, unknown ou late, comme décrit ci-dessus. Voir Commands API.

Les événements webhook rpc.completed et rpc.failed informent les autres systèmes du résultat. Les commandes à fort impact et les commandes brutes sont inscrites dans le journal d’audit à leur création et à leur fin.