LoginSignup
2
2

More than 5 years have passed since last update.

ニフティクラウド IoTデバイスハブにイベントを送信するChoregrapheのboxサンプル

Posted at

特大ペッパソン2016 用のメモ

ニフティクラウド IoTデバイスハブ とは

クラウド 機能・サービス(IoTデバイスハブ) | ニフティクラウド より

ニフティクラウド IoTデバイスハブは、IoTデバイスのクラウド接続、デバイス/ユーザーの管理など、IoTデバイスの運用に必要なバックエンド機能をクラウドで提供いたします。

デバイスからMQTTやREST API経由でイベントデータを蓄積したり、
アプリからデバイスを操作するためにコマンドを送信したり、
それをスマートモジュールと連携して他サービスと組み合わせたりして
IoTサービスを始めるときのバックエンドとして活用できるクラウドサービスです。

IoTデバイスハブ概要

提供されているSDKは以下の通りです。

  • モバイル向け: iOS / Android
  • デバイス向け: Node.js / C++ / Texas Instruments CC3200 / Android

SDKが提供されていない言語でも、ドキュメントを読めば簡単にAPI経由でのイベント送信ができます
(ざっくりいうと、headerにAPIキーを付与するくらいです)

ということで、Choregrapheを使ってPepperくんアプリを開発するときは、
どうやってイベントデータ送信のboxを作ればいいかやってみました

準備するもの

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2