[PYTHON] Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet

Es scheint, dass Sie neulich gelesen haben Zusammenfassen der Statusbestätigung und des Betriebs von IRKit und Philips Hue mit MQTT, und schließlich ist IoT heiß. Ich habe ein Gefühl.

Lassen Sie uns diesmal über MQTT mit Pepper sprechen. Dieses Mal hatte ich das Gefühl, dass ** "Wenn Sie den Speichermechanismus (AL Memory) und MQTT miteinander verbinden, können Sie problemlos eine Cloud-Kooperation oder eine externe Kooperationsanwendung schreiben", also habe ich eine solche Box erstellt **.

Suna hat es bereits mit MQTT mit Pepper versucht, daher habe ich es als Referenz verwendet. Es ist sehr sorgfältig organisiert, daher finden Sie hier den technischen Hintergrund und die Elemente.

Übrigens gibt es einige persönliche Tipps, wie Sie das Modul, das das Modul verwendet, einfach in der Python-Box mit der Box-Bibliothek verteilen können. Ich mache es als individuelle Entwicklung bis zuletzt, aber da ich alles getan habe, möchte ich aufschreiben, wie man es benutzt und wie man darüber nachdenkt.

Mit ALMemory, MQTT, Pub / Sub-Modell

NAOqi ist die Software-Grundlage von Pepper und im Zentrum dieses Frameworks steht ein Modul namens ** ALMemory **. Es unterstützt das Auslösen von Ereignissen, das Abonnieren von Ereignissen, das Einstellen und Abrufen von Werten usw. sowie das Überwachen von Sensoren und das Abrufen von Werten aus Anwendungen über dieses Modul. Es ist dafür gedacht. (Einzelheiten finden Sie unter [Ereignis- und Werterfassung über 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 Siehe ungefähr% BE% 97))

Auf der anderen Seite, ** MQTT **, wie Sie aus Mr. Shiguredos Weitere Informationen zu MQTT ersehen können, geben verschiedene Geräte Nachrichten aus und Mit diesem Protokoll können Sie Nachrichten abonnieren, die von einem anderen Gerät ausgegeben wurden. Verschiedene Geräte können Nachrichten über den sogenannten MQTT-Broker veröffentlichen und abonnieren.

Diese Modelle, wie das Ausgeben und Abonnieren von Nachrichten, werden als Pub / Sub-Modelle bezeichnet, aber sowohl ALMemory als auch MQTT sind ** dasselbe Modell, und ich bin sicher, dass sie eine hohe Affinität ** haben. Deshalb.

Pfeffer und Wolke

Ich habe bei Veranstaltungen usw. mit Pepper zusammengearbeitet, und das Gefühl, dass "durch die Verknüpfung von Pepper mit verschiedenen externen Diensten nicht nur Pepper selbst, sondern auch der Wert des Dienstes weiter gesteigert wird", wird immer stärker. Ich werde.

Jeder Dienst bietet eine sehr praktische Client-Bibliothek, aber es ist ziemlich schwierig, diese Bibliotheken direkt aus der Box-Bibliothek zu verwenden, die von Peppers Entwicklungstool Choregraphe bereitgestellt wird, und in vielen Fällen gibt es eine Codierungswand. Ich kann es nicht vermeiden. Obwohl NAOqi eine auf Python basierende Ausführungsumgebung ist, ist es eine Umgebung, in der das Codieren einfach ist, da Paketverwaltungstools wie pip nicht frei verwendet werden können und es Dinge wie "NAOqi-spezifische Manieren" gibt. Die aktuelle Situation ist, dass dies nicht der Fall ist.

Obwohl die CPU und der Speicher von Pepper für den allgemeinen Verkauf verbessert wurden, ist es außerdem erforderlich, die Rechenleistung für eine autonome Steuerung wie Sicherheit und Teile wie Emotionskarten zu verwenden, und es ist auch möglich, die Berechnung mit der Anwendung zu verteilen. Es scheint ein Problem zu geben. Es scheint, dass umfangreiche Berechnungen wie die Erkennungsverarbeitung in der Cloud oder auf einem Server außerhalb von Pepper berücksichtigt werden müssen.

MQTT-Adapterbox: ALMemory-MQTT-Verbindung Pepper-Cloud-Verknüpfung

Aus diesem Grund dachte ich, dass durch die Verbindung von ALMemory und MQTT eine einfache Verbindung mit externen Systemen wie der Cloud nur mit der Box möglich ist, die ALMemory verwaltet.

