特大ペッパソン2016 用のメモ
ニフティクラウド IoTデバイスハブ とは
クラウド 機能・サービス(IoTデバイスハブ) | ニフティクラウド より
ニフティクラウド IoTデバイスハブは、IoTデバイスのクラウド接続、デバイス/ユーザーの管理など、IoTデバイスの運用に必要なバックエンド機能をクラウドで提供いたします。
デバイスからMQTTやREST API経由でイベントデータを蓄積したり、
アプリからデバイスを操作するためにコマンドを送信したり、
それをスマートモジュールと連携して他サービスと組み合わせたりして
IoTサービスを始めるときのバックエンドとして活用できるクラウドサービスです。
提供されているSDKは以下の通りです。
- モバイル向け: iOS / Android
- デバイス向け: Node.js / C++ / Texas Instruments CC3200 / Android
SDKが提供されていない言語でも、ドキュメントを読めば簡単にAPI経由でのイベント送信ができます
(ざっくりいうと、headerにAPIキーを付与するくらいです)
ということで、Choregrapheを使ってPepperくんアプリを開発するときは、
どうやってイベントデータ送信のboxを作ればいいかやってみました
準備するもの
- choregraphe
- requestsモジュール
- pepperに外部モジュール追加してみる。とりあえずrequestsで。 - Qiitaを参考に、choregrapheプロジェクトのlibフォルダにインストール
- ニフティクラウド IoTデバイスハブのプロジェクト
- クラウドユーザーガイド(IoTデバイスハブ:プロジェクトの作成) | ニフティクラウド を参考にプロジェクト、デバイスクラス、デバイスを追加してください
- 追加したデバイスのクレームモードを有効にしてください
pythonのコードサンプル
以下のコードがrequestsモジュールを利用してAPI経由でイベント送信を行うものです。
- ヘッダーに認証情報を設定してください
- イベント送信用のエンドポイントにはデバイスIDを指定する必要があります
-
_YOUR_API_KEY_
/_YOUR_DEVICE_ID_
は、デバイス作成時に表示されるものに書き換えてください - イベント送信はputメソッドで行います
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.framemanager = ALProxy("ALFrameManager")
self.folderName = None
def onUnload(self):
import sys
if self.folderName and self.folderName in sys.path:
sys.path.remove(self.folderName)
self.folderName = None
def onInput_onStart(self):
#libフォルダにあるライブラリをパスに追加する
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)
import json
import requests
#デバイスハブに送信するデータ
payload={ 'eventType':'foo', 'eventData': {'text':'value'}}
#ヘッダー情報
headers={'Authorization':'ModeCloud _YOUR_API_KEY_', 'Content-Type':'application/json'}
#イベント送信を行う
r = requests.put('https://iot-device.jp-east-1.api.cloud.nifty.com/devices/_YOUR_DEVICE_ID_/event', data=json.dumps(payload), headers=headers, verify=False)
if r.status_code == 204 :
self.logger.info("success")
else:
self.logger.info(r.json())
def onInput_onStop(self):
self.onUnload()
self.onStopped()