Découvrez comment établir la connexion entre MQTT et la passerelle la plus puissante.
Support MQTT du PHANTOM® Gateway 2.0
Le Gateway 2.0 utilisé dans le système de capteurs sans fil ERBESSD INSTRUMENTS® PHANTOM®, ainsi que le moniteur filaire DEFIANT™, prennent en charge le protocole IoT MQTT. Toutes les données des capteurs sont disponibles via MQTT, y compris la température, les RPM, les bandes de fréquence et les valeurs globales des voies filaires, ainsi que les formes d’onde complètes des capteurs de vibration (la FFT doit être calculée par l’utilisateur à partir de la TWF).
La passerelle agit comme un client MQTT qui se connecte au broker MQTT de votre choix, et publie tout ce qu’elle collecte en JSON simple et autodescriptif.
Vous pouvez utiliser le support MQTT en même temps que tous les autres protocoles pris en charge par la passerelle, y compris EI-Analytic™, EI Monitor, OPC UA et Modbus.
Certaines des options décrites ici ont été ajoutées dans des versions ultérieures de la passerelle. Si vous n’en trouvez pas une dans votre console d’administration, mettez à jour la passerelle vers le dernier firmware.
Le support du protocole en un coup d’œil
| Élément | Ce que fait la passerelle |
|---|---|
| Rôle | Client MQTT. La passerelle se connecte vers votre broker, aucune règle de pare-feu entrante n’est donc nécessaire. |
| Version de MQTT | MQTT 3.1.1 (niveau de protocole 4). Tout broker MQTT 3.1.1 ou MQTT 5.0 accepte la connexion, car les brokers 5.0 sont rétrocompatibles avec les clients 3.1.1. |
| Transports | mqtt:// (TCP simple), mqtts:// (TLS), ws:// (WebSocket), wss:// (WebSocket sur TLS). |
| Port | Au choix, 1-65535. 1883 par défaut. |
| QoS | 0, 1 ou 2, sélectionnable indépendamment pour la publication et pour l’abonnement d’administration. |
| Authentification | Anonyme, ou nom d’utilisateur + mot de passe. En option, TLS mutuel avec un certificat client X.509. |
| Client ID | PhantomGW-<numéroDeSérie> par défaut ; peut être fixé à la valeur de votre choix. |
| Format du payload | JSON ouvert en UTF-8. Éventuellement compressé en gzip. Rien de binaire ni de propriétaire ne circule sur le réseau. |
| Broker local | Broker embarqué optionnel sur le port 1883 (matériel PHANTOM® Gateway uniquement). |
| Reconnexion | Automatique, réessayée toutes les 10 s. Les formes d’onde dont la publication échoue sont réessayées depuis le stockage hors ligne de la passerelle. |
| Canal inverse | Optionnel. La passerelle peut s’abonner à un topic d’administration et accepter via MQTT l’ensemble de l’API d’administration du Gateway. |
Activer le support MQTT
Pour activer le support MQTT dans la console d’administration du Gateway 2.0, activez-le sur la page de configuration MQTT en cochant la case « Enable MQTT connection ».
Renseignez ensuite les options de votre broker MQTT. Nous prenons en charge les protocoles suivants pour la connexion au broker MQTT :
- mqtt://
- mqtts:// (chiffré)
- ws:// (websocket)
- wss:// (websocket chiffré)
Vous devez saisir le nom d’hôte ou l’adresse IP de votre broker MQTT, le port et, en option, le nom d’utilisateur et le mot de passe pour l’authentification.
Si vous souhaitez recevoir les formes d’onde complètes des capteurs de vibration, cochez la case correspondante. Les formes d’onde sont des messages volumineux : si vous ne comptez pas les utiliser, vous pouvez laisser l’option décochée.
L’option « Allow Gateway management though MQTT » vous permet d’utiliser l’ensemble de l’API d’administration pour piloter la passerelle et ses capteurs via la connexion MQTT.

Après l’enregistrement des paramètres, le Gateway 2.0 redémarre. Au redémarrage, il tente de se connecter au broker MQTT et affiche un état dans la même section MQTT en haut de page en cas de problème : connecting, connected, reconnecting, closed ou error, y compris le message d’erreur du broker lorsque la connexion est refusée.
Référence des champs
| Champ | Description |
|---|---|
| Protocol | mqtt://, mqtts://, ws:// ou wss://. |
| MQTT server | Nom d’hôte ou adresse IP de votre broker. |
| Port | Port du broker. 1883 simple, 8883 TLS, 443/8083 WebSocket sont les choix habituels. |
| Certificate validation | Affiché uniquement avec mqtts:// et wss://. Voir la section sécurité ci-dessous. |
| CA certificate (PEM format) | Collez votre propre CA lorsque la validation est réglée sur Custom CA. |
| Username / Password | Laissez les deux vides pour une connexion anonyme. |
| Publish Topic | Topic de base de tous les messages publiés. Obligatoire. |
| Client Id | Remplace la valeur par défaut PhantomGW-<série>. Laissez vide pour conserver la valeur par défaut. |
| Publish QoS | 0, 1 ou 2. |
| Append gateway and sensor serial number as subtopics | Transforme le topic de base plat en une arborescence de topics par capteur. Voir la section topics ci-dessous. |
| Publish vibration waveforms & thermal images | Active les messages volumineux collection. Désactivé par défaut. |
| Send wired channels overalls | DEFIANT™ uniquement : Never, As fast as possible ou Timeout. |
| Wired overall send timeout | DEFIANT™ uniquement, si la cadence est Timeout : secondes minimales entre publications par voie (1-216000). |
| Compress (gzip) payload | Compresse chaque payload en gzip. |
| Allow Gateway management through MQTT | Abonne la passerelle à un topic de commandes. Voir la section administration ci-dessous. |
| Subscribe topic | Topic écouté par la passerelle lorsque l’administration est activée. |
| Subscribe QoS | QoS utilisée pour cet abonnement. |
| Client Certificate / Client Key (PEM format) | Dans Advanced, uniquement pour mqtts:// et wss://. Active le TLS mutuel. |
Sécurité : TLS et authentification
Sélectionnez mqtts:// ou wss:// pour chiffrer la liaison. Le sélecteur Certificate validation détermine comment le certificat du broker est vérifié :
| Mode | Comportement | Quand l’utiliser |
|---|---|---|
| Skip certificate validation (insecure) | Le certificat n’est pas vérifié. Le canal est chiffré mais l’identité du broker n’est pas authentifiée. | Uniquement pour les tests en laboratoire. |
| Validate against included CA list | Vérification standard contre le paquet de CA publiques fourni avec la passerelle. | Brokers cloud public (AWS IoT Core, Azure, HiveMQ Cloud, EMQX Cloud, …). |
| Custom CA | Vérifié contre un certificat de CA que vous collez au format PEM. | PKI privée ou auto-signée, brokers sur site. |
Le panneau Advanced accepte un certificat client et sa clé privée, tous deux au format PEM, utilisés uniquement avec mqtts:// ou wss://. C’est ce qu’attendent les brokers qui exigent une identité d’appareil X.509, comme AWS IoT Core.
Le nom d’utilisateur et le mot de passe circulent dans le paquet CONNECT de MQTT. Sur mqtt:// ou ws://, ils sont envoyés en clair : associez donc toujours les identifiants à mqtts:// ou wss://.
Le broker MQTT embarqué dans la passerelle
Le matériel PHANTOM® Gateway peut également exécuter son propre broker MQTT embarqué, afin qu’un automate, un SCADA ou une application de périphérie sur le même réseau puisse s’abonner directement à la passerelle sans infrastructure externe. Il n’est pas disponible sur la passerelle USB/PC. Activez-le avec Enable local MQTT broker.
| Propriété | Valeur |
|---|---|
| Écoute | 1883, sur toutes les interfaces |
| Authentification | Aucune (anonyme) |
| TLS | Non disponible sur le broker local |
| Persistance | Désactivée, les messages ne survivent pas aux redémarrages |
Le broker local possède son propre Publish Topic, son interrupteur Append serial, celui des formes d’onde, de la compression et de l’administration, indépendants des réglages du broker distant. Les deux peuvent fonctionner simultanément : la même mesure est alors publiée sur votre broker distant et sur le broker local.
mosquitto_sub -h <ip-de-la-passerelle> -p 1883 -t "phantom/#" -v
Comme le broker local n’est pas authentifié, gardez-le sur un segment de réseau OT de confiance.
Structure des topics
Avec Append gateway and sensor serial number as subtopics désactivé, tous les messages sont publiés sur le Publish Topic de base exactement tel que vous l’avez saisi.
Avec l’option activée, la passerelle construit une arborescence de topics. Avec un topic de base phantom, un numéro de série de passerelle EIGW12345 et un numéro de série de capteur (phantomCode) 40217 :
| Message | Topic | dataType |
|---|---|---|
| Mise à jour d’état du capteur | phantom/EIGW12345/40217/stateupdate |
stateupdate |
| Mise à jour des bandes de fréquence | phantom/EIGW12345/40217/bands |
bandsUpdate |
| Forme d’onde / image thermique | phantom/EIGW12345/40217/collection |
collection |
| Globales de voie filaire (DEFIANT™) | phantom/EIGW12345/WIRED0/stateupdate |
wiredOveralls |
| Forme d’onde de voie filaire (DEFIANT™) | phantom/EIGW12345/<série>/collection |
wiredCollection |
| Tags Modbus / unités personnalisées | phantom/EIGW12345/customunits |
customUnitStateUpdate |
| Réponses de l’API d’administration | phantom/EIGW12345 |
(variable) |
Abonnez-vous à tout avec phantom/#, à une seule passerelle avec phantom/EIGW12345/#, ou à un seul capteur avec phantom/EIGW12345/40217/#.
Distinguez toujours par le champ
dataType, jamais par le topic. Lorsque Append serial est désactivé, tous les types de messages arrivent sur le même topic.
Format du payload
La passerelle commence à publier des messages chaque fois qu’un capteur met à jour ses données (selon son propre intervalle interne de mise à jour) ou lorsqu’une mesure de forme d’onde est réalisée. Les messages sont des objets JSON en UTF-8, un objet par message. Rien n’est binaire, propriétaire ni dépendant d’un registre de schémas : vous pouvez les consommer avec JSON.parse, json.loads, un nœud json de Node-RED, le parseur json_v2 de Telegraf ou n’importe quel lecteur de tags JSON de SCADA.
Deux règles s’appliquent à tous les messages :
- Les champs qu’un capteur ou un firmware ne renseigne pas sont omis, ils ne sont pas envoyés à
null. Lisez de manière défensive. timestampest un temps Unix en secondes, pas en millisecondes.
Variables communes à tous les capteurs
| Nom de variable | Description |
|---|---|
| dataType | Discriminant du message : stateupdate, bandsUpdate, collection, wiredOveralls, wiredCollection ou customUnitStateUpdate. collection correspond aux formes d’onde et images thermiques ; toute autre mise à jour est stateupdate. |
| type | Type de capteur (voir le tableau ci-dessous). |
| phantomCode | Numéro de série du capteur. Remarque : les messages collection de vibration utilisent serialNumber à la place. |
| gwSerial | Numéro de série de la passerelle. |
| timestamp | L’instant de la mesure, en secondes depuis 1970. |
| friendlyName | Le nom donné au capteur dans la console. Omis s’il n’y en a pas. |
| seq | Compteur de séquence des mises à jour du capteur. Reboucle à 255 ; un saut signifie que des annonces ont été perdues sur les ondes. |
| battery | Tension de la pile en volts. |
| batteryType | Type de pile (voir le tableau ci-dessous). |
| temperature | Température interne du capteur (en degrés Celsius). |
| updateInterval | Intervalle de mise à jour configuré sur le capteur, en secondes. |
| txPower | Puissance d’émission de la radio, en dBm. |
| advFlags | Champ de bits contenant les indicateurs d’annonce internes du capteur. |
| version | Version du firmware. |
| rssi | Force du signal du capteur, en dBm (stateupdate uniquement). |
| Code capteur | Type de capteur |
|---|---|
| 3 | Accéléromètre triaxial (KX222, gamme haute) |
| 5 | Accéléromètre triaxial (KX122, gamme basse) |
| 6 | Accéléromètre triaxial (KX134) |
| 7 | Triaxial universel (vibration + thermocouple + courant) |
| 8 | Triaxial PHANTOM® Gen 4, gamme haute |
| 9 | Triaxial PHANTOM® Gen 4, gamme basse |
| 10 | Caméra thermique |
| 12 | Répéteur |
| 14 | PHANTOM® MAX, gamme haute |
| 15 | PHANTOM® MAX, gamme basse |
| 20 | Thermocouple |
| 21 | Thermocouple v2 |
| 22 | Thermocouple v3 |
| 25 | Température infrarouge |
| 26 | Nœud de capteurs 4-20 mA |
| 27 | Voltmètre (0-10 VCC) |
| 30 | Module de courant v1 |
| 31 | Contact sec |
| 32 | Module de courant v2 (4 voies) |
| 40 | Vitesse (module RPM) |
| 50 | Distance |
| 60 | Module à usage général |
| 202 | Afficheur |
| batteryType | Pile |
|---|---|
| 1 | ⅙ D |
| 2 | AAA |
| 3 | CR2032 |
| 4 | CR2477 |
| 5 | AA |
| 6 | D |
Voici les propriétés incluses pour chaque type de capteur.
Accéléromètre triaxial (3, 5, 6, 8 et 9)
| Nom de variable | Description |
|---|---|
| rms | Tableau de trois flottants avec la valeur RMS de vitesse en mm/s pour chaque axe. |
| arms | Tableau de trois flottants avec la valeur RMS d’accélération en g pour chaque axe. |
| minRMSFreq | Limite basse de la bande du RMS de vitesse, en Hz. |
| maxRMSFreq | Limite haute de la bande du RMS de vitesse, en Hz. |
| minRMSFreqAccel | Limite basse de la bande du RMS d’accélération, en Hz. |
| maxRMSFreqAccel | Limite haute de la bande du RMS d’accélération, en Hz. |
| range | Pleine échelle actuellement configurée sur l’accéléromètre, en g. |
| magneticspeed | PHANTOM® MAX (14 et 15) uniquement : vitesse de rotation obtenue magnétiquement, en Hz. |
Exemple de message stateupdate :
{
"rssi": -63,
"type": 6,
"version": 195,
"phantomCode": 40217,
"gwSerial": "EIGW12345",
"timestamp": 1756231043,
"dataType": "stateupdate",
"friendlyName": "Pompe 3 - Moteur CA",
"seq": 184,
"advFlags": 0,
"batteryType": 1,
"battery": 3.61,
"temperature": 41.25,
"updateInterval": 300,
"txPower": 4,
"minRMSFreq": 10,
"maxRMSFreq": 1000,
"rms": [1.42, 0.88, 2.07],
"range": 16,
"recordingSettings": 3,
"minRMSFreqAccel": 1000,
"maxRMSFreqAccel": 10000,
"arms": [0.412, 0.298, 0.677]
}
Accéléromètre triaxial avec dataType « collection »
| Nom de variable | Description |
|---|---|
| serialNumber | Numéro de série du capteur. Ce message utilise serialNumber, pas phantomCode. |
| sampleRate | La fréquence d’échantillonnage utilisée pour cette mesure, en Hz. |
| data | Contient les données de la forme d’onde. Trois tableaux, un par axe. Deux des tableaux peuvent être vides si un mode mono-axe a été sélectionné. Les valeurs des tableaux sont en G (9,8 m/s²). |
| isAlarm | true lorsque l’enregistrement a été déclenché par une condition d’alarme. |
| rpm | Vitesse de rotation au moment de la capture. Omis si indisponible. |
| temperature | Température interne du capteur à la capture, en degrés Celsius. Renseignée par les capteurs qui la mesurent. |
{
"serialNumber": 40217,
"sampleRate": 3200,
"gwSerial": "EIGW12345",
"timestamp": 1756231043,
"type": 6,
"dataType": "collection",
"friendlyName": "Pompe 3 - Moteur CA",
"isAlarm": false,
"rpm": 1478,
"temperature": 41.25,
"data": [
[0.0123, -0.0044, 0.0187],
[0.0091, 0.0102, -0.0058],
[-0.021, 0.0176, 0.0031]
]
}
Les trois tableaux d’échantillons sont tronqués dans cet exemple ; un message réel contient l’enregistrement complet. Le nombre d’échantillons par axe est data[n].length, et la durée de l’enregistrement en secondes est data[n].length / sampleRate.
Message de bandes de fréquence (dataType « bandsUpdate »)
Les capteurs triaxiaux qui annoncent des données de bandes étendues publient un bandsUpdate en même temps que la mise à jour d’état.
| Nom de variable | Description |
|---|---|
| rpmMin / rpmMax | Fenêtre de vitesse de rotation pour laquelle les bandes ont été évaluées. |
| bands[].min / .max | Limites de la bande, exprimées en unit : hz (entiers) ou orders (une décimale). |
| bands[].measurement | velocity ou acceleration. |
| bands[].output | Détecteur appliqué à la bande (rms, peak, …). |
| bands[].values | Résultat par axe, { x, y, z }. |
| bands[].valueUnit | mm/s pour les bandes de vitesse, mg pour les bandes d’accélération. |
{
"dataType": "bandsUpdate",
"serialNumber": 40217,
"phantomCode": 40217,
"type": 6,
"version": 195,
"gwSerial": "EIGW12345",
"timestamp": 1756231043,
"seq": 184,
"rpmMin": 1450,
"rpmMax": 1495,
"bands": [
{
"min": 1.0,
"max": 2.5,
"measurement": "velocity",
"unit": "orders",
"output": "rms",
"values": { "x": 1.12, "y": 0.74, "z": 1.88 },
"valueUnit": "mm/s"
}
]
}
Message de la caméra thermique (10)
Avec dataType: "stateupdate", la caméra renseigne avgImageTemperature, la température moyenne de l’image en degrés Celsius.
Avec dataType: "collection", l’image complète est publiée :
| Nom de variable | Description |
|---|---|
| columns | Largeur de l’image en pixels. |
| rows | Hauteur de l’image en pixels. |
| frames | Nombre d’images dans le message. |
| frameRate | Cadence de capture. |
| data | Tableau de frames images ; chaque image est un tableau de rows lignes ; chaque ligne contient columns températures en °C. |
{
"phantomCode": 60912,
"serialNumber": 60912,
"gwSerial": "EIGW12345",
"timestamp": 1756231400,
"type": 10,
"dataType": "collection",
"columns": 32,
"rows": 24,
"frames": 1,
"frameRate": 1,
"data": [
[
[24.31, 24.55, 25.02],
[24.28, 24.61, 25.14]
]
]
}
Message du nœud de température par thermocouple (20, 21 et 22)
| Nom de variable | Description |
|---|---|
| tcTemperature | Tableau de trois flottants avec la température de chaque voie de thermocouple en °C. |
Message du nœud de température infrarouge (25)
| Nom de variable | Description |
|---|---|
| ambientTemperature | Température ambiante mesurée par le capteur infrarouge, en °C. |
| objectTemperature | Température de l’objet visé par le capteur infrarouge, en °C. |
| emissivity | Émissivité configurée pour l’objet visé. |
Capteur 4-20 mA (26) et voltmètre (27)
| Nom de variable | Description |
|---|---|
| voltage | Tableau de quatre flottants avec la tension mesurée par voie. |
Capteur de vitesse (RPM) (40)
| Nom de variable | Description |
|---|---|
| rpm | Valeur flottante avec la vitesse actuelle en RPM. |
| rpmTimeout | Secondes sans impulsion après lesquelles le capteur signale zéro. |
Capteur de distance (50)
| Nom de variable | Description |
|---|---|
| distance | Distance mesurée, en mm. |
Module à usage général (60)
| Nom de variable | Description |
|---|---|
| rms | Tableau de flottants avec le RMS par axe. Vitesse en mm/s, ou accélération en g, selon gpFlags. |
| sensitivity | Sensibilité configurée de la sonde, en mV/g. |
| gpFlags | Champ de bits. Le bit 0 indique si rms est une mesure de vitesse ou d’accélération. |
Capteur de courant (30 et 32)
| Nom de variable | Description |
|---|---|
| instCurrent | Tableau de quatre flottants avec le courant instantané de chacune des quatre voies, en ampères. |
| averageCurrent | Tableau de quatre flottants avec le courant moyen de chacune des quatre voies, en ampères. |
| minCurrent | Tableau de quatre flottants avec le courant minimal de chacune des quatre voies, en ampères. |
| maxCurrent | Tableau de quatre flottants avec le courant maximal de chacune des quatre voies, en ampères. |
| accumulatedCurrent | Tableau de quatre flottants avec le courant cumulé de chacune des quatre voies. |
| accumulatedStart | Début de la fenêtre de cumul, en secondes depuis 1970. |
| accumulatedEnd | Fin de la fenêtre de cumul, en secondes depuis 1970. |
| currentProbeType | Type de sonde configuré sur chaque voie. |
| currentOffsets | Décalage d’étalonnage appliqué à chaque voie. |
| currentMultiplier | Multiplicateur d’étalonnage appliqué à chaque voie. |
{
"dataType": "stateupdate",
"type": 32,
"phantomCode": 51844,
"gwSerial": "EIGW12345",
"timestamp": 1756231102,
"rssi": -71,
"version": 118,
"battery": 3.58,
"batteryType": 4,
"temperature": 33.1,
"instCurrent": [12.4, 12.1, 12.8, 0.0],
"averageCurrent": [12.3, 12.0, 12.7, 0.0],
"minCurrent": [11.9, 11.6, 12.2, 0.0],
"maxCurrent": [13.1, 12.9, 13.4, 0.0],
"accumulatedCurrent": [842.5, 838.1, 851.9, 0.0],
"accumulatedStart": 1753553200,
"accumulatedEnd": 1756231102
}
Capteur de contacts secs (31)
| Nom de variable | Description |
|---|---|
| dryContactsState | Tableau booléen de taille 4 avec l’état de l’entrée. True signifie contact fermé et false signifie ouvert. |
| debounce | Temps d’anti-rebond appliqué aux entrées. |
Voies filaires du DEFIANT™
Les valeurs globales des voies filaires sont publiées selon la cadence de Send wired channels overalls (Never, As fast as possible, ou limitée par Wired overall send timeout). Dans le payload, wiredChannel commence à 1, et seules les globales réellement calculées pour cette voie sont incluses.
{
"dataType": "wiredOveralls",
"wiredChannel": 1,
"gwSerial": "EIDF98765",
"timestamp": 1756231500,
"sensorType": "accelerometer",
"friendlyName": "Ventilateur 12 - Intérieur",
"accel_rms": 0.482,
"velocity_rms": 2.14,
"displacement_rms": 18.7,
"gE": 0.93,
"rpm": 1786,
"accel_truepeak": 1.84,
"accel_peaktopeak": 3.52,
"accel_kurtosis": 3.11
}
Clés disponibles :
| Groupe | Clés |
|---|---|
| Accélération | accel_rms, accel_truepeak, accel_peaktopeak, accel_lowfreq, accel_medfreq, accel_highfreq, accel_kurtosis, accel_skewness |
| Vitesse | velocity_rms, velocity_truepeak, velocity_peaktopeak, velocity_lowfreq, velocity_medfreq, velocity_highfreq, velocity_kurtosis, velocity_skewness |
| Enveloppe d’accélération | gE, ge_truepeak, ge_peaktopeak, ge_lowfreq, ge_medfreq, ge_highfreq, ge_kurtosis, ge_skewness |
| Déplacement | displacement_rms, displacement_truepeak, displacement_peaktopeak, displacement_offset |
| Vitesse de rotation | rpm |
| Analogiques / discrètes | voltage_discrete, voltage_average, discrete_value |
| Phase entre voies | phase_channel_1 … phase_channel_16 |
Tant que le DEFIANT™ est en mode projet (ronde/enregistrement), la publication de
wiredOverallsest suspendue.
Les formes d’onde filaires sont publiées sous wiredCollection, avec un seul tableau data déjà mis à l’échelle par l’étalonnage de la voie et la sensibilité du capteur :
{
"dataType": "wiredCollection",
"wiredChannel": 1,
"gwSerial": "EIDF98765",
"timestamp": 1756231500,
"sensorType": "accelerometer",
"sampleRate": 25600,
"data": [0.0041, -0.0093, 0.0128]
}
Tags Modbus et unités personnalisées
Les valeurs que la passerelle lit sur des équipements Modbus tiers, ou sur des unités personnalisées filaires, sont republiées sur MQTT sous customUnitStateUpdate. units et values sont des tableaux parallèles, et un champ wiredChannel est ajouté lorsque la valeur provient d’une voie filaire du DEFIANT™.
{
"dataType": "customUnitStateUpdate",
"gwSerial": "EIGW12345",
"timestamp": 1756231600,
"source": "gateway",
"clientName": "Automate du compresseur",
"tagName": "DischargePressure",
"functionType": "holdingRegister",
"address": 40012,
"byteOrder": "ABCD",
"tagDataType": "float32",
"machineCode": "COMP-01",
"pointIndex": 2,
"units": ["bar"],
"values": [7.42]
}
Compression du payload
L’option Compress (gzip) payload encapsule chaque payload JSON dans un flux gzip avant publication, ce qui réduit généralement les messages de forme d’onde de 60 à 80 %. Le payload devient alors des octets gzip bruts, et non du texte : il faut donc le décompresser avant de l’analyser.
import gzip, json
import paho.mqtt.client as mqtt
def on_message(client, userdata, msg):
raw = msg.payload
if raw[:2] == b"\x1f\x8b": # nombre magique gzip
raw = gzip.decompress(raw)
data = json.loads(raw)
print(data["dataType"], data.get("phantomCode") or data.get("serialNumber"))
client = mqtt.Client()
client.username_pw_set("phantom", "votre-mot-de-passe")
client.tls_set() # requis pour mqtts://
client.on_message = on_message
client.connect("broker.example.com", 8883)
client.subscribe("phantom/#", qos=1)
client.loop_forever()
Laissez la compression désactivée si votre plateforme ne sait pas décompresser les payloads ; beaucoup de lecteurs de tags JSON de SCADA en sont incapables.
Administration à distance via MQTT
Cocher Allow Gateway management through MQTT fait que la passerelle s’abonne au Subscribe topic et agit sur les commandes JSON qu’elle y reçoit. Les réponses sont publiées sur le topic de publication habituel, avec /<gwSerial> ajouté lorsque Append serial est actif. Toute commande doit porter le numéro de série de la passerelle cible dans gwSerial ; une passerelle ignore les commandes adressées à un autre numéro de série.
Demander une forme d’onde à un capteur précis :
{
"type": "requestWaveform",
"gwSerial": "EIGW12345",
"phantomCode": 40217
}
Appeler l’API d’administration du Gateway :
{
"type": "observeerequest",
"gwSerial": "EIGW12345",
"action": "getstate"
}
La passerelle répond avec les mêmes documents JSON que ceux reçus par la console d’administration via WebSocket, enrichis d’un champ gwSerial pour vous permettre de router les réponses. Le vocabulaire de action couvre toutes les fonctions de la console, dont getstate, deviceinfo, setbasicconfig, setfriendlyname, pair, unpair, restart, startfwupdate, getofflinefiles et wiredcollectnow. Contactez un représentant du support ERBESSD INSTRUMENTS® pour recevoir une copie de la documentation de l’API d’administration.
Il s’agit d’un canal de contrôle privilégié. Ne l’activez que sur un broker authentifié et protégé par TLS, avec une ACL restreignant qui peut publier sur le topic d’abonnement. Laissez-le désactivé si vous n’avez besoin que de télémétrie.
Version de MQTT et format du payload
Version de MQTT. Le client de la passerelle se connecte au niveau de protocole 4, c’est-à-dire MQTT 3.1.1. C’est la base interopérable : les brokers MQTT 5.0 acceptent les clients 3.1.1, donc une infrastructure MQTT 5.0 fonctionne sans modification. Ce que la session de la passerelle n’utilise pas, ce sont les fonctions exclusives à 5.0 : abonnements partagés, alias de topic, propriétés de corrélation requête/réponse, expiration de session et codes de raison. Si vous en avez besoin en aval, terminez la session 3.1.1 de la passerelle sur votre broker et parlez 5.0 entre le broker et vos applications.
Le payload est-il propriétaire ? Non. C’est du JSON ouvert avec des noms de champs stables, entièrement documenté ci-dessus. Aucun registre de schémas, aucune licence ni SDK n’est nécessaire pour le lire.
Démarrage rapide avec mosquitto_sub
mosquitto_sub -h broker.example.com -p 8883 --cafile /etc/ssl/certs/ca-certificates.crt -u phantom -P "votre-mot-de-passe" -t "phantom/#" -q 1 -v
Ne filtrer que les mises à jour d’état, qui sont légères :
mosquitto_sub -h broker.example.com -t "phantom/+/+/stateupdate" -v