最近、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 を!