PepperからPython Milkcocoa SDKを使ってpushしたメモ
最近、PepperとMilkcocoaを連携する機会がありましてPepperからPython Milkcocoa SDKを使ってpushしたメモです。
どうやらPythonをがんばればPepperと連携できることが分かる
まず、Pepper用Tweetボックスをつくる の記事を見て、どうやらPythonボックスでPythonを書けばPepperと連携できることが分かりました。
さらに、MQTT Publisher ボックスを作るの記事を参考にして、外部からPythonライブラリを入れればできることが分かりました。

Choregraphe2.5.5.5のバーチャルロボットで動かすようにしてみます。
ネットワークの検証であればバーチャルロボットでもできるので便利。
MilkcocoaにはPython SDKがある
そして、MilkcocoaにはPython SDKがあります。
milk-cocoa/python_sdk: Milkcocoa python sdk
まず、こちらのMilkcocoaのpython sdkをダウンロードして移植します。
pepperに外部モジュール追加してみる。とりあえずrequestsで。 - Qiita
こちらの記事を参考にして、

libフォルダにMilkcocoaライブラリ本体を入れてChoregrapheに読み込みます。

このように入りました。これでライブラリが使えるようになります。
Pythonボックスでpushのコードつくる

Pythonボックスで作っていきます。

起動するとWaitしたのちにPush Milkcocoaと書かれたPythonボックスに到達してメッセージを送るようにします。

あらかじめ、Milkcocoa側でアプリIDを確認しておきましょう。
ソースはこちらです。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.framemanager = ALProxy("ALFrameManager")
self.folderName = None
self.milkcocoaClient = None
self.datastore = None
def onUnload(self):
import sys
if self.folderName and self.folderName in sys.path:
sys.path.remove(self.folderName)
self.folderName = None
self.milkcocoaClient = None
self.datastore = None
self.logger.info("onUnload");
def onInput_onStart(self, p):
import sys, os
self.folderName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
if self.folderName not in sys.path:
sys.path.append(self.folderName)
for moduleName in os.listdir(self.folderName):
# モジュールのreload
if moduleName in sys.modules:
self.logger.info("Loaded: %s, %s" % (moduleName, sys.modules[moduleName].__file__))
reload(sys.modules[moduleName])
import milkcocoa.milkcocoa as milkcocoa
# MilkcocoaAppIDは自分のものに変更する
milkcocoaClient = milkcocoa.Milkcocoa.connect("MilkcocoaAppID", useSSL=False);
datastore = milkcocoaClient.datastore("python")
datastore.push({"content":"Hello"})
self.milkcocoaClient = milkcocoaClient;
self.datastore = datastore;
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
こちらをPythonボックスをダブルクリックしたスクリプトウィンドウに入れます。

動かしてみる

実際にバーチャルロボットを動かしてみます。

到達します。

Milkcocoaのデータストアを確認するとメッセージが送られています!
補足情報
SSL通信でハマる
セキュアだと良いだろうということで、一旦、デフォルトのMilkcocoaのSSL通信を試みましたがエラーがでてしまったので、以下の記事を参考にuseSSL=Falseで対応しました。
Milkcocoaのpython sdk使おうとしていろいろはまった話 | takemikami's note
Milkcocoa切断後の開放がうまくいかない?
また、今回のソースの場合、Milkcocoaに接続されるのは良いのですが、切断後の開放がうまくいかないようなので、コネクション数が実行するたびに増えるようです。これがバーチャルボックスで動かしているためにうまくいかないのか、実機だとうまく破棄されるのかは、まだ追いきれていないので、また機会があれば調べてみます。
まとめ
というわけでPepperからPython Milkcocoa SDKを使ってpushしてみました。
これができると、Pepperの手を握るとMilkcocoa側にデータが記録されて、クラウド上のさらなるアクションにつなげたり、Milkcocoaと相性の良いIoT機器とつなぐことで、面白い反応につなげることも可能だと思いました!
それでは、よきPepper & Python & Milkcocoa Life を!