Aller au contenu principal

2 articles tagués avec « donnees »

Voir tous les tags
Camille
Release notes
Camille
Responsable Marketing & Communication
Publié le16 septembre 2024
Versionv3.6

Sliders interactifs, liens publics et formulaires dynamiques

Nous sommes ravis de vous présenter la nouvelle version de la plateforme IoT magic Builder. Voici un aperçu des fonctionnalités et des améliorations apportées.

Nouvelles fonctionnalités

Tableau de bord, mode slider

Découvrez notre nouvel outil de visualisation de vos données : le slider qui vous permet de créer des présentations fluides et dynamiques de vos dashboards.

Basé sur des dashboards, il vous permet d'afficher et de faire défiler les pages de tableaux de bords, tout en conservant les fonctionnalités de navigation entre les pages, dans le temps ou dans votre hiérarchie.

Menu et pages
Menu et pages
Cliquer pour ouvrir

Pour créer votre slider, rien de plus simple. Vous remarquerez qu'une nouvelle option est disponible au sein du mode édition des paramètres du module App Builder : "Ajouter : Nouveau slider".

Vous n'avez plus qu'à y glisser les dashboards que vous souhaitez inclure dans votre slider, et le tour est joué.

Profitez de nombreuses options de personnalisation :

  • Transitions automatiques ou spécifiques pour chaque page
  • Utilisez ou non les contrôles d'affichage pour une navigation manuelle ou automatique
  • Affichage du temps restant pour chaque page
  • Fonctionnalité de pause et reprise à tout moment
  • Possibilité de passer en mode plein écran pour une visualisation optimisée

Création de liens publics pour une exposition plus large

Les liens publics vous permettent de partager vos dashboards de manière publique sans nécessiter de connexion. Idéal pour les expositions, démonstrations ou communications ouvertes.

Pour créer un lien public, vous devez commencer par créer un utilisateur technique, de la même manière que vous créeriez un nouvel utilisateur. Les utilisateurs techniques sont dédiés à la gestion des accès publics.

Attribuez à cet utilisateur technique les autorisations spécifiques pour contrôler la visibilité et les droits d'accès aux données que vous souhaitez partager.

Créez ensuite des liens publics à partir du "Menu et page" de l'App Builder en cliquant sur la colonne dédiée aux liens publics.

Création de liens publics
Création de liens publics
Cliquer pour ouvrir
À savoir
  • Le lien public créé deviendra le point d'entrée de l'app builder. La navigation entre les dashboards reste possible selon les autorisations définies à votre utilisateur technique
  • L'utilisateur technique ne se déconnectera pas de la plateforme, sauf si le lien public est supprimé

Formulaires dynamiques pour une personnalisation accrue

Avec les formulaires dynamiques, générez de nouveaux champs d'informations pour vos devices, sites, et clients. Pour ce faire, rendez-vous dans l'onglet "informations techniques" en bas de la page de configuration de votre CA (Customer account).

Exemple de configuration du formulaire :

Configuration du formulaire
Configuration du formulaire
Cliquer pour ouvrir

Exemple de nouveaux champs créés :

Nouveaux champs créés
Nouveaux champs créés
Cliquer pour ouvrir

Configurez ces champs via un format JSON, en suivant les normes prédéfinies ci-dessous pour une personnalisation sans limites.

Types de champs disponibles

Field typeCustom FieldDescriptionInput type
text
{
  "type": "text",
  "id": "adresse",
  "title": "Adresse"
}
Champ texte classique. Les validations sont effectuées sur la taille du texte, et un message d'erreur ainsi que ses traductions sont déjà configurés.textbox
text (email)
{
  "input": "email",
  "type": "text",
  "id": "userEmail",
  "title": "User Email"
}
Validation par défaut DevExtreme pour les emails. Les traductions par défaut sont déjà implémentées. La validation n'est effectuée que si le champ est obligatoire.email
text (phone)
{
  "input": "phone_number",
  "type": "text",
  "id": "phoneNumber",
  "title": "Phone Number"
}
Vérification effectuée à l'aide de libphonenumber-js. Le numéro est formaté pour être lisible. La validation n'est effectuée que si le champ est obligatoire.phone_number
text (select)
{
  "type": "text",
  "input": "selectbox",
  "id": "country",
  "title": "Country",
  "selectOptions": [...]
}
Permet de sélectionner une option parmi des valeurs prédéfinies. Ces options sont configurées via le champ selectOptions. L'information enregistrée est l'id.dropdown
selectbox
radio_buttons
text (large)
{
  "input": "large_textbox",
  "type": "text",
  "id": "description",
  "title": "Description"
}
Reprend le principe du texte mais accepte des entrées plus grandes, et la taille du texte acceptée est plus importante.

