Ich möchte eine HTTP-Anfrage von außen an Pepper senden und diese als Auslöser verwenden, um etwas Pepper zu machen. Ich werde erklären, wie man so etwas erreicht.
Dieser Artikel richtet sich an Personen, die mit Peppers Entwicklungsumgebung Choregraphe vertraut sind und Kenntnisse über Python-Programme haben.
Pepper verfügt standardmäßig über eine Webserverfunktion, und Sie können von einem PC usw. unter http: //
Ich möchte eine HTTP-Anfrage auf der Pepper-Seite erhalten und Maßnahmen ergreifen. In diesem Fall müssen Sie Ihren eigenen Webserver vorbereiten. Python verfügt über ein Standardmodul zum Einrichten eines einfachen Webservers. Verwenden wir es also.
(Die hier vorgestellte Methode ist nur das Empfangen von HTTP-Anforderungen innerhalb des lokalen Netzwerks. Damit Pepper HTTP-Anforderungen direkt über das Internet empfangen kann, ist zu diesem Zweck ein spezieller Mechanismus erforderlich.)
Ich habe einen Beispielcode erstellt. Bringen Sie das Python-Skriptfeld und bearbeiten Sie den darin enthaltenen Code.
Unten finden Sie den Code für das Beispiel-Python-Skriptfeld.
python
import BaseHTTPServer
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.httpd = None
def onUnload(self):
if self.httpd is not None:
self.httpd.shutdown()
self.httpd.server_close()
def onInput_onStart(self):
#Portnummer zum Empfangen der HTTP-Anfrage http://Roboter IP:Port-Nummer/Erhalten Sie die Anfrage unter
PORT = 8000
MyHandler.setParent(self)
self.httpd = BaseHTTPServer.HTTPServer(('', PORT), MyHandler)
self.httpd.allow_reuse_address = True
self.httpd.serve_forever()
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped(p) #activate the output of the box
# BaseHTTPServer.Wird aufgerufen, wenn eine HTTP-GET-Anforderung über BaseHTTPRequestHandler vorliegt
#Das folgende Dokument enthält den Inhalt des http-Objekts
# http://docs.python.jp/2/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler
def do_GET(self, http):
#Bei Anfragen vom Browser ist favicon von der eigentlichen Anfrage getrennt.Anfrage an ico kommt, ignoriere dies
if http.path.endswith('favicon.ico'):
return;
self.logger.info("request url:" + http.path)
http.send_response(200)
http.send_header("Content-type", "text/plain")
http.end_headers()
http.wfile.write("This is a test response")
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
_parent = None
def do_GET(self):
MyHandler._parent.do_GET(self)
@staticmethod
def setParent(parent):
MyHandler._parent = parent
Versuchen Sie nach dem Ausführen der App, über einen Browser wie einen PC im selben LAN unter http: //
Die HTTP-Serverfunktion wird mithilfe des BaseHTTPServer-Moduls realisiert. In diesem Beispiel warten wir auf eine Anfrage an Port 8000. Wenn die onStart-Eingabe aufgerufen wird, wird der HTTP-Serverprozess erzeugt und auf die Anforderung gewartet, bis die Box entladen ist. (Das Entladen erfolgt, wenn die App geschlossen wird oder wenn sich die Box innerhalb der Diagrammbox oder innerhalb der Timeline-Box befindet, wenn die Box entfernt wird.)
Die Anforderung wird von der Instanz der MyHandler-Klasse gestellt, die zum Zeitpunkt der Instanziierung von BaseHTTPServer.HTTPServer angegeben wurde, aber ich wollte sie mit der Box-Verarbeitung verknüpfen.
python
MyHandler.setParent(self)
Zu diesem Zeitpunkt übergebe ich eine Instanz der Box zwangsweise an die Klasse, damit sie auf der Seite der Boxinstanz verarbeitet werden kann. Box-Methode
python
def do_GET(self, http):
Empfängt und verarbeitet HTTP-GET-Anforderungen. Dabei ist self die Instanz der Box und http die Instanz der BaseHTTPRequestHandler-Klasse, die die Anforderung empfangen hat.
python
self.logger.info("request url:" + http.path)
Geben Sie dann vorerst den Pfadteil der Anforderungs-URL in das Protokoll aus
python
http.send_response(200)
http.send_header("Content-type", "text/plain")
http.end_headers()
http.wfile.write("This is a test response")
Generiert eine HTTP-Antwort.
Weitere Informationen dazu, welche Informationen in der BaseHTTPRequestHandler-Instanz enthalten sind, finden Sie unter der folgenden URL.
http://docs.python.jp/2/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler
In diesem Beispiel wird programmgesteuert eine HTTP-Antwort generiert. Wenn Sie die Dateien im Projekt grundsätzlich zurückgeben möchten, wird die Implementierung basierend auf BaseHTTPRequestHandler SimpleHTTPRequestHandler-Klasse des SimpleHTTPServer-Moduls hinzugefügt. Ich denke, Sie sollten .html verwenden). Ich hoffe, Sie können hier je nach Anwendung verschiedene Dinge ausprobieren.
Wenn Pepper HTTP-Anforderungen dynamisch empfangen kann, ist es vom Standpunkt eines Web-API-Clients aus einfacher, eine Verbindung mit verschiedenen Geräten herzustellen, die über eine Schnittstelle verfügen. Ich hoffe, es hilft Ihnen auf neue Weise, Pepper zu verwenden.
Recommended Posts