image

Ich denke, es wäre interessant, sich so bewegen zu können.

MQTT Adapter Box: Verwendung

Deshalb habe ich die MQTT Adapter Box gemacht.

Ich versuche, es derselben Box-Bibliothek wie die vorherige Mit qi Framework umgeschriebene Event-Box abonnieren hinzuzufügen. GitHub ist unten

Das Verzeichnis ** web-boxen ** ist die Box-Bibliothek. Ich werde erklären, wie die Box-Bibliothek geladen und verwendet wird.

Laden der Boxbibliothek

Um die MQTT Adapter-Box in Ihrer App zu platzieren, müssen Sie zuerst die Box-Bibliothek in Choregraphe öffnen. Mach Folgendes:

  1. Wählen Sie im Bereich [Box Library] die Option [Open Box Library].

    BoxLib_Open.png

  2. Wählen Sie ** Webboxen-Verzeichnis ** aus den von GitHub heruntergeladenen oder geklonten Verzeichnissen.

    BoxLib_OpenDir.png

Beachten Sie, dass Sie als Dateityp "Box Library Directories" auswählen müssen.

  1. ** Web-Box-Box-Bibliothek ** wird im Box-Bibliotheksfenster angezeigt

    BoxLib_Loaded.png

Sie können jetzt die Webbox-Box-Bibliothek verwenden, die die MQTT-Adapter-Box enthält.

Platzierung der MQTT-Adapterbox

Das Feld Netzwerk> MQTT-Adapter in der Box-Bibliothek für Webboxen wird wie folgt verwendet.

  1. Ziehen Sie das Feld Netzwerk> MQTT-Adapter per Drag & Drop aus der Box-Bibliothek "Web-Boxen" in das Bedienfeld "Flussdiagramm".

    MQTTAdapter_DnD.png

Diese MQTT-Adapterbox verwendet ein Modul namens paho, das beim Ziehen und Ablegen der MQTT-Adapterbox automatisch im Projekt ist. Es ist für den Import in konzipiert.

  1. Öffnen Sie das Einstellungsdialogfeld des MQTT-Adapters und stellen Sie die folgenden Parameter ein Die folgenden Werte können eingestellt werden. --Host ... MQTT Broker-Hostname --Port ... MQTT Broker-Portnummer
  1. Starten Sie die MQTT-Adapterbox zum richtigen Zeitpunkt --Startverbindung zwischen MQTT und ALMemory mit onStart-Eingang ... Nach dem Ausführen des Verbindungsprozesses wird der onConnected-Ausgang ausgelöst. Danach wird die Ereignisweiterleitung zwischen ALMemory und MQTT ausgeführt, bis onStop eingegeben wird.

Die Details der Definitionsmethode und des Ausführungsbeispiels werden unten erläutert.

Schlüsseldefinierende Themenkorrespondenz

Mit der Einstellung Schlüsselthemenbindungen im Feld MQTT-Adapter können Sie angeben, welcher Schlüsselwert in ALMemory welchem Themenwert in MQTT zugeordnet werden soll.

Entsprechungen werden durch Trennen mit "ALMemory-Schlüssel: MQTT-Thema" usw. angegeben. Sie können mehrere Entsprechungen definieren, indem Sie sie durch ; trennen.

Durch Hinzufügen von / am Ende des Schlüsselnamens und des Themennamens können Sie die folgenden Schlüsselthemen gleichzeitig angeben. Zum Beispiel

Sie können auch Wertkonvertierungen definieren, z. B. "ALMemory-Schlüssel: MQTT-Thema: Typ".

Unten finden Sie ein Beispiel für die Verwendung ...

Übergeben eines Werts von MQTT an Pepper Beispiel: Sagen Sie Pepper Anweisungen von einem anderen Gerät

Sie können einen Wert von einem anderen Gerät über den MQTT-Adapter in Peppers ALMemory werfen und damit etwas wie Say Text ausführen. Beispiele finden Sie unter ** samples / mqtt-say-text ** auf GitHub.

  1. Platzieren und setzen Sie die MQTT-Adapterbox. Diesmal als Beispiel
  1. Erstellen Sie eine Eingabe im Flussdiagramm, um das Ereignis "MQTT / Test / Sample1 / Message" zu abonnieren, und verbinden Sie es mit dem Feld "Text sagen".

    mqtt-say-text_flow.png