Champ texte
Champ texte
Cliquer pour ouvrir
large_textbox
number
{
  "type": "number",
  "input": "textbox",
  "id": "postalCode",
  "numberBoxControls": true,
  "title": "Postal code",
  "min": 0,
  "max": 99999
}
Des champs supplémentaires peuvent être utilisés pour définir une plage max et min. Les boutons sur le côté peuvent être utilisés pour incrémenter ou décrémenter la valeur de 1.

Champ numérique
Champ numérique
Cliquer pour ouvrir
number_box
text_list
{
  "input": "selectbox",
  "type": "text_list",
  "id": "country",
  "title": "Country",
  "selectOptions": [...]
}
Même principe que pour le texte, mais permet de sélectionner plusieurs options prédéfinies.dropdown
selectbox
radio_buttons
date
datetime
time
{
  "type": "datetime",
  "input": "datetime_selector",
  "id": "registrationTimestamp",
  "title": "Registration Timestamp",
  "displayFormat": "MMMM dd, yyyy HH:mm:ss"
}
Ces champs fournissent un sélecteur pour sélectionner une date, une heure ou les deux. Un champ displayFormat est utilisé pour définir l'affichage.

Sélecteur de date
Sélecteur de date
Cliquer pour ouvrir

Exemples de format d'affichage (timestamp du 15/06/2021 à 20:45:34) :
MM/dd/yyyy → 07/15/2021
MM/dd/yy → 07/15/21
dd.MM.yyyy → 15.07.2021
MMMM dd, yyyy → July 15, 2021
EEEE, MMMM dd → Thursday, July 15
HH:mm:ss → 20:45:34
hh:mm a → 08:45 PM
MMMM dd, yyyy HH:mm:ss → July 15, 2021 20:45:34
date_selector
datetime_selector
time_selector
boolean
{
  "type": "checkbox",
  "id": "activeContact",
  "title": "Active contact",
  "defaultValue": true
}
Le champ est représenté par une case à cocher. L'état par défaut est undefined. Pour cocher ou décocher la case par défaut, utilisez le champ defaultValue.

Case à cocher
Case à cocher
Cliquer pour ouvrir
(checkbox)

Références

Pour plus d'informations sur les formats et validations, consultez la documentation officielle :


Illustration IoT magic Builder

Merci d'utiliser IoT magic Builder. Pour toute question ou assistance, veuillez contacter notre support technique.

Camille
Release notes
Camille
Responsable Marketing & Communication
Publié le10 juin 2024
Versionv3.3

Branding personnalisable et import de données en masse

Nouvelles fonctionnalités

Vous pouvez désormais choisir le nom de vos applications dans l'IoT magic Builder

Personnalisez votre expérience utilisateur en renommant vos applications directement depuis le module branding. Vous pouvez définir le nom de l'application, le logo affiché dans l'onglet du navigateur et l'icône visible dans le portail. Une manière simple et efficace de renforcer votre identité de marque sur notre plateforme.

Fonctionnalité branding
Fonctionnalité branding
Cliquer pour ouvrir

Import de données en masse dans la plateforme

Gagnez du temps avec notre nouvelle fonctionnalité d'import de masse de données.

2 manières de procéder possibles à votre disposition :

Via la nouvelle API d'import de masse de données

Vous pouvez désormais importer vos données en masse en utilisant des fichiers CSV ou XLSX. Que ce soit pour des mises à jour régulières ou des intégrations initiales, cette fonctionnalité facilite la gestion de vos données à grande échelle.

Via notre nouvelle interface d'import de donnée

Obtenez un template de fichier des données de votre produit, spécialement conçu pour faciliter l'intégration des données historiques en masse, grâce au bouton d'export. Téléchargez le fichier au format XLSX, remplissez-le et ré-importez-le directement dans la plateforme.

Import de données en masse
Import de données en masse
Cliquer pour ouvrir
astuce

Vous pouvez sélectionner plusieurs produits simultanément pour télécharger le fichier de template, qui aura alors simplement plusieurs onglets à remplir ! Importez les données pour plusieurs produits en une seule opération. Le mapping des données réimportées se fait automatiquement par la plateforme ensuite.


