[PYTHON] Richten Sie Ihren eigenen Webserver in Ihrem Pepper-App-Projekt ein

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.

Ziel

Dieser Artikel richtet sich an Personen, die mit Peppers Entwicklungsumgebung Choregraphe vertraut sind und Kenntnisse über Python-Programme haben.

Überblick

Pepper verfügt standardmäßig über eine Webserverfunktion, und Sie können von einem PC usw. unter http: // / apps / app ID / auf die Ressourcen im HTML-Ordner der App zugreifen. Dies hat jedoch die folgenden Einschränkungen:

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.)

Beispielcode

Ich habe einen Beispielcode erstellt. Bringen Sie das Python-Skriptfeld und bearbeiten Sie den darin enthaltenen Code.

スクリプトエディタ_と_MyWebServer_-_Choregraphe__バーチャルロボットに接続_.jpg

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: // : 8000 / darauf zuzugreifen. Ihr Browser sollte "Dies ist eine Testantwort" sagen.

Erläuterung des Beispielcodes

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.

Schließlich

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

Richten Sie Ihren eigenen Webserver in Ihrem Pepper-App-Projekt ein
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Docker ausprobieren: Erstellen Sie Ihr eigenes Container-Image für eine Python-Web-App
Richten Sie mit http.server in Python 3 in 30 Sekunden einen lokalen Webserver ein
Richten Sie mit Docker einen Samba-Server ein
Portweiterleitung eines Webservers mithilfe von iptables
Erstellen Sie mit Twisted Ihren eigenen DNS-Server
Richten Sie mit Twisted einen Mailserver ein
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Ist Ihr Netzwerkstapel richtig eingerichtet?