Versuchen Sie als Test, während diese App ausgeführt wird, eine Nachricht an MQTT zu senden, wobei der Befehl mosquitto_pub auf Ihrem Raspberry Pi installiert ist. Wenn Sie beispielsweise ein Thema "test-yacchin1205 / sample1 / Message" (ALMemory in "MQTT / Test / Sample1 / Message") auf die Nachricht "Hallo" von "MQTT" werfen, lautet dies wie folgt.

pi@raspberrypi ~ $ mosquitto_pub -h test.mosquitto.org -t test-yacchin1205/sample1/Message -Hallo von m MQTT

Das Feld Text sagen antwortet dann über ALMemory.

mqtt-say-text_robotview.png

Wenn Sie MQTT auf diese Weise durchlaufen, können Sie problemlos Anweisungen von außerhalb von Pepper an Pepper senden.

Übergeben eines Werts von Pepper an MQTT Beispiel: Steuern des Farbtons von Pepper

Wie in Aggregieren der Statusbestätigung und des Betriebs von IRKit und Philips Hue mit MQTT beschrieben, kann Hue bei mir zu Hause über MQTT betrieben werden. ..

Dieses Mal werde ich ein Beispiel schreiben, das die Beleuchtung von Hues Lampe durch Streicheln von Peppers Kopf steuert.

Korrespondenz zwischen MQTT und Hue

Zu Hause können Sie den Beleuchtungsstatus des Lichts ändern, indem Sie JSON-Daten in das unten gezeigte Thema "Benutzername / Farbton / xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx (Brücken-UDN) / Licht / x (Licht-ID) / Status" werfen. Ich versuche es zu kontrollieren.

username/hue/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/light/x/status {"on": true, "saturation": 254, "brightness": 204, "hue": 34297}

