Aller au contenu

DevIOICMqtt

Introduction

DevIOICMqtt est une Interface Canal (IC) qui fournit des services de communication basés sur le protocole MQTT (Message Queuing Telemetry Transport) pour les interfaces d'échange DevIO. Cette interface permet la publication et l'abonnement à des topics MQTT via un broker, supportant les connexions sécurisées SSL/TLS et WebSocket.

L'interface canal MQTT agit comme un pont entre les interfaces d'échange DevIO et les systèmes de messagerie MQTT, facilitant l'intégration IoT et les communications asynchrones.

Architecture et fonctionnement

Composants principaux

  • Interface : Point d'entrée principal avec gestion des paramètres de configuration
  • MqttClient : Client MQTT asynchrone avec gestion des connexions et reconnexions
  • EventManager : Gestionnaire d'événements asynchrones pour les opérations MQTT
  • Topics : Gestionnaire des topics MQTT (publication et abonnement)
  • MqttCallback : Gestionnaire des callbacks MQTT (connexion, messages, livraison)

Protocoles supportés

L'interface supporte plusieurs types d'URI pour la connexion au broker :

Protocole URI Description
TCP tcp:// Connexion MQTT standard non sécurisée
SSL/TLS ssl:// Connexion MQTT sécurisée via SSL/TLS
WebSocket ws:// Connexion MQTT via WebSocket
WebSocket Secure wss:// Connexion MQTT sécurisée via WebSocket SSL

Qualité de Service (QoS)

L'interface supporte les trois niveaux QoS MQTT :

QoS Valeur Description
QoS 0 0 Le message est distribué une fois tout au plus (Fire and Forget)
QoS 1 1 Le message est toujours distribué au moins une fois (At Least Once)
QoS 2 2 Le message est toujours distribué une seule fois (Exactly Once)

Paramètres de configuration

Paramètres obligatoires

Paramètre Description Valeur par défaut
-SERVER Nom du serveur DevIO Obligatoire
-NAME Nom de l'interface canal Obligatoire
-HANDLE Handle de l'interface Obligatoire
-BROKER Adresse du broker MQTT (URI complète) Obligatoire

Paramètres de connexion

Paramètre Description Valeur par défaut
-ID Identifiant unique du client MQTT Généré automatiquement
-USER Nom d'utilisateur pour l'authentification Non défini
-PWD Mot de passe pour l'authentification Non défini
-QOS Qualité de service MQTT (0, 1, 2) Qos0
-KAI Intervalle keep-alive en secondes 0 (désactivé)

Paramètres de session

Paramètre Description Valeur par défaut
-CLNS Session propre (Clean Session) Non activé
-ACK Acquittement automatique des messages Non activé
-WS Utiliser WebSocket Non activé

Paramètres de sécurité SSL/TLS

Paramètre Description Valeur par défaut
-PEM Fichier PEM contenant les certificats CA de confiance Non défini
-CPEM Fichier PEM contenant le certificat client et la clé privée Non défini

Paramètres de reconnexion

Paramètre Description Valeur par défaut
-MININT Intervalle minimum de reconnexion (secondes) 60
-MAXINT Intervalle maximum de reconnexion (secondes) 60

Paramètres de debug

Paramètre Description Valeur par défaut
-LOG Activation de la journalisation Non activé
-TRACE Activation des traces MQTT détaillées Non activé

Paramètres de topics

Paramètre Description
-MQ Liste des topics pour abonnement (subscriber)

Configuration dans DevIO Studio

1. Déclaration de l'interface canal

  1. Ouvrir le projet avec DevIO Studio
  2. Cliquer-droit sur CanauxNouveau canal
  3. Sélectionner MQTT comme type d'interface canal
  4. Configurer les paramètres selon les besoins

2. Configuration du broker

Broker TCP standard

-BROKER tcp://broker.example.com:1883

Broker SSL sécurisé

-BROKER ssl://broker.example.com:8883 -PEM ca-cert.pem -CPEM client-cert.pem

Broker WebSocket

-BROKER ws://broker.example.com:8080 -WS

Broker WebSocket sécurisé

-BROKER wss://broker.example.com:8081 -WS -PEM ca-cert.pem

3. Exemples de configuration

Configuration MQTT simple

-SERVER MonServeur -NAME ICMqtt_Basic -HANDLE 1 -BROKER tcp://localhost:1883 -ID "DevIO_Client_001"

Configuration avec authentification

-SERVER MonServeur -NAME ICMqtt_Auth -HANDLE 2 -BROKER tcp://broker.com:1883 -USER "devio_user" -PWD "password123" -QOS 1

Configuration SSL avec certificats

-SERVER MonServeur -NAME ICMqtt_SSL -HANDLE 3 -BROKER ssl://secure-broker.com:8883 -PEM "/path/ca.pem" -CPEM "/path/client.pem" -QOS 2