Changelog

Amélioration & corrections

Connecteur générique

Certaines routes de l'API du connecteur générique, dépréciées depuis la version 3.0, sont supprimées. Les scripts et applications utilisant ces routes doivent être mis à jour avant la livraison de la version 3.3, sans quoi les appels vers les routes actuellement dépréciées ne fonctionneront plus. Les DTOs (body & réponses) sont aussi modifiées, il conviendra d'adapter les appels en fonction.

Le fichier openapi3_0.json peut être utilisé afin de visualiser les routes dépréciées et les nouvelles routes.

Spécification OpenAPI

Téléchargement

Vous pouvez télécharger la spécification complète de l'API au format OpenAPI 3.0 :

📄 Télécharger openapi3_0.json

Visualisation

Voir un aperçu de la spécification OpenAPI

Cette API utilise OpenAPI 3.0.0 et comprend les contrôleurs suivants :

Endpoints disponibles :

  • Streams - Gestion des flux de données (deprecated)
  • Alarms - Gestion des alarmes
  • Alarm Histories - Historique des alarmes
  • Data Points - Points de données (recommandé)
  • Variables - Statistiques des variables
  • Health Check - Vérification de santé du service

Informations API :

  • Titre : IoT Framework Generic Connector
  • Version : 3.3.0
  • Sécurité : OAuth2 (Authorization Code Flow)

Pour une utilisation complète, importez le fichier JSON dans un outil compatible OpenAPI comme Swagger Editor, Postman, ou Insomnia.

Liens utiles :


IoT Framework Generic Connector API

Version 3.3.0 - OAS 3.0

Cette release inclut la documentation complète de l'API IoT Framework Generic Connector.


Streams

POST /api/streams ⚠️ Deprecated

Recherche les flux de données pour un équipement donné, correspondant aux filtres.

Paramètres:

NomTypeLocalisationDescription
x-iot-corporateaccountuuidstringheaderUUID du compte entreprise (requis)

Corps de la requête:

{
"from": "string",
"to": "string",
"timezone": "string",
"useDeviceLocalTimezone": true,
"granularity": {},
"series": [
{
"deviceUuid": "string",
"itemType": "string",
"itemIndex": "string",
"serviceId": "string",
"aggregation": {}
}
],
"paging": {
"pageNumber": 0,
"itemsPerPage": 0
},
"pagingOrder": "string"
}

Réponses:

  • 201 Created
{
"from": "",
"to": "",
"timezone": "string",
"useDeviceLocalTimezone": true,
"granularity": {},
"series": [
{
"deviceUuid": "string",
"variableUuid": "string",
"itemType": "string",
"itemIndex": "string",
"serviceId": "string",
"aggregation": {},
"dataType": {},
"deviceTimeZone": "string",
"data": [
{
"at": "string",
"value": "number | string"
}
]
}
],
"paging": {
"pageNumber": 0,
"itemsPerPage": 0
},
"pagingOrder": "string"
}
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
POST /api/streams/publish ⚠️ Deprecated

Publie un tableau de données. Deprecated - Utilisez le contrôleur Data Points.

Paramètres:

NomTypeLocalisationDescription
x-iot-corporateaccountuuidstringheaderUUID du compte entreprise (requis)

Corps de la requête:

{
"at": "string",
"deviceUuid": "string",
"data": [
{
"itemType": "string",
"itemIndex": "string",
"serviceId": "string",
"type": "string",
"at": "string",
"q": 0,
"value": 0,
"oldValue": 0,
"result": 0
}
]
}

Réponses:

  • 201 Created - Données publiées avec succès
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête

Data Points

POST /api/ca/{corporateAccountUuid}/devices/{deviceUuid}/datapoints

Envoie des données aux variables selon l'UUID donné.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)
deviceUuidstringpathUUID de l'équipement (requis)

Corps de la requête:

{
"dataset": [
{
"variableUuid": "string",
"data": [
{
"date": "2024-06-10T10:08:56Z",
"value": "string"
}
]
}
]
}

Réponses:

  • 200 OK
{
"result": "string"
}
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
POST /api/ca/{corporateAccountUuid}/last-values-request

Recherche les dernières valeurs de plusieurs variables.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)

Corps de la requête:

{
"timezone": "UTC",
"granularity": "raw",
"variableUuids": [],
"deviceUuids": [],
"itemType": "Global",
"itemIndex": "0",
"serviceIds": []
}