Wenn Sie ALMemory einen Wert für den Beleuchtungsstatus von Hue geben, möchten Sie den Status von Hue ändern. Wenn Sie jedoch solche JSON-Daten (dikt) angeben, geben Sie in ALMemory `[[" on ", True] , ["Sättigung", 254], ["Helligkeit", 204], ["Farbton", 34297]] wird automatisch konvertiert.

App erstellen

Erstellen Sie die App wie folgt. Informationen wie ID und Passwort werden mitgeliefert, daher nur eine Übersicht ...

  1. Platzieren und setzen Sie die MQTT-Adapterbox
  1. Platzieren Sie Sensing> Touch> Tactile Head Box und neue Python Box (Hue On, Hue Off), Programming> Memory> Raise Event Box

    pepper-hue_flow.png

  2. Das Feld Farbton ein sollte einen Wert ausgeben, der den Farbton aktiviert.

    def onInput_onStart(self):
        self.onStopped([["on", True], ["saturation", 254], ["brightness", 204], ["hue", 34297]])
    
  3. Das Feld Farbton aus sollte einen Wert ausgeben, der den Farbton ausschaltet.

    def onInput_onStart(self):
        self.onStopped([["on", False], ["saturation", 254], ["brightness", 204], ["hue", 34297]])
    
  4. Verbinden Sie das Feld "Ereignis auslösen" mit dem Feld "Farbton ein" und "Farbton aus" und geben Sie den Schlüssel an, der der Farbtonbrücke und dem Licht entspricht.

    pepper-hue_eventname.png

Wenn Sie nur die Vorderseite des Kopfes berühren, werden die Beleuchtungsanweisungsdaten über MQTT an das Steuerprogramm der Hue Bridge übertragen, und die Lampe kann durch Berühren der Rückseite ein- und ausgeschaltet werden.

Kleine Geschichte: Fügen Sie Python-Code in die Box-Bibliothek ein

In Erstellen einer Tweet-Box für Pepper habe ich eine Methode geschrieben, um ein Python-Modul (.py) in ein Projekt aufzunehmen und aus einer Python-Box zu importieren. Dieses Verfahren erfordert Verfahren wie das Kopieren von Dateien beim Erstellen eines Projekts und ist für die Implementierung etwas mühsam. ** Es wäre schön, einen Mechanismus zu haben, mit dem die Dateien dieser Python-Module in der Box-Bibliothek gespeichert werden können, sodass Sie beim Kopieren der Box in Ihr Projekt auch den Python-Code zusammen kopieren können **.

Dieses Mal haben wir dies mithilfe des Mechanismus ** angehängte Datei ** erreicht. Wenn Sie sich den Inhalt der MQTT-Adapter-Box ansehen, werden Sie feststellen, dass sich die MQTT-Adapter-Impl-Box der Python-Box tatsächlich darin befindet.

python-module-attach-1.png

In diesem Feld befinden sich Variablen vom Typ [Anhang] mit den Namen LibFile1, ..., LibFile4. Hier habe ich die Dateien angegeben, die beim Kopieren aus der Box-Bibliothek in das Verhalten eingeschlossen werden sollen.

python-module-attach-2.png

Auf diese Weise werden die Dateien unter "/ paho / ..." kopiert, wenn sie aus der Box-Bibliothek in das Verhalten kopiert werden.

Ich habe die MQTT-Adapter-Impl-Box absichtlich als untergeordnetes Element der MQTT-Adapter-Box erstellt, weil ich den Box-Benutzern die mit diesen Anhängen verbundenen Elemente nicht anzeigen wollte (um Verwirrung usw. zu vermeiden).

Im Moment scheint es gut zu funktionieren, aber beim Erstellen einer Box-Bibliothek, beim Kopieren von einem Verhalten in eine Box-Bibliothek, sieht der Pfad der angehängten Datei wie der relative Pfad im Projekt aus (nicht der relative Pfad im Verhalten). Es kann einige Fallstricke geben und es kann andere Fallstricke geben, also ist es diesmal nur ein Versuch.

Zusammenfassung

Durch die MQTT-Unterstützung von Hue und IRKit hatte ich das Gefühl, dass es einfacher ist, Apps mithilfe von MQTT zu verknüpfen. Deshalb habe ich eine Box erstellt, die MQTT auch mit Pepper verarbeiten kann, und sie zu einem Formular gemacht, das als Box-Bibliothek verteilt werden kann.

Ich habe es getan, ohne vorerst über Verschlüsselung nachzudenken, aber ich möchte weiterhin TLS unterstützen. Ich werde es auf GitHub aktualisieren, also schauen Sie bitte. Pull-Anfragen sind ebenfalls willkommen.

PubSub-Modelle wie MQTT sind jedoch gut geeignet, um die Kommunikation zwischen Knoten frei codieren zu können. Wenn ich jedoch verschiedene Codes flirtete und schrieb, habe ich versehentlich Code für Ping-Pong-Nachrichten und im Handumdrehen 10000 erstellt Es gab auch eine Tragödie wie das Senden einer Nachricht oder das Auslaufen freier Plätze. Ich bin der Meinung, dass es möglicherweise besser ist, einen MQTT-Broker selbst einzurichten, indem Sie Mosquitto zum Testen verwenden.

Recommended Posts

Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte, ein Tool zu erstellen, das auf Mac und Windows auf der Spieleentwicklungsseite ausgeführt wird
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Die Geschichte eines Mel-Icon-Generators
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte des Exportierens eines Programms
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Dies und das der Einschlussnotation.
Die Geschichte einer unveränderlichen Form
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
Die Geschichte, einen Slackbot zu erstellen, der beim Senden des Verarbeitungscodes ein GIF oder PNG ausgibt
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte der Schaffung einer (wahrscheinlich) minimalen Fertigkeit, die Personalisierung und Abrechnung von Fertigkeiten implementiert
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Die Geschichte der Herstellung des Mel Icon Generator Version 2
Berücksichtigung der Stärken und Schwächen von Python
Die Geschichte von Airflows Webserver und DAG, deren Laden lange dauert
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
Eine Geschichte, die Seaborn einfach, bequem und beeindruckt war
Die Geschichte des Starts eines Minecraft-Servers von Discord
[Python] Ein Programm, das die Anzahl der Täler zählt
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Ich habe ein Schwellenwertänderungsfeld für Peppers Dialog erstellt
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Eine Geschichte über das Ausprobieren von pyenv, virtualenv und virtualenvwrapper
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Ein Server, der mit Flasche.py und OpenCV die Anzahl der Personen vor der Kamera zurückgibt
Die Geschichte der Schaffung eines "Geist- und Zeit-Chatrooms" exklusiv für Ingenieure im Unternehmen
Eine Bibliothek, die Leben und Tod anderer Maschinen durch Ping von Python aus überwacht
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Eine Geschichte über die Portierung des Codes "Versuchen Sie zu verstehen, wie Linux funktioniert" nach Rust
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Die Geschichte von sys.path.append ()
Ein Werkzeug, das die Gacha von Soshage automatisch dreht
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Holen Sie sich die ID einer GPU mit geringer Speichernutzung
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse