Tutoriel
Un jeton valide OAuth v2 Bearer est requis. Voir Authentification pour plus de détails.
Gestion des connexions
Ajouter une connexion ThingPark X IoT Flow
Une connexion ThingPark X IoT Flow est un flux de données asynchrone avec des services de mise en file d'attente de messages intégrés, conçus pour répondre aux exigences de haute disponibilité, évolutivité et résilience pour les déploiements industriels. IoT Flow propose une large gamme de connecteurs IoT professionnellement supportés pour les principales plateformes IoT et un riche catalogue intégré de drivers de payload, en plus de supporter des drivers de payload personnalisés. Les alarmes de capteur et de passerelle peuvent être signalées via ce type de connexion.
Les connexions ThingPark X IoT Flow sont gérées avec l'API DX Core.
Pour obtenir la description complète des opérations API disponibles pour la connexion ThingPark X IOT Flow, consultez la documentation de l'API DX Core de votre plateforme :
- Communauté ThingPark
- ThingPark Enterprise SaaS UE
- ThingPark Enterprise SaaS AU
- ThingPark Enterprise SaaS US
- ThingPark Enterprise auto-hébergé : https://<domain>/thingpark/dx/core/latest/swagger-ui.html#/Connectionoù<domain>est le nom d'hôte/adresse IP de votre ThingPark Enterprise auto-hébergé
L'exemple dans cette section utilise les valeurs suivantes :
| Informations requises | Exemple | 
|---|---|
| Nom de la connexion | Ma connexion MQTT | 
| Identifiant du connecteur | actility-mqtt-iot | 
| Nom d'hôte du courtier MQTT | myhostname.com:8883 | 
| Schéma du sujet Uplink | mqtt/things/\{DevEUI\}/uplink | 
| Schéma du sujet Downlink | mqtt/things/\{DevEUI\}/downlink | 
| Protocole | SSL | 
| Nom d'utilisateur | mycompany | 
| Mot de passe | bar | 
POST /thingpark/dx/core/latest/api/connections HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
Accept: application/json
{
    "connectorId": "actility-mqtt-iot",
    "name": "My MQTT connection",
    "configuration": {
        "uplinkTopicPattern": "mqtt/things/{DevEUI}/uplink",
        "downlinkTopicPattern": "mqtt/things/{DevEUI}/downlink",
        "hostName": "myhostname.com:8883",
        "protocol": "SSL",
        "username": "mycompany",
        "password": "bar"
    }
}
HTTP/1.1 201 Created
Content-Type: application/json
Location: /connections/1114
{
    "id": "1114",
    "connectorId": "actility-mqtt-iot",
    "name": "My MQTT connection",
    "state": "OPENED",
    "configuration": {
        ...
    }
}
Ajouter une connexion HTTPS de base
Une connexion HTTPS de base supporte les connexions basées sur HTTPS, également connues sous le nom d'interface Tunnel NS-AS. Les payloads des capteurs sont échangés dans un format encodé sans le Support des drivers de payload. Ce type de connexion ne supporte pas les services de mise en file d'attente de messages. Les alarmes de capteurs et de passerelles ne peuvent pas être signalées par ce type de connexion.
L'exemple dans cette section utilise les valeurs suivantes :
| Informations requises | Exemple | 
|---|---|
| Nom de la connexion | Ma connexion HTTPS de base | 
| URL | https://www.example.com/myApp | 
| Type de contenu | JSON | 
| Clé d'authentification de l'interface tunnel | C72C6F867B150B1210ACDA5F3CDFB449 | 
| Écart maximum de l'horodatage | 10 secondes | 
POST /thingpark/wireless/rest/subscriptions/mine/appServers HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
{
    "contentType": "jsontyped",
    "destinations": [
        {
            "addresses": [
                "https://www.example.com/myApp"
            ],
            "ports": "*",
            "strategy": "SEQUENTIAL"
        }
    ],
    "downlinkSecurity": {
        "downlinkAsKey": "C72C6F867B150B1210ACDA5F3CDFB449",
        "maxTimestampDeviation": 10,
        "status": "DOWNLINK_AS_KEY"
    },
    "name": "My Basic HTTPS connection"
}
HTTP/1.1 201 Created
Content-Type: application/json
Location: /thingpark/wireless/rest/subscriptions/32/appServers/2227
{
    "occContext": {
        "version": 0,
        "lastUpdate": 1546598395000,
        "who": "John Doe"
    },
    "name": "My Basic HTTPS connection",
    "ID": "TWA_199983788.568.AS",
    ...
}
Gestion des capteurs
Ajouter un capteur LoRaWAN®
L'exemple dans cette section utilise les valeurs suivantes pour un capteur LoRaWAN® 1.0 :
| Informations requises | Exemple | 
|---|---|
| Nom du capteur | Mon capteur | 
| Activation | OTAA | 
| DevEUI | 70B3D5E756000999 | 
| AppKey | 7374757A3FDD092947CE2DE9321C6040 | 
Récupérer un modèle de capteur
La sélection d'un modèle de capteur est obligatoire pour ajouter un capteur. Vous pouvez extraire un ID de modèle de capteur en listant les modèles de capteurs LoRaWAN® existants.
GET /thingpark/wireless/rest/subscriptions/mine/deviceProfiles?connectivity=LORAWAN HTTP/1.1
Authorization: Bearer ...
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
HTTP/1.1 200 OK
Content-Type: application/json
{
    "briefs": [
        {
            "commercialName": "LoRaMote EU fw4 - class A",
            "typeMAC": "LoRaMAC",
            "vendor": {
                "name": "Semtech",
                "commercialName": "Semtech",
                "commercialDescription": "Supplier of analog and mixed-signal semiconductors.",
                "ID": "semtech"
            },
            "connectivity": "LORAWAN",
            "macMajorVersion": 0,
            "macMinorVersion": 3,
            "motionModelIndicator": "RANDOM",
            "ID": "SMTC/LoRaMoteA.1_EU",
            "defaultIsmBands": [
                {
                    "name": "EU863-870 (EU868)",
                    "ID": "eu868"
                },
                {
                    "name": "RU864-870 (RU864)",
                    "ID": "ru864"
                }
            ]
        },
        ...
    ],
    "more": false
}
Extraire l'ID du modèle de capteur sélectionné à partir de la réponse.
Récupérer une connexion
La sélection d'une connexion est obligatoire pour permettre la communication avec un serveur d'applications. Vous pouvez récupérer un ID de connexion en listant les connexions existantes.
GET /thingpark/wireless/rest/subscriptions/mine/appServers HTTP/1.1
Authorization: Bearer ...
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
HTTP/1.1 200 OK
Content-Type: application/json
{
    "briefs": [
        {
            "ID": "TWA_199982747.1972.AS",
            "baseStationCount": 5,
            "deviceCount": 22,
            "href": "/thingpark/wireless/rest/subscriptions/32/appServers/1972",
            "multicastGroupCount": 0,
            "name": "my MQTT application",
            "state": "ACTIVE",
            "healthState": "ACTIVE",
            "notification": {
                "baseStationAlarms": true,
                "deviceAlarms": true
            },
            "type": "KAFKA",
            "validationState": "VALIDATED"
        },
        ...
    ],
    "more": false
}
Si la connexion est une connexion ThingPark X IoT Flow, elle est gérée avec l'API DX Core comme expliqué dans Ajouter une connexion ThingPark X IoT Flow.
Cette connexion est identifiée par la propriété id dans l'API DX Core. Cet identifiant est stocké dans la propriété
tpxIotFlow.connectionId dans l’API OSS.
Extraire l'ID de la connexion sélectionnée à partir de la réponse.
Ajouter le capteur
L’exemple suivant utilise l’ID du modèle de capteur et l’ID de connexion récupérés lors des étapes précédentes.
POST /thingpark/wireless/rest/subscriptions/mine/devices?networkSubscriptionsHandlingMode=BASIC HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
{
    "connectivity": "LORAWAN",
    "activation": "OTAA",
    "EUI": "70B3D5E756000999",
    "model": {
        "ID": "SMTC/LoRaMoteA.1_EU"
    },
    "networkSubscription": {
        "nwGeolocalization": false,
        "prAllowed": false
    },
    "appServers": [
        {
            "ID": "TWA_199982747.1972.AS"
        }
    ],
    "name": "My device",
    "appKey": "7374757A3FDD092947CE2DE9321C6040"
}
HTTP/1.1 201 Created
Content-Type: application/json
Location: /thingpark/wireless/rest/subscriptions/32/devices/2227
{
    "now": 1556274131027,
    "occContext": {
        "version": 0,
        "lastUpdate": 1546598395000,
        "who": "John Doe"
    },
    "name": "My device",
    ...
}
Lister les capteurs
Vous pouvez lister tous les capteurs.
GET /thingpark/wireless/rest/subscriptions/mine/devices HTTP/1.1
Authorization: Bearer ...
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
HTTP/1.1 200 OK
Content-Type: application/json
{
    "briefs": [
        {
            "name": "My device",
            "model": {
                "commercialName": "LoRaMote EU fw4 - class A",
                "logo": "/thingpark/wireless/rest/resources/files/logo/deviceProfile/42"
            },
            "connectivity": "LORAWAN",
            "activation": "OTAA",
            "EUI": "70B3D5E756000999",
            ...
            "href": "/thingpark/wireless/rest/subscriptions/32/devices/2227"
        },
        ...
    ],
    "more": false,
    "now": 1556209037421
}
Récupérer un capteur
Les ressources du capteur sont récupérées en utilisant le DevEUI du capteur.
GET /thingpark/wireless/rest/subscriptions/mine/devices/e70B3D5E756000999 HTTP/1.1
Authorization: Bearer ...
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
HTTP/1.1 200 OK
Content-Type: application/json
{
    "now": 1556274131027,
    "occContext": {
        "version": 0,
        "lastUpdate": 1546598395000,
        "who": "John Doe"
    },
    "name": "My device",
    "connectivity": "LORAWAN",
    "activation": "OTAA",
    "appEUI": "65FC7B3530A44FB9",
    "EUI": "70B3D5E756000999",
    ...
}
Récupérer l'historique du trafic d'un capteur
Vous pouvez récupérer l'historique du trafic d'un capteur en utilisant le DevEUI du capteur. L'exemple suivant récupère une agrégation quotidienne du trafic pour les 7 derniers jours dans le fuseau horaire Europe/Paris.
GET /thingpark/wireless/rest/subscriptions/mine/devices/e70B3D5E756000999/frames/aggregated?duration=P7D&step=P1D&timezone=Europe/Paris HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
HTTP/1.1 200 OK
Content-Type: application/json
{
    "now": 1691574920713,
    "briefs": [
        {
            "timestamp": 1691532000000,
            "instantPerMean": 0.021186423,
            "meanPerMean": 0.058798883,
            "rssiMean": -60.898304,
            "snrMean": 0.3411017,
            "espMean": -62.225357,
            "mf": {
                "count": 0,
                "size": 0,
                "sizeUp": 0,
                "sizeDown": 0,
                "duration": 0
            },
            "up": {
                "count": 58,
                "size": 530,
                "countOnTime": 58,
                "sizeOnTime": 530,
                "countLate": 0,
                "sizeLate": 0,
                "countLost": 8,
                "subTypes": []
            },
            "dw": {
                "count": 60,
                "size": 0,
                "countSent": 59,
                "sizeSent": 0,
                "countFailed": 1,
                "sizeFailed": 0,
                "subTypes": []
            }
        },
        ...
    ]
}
Gestion des groupes multicast
Ajouter un groupe multicast
L'exemple dans cette section utilise les valeurs suivantes pour un groupe multicast LoRaWAN® 1.0 :
| Informations requises | Exemple | 
|---|---|
| Nom du groupe multicast | Mon groupe multicast | 
| DevEUI | 70B3D5E756000999 | 
| DevAddr | 785D25E2 | 
| NwkSKey | 7374757A3FDD092947CE2DE9321C6040 | 
| AppSKey | 8D67B0D6359D11ACFC45AD4BB9CE2D4F | 
| Classe | C | 
| Débit de données Downlink | 15 | 
| Fréquence de Downlink | 869.525 MHz | 
| Tags de la passerelle | tag1dans l'espace de nomsABONNEMENT | 
Récupérer une connexion
La sélection d'une connexion est obligatoire pour permettre la communication avec un serveur d'applications. Vous pouvez récupérer un ID de connexion en listant les connexions existantes. La procédure est la même que pour un capteur, voir Récupérer une connexion pour plus de détails.
Ajouter le groupe multicast
L'exemple suivant utilise l'ID de connexion récupéré lors des étapes précédentes.
POST /thingpark/wireless/rest/subscriptions/mine/devices?networkSubscriptionsHandlingMode=BASIC HTTP/1.1
Authorization: Bearer ...
Content-Type: application/json
Accept: application/json
Cookie: JSESSIONID=gcn1wPKxdUPUW6yh8aPsAiwY.twa; GLOBALTWA=0
{
    "name": "My multicast group",
    "EUI": "70B3D5E756000999",
    "nwAddress": "785D25E2",
    "nwKey": "7374757A3FDD092947CE2DE9321C6040",
    "appKeys": "<AppSKeys><AppSKey Port=\"*\">8D67B0D6359D11ACFC45AD4BB9CE2D4F</AppSKey></AppSKeys>",
    "class": "C",
    "downlinkDataRate": 15,
    "downlinkFrequency": 869.525,
    "bss": {
        "tags": [
            {
                "name": "tag1",
                "namespace": "OPERATOR"
            }
        ]
    },
    "appServers": [
        {
            "ID": "TWA_199982747.1972.AS"
        }
    ]
}
HTTP/1.1 201 Created
Content-Type: application/json
Location: /thingpark/wireless/rest/subscriptions/32/devices/2227
{
    "now": 1556274131027,
    "occContext": {
        "version": 0,
        "lastUpdate": 1546598395000,
        "who": "John Doe"
    },
    "name": "My multicast group",
    ...
}