Configuration avec reconnexion automatique

-SERVER MonServeur -NAME ICMqtt_Reconnect -HANDLE 4 -BROKER tcp://broker.com:1883 -MININT 30 -MAXINT 300 -KAI 60

Configuration pour topics spécifiques

-SERVER MonServeur -NAME ICMqtt_Topics -HANDLE 5 -BROKER tcp://broker.com:1883 -MQ "sensors/+/data,alarms/#" -QOS 1

Utilisation et supervision

Publication de messages

L'interface canal publie automatiquement les données provenant des interfaces d'échange vers les topics MQTT configurés.

Abonnement aux topics

  • Wildcards supportés :
  • + : Remplace un niveau de topic (ex: sensors/+/temperature)
  • # : Remplace tous les niveaux suivants (ex: alarms/#)

Surveillance des connexions

L'interface fournit des informations de diagnostic via : - État de connexion : Monitoring de la connexion au broker - Statistiques de messages : Compteurs de publication/réception - Logs de reconnexion : Traces des tentatives de reconnexion

Gestion des erreurs

  • Reconnexion automatique : Retry avec backoff exponentiel
  • Gestion QoS : Garanties de livraison selon le niveau choisi
  • Timeout de connexion : Détection des connexions perdues

Sécurité SSL/TLS

Configuration des certificats

  1. Certificat CA : Utiliser -PEM <fichier> pour valider le broker
  2. Certificat client : Utiliser -CPEM <fichier> pour l'authentification mutuelle
  3. Formats supportés : Fichiers PEM avec certificats et clés privées

Authentification

  • Username/Password : -USER et -PWD
  • Certificats clients : Authentification mutuelle SSL/TLS
  • Combinaison : Possibilité d'utiliser les deux méthodes

Optimisation des performances

Qualité de Service

  • QoS 0 : Performance maximale, pas de garantie de livraison
  • QoS 1 : Équilibre performance/fiabilité
  • QoS 2 : Fiabilité maximale, performance réduite

Reconnexion intelligente

-MININT 10     # Démarrer avec 10 secondes
-MAXINT 600    # Plafonner à 10 minutes

Keep-Alive optimisé

-KAI 30        # Ping toutes les 30 secondes

Session persistante

-CLNS          # Désactiver pour sessions persistantes

Intégration IoT

Patterns de topics recommandés

Données de capteurs

sensors/{device_id}/{sensor_type}/data
sensors/{device_id}/{sensor_type}/status

Commandes d'équipements

commands/{device_id}/set/{parameter}
commands/{device_id}/get/{parameter}

Alarmes et événements

alarms/{device_id}/{alarm_type}
events/{device_id}/{event_type}

Formats de données

  • JSON : Format recommandé pour l'interopérabilité
  • Binaire : Pour l'optimisation de bande passante
  • Texte : Pour le debug et la compatibilité

FAQ et dépannage

Q : Comment configurer un broker mosquitto local ?

R : Utiliser -BROKER tcp://localhost:1883 avec mosquitto installé localement.

Q : Problème de connexion SSL ?

R : Vérifier les certificats PEM et utiliser -TRACE pour diagnostiquer.

Q : Messages perdus ?

R : Augmenter le QoS avec -QOS 1 ou -QOS 2 selon les besoins.

Q : Reconnexions fréquentes ?

R : Ajuster -KAI et vérifier la stabilité réseau.

Q : Comment utiliser des wildcards dans les topics ?

R : Utiliser + pour un niveau et # pour tous les niveaux suivants dans -MQ.

Annexes et références utiles

Brokers MQTT populaires

  • Eclipse Mosquitto : Broker open-source léger
  • AWS IoT Core : Service cloud AWS
  • Azure IoT Hub : Service cloud Microsoft
  • Google Cloud IoT Core : Service cloud Google
  • HiveMQ : Broker commercial haute performance

Outils de test

  • MQTT.fx : Client graphique pour tests
  • mosquitto_pub/sub : Outils en ligne de commande
  • MQTT Explorer : Interface graphique moderne

Standards et protocoles

  • MQTT 3.1.1 : Version standard supportée
  • MQTT 5.0 : Version avancée (vérifier compatibilité)
  • WebSocket : RFC 6455 pour connexions web

Documentation technique

Configuration XML des topics

Fichier Topics.xml

En complément des paramètres de ligne de commande, DevIOICMqtt peut utiliser un fichier XML pour définir la configuration avancée des topics MQTT. Ce fichier permet de structurer les abonnements et les modèles de topics de manière plus flexible.

Structure du fichier XML

