# Configuration MQTTS

## Introduction

Un broker public est disponible pour les utilisateurs équipés d'équipements ou de solutions capables de publier des informations en :&#x20;

* MQTT classique
* MQTT Sparkplug B

## Adresse et port

**URL du broker**

```
broker-public-prod.scorp-io.com
```

**Port**

```
8883
```

## Identification

Pour la connexion au broker il vous sera nécessaire d'intégrer :&#x20;

* **Un client ID**
* **Un login**
* **Un mot de passe**

Ces éléments vous seront communiqué par SCorp-io lors de la mise en place du projet.

## Certificat

Le broker public de SCorp-io utilise la variante sécurisée du protocole MQTT, le MQTTS qui implique l’utilisation d’un certificat.

Le client MQTT doit donc se connecter en **TLS1.2.**

{% hint style="info" %}
Le certificat est porté par le broker SCorp-io
{% endhint %}

## MQTTS : Topic et Messages&#x20;

{% hint style="info" %}
Ce paragraphe ne concerne pas les communications en MQTT Sparkplug B
{% endhint %}

Ce paragraphe décrit les topics et les trames de message MQTT "classiques" (hors norme SparkplugB). La norme SparkplugB, impose en effet des topics et des trames prédéfinies.

### Topic et message de configuration

Afin de faciliter le scan des données par la plateforme SCorp-io, nous encourageons nos partenaires à produire un message de configuration permettant de lister les données de l’infrastructure MQTT. Cela permet de fixer une unique source de vérité (l'infrastructure MQTT)

Pour cela, l'utilisateur doit configurer l'envoi d'un message sur un topic spécifique (DBIRTH).

#### Topic

Le message doit être envoyé sur un topic respectant le format suivant :

```
mqtts/{PROJECT_ID}/DBIRTH/{EDGE_NODE_ID}/{DEVICE_ID}
```

#### Message

{% hint style="warning" %}
Le message doit impérativement être de type **retained (uniquement pour le topic DBIRTH)**
{% endhint %}

La trame d’un message se présente sous la forme d’un tableau de métriques :

```json
{
  "metrics": [
    {
      "name": METRIC_NAME,
      "dataType": METRIC_DATA_TYPE
    },
    ...    
  ]
}
```

Chaque métrique est décrite par les champs suivants :

<table><thead><tr><th width="227">Nom du  champs</th><th width="163">Type </th><th width="219">Valeurs possible</th><th>Obligatoire</th></tr></thead><tbody><tr><td>name</td><td>String</td><td>-</td><td>Oui</td></tr><tr><td>dataType</td><td>String</td><td>Integer | Short | Long | Double | Float | Boolean | String</td><td>Oui</td></tr></tbody></table>

```json
Exemple

{
  "metrics": [
    {
      "name": "pompe-1/etats",
      "dataType": "Integer"
    },
    {
      "name": "pompe-1/defaut",
      "dataType": "Boolean"
    },
    {
      "name": "pompe-1/status",
      "dataType": "Float"
    }   
  ]
}
```

Une fois cette étape terminée, les metrics envoyée sur les topics DBIRTH seront visible après un scan dans le projet SCorp-io associé.

### Configuration

QoS : 1

Retain : false

### Topic

Les messages doivent être envoyés sur un topic respectant le format suivant :

```
mqtts/{PROJECT_ID}/DDATA/{EDGE_NODE_ID}/{DEVICE_ID}
```

{% hint style="info" %}
La différence avec les messages ci-dessus est DDATA qui remplace DBIRTH
{% endhint %}

* **PROJECT\_ID** : l’identifiant unique du projet fourni par SCorp-io à l’inscription
* **EDGE\_NODE\_ID** : l'élément qui identifie de manière unique le nœud MQTT dans l’infrastructure&#x20;
* **DEVICE\_ID** : l'élément qui identifie un périphérique connecté au nœud MQTT

{% hint style="warning" %}
Dans le cas ou l'infrastructure est composée de plusieurs publishers MQTT, DEVICE\_ID doit être un identifiant unique déterminé par l'utilisateur
{% endhint %}

```
Exemple
mqtts/8a3bbfb2-0a47-4a05-98d2-64807bc4ca27/DDATA/automate-s7/automate-z3-1
```

Dans cet exemple, `automate-s7` représente l'infrastructure du site et `automate-z3-1` représente l'identifiant unique de l'équipement qui va publier sur le topic MQTT

### Message

La trame d’un message se présente sous la forme d’un tableau de métriques :

```json
{
  "metrics": [
    {
      "name": METRIC_NAME,
      "timestamp": METRIC_TIMESTAMP,
      "dataType": METRIC_DATA_TYPE,
      "value": METRIC_VALUE
    },
    ...    
  ]
}
```

Chaque métrique est décrite par les champs suivants :

<table><thead><tr><th width="266">Nom du  champ</th><th width="223">Type </th><th width="219">Valeurs possibles</th><th>Obligatoire</th></tr></thead><tbody><tr><td>name</td><td>String</td><td>-</td><td>Oui</td></tr><tr><td>timestamp</td><td>Long </td><td>Entier représentant des ms</td><td>Oui</td></tr><tr><td>dataType</td><td>String</td><td>Integer | Short | Long | Double | Float | Boolean | String</td><td>Oui</td></tr><tr><td>value</td><td>Integer | Short | Long | Double | Float | Boolean | String</td><td><br></td><td>Oui</td></tr></tbody></table>

```json
Exemple

{
  "metrics": [
    {
      "name": "pompe-1/etats",
      "timestamp": 1486144502122,
      "dataType": "Integer",
      "value": 0
    },
    {
      "name": "pompe-1/defaut",
      "timestamp": 1486144502122,
      "dataType": "Boolean",
      "value": false
    },
    {
      "name": "pompe-1/status",
      "timestamp": 1486144502122,
      "dataType": "Float",
      "value": 1.23
    }   
  ]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://scorp-io.gitbook.io/guide-to-scorp-io/broker-public/configuration-mqtts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
