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

MQTT

Connectez les appareils via MQTT 3.1.1 : ports, TLS, identifiants, sessions, accusés de réception, limites, codes CONNACK et la manière dont un appareil doit temporiser ses reconnexions.

Hermetry parle MQTT 3.1.1. Cette page est la référence de connexion pour les développeurs de dispositifs : comment atteindre le broker, comment se connecter, comment les sessions se comportent, ce qui est acquitté et quand, et que faire lorsqu’une connexion est refusée. Les topics et les charges utiles sont décrits dans la référence des topics et charges utiles MQTT.

Connexion

ÉlémentValeur
ProtocoleMQTT 3.1.1 (niveau de protocole 4). Un CONNECT pour MQTT 5 est refusé avec CONNACK 1.
Port, TLS8883
Port, sans chiffrement1883, uniquement pour les dispositifs d’un profil qui autorise le MQTT sans chiffrement
HôteL’hôte du broker indiqué sur la carte Détails de connexion du dispositif. Utilisez l’hôte de la région de votre organisation.
Session propreEnvoyez true. Un CONNECT avec false est traité comme une session propre.
KeepaliveUtilisez le keepalive MQTT. Un keepalive de 0, ou supérieur au maximum du broker (300 secondes sur une installation par défaut), est appliqué au maximum.
Message de dernière volontéAutorisé, mais ignoré. Hermetry détermine lui-même l’état de la connexion.
Indicateur retainIgnoré. Le message est traité, pas conservé.
Délai de connexionÀ partir de la connexion TCP jusqu’à un CONNECT accepté (handshake TLS et authentification inclus), le dispositif dispose de quelques secondes (5 par défaut).

Rien n’est mis en file d’attente pour un dispositif hors ligne, sauf les commandes marquées persistantes. Après chaque connexion, le dispositif s’abonne à nouveau et demande ses attributs partagés, ce qui lui fournit les valeurs actuelles.

TLS

  • TLS 1.2 minimum, TLS 1.3 recommandé.
  • Suites TLS 1.2 : ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-CHACHA20-POLY1305. Pas d’échange de clés RSA, pas de CBC.
  • Le SNI est obligatoire. Connectez-vous par nom d’hôte, et non par adresse IP.
  • Pour les dispositifs tiers, le certificat serveur est un certificat public. Vérifiez-le avec votre bundle d’autorités de certification habituel et le nom d’hôte.
  • Le serveur demande un certificat client sans l’exiger, afin qu’un seul port serve tous les types d’authentification.
  • Les petits dispositifs peuvent demander des enregistrements TLS de 4 Ko (max_fragment_length).

Un profil décide si ses dispositifs peuvent utiliser le port sans chiffrement (MQTT sans chiffrement dans l’onglet Transport et authentification du profil). TLS uniquement est la valeur par défaut. Voir Sécurité du transport des dispositifs.

Authentification

IdentifiantClient IDNom d’utilisateurMot de passe
Jeton d’accèstout ID validele jeton d’accèsvide
MQTT de baseau choix, ou le client ID épingléle nom d’utilisateurle mot de passe
Certificat X.509le numéro de série du dispositif (doit être égal au CN du certificat)le numéro de série (ignoré)vide
  • Un client ID comporte de 1 à 64 caractères parmi A–Z a–z 0–9 . _ : -. Tout autre caractère est refusé avec CONNACK 2.
  • Un CONNECT avec un nom d’utilisateur mais sans mot de passe est lu comme un jeton d’accès. Un CONNECT sans nom d’utilisateur est refusé.
  • Lorsqu’un certificat client est présenté, c’est lui qui décide. Il n’y a aucun repli vers un mot de passe. Un certificat non approuvé met fin au handshake TLS.
  • Le nom d’utilisateur provision ouvre une session de provisionnement (voir Ajout et revendication des dispositifs).
  • Le profil doit autoriser le type d’identifiant, le réseau du dispositif et le port (TLS ou sans chiffrement) ; sinon la connexion est refusée avec CONNACK 5.

Sessions

  • Une session par dispositif. Une seconde connexion du même dispositif prend le relais et ferme la première. Un dispositif dont la session est reprise à plusieurs reprises depuis deux réseaux est mis en attente pendant un moment, et vos administrateurs reçoivent une notification (« conflit de reprise de session ») ; vérifiez que deux dispositifs ne partagent pas un même identifiant.
  • Vérifications. Chaque session active est revérifiée environ toutes les 60 secondes. Un identifiant renouvelé ou révoqué, un dispositif désactivé ou supprimé, une organisation suspendue, ou une modification du profil que la session ne respecte plus, met fin à la session immédiatement.
  • Dispositifs en quarantaine : ils peuvent se connecter, mais leurs données de télémétrie et leurs attributs sont acquittés puis supprimés jusqu’à leur activation par un administrateur.
  • Notification de nouveau réseau. Lorsqu’un dispositif se connecte depuis un autre réseau que la fois précédente, vos administrateurs peuvent recevoir une notification (au plus une fois par heure et par dispositif), afin qu’un identifiant volé ne passe pas inaperçu.
  • Limite de dispositifs connectés. Si votre forfait limite le nombre de dispositifs connectés simultanément, un CONNECT au-delà de cette limite est refusé avec CONNACK 5.

