Il semble que vous ayez lu l'autre jour Agrégation de la confirmation d'état et du fonctionnement d'IRKit et de Philips Hue avec MQTT, et après tout l'IoT est chaud. J'ai un ressenti.
Alors cette fois, parlons de MQTT avec Pepper. Cette fois, j'ai senti que ** "Si vous interconnectez le mécanisme de mémoire (ALMemory) et MQTT, vous pouvez facilement écrire une coopération cloud ou une application de coopération externe", alors j'ai fait une boîte comme ça **.
Quant à la gestion de MQTT avec Pepper, Suna l'a déjà essayé, je l'ai donc utilisé comme référence. Il est très soigneusement organisé, veuillez donc vous référer ici pour le contexte technique et les éléments.
Au fait, il y a quelques astuces personnelles telles que la façon de distribuer facilement celui qui utilise le module dans la boîte Python avec la bibliothèque de boîtes. Je le fais en tant que développement individuel jusqu'au dernier, mais depuis que j'ai tout fait, j'ai envie d'écrire comment l'utiliser et comment y penser.
NAOqi est la base logicielle de Pepper, et au centre de ce framework se trouve un module appelé ** ALMemory **. Il prend en charge les événements de déclenchement, y souscription, la définition et la récupération de valeurs, etc. Il est conçu pour faire. (Pour plus de détails, voir [Acquisition d'événements et de valeurs via ALMemory](http://qiita.com/Atelier-Akihabara/items/4162192129f366da1240#almemory%E3%82%92%E4%BB%8B%E3%81%97] % E3% 81% 9F% E3% 82% A4% E3% 83% 99% E3% 83% B3% E3% 83% 88% E5% 80% A4% E3% 81% AE% E5% 8F% 96% E5 Voir environ% BE% 97))
D'autre part, ** MQTT ** peut être trouvé en lisant les messages [En savoir plus sur MQTT] de Shiguredo (https://sango.shiguredo.jp/mqtt), et divers appareils émettant des messages. C'est un protocole qui vous permet de vous abonner aux messages émis par un autre appareil. Différents appareils peuvent publier et s'abonner à des messages via ce qu'on appelle le courtier MQTT.
Ces modèles, tels que l'émission de messages et leur abonnement, sont appelés modèles Pub / Sub, mais ALMemory et MQTT sont ** le même modèle, et je suis sûr qu'ils ont une forte affinité **. Voilà pourquoi.
J'ai aidé à développer avec Pepper lors d'événements, etc., et le sentiment que "En reliant Pepper à divers services externes, non seulement Pepper lui-même mais aussi la valeur du service sera encore améliorée" devient de plus en plus fort. Je vais.
Chaque service fournit une bibliothèque client très pratique, mais il est assez difficile d'utiliser ces bibliothèques directement à partir de la bibliothèque box fournie par l'outil de développement de Pepper Choregraphe, et dans de nombreux cas, il y a un mur de codage. Je ne peux pas l'éviter. De plus, bien que NAOqi soit un environnement d'exécution basé sur Python, c'est un environnement où le codage est facile car les outils de gestion de paquets tels que pip ne peuvent pas être utilisés librement et il y a des choses comme «les manières spécifiques à NAOqi». La situation actuelle est que ce n'est pas le cas.
De plus, bien que le processeur et la mémoire de Pepper aient été renforcés pour la vente générale, il est nécessaire d'utiliser la puissance de calcul pour un contrôle autonome comme la sécurité et des pièces telles que les cartes d'émotions, et il est également possible de faire circuler le calcul avec l'application. Il semble y avoir un problème. Il semble que des calculs lourds tels que le traitement de la reconnaissance devront être pris en compte dans le cloud ou sur un serveur quelque part en dehors de Pepper.
C'est pourquoi j'ai pensé qu'en interconnectant ALMemory et MQTT, il serait possible de se relier facilement à des systèmes externes tels que le cloud avec juste le boîtier qui gère ALMemory.
Dans la zone Adaptateur MQTT, spécifiez ** à l'avance l'association entre la clé dans ALMemory et le sujet de MQTT **. En donnant ces informations d'association et de connexion à MQTT Broker, tout ce que vous avez à faire est de démarrer la boîte de l'adaptateur MQTT.
Je pense que ce serait intéressant de pouvoir bouger ainsi.
C'est pourquoi j'ai créé le boîtier adaptateur MQTT.
J'essaie de l'ajouter à la même bibliothèque de boîtes que la précédente Abonnez-vous à la boîte d'événement réécrite avec qi Framework. GitHub est ci-dessous
Le répertoire ** web-boxes ** est la bibliothèque box. Je vais vous expliquer comment charger et utiliser la bibliothèque box.
Pour placer le boîtier adaptateur MQTT dans votre application, vous devez d'abord ouvrir la bibliothèque de boîtes dans Choregraphe. Procédez comme suit:
Sélectionnez [Ouvrir la bibliothèque de boîtes] dans le panneau [Bibliothèque de boîtes].
Sélectionnez ** répertoire web-boxes ** dans les répertoires téléchargés ou clonés depuis GitHub.
Notez que vous devez sélectionner «Box Library Directories» comme type de fichier.
** bibliothèque de boîtes web-box ** apparaîtra dans le panneau de bibliothèque de boîtes
Vous pouvez maintenant utiliser la bibliothèque de boîtes Web, qui comprend la boîte d'adaptateur MQTT.
La boîte Réseau> Adaptateur MQTT de la bibliothèque de boîtes Web est utilisée comme suit.
Faites glisser et déposez la boîte Réseau> Adaptateur MQTT de la bibliothèque de boîtes web-boxes
sur le panneau Diagramme de flux.
Cette boîte d'adaptateur MQTT utilise un module appelé paho, qui est automatiquement sous projet lorsque vous faites glisser et déposez la boîte d'adaptateur MQTT. Il est conçu pour être importé dans.
Liaisons de thèmes clés ... Correspondance entre les clés ALMemory et les rubriques MQTT. Les détails seront décrits plus tard
Les détails de la méthode de définition et de l'exemple d'exécution seront expliqués ci-dessous.
Le paramètre Liaisons de rubrique clé dans la zone Adaptateur MQTT vous permet de spécifier quelle valeur de clé dans ALMemory doit être associée à quelle valeur de rubrique dans MQTT.
Les correspondances sont spécifiées en les séparant par ʻALMemory key: MQTT topicet ainsi de suite. Plusieurs correspondances peuvent être définies en les séparant par
;`.
En ajoutant / #
à la fin du nom de la clé et du nom du sujet, vous pouvez spécifier les sujets clés suivants à la fois. Par exemple
TestMQTT / Hoge / #: test-yacchin1205 / Hoge / #
etc., si vous émettez un événement avec un nom commençant par TestMQTT / Hoge /
dans ALMemory, par exemple, TestMQTT / Hoge / A
, le MQTT sera Un message sera envoyé au sujet test-yacchin1205 / Hoge / A
--Vous pouvez vous abonner au sujet test-yacchin1205 / Hoge / B
de MQTT en vous abonnant à l'événement TestMQTT / Hoge / B
de ALMemory.Vous pouvez également définir des conversions de valeurs en définissant ʻALMemory key: MQTT topic: type`, etc.
--Si vous ne spécifiez pas de type, la valeur ne sera pas convertie lors de la conversion d'événement ALMemory-MQTT et la valeur sera envoyée avec le même type. Par conséquent, si l'événement a une valeur d'un type qui ne correspond pas à la charge utile MQTT, son émission peut échouer.
--Si le type est str
, il sera converti en type chaîne de caractères au moment de la conversion ALMemory → MQTT. Il en va de même pour MQTT → AL Memory
--Si le type est json
, vider dans json au moment de la conversion ALMemory → MQTT. Json est analysé lors de la conversion de MQTT vers ALMemory.
Voici un exemple de son utilisation ...
Vous pouvez lancer une valeur d'un autre appareil dans ALMemory de Pepper via l'adaptateur MQTT et l'utiliser pour faire quelque chose comme Say Text. Voir ** samples / mqtt-say-text ** sur GitHub pour des exemples.
Placez et installez le boîtier de l'adaptateur MQTT. Cette fois à titre d'exemple
--Utilisez test.mosquitto.org pour MQTT Broker
--Définir la rubrique MQTT test-yacchin1205 / sample1 / Message
à interconnecter avec ALMemory MQTT / Test / Sample1 / Message
Créez une entrée dans le diagramme de flux pour vous abonner à l'événement MQTT / Test / Sample1 / Message
et connectez-le à la zone Say Text.
À titre de test, avec cette application en cours d'exécution, essayez de lancer un message à MQTT avec la commande mosquitto_pub installée sur votre Raspberry Pi.
Par exemple, si vous lancez une rubrique test-yacchin1205 / sample1 / Message
(ALMemory dans MQTT / Test / Sample1 / Message
) au message Hello de `` MQTT est comme suit.
pi@raspberrypi ~ $ mosquitto_pub -h test.mosquitto.org -t test-yacchin1205/sample1/Message -Bonjour de m MQTT
La zone Say Text répondra alors via ALMemory.
En passant par MQTT de cette manière, vous pouvez facilement lancer des instructions à Pepper depuis l'extérieur de Pepper.
Comme présenté dans Agrégation de la vérification de l'état et du fonctionnement d'IRKit et de Philips Hue avec MQTT, Hue chez moi peut être utilisé via MQTT. ..
Cette fois, j'écrirai un exemple qui contrôle l'éclairage de la lampe de Hue en caressant la tête de Pepper.
À la maison, ʻusername / hue / xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx (bridge UDN) / light / x (light ID) / status` En lançant des données JSON sur le sujet, l'état d'éclairage de la lumière peut être modifié comme suit. J'essaye de le contrôler.
username/hue/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/light/x/status {"on": true, "saturation": 254, "brightness": 204, "hue": 34297}
Ici, si vous donnez une valeur liée à l'état d'éclairage de Hue à ALMemory, vous voulez changer l'état de Hue, mais si vous donnez de telles données JSON (dict), dans ALMemory `[[" on ", True] , ["saturation", 254], ["luminosité", 204], ["teinte", 34297]] ʻest automatiquement converti.
Créez l'application comme suit. Des informations telles que l'identifiant et le mot de passe seront incluses, donc seulement un aperçu ...
Puisque nous essayons de publier des événements Hue sous le sujet ʻusername / hue / , configurez tous ces sujets pour qu'ils s'interconnectent avec des clés commençant par
MQTT / Hue / dans ALMemory. Le format est
json`
Place Sensing> Touch> Tactile Head box et nouvelle boîte Python (Hue On, Hue Off), Programmation> Memory> Raise Event box
La case Hue On doit afficher une valeur qui active Hue.
def onInput_onStart(self):
self.onStopped([["on", True], ["saturation", 254], ["brightness", 204], ["hue", 34297]])
Dans la zone Hue Off, indiquez une valeur qui désactive Hue.
def onInput_onStart(self):
self.onStopped([["on", False], ["saturation", 254], ["brightness", 204], ["hue", 34297]])
Connectez la boîte Événement d'augmentation à la boîte Hue On et Hue Off, et spécifiez la clé correspondant au pont et à la lumière Hue.
Avec cela seul, toucher l'avant de la tête transmettra les données d'instructions d'éclairage au programme de commande Hue Bridge via MQTT, et la lampe peut être allumée et éteinte en touchant l'arrière.
Dans Creating a Tweet Box for Pepper, j'ai écrit une méthode pour inclure un module Python (.py) dans un projet et l'importer depuis une boîte Python. Cette procédure nécessite des procédures telles que la copie de fichiers lors de la création d'un projet, et elle est un peu gênante à utiliser pour l'implémentation. ** Ce serait bien d'avoir un mécanisme pour conserver les fichiers de ces modules Python dans la bibliothèque de boîtes afin que lorsque vous copiez la boîte dans votre projet, vous puissiez également copier le code Python ensemble **.
Cette fois, nous y sommes parvenus en utilisant le mécanisme de ** fichier joint **. Si vous regardez le contenu de la boîte de l'adaptateur MQTT, vous constaterez que la boîte d'implément de l'adaptateur MQTT de la boîte Python est en fait à l'intérieur.
Dans cette boîte, il y a des variables de type [Attachment] appelées LibFile1, ..., LibFile4. Ici, j'ai spécifié les fichiers que je souhaite inclure lors de la copie de la bibliothèque de boîtes vers le comportement.
En faisant cela, les fichiers sous / paho / ...
seront copiés lorsqu'ils seront copiés de la bibliothèque de boîtes vers le comportement.
J'ai volontairement créé la boîte MQTT Adapter Impl en tant qu'enfant de la boîte MQTT Adapter parce que je ne voulais pas montrer les éléments liés à ces pièces jointes aux utilisateurs de la boîte (pour éviter toute confusion, etc.).
Pour l'instant, cela semble fonctionner correctement, mais lors de la création d'une bibliothèque de boîtes, lors de la copie d'un comportement vers une bibliothèque de boîtes, le chemin du fichier joint ressemble au chemin relatif dans le projet (et non au chemin relatif dans le comportement). Il peut y avoir des pièges et il peut y avoir d'autres pièges, donc cette fois il ne s'agit que d'un essai.
Grâce au support MQTT de Hue et IRKit, j'ai senti qu'il serait plus facile de lier des applications à l'aide de MQTT, j'ai donc créé une boîte qui peut gérer MQTT même avec Pepper et en ai fait un formulaire qui peut être distribué sous forme de bibliothèque de boîtes.
Je l'ai fait sans penser au chiffrement pour le moment, mais je veux toujours prendre en charge TLS. Je vais le mettre à jour sur GitHub, alors jetez un œil. De plus, les demandes d'extraction sont les bienvenues.
Cependant, les modèles PubSub comme MQTT sont sympas de pouvoir coder librement la communication entre les nœuds, mais si je flirtais et écrivais divers codes, j'ai accidentellement créé du code qui envoie des messages de ping-pong, et en un clin d'œil 10000 Il y a aussi eu une tragédie comme l'envoi d'un message ou le manque d'emplacements gratuits. Je pense qu'il serait peut-être préférable de configurer un courtier MQTT par vous-même en utilisant Mosquitto pour les tests.