Réponses:

  • 200 OK
{
"results": [
{
"deviceUuid": "string",
"variableUuid": "string",
"unit": "string",
"serviceId": "string",
"itemType": "string",
"itemIndex": "string",
"aggregation": {},
"dataType": {},
"data": [
{
"at": "string",
"value": "number | string"
}
]
}
]
}
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
POST /api/ca/{corporateAccountUuid}/datapoints-request

Recherche des points de données avec filtres et pagination.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)

Corps de la requête:

{
"from": 0,
"to": 0,
"timezone": "UTC",
"granularity": "raw",
"paging": {
"pageNumber": 0,
"itemsPerPage": 0
},
"pagingOrder": "string",
"aggregations": ["sum"],
"variableUuids": [],
"deviceUuids": [],
"itemType": "Global",
"itemIndex": "0",
"serviceIds": []
}

Réponses:

  • 200 OK - Résultats de la recherche
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
GET /api/ca/{corporateAccountUuid}/devices/{deviceUuid}/last-values ⚠️ Deprecated

Recherche les dernières valeurs pour un équipement donné.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)
deviceUuidstringpathUUID de l'équipement (requis)
serviceIdsstringqueryListe des identifiants de service (ex: 140000,141000)
itemTypestringqueryType d'élément (ex: Global)
itemIndexstringqueryIndex d'élément (ex: 0)
languagestringqueryLangue pour les traductions de variables

Réponses:

  • 200 OK
{
"devices": [
{
"deviceUuid": "string",
"deviceTimeZone": "string",
"values": [
{
"serviceGroup": "string",
"serviceType": "string",
"value": "string",
"unit": "string",
"date": "2024-06-10T10:00:00.000Z",
"serviceId": "string",
"title": "string",
"itemType": "string",
"itemIndex": "string",
"itemName": "string",
"deviceUuid": "string",
"deviceName": "string",
"variableUuid": "string"
}
]
}
]
}
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
PUT /api/ca/{corporateAccountUuid}/last-values ⚠️ Deprecated

Recherche les dernières valeurs pour plusieurs équipements.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)

Corps de la requête:

{
"devices": [
{
"deviceUuid": "string",
"itemType": "string",
"itemIndex": "string",
"serviceIds": ["string"]
}
],
"language": "string"
}

Réponses:

  • 200 OK - Dernières valeurs récupérées
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête
PUT /api/ca/{corporateAccountUuid}/datapoints ⚠️ Deprecated

Recherche les flux de données pour un équipement donné.

Paramètres:

NomTypeLocalisationDescription
corporateAccountUuidstringpathUUID du compte entreprise (requis)

Corps de la requête:

{
"from": "string",
"to": "string",
"timezone": "string",
"useDeviceLocalTimezone": true,
"granularity": {},
"series": [
{
"deviceUuid": "string",
"itemType": "string",
"itemIndex": "string",
"serviceId": "string",
"aggregation": {}
}
],
"paging": {
"pageNumber": 0,
"itemsPerPage": 0
},
"pagingOrder": "string"
}

Réponses:

  • 200 OK - Flux de données récupérés
  • 400 Bad Request - Paramètres invalides
  • 404 Not Found - Ressources non trouvées
  • 409 Conflict - Erreur lors de la requête

Tableau de correspondance des routes API

Ancienne routeNouvelle route à utiliser
POST /api/streamsPOST /api/ca/{corporateAccountUuid}/datapoints-request
POST /api/streams/publishPOST /api/ca/{corporateAccountUuid}/devices/{deviceUuid}/datapoints
GET /api/ca/{corporateAccountUuid}/devices/{deviceUuid}/last-valuesPOST /api/ca/{corporateAccountUuid}/last-values-request
PUT /api/ca/{corporateAccountUuid}/lastvaluesPOST /api/ca/{corporateAccountUuid}/last-values-request
PUT /api/ca/{corporateAccountUuid}/datapointsPOST /api/ca/{corporateAccountUuid}/datapoints-request

Notes importantes

Endpoints dépréciés

Plusieurs endpoints sont marqués comme deprecated. Il est recommandé d'utiliser les nouveaux endpoints du contrôleur Data Points pour les nouvelles intégrations.

Format des dates

Les dates peuvent être au format ISO 8601 (2024-06-10T10:08:56Z) ou timestamp Unix (1718013336).


Illustration IoT magic Builder

Merci d'utiliser IoT magic Builder. Pour toute question ou assistance, veuillez contacter notre support technique.