Accusés de réception et QoS

  • Publiez avec QoS 1. QoS 0 est accepté ; QoS 2 est traité comme QoS 1.
  • Hermetry envoie le PUBACK uniquement lorsque le message est mis en file d’attente en toute sécurité. Les PUBACK sont envoyés dans l’ordre de publication du dispositif.
  • Si un message ne peut pas être mis en file d’attente, il ne reçoit pas de PUBACK (ni aucun message qui le suit sur cette session), et la session est fermée après quelques secondes. Le dispositif renvoie les messages non acquittés après sa reconnexion.
  • Un dispositif peut avoir au maximum 20 messages QoS 1 non acquittés en cours par défaut (Nombre maximal de messages non acquittés (MQTT) du profil, de 1 à 1 000).
  • Les doublons d’un même dispositif, avec la même clé et le même horodatage, ne sont stockés qu’une fois ; un renvoi est donc sans risque.

Limites

LimiteValeur par défautOù elle est définie
Messages de télémétrie10:1,300:60 (10 par seconde et 300 par minute)Profil, Limites
Points de données de télémétrie200:1,6000:60Profil, Limites
Messages d’attributs5:1,60:60Profil, Limites
Taille du message64 Kio, jusqu’à 1 000 points clé-valeurProfil, Taille maximale de la charge utile des messages (octets)
Messages vers le dispositif64 Kio (4 Kio pour les dispositifs sous licence)Profil, Taille maximale de la charge utile descendante (octets)
  • Au-delà d’une limite de débit, le message est acquitté puis supprimé. Un dispositif qui continue de dépasser sa limite (plus de trois fois son quota par minute supprimé en une minute) voit sa session fermée. Les propriétaires et administrateurs reçoivent une notification par dispositif et par heure.
  • Un message trop volumineux est supprimé en entier ; la connexion reste active.
  • Votre organisation dispose aussi, dans son ensemble, de limites de débit issues de son forfait.
  • Les relevés mis en mémoire tampon qu’un dispositif envoie après une panne (chaque enregistrement porte un ts plus ancien) doivent aussi respecter le paramètre Messages rejoués par seconde du profil.
  • Les messages de télémétrie et d’attributs comptent dans votre quota mensuel de messages ; les événements de connexion, les commandes et les alarmes n’y comptent pas. Voir Quota de messages et utilisation.

Codes CONNACK

CodeSignificationCe que doit faire le dispositif
0AcceptéContinuer.
1Version du protocole non prise en chargeArrêter les tentatives ; corriger le client.
2Client ID rejetéAttendre que la configuration change.
3Serveur indisponible : le service est occupé, en cours de démarrage ou d’arrêt, ou l’adresse est brièvement bloquéePatienter puis réessayer, avec une gigue aléatoire.
4Nom d’utilisateur ou mot de passe incorrectPatienter au moins 5 minutes (jusqu’à 1 heure).
5Non autorisé : dispositif désactivé, certificat révoqué ou expiré, organisation suspendue ou au-delà de sa limite de dispositifs ou de dispositifs connectés, type d’authentification, réseau ou port non autorisé par le profilPatienter selon la planification longue.

La raison du code 5 n’est jamais envoyée au dispositif. Elle est inscrite dans l’onglet Journal du dispositif.

Remarque

Des échecs de connexion répétés depuis une même adresse bloquent cette adresse pendant un court instant, pour tous les dispositifs derrière elle. Un dispositif mal configuré peut donc bloquer ses voisins derrière le même NAT. Corrigez rapidement les identifiants erronés.

Raisons de déconnexion

L’onglet Journal du dispositif indique pourquoi une session s’est terminée :

RaisonSignification
client_disconnectLe dispositif a fermé la connexion.
keepalive_timeoutRien n’est arrivé dans le délai de keepalive.
takeoverUne autre connexion du même dispositif a pris le relais.
auth_revokedL’identifiant, le dispositif ou l’organisation n’est plus autorisé.
rate_limitLe dispositif a continué de dépasser sa limite de débit.
server_shutdownLe nœud du broker a redémarré ; reconnectez-vous.
protocol_error, inflight_exceeded, socket_errorLe client a violé le protocole, envoyé trop de messages non acquittés, ou le réseau a échoué.

Comportement recommandé du dispositif

  1. Connectez-vous en TLS par nom d’hôte, avec un keepalive compris entre 30 et 300 secondes.
  2. Après CONNACK 0, abonnez-vous aux topics de descente, demandez les attributs partagés, publiez les attributs client, puis envoyez la télémétrie mise en mémoire tampon avant les données en direct.
  3. Utilisez QoS 1 et attendez le PUBACK avant de supprimer une mesure mise en mémoire tampon.
  4. Regroupez les mesures en lots lorsque vous envoyez plus d’un échantillon par seconde.
  5. En cas de connexion refusée, suivez le back-off de la table CONNACK ; ajoutez une gigue aléatoire afin qu’une flotte ne se reconnecte pas en même temps.

Voir aussi