<?xml version="1.0" encoding="utf-8"?>
<Topics>
    <Model name="JSONMQTT">
        <Topic callAddress="-MQ JSONMQTT" qos="Qos1">JSONMQTT/[l'adresse de l'équipement]</Topic>
        <Topic callAddress="-MQ JSONMQTT" qos="Qos1">jsonMQTT/discover/response</Topic>
    </Model>
    <Device model="JSONMQTT"/>
</Topics>

Éléments XML

Balise <Topics>

Élément racine contenant toute la configuration des topics MQTT.

Balise <Model>

Définit un modèle de configuration réutilisable pour les topics.

Attribut Description Exemple
name Nom du modèle "JSONMQTT"
Balise <Topic>

Définit un topic MQTT individuel avec ses paramètres.

Attribut Description Valeurs possibles
callAddress Paramètre de ligne de commande associé "-MQ JSONMQTT"
qos Qualité de service MQTT "Qos0", "Qos1", "Qos2"

Contenu de la balise : Pattern du topic MQTT avec variables dynamiques.

Balise <Device>

Associe un équipement à un modèle de topics.

Attribut Description Exemple
model Référence au modèle à utiliser "JSONMQTT"

Variables dynamiques

Les topics peuvent contenir des variables qui seront remplacées dynamiquement :

Variable Description Exemple
[l'adresse de l'équipement] Adresse de l'équipement DevIO Device001, Sensor_Temperature
$EquipmentName Nom de l'équipement Capteur_01
$DataName Nom de la donnée Temperature, Pressure

Exemples de configuration XML

Configuration basique pour IoT
<?xml version="1.0" encoding="utf-8"?>
<Topics>
    <Model name="IoTSensors">
        <Topic callAddress="-MQ SENSORS" qos="Qos1">sensors/[l'adresse de l'équipement]/data</Topic>
        <Topic callAddress="-MQ SENSORS" qos="Qos1">sensors/[l'adresse de l'équipement]/status</Topic>
        <Topic callAddress="-MQ COMMANDS" qos="Qos2">commands/[l'adresse de l'équipement]/set</Topic>
    </Model>
    <Device model="IoTSensors"/>
</Topics>
Configuration pour découverte automatique
<?xml version="1.0" encoding="utf-8"?>
<Topics>
    <Model name="Discovery">
        <Topic callAddress="-MQ DISCOVER" qos="Qos1">discovery/request</Topic>
        <Topic callAddress="-MQ DISCOVER" qos="Qos1">discovery/response/[l'adresse de l'équipement]</Topic>
        <Topic callAddress="-MQ HEARTBEAT" qos="Qos0">heartbeat/[l'adresse de l'équipement]</Topic>
    </Model>
    <Device model="Discovery"/>
</Topics>
Configuration multi-modèles
<?xml version="1.0" encoding="utf-8"?>
<Topics>
    <Model name="DataCollection">
        <Topic callAddress="-MQ DATA" qos="Qos1">data/[l'adresse de l'équipement]/values</Topic>
        <Topic callAddress="-MQ ALARMS" qos="Qos2">alarms/[l'adresse de l'équipement]/critical</Topic>
    </Model>

    <Model name="Maintenance">
        <Topic callAddress="-MQ MAINT" qos="Qos1">maintenance/[l'adresse de l'équipement]/status</Topic>
        <Topic callAddress="-MQ MAINT" qos="Qos1">maintenance/[l'adresse de l'équipement]/schedule</Topic>
    </Model>

    <Device model="DataCollection"/>
    <Device model="Maintenance"/>
</Topics>

Utilisation avec les paramètres de ligne de commande

Le fichier XML complète les paramètres de ligne de commande. Par exemple :

# Paramètres de base
-SERVER MonServeur -NAME ICMqtt_XML -HANDLE 1 -BROKER tcp://broker.com:1883

# Les topics sont définis dans le fichier XML référencé par -MQ
-MQ JSONMQTT -QOS 1

Emplacement du fichier

Le fichier XML doit être placé dans le répertoire de configuration de DevIO, généralement : - Nom suggéré : Topics.xml ou DevIOICMqtt_Topics.xml - Emplacement : Répertoire de configuration DevIO ou spécifié par paramètre

Avantages de la configuration XML

  1. Flexibilité : Définition de patterns complexes de topics
  2. Réutilisabilité : Modèles applicables à plusieurs équipements
  3. Maintenance : Modification centralisée des topics
  4. Variables dynamiques : Adaptation automatique aux équipements
  5. QoS granulaire : Qualité de service par topic

Validation et debug

Pour valider la configuration XML :

  1. Syntaxe XML : Vérifier la validité du XML
  2. Références : S'assurer que les modèles référencés existent
  3. Topics : Tester les patterns avec des équipements réels
  4. Logs : Utiliser -LOG -TRACE pour diagnostiquer