[PYTHON] Protokollnachrichtenverarbeitung auf Pepper-Tablets

Peppers Tablet verfügt über Android 4.0.4, auf dem der Webbrowser ausgeführt wird. Wahrscheinlich scheint es der Android-Standardbrowser zu sein, und JavaScript usw. (obwohl es 4.0.4 ist, kann es schwierig sein) funktioniert. Selbst wenn Sie die Standardbox usw. verwenden, ist die Protokollumgebung etwas schlecht und die Entwicklung scheint schwierig zu sein. Deshalb habe ich einige ausprobiert, also dieses Memo.

Den Testcode für diese Zeit finden Sie unter https://github.com/yacchin1205/pepper-tablet.

Definieren Sie Tablet-Inhalte in Ihrer Anwendung

Lassen Sie uns zunächst kurz zusammenfassen, wie Sie Ressourcen für Tablets in Ihrer Anwendung definieren. Grundsätzlich wie in Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf einem Tablet an.

  1. Erstellen Sie einen HTML-Ordner in Ihrer Anwendung und fügen Sie index.html und andere erforderliche Ressourcen ein.

    html-resources.png

  2. Platzieren Sie das Feld App anzeigen in der Tablet-Box-Bibliothek. Grundsätzlich sind nur die folgenden Felder in Ordnung

    pepper-load-app-box.png

Bei der Version von Choregraphe, die auf Pepper TechFes 2014 verteilt wird, gibt es jedoch ein Problem mit der Pfadkonfiguration, die von der Tablet-Box angenommen wird. -Akihabara / items / 87def938b6553ee9c1e9 #% E8% A3% 9C% E8% B6% B3show-image% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9% E3% 81% AE% E5% AE% 9F% E8% A3% 85% E3% 82% 92% E3% 81% BF% E3% 81% A6% E3% 81% BF% E3% 82% 8B) Das Verarbeitungsteil muss geändert werden.

Sie sollten nun den in index.html definierten Inhalt auf Ihrem Tablet sehen. Das Anzeigen des Inhalts selbst ist relativ einfach.

Die Atmosphäre des "HTML" -Verzeichnisses in der Anwendung ähnelt der "public_html" des Home-Verzeichnisses des Benutzers, das über den Webserver sichtbar ist. Es scheint, dass der lokale Webserver in Pepper über den Browser des Tablets referenziert werden kann.

Erhalten Sie Nachrichten, die in Ihrem Tablet-Browser auftreten

Selbst wenn in JavaScript ein Fehler auftritt, wird im Choregraphe-Protokoll standardmäßig nichts gesagt. Selbst wenn ein Fehler auftritt, weiß ich es überhaupt nicht. Dies ist eine schmerzhafte Entwicklung, daher sollten Sie den Fehler protokollieren oder den Status mit "console.log" ausgeben.

Außerdem habe ich diesmal versucht, die folgenden Inhalte auf dem Tablet anzuzeigen und zu testen. Es gibt Schaltflächen, die absichtlich einen Fehler auslösen, und Schaltflächen, die "console.log" aufrufen, wie unten gezeigt.

chrome-html.png

Nun, ich möchte so etwas wie Chrome Developer Tools wie den Screenshot, aber trotzdem wird nur das Protokoll ausgegeben ...

Get in Memory-Ereignis

Wenn Sie sich angesichts der Architektur von NAOqi das API-Dokument ansehen und sich fragen, ob das Protokoll als Speicherereignis angezeigt wird, werden Sie vorerst ein großartiges finden.

Event: "ALTabletService/message" callback(std::string eventName, std::string subscriberIdentifier)

Raised when message occurs.

Wenn Sie beim Überwachen von "ALTabletService / message" mit einem Speicher-Watcher absichtlich einen Fehler im Inhalt machen, sieht dies folgendermaßen aus.

webview-logview.png

Umm ...!

Nun, es ist etwas schwierig zu überprüfen, ob es sich nur um einen Speicherbeobachter handelt (wahrscheinlich wird nur das letzte Ausgabeprotokoll angezeigt). Die Menschheit ist das, was Sie dazu bringt, es zumindest im Log Viewer zu sehen.

Stream zum Protokollieren

Als ich mir die API-Dokumentation ansah, fand ich etwas namens "ALTabletService :: onConsoleMessage (message)". Es scheint, dass die Erfassung von Berührungsereignissen der Tablet-Box-Bibliothek über diesen Signalmechanismus erfolgt, und die Verarbeitung mit diesem Signal scheint der AL TabletService-API-Stil zu sein. Also habe ich das Feld App anzeigen wie folgt geändert.

Sie finden die geänderte Version des Codes im Webview-Console-Projekt auf Github, wo ich ihn zuerst geschrieben habe.

Fügen Sie die consoleMessageCallback-Methode hinzu

Erstellen Sie eine Methode zum Empfangen der Konsolennachricht. Fügen Sie den folgenden Code am Ende des Python-Skripts im Feld App anzeigen hinzu.

    def consoleMessageCallback(self, message):
        self.logger.info("[ConsoleMessage] %s" % message)

Wenn ich die Nachricht erhalte, verwende ich "self.logger", um das Protokoll auszugeben.

Ändern Sie die Methode onInput_onStart

Fügen Sie den folgenden Code hinzu, bevor Sie "tabletService.loadApplication" ausführen.

                #Starten Sie die Überwachung der Konsole
                if not self.consoleConnectId:
                    self.consoleConnectId = tabletService.onConsoleMessage.connect(self.consoleMessageCallback)

Jetzt können Sie "consoleMessageCallback" so einstellen, dass es auf "onConsoleMessage" reagiert.

Ändern Sie die Methoden onLoad und onUnload

Heben Sie die Registrierung des Handlers beim Entladen auf. Fügen Sie der Methode "onUnload" den folgenden Code hinzu.

        #Ende der Konsolenüberwachung
        if self.consoleConnectId:
            try:
                self._getTabletService().onConsoleMessage.disconnect(self.consoleConnectId)
                self.consoleConnectId = None
            except Exception as e:
                self.logger.error(e)

Initialisieren Sie außerdem die Mitglieder beim Laden. Fügen Sie der onLoad-Methode den folgenden Code hinzu.

        self.consoleConnectId = None

Bewegung

Wenn Sie das Projekt mit dieser Änderung ausführen, wird das Protokoll in der Protokollanzeige angezeigt. Wenn ein Fehler auftritt, sieht es so aus.

[INFO ] behavior.box :consoleMessageCallback:80 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1143658480__root__ShowApp_2: [ConsoleMessage] Uncaught TypeError: Cannot call method 'call' of null

Ich habe vergessen, es aufzunehmen, aber ich kann die Ausgabe von console.log sehen. Es ist nicht genug, aber ich denke, dies wird das Debuggen viel einfacher machen. Erwartet. Ich würde gerne damit spielen, wie viel es mit JavaScript auf Peppers Tablet funktioniert ...

Recommended Posts

Protokollnachrichtenverarbeitung auf Pepper-Tablets
Shell zur Überwachung von Protokollnachrichten