Ouvrez le projet client MQTT sur Delphi. Continuation
Le début était là: Le protocole MQTT et le projet ouvert du client MQTT sur DelphiLe projet du client MQTT sur Delphi a été complété par un tableau de bord pour surveiller le flux d'informations de l'Internet des objets en temps réel et un générateur de publications périodiques pour tester les courtiers MQTT. Le format JSON pour la transmission d'informations a été adopté, car il constitue la norme pour les services Internet.Et voyez également ce qu'IBM Bluemix peut nous offrir pour organiser la surveillance à distance et gérer les choses sur Internet.Quoi de neuf
Après que la version précédente du client eut la possibilité de recevoir, d'envoyer et de s'abonner aux paquets MQTT, ce fut au tour de mettre en œuvre la génération de flux de messages pour tester le fonctionnement des courtiers MQTT. Une autre tâche consistait à déterminer la structure du corps du message. Ici, une méthode de structuration des informations utilisée dans le service IBM Bluemix IoTF a été utilisée pour aider. Même si la structuration appliquée n'y est pas idéale, il y a lieu d'adhérer à de telles règles pendant un certain temps, car IBM est une marque très autoritaire.La structure dans ce contexte est de savoir comment les informations sont codées dans chaque paquet et dans quelle composition elles sont transmises. Il est nécessaire de décider si nous transférons par une variable ou par groupes, si par groupes, comment séparer les variables les unes des autres, comment distinguer les variables, les métadonnées, etc., comment comparer les variables avec leur description ou leurs noms, et si dans tous les cas les variables doivent être accompagnées de noms ou d'assez d'indices et etc. Le protocole MQTT ne réglemente en aucune façon ce problème, sauf que les données textuelles sont encodées au format UTF8, ce qui en principe n'est pas mauvais non plus, car il vous permet d'appeler des sujets en russe.Les géants de l'Internet ont choisi le format JSON pour résoudre le problème de la structuration, bien que MQTT aurait discrètement transféré XML et ASN.1 dans n'importe quel encodage et autres formats. JSON, en passant, a plusieurs spécifications de compression, s'il y a des plaintes concernant la redondance du format texte.Génération de trafic MQTT
Donc, maintenant, notre client est capable d'envoyer des paquets contenant des données texte au format JSON et encodés en UTF8. Pour ce faire, il dispose d'un onglet «Publication périodique». La publication sur l'argot MQTT signifie simplement l'envoi d'un paquet de données à d'autres nœuds du réseau IoT.
Dans la capture d'écran, chaque ligne du tableau correspond à un message spécifique. Tous les messages de cet exemple ont le même sujet. Ici, la politique est la suivante: moins il y a de sujets différents, moins le courtier est chargé d'analyser, de rechercher et de sauvegarder ces sujets. Les sujets sont sélectionnés dans le format dans lequel ils sont acceptés par le service IBM Bluemix IoTF. La colonne Payload contient le corps du message. Il est présenté au format JSON, mais pour une variable, il est permis d'utiliser le spécificateur de format selon les règles de la fonction Format du langage Delphi. Dans ce cas, le spécificateur% g est utilisé. A sa place sera substituée la valeur de la variable générée selon les règles spécifiées dans les colonnes: Timeout (période d'envoi du message), Fonction (il n'y a qu'un choix entre une variable aléatoire et une fonction sinus), Min, Max (la valeur minimale et maximale de la valeur générée),Période (période de la fonction sinus, spécifiée dans le nombre d'échantillons), Offs (décalage de l'argument de la fonction sinus, spécifié par le nombre d'échantillons). Les colonnes QoS et Retain spécifient les attributs du package MQTT. Le champ Activé indique si ce message sera activé lorsque le bouton «Démarrer» est cliqué. Le bouton «Démarrer» ne devient actif qu'après avoir établi une connexion avec le courtier.Important! Le service IBM Bluemix IoTF est très sensible à la syntaxe et se déconnecte immédiatement si le sujet ne correspond pas au format.Au bas du formulaire se trouvent les journaux: général, journal des messages de publication envoyés et journal des messages de publication reçus. Les journaux peuvent être effacés ou désactivés. L'interdiction des journaux accélère la génération et la réception des paquets.Visualisation des données à partir des nœuds IoT
Vous devez commencer par un abonnement aux données si elles n'étaient pas souscrites de manière permanente lors de la session précédente de la session de communication, sinon le courtier n'enverra rien.Dans l'onglet «Abonnement par liste», vous devez enregistrer les sujets que nous souhaitons recevoir du courtier. Dans ce cas, une rubrique est écrite avec la valeur dont les messages seront envoyés par le générateur.Si le champ S'abonner est marqué, alors le sujet sera abonné après avoir cliqué sur le bouton "S'abonner". Si la valeur du champ S'abonner n'est pas marquée, alors l'abonnement sera désabonné de cette rubrique lorsque vous cliquerez sur le bouton "S'abonner". Encore une fois, l'opération d'abonnement n'est disponible qu'après avoir établi une connexion avec le courtier.Avant même de vous abonner, vous pouvez écrire dans le tableau des composants visuels les variables que nous voulons observer en temps réel. Pour ce faire, cliquez sur le bouton «Tableau».
La colonne «Nom de variable» contient le même nom de variable (clé dans la terminologie JSON) que celui enregistré dans le message au format JSON. Le champ «Légende de variable» contient le nom de la variable affichée sur le composant visuel. La colonne «Classe de widget» définit le type de composant visuel. Ici, vous pouvez sélectionner n'importe quelle échelle, inscription de style LCD / LED ou graphique.Après avoir modifié le tableau, cliquez sur le bouton Widgets et organisez les composants visuels dans le formulaire. Au début, tous les composants seront dans une pile dans le coin supérieur gauche. Vous devez les faire glisser et les placer sur le formulaire dans la configuration souhaitée. L'emplacement des composants est mémorisé et reproduit après la prochaine ouverture du formulaire. Le style d'ancrage des composants suit le style de IDE RAD Studio ou MS Visual Studio.
Si une connexion avec le courtier est établie et souscrite, alors en cas de messages avec les variables correspondantes, leurs valeurs seront immédiatement reflétées dans la fenêtre des composants visuels.Le programme enregistre tous les paramètres et les journaux dans les fichiers JSON sur le disque, qui peuvent être modifiés manuellement.Le référentiel contient la version du programme avec la configuration préparée et enregistrée dans des fichiers JSON prêts à être testés à l'aide du courtier Mosquitto inclus localement.Le courtier, prêt à être lancé, se trouve dans le référentiel de l'archive Mosquitto_broker_projs.zip du répertoire Mosquitto_1_4_5_bin. Vous devez exécuter le fichier Run_mosquitto.cmd.À propos de l'analyse JSON
Le programme utilise un analyseur JSON tiers du projet https://github.com/hgourvest/superobject Malgré le fait que RAD Studio XE8 dispose d'un analyseur JSON intégré, le superobjet semblait plus intéressant et plus puissant en termes de capacités. Lorsqu'un message arrive, le programme client MQTT analyse le corps du message et y sélectionne des paires clé-valeur individuelles. Si un tableau est rencontré, il est ignoré car les objets du tableau n'ont pas de nom et il n'y a pas de mécanisme (dans ce programme) pour les associer à une variable nommée dans le client. Les objets nommés restants sont analysés en profondeur de manière récursive jusqu'à ce que toutes les paires clé-valeur soient récupérées. La clé sera le nom de la variable, le programme essaiera de convertir les valeurs en nombre à virgule flottante; s'il échoue, le nombre est égal à zéro.Essayer l'application IBM IoT Real-Time Insights
Cette application est la deuxième des deux applications pratiques proposées par IBM pour l'IoT. Premièrement, la Fondation de l'Internet des objets a été discutée dans un article précédent. Il existe plusieurs autres applications de démonstration pour l'IoT dans le catalogue IBM, mais elles nécessitent le déploiement et le lancement de code personnalisé sur le serveur, qui comprend automatiquement un compteur de paiement.Mais revenons à IoT Real-Time Insights. Nous allons dans votre compte. Comme toujours, sélectionnez la région sud des États-Unis. Cliquez dans le menu supérieur Catalogue. Nous descendons tout en bas en observant de nombreux services et applications différents d'IBM. Nous voyons:
Cliquez sur IoT Real-Time Insights. Cette application vous permet uniquement d'observer, de gérer directement les appareils qui ne fonctionneront pas, sauf si les appareils ont d'autres canaux de communication que MQTT.Lors de la création du champ App:, laissez Laisser non lié. Nous ne créons pas d'applications supplémentaires, car IBM commence immédiatement à compter de l'argent pour elles. Plan de campagne: quittez Lite. Donc tout sera gratuit pour nous.
Avant cela, le service Internet of Things Foundation aurait déjà dû être créé et activé, et au moins un appareil au nom duquel notre client MQTT enverra des paquets y a déjà été créé. Cela a été décrit dans un article précédent.
Sur la page d'accueil de l'application IoT Real-Time Insights, nous commençons immédiatement par connecter une source de données, et ce sera le service Internet of Things Foundation que nous avons créé plus tôt. Nous devons connaître son nom de code (ID d'organisation), sa clé API et son jeton d'authentification. Si nous ne le savons pas, revenez à la Fondation Internet des Objets et créez ce que nous ne savons pas.Après la connexion, dans l'onglet Appareils, tous les appareils enregistrés par nous doivent être affichés. Dans ce cas, il n'y en a qu'un.
Ensuite, vous devez configurer des schémas de messages. Cliquez sur Gérer les schémas et sur le signe plus Ajouter un nouveau schéma de message. C'est ainsi que vous pouvez comprendre le paramètre de décryptage des messages de l'appareil.
Voici un exemple d'un tel réglage pour les variables T, L1, L2, L3.
La variable L1, par exemple, lors de l'édition était représentée par une telle fenêtre.
Après avoir configuré les schémas, vous pouvez configurer l'analyse. C'est-à-dire en fait, les règles d'envoi de messages à des récepteurs de messages externes. Le plus abordable est d'envoyer un e-mail.Voici à quoi ressemble la règle d'envoi d'email si la variable T dépasse 24:
Mais un tel email arrive:
Mais le point central de l'application sont les tableaux de bord. Il peut y avoir de nombreux panneaux. Les tableaux de bord sont constitués de composants visuels affichant les valeurs des variables créées dans l'onglet Gérer les schémas en temps réel. La capture d'écran ci-dessous montre un exemple de tableau de bord pour afficher 4 variables: T, L1, L2, L3. Des paquets avec des valeurs variables ont été générés par notre client MQTT. La variable T a été générée comme un nombre aléatoire, L1, L2, L3 en fonction du sinus.
Impressions d'IBM IoT Real-Time Insights.
Jusqu'à présent, l'application est très brute. Les fenêtres et les dialogues s'ouvrent avec de longs délais. Le générateur de tableau de bord est limité en fonctionnalités, pour les mouvements simples ou le redimensionnement, vous devez passer par plusieurs boîtes de dialogue. Les composants du panneau eux-mêmes n'ont pas de propriétés modifiables. La même chose s'applique aux graphiques. Les graphiques n'ont pas d'historique et sont effacés au moindre redimensionnement de la fenêtre. Le courrier électronique n'est pas stable et peut être retardé pendant une longue période.Mais il s'agit toujours d'un service gratuit, disponible ici et maintenant, et si l'appareil est capable de publier des messages dans un format JSON approprié, vous devez garder à l'esprit une telle application d'IBM.Le projet client MQTT est toujours à sa place: https://github.com/Indemsys/Delphi_MQTT_mosquittoSource: https://habr.com/ru/post/fr388343/
All Articles