まず、IoT デバイスまたはゲートウェイを FIWARE に接続する必要があります。これは基本的に、IoT デバイスの測定値が Context Broker に到達することを意味します。

このチュートリアルでは、Sensor ML (SML) 規格の簡素化を提案している Ultralight2.0 (UL2.0) を使用してデバイスを接続する方法と、それらのデバイスが測定 (観測) 値をFIWARE Lab の Context Broker に送信するようにします。この例では、シンプルさのために Ultralight2.0 が選択されています。さらに、IDAS UL2.0 IoT Agent を統合している FIWARE Tour Guide Application を使いローカル環境で同じことを行う方法を紹介します 。

仮想デバイスをすばやく接続またはシミュレートする場合は、FIGWAY を使うこともできます。これは、Python 2.7 環境をサポートしているデスクトップ PC、ラップトップ、またはゲートウェイ用のクライアント SDK として機能する単純な Python スクリプトのセットです。この方法で、以下に説明する手順をスキップし、上にリンクされている Github リポジトリにある README.md ファイルに記述されているように、python コマンドを使用することができます。

IDAS (FIWARE IoT Agent Suite) APIs の詳細については、こちらをご覧ください。

FIWARE を使用した一般的なIoTデータワークフローは、次の手順で構成されます:

手順1: IDAS サービスを作成

130.206.80.47 (Port 5073) で公開されているパブリック openiot テスト・サービスでパブリック IDAS インスタンスを使用している場合は、この手順を省略することができます。(デバイスが知る必要がある) このパブリックサービスの共有秘密は文字列 4jggokgpepnvsb2uv4s40d59ov であることに留意してください。 それ以外の場合、IDAS サービスの作成は、次のような単純な HTTP POST で構成されます:

POST http://130.206.80.40:5371/iot/services

Headers:

{
  'Content-Type':       'application/json',
  'X-Auth-Token' :      '[TOKEN]',
  'Fiware-Service':     'openiot',
  'Fiware-ServicePath': '/'
}

Payload:

{
  "services": [
    {
      "apikey":      "4jggokgpepnvsb2uv4s40d59ov",
      "cbroker":     "http://0.0.0.0:1026",
      "entity_type": "thing",
      "resource":    "/iot/d"
    }
  ]
}

0.0.0.0:1026 は Context Broker のプライベート・インスタンスに置き換えられるか、パブリック・インスタンスが同じ VM (130.206.80.40:1026) で実行されている場合は、その (0.0.0.0:1026) のままにしてください。apikey 文字列は、IoT デバイスが認識できるように共有秘密情報で更新する必要があります。ここでは、OAuth トークンを取得する簡単な方法について説明します。

同様に、FIWARE Tour Guide Application を使用して試してみることもできます。ローカルにインストールした場合は、次のリクエストを発行できます:

POST http://localhost:4041/iot/services/

Headers:

{
  'Content-Type':       'application/json',
  'Fiware-Service':     'tourguide',
  'Fiware-ServicePath': '/'
}

Payload:

{
  "services": [
    {
      "apikey":   "tourguide-devices",
      "cbroker":  "http://orion:1026",
      "resource": "/iot/dev-restaurants"
    }
  ]
}

ステップ2: IoT デバイスを登録

デバイスが測定値を送信したりコマンドを受け取ったりする前に、レジストレーションのオペレーションが必要です:

POST http://130.206.80.40:5371/iot/devices

Headers:

{
  'Content-Type':       'application/json',
  'X-Auth-Token' :      '[TOKEN]',
  'Fiware-Service' :    'openiot',
  'Fiware-ServicePath': '/'
}

Payload:

{
  "devices": [
    {
      "device_id":   "[DEV_ID]",
      "entity_name": "[ENTITY_ID]",
      "entity_type": "thing",
      "timezone":    "Europe/Madrid",
      "attributes": [
        {
          "object_id": "t",
          "name":      "temperature",
          "type":      "number"
        }
      ],
      "static_attributes": [
        {
          "name":  "attr_name",
          "type":  "string",
          "value": "value"
        }
      ]
    }
  ]
}

提供される重要なパラメータは次のとおりです:

  • entity_type Context Broker で使用されるエンティティタイプです。上記の例では、thing
  • entity_name Context Broker で使用されるエンティティ ID です。上記の例では、thing:[ENTITY\_ID]
  • attributes エイリアス (この属性を表す文字) を含める必要があります
  • static_attributes デバイスが静的属性を定義する必要がある場合のみ (各観測で送信されます)

同様に、Tour Guide Application を使用して、レストラン・エンティティにバインドされたデバイスを作成することができます。このような装置は、特定のレストランのために、周囲の測定値、例えば temperature を提供します。

POST http://localhost:4041/iot/devices/

Headers:

{
  'Content-Type':       'application/json',
  'Fiware-Service':     'tourguide',
  'Fiware-ServicePath': '/'
}

Payload:

{
  "devices": [
    {
      "device_id": "restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f",
      "protocol": "UL20",
      "entity_name": "0115206c51f60b48b77e4c937835795c33bb953f",
      "entity_type": "Restaurant",
      "attributes": [
        {
          "object_id": "t",
          "name":      "temperature",
          "type":      "number"
        }
      ]
    }
  ]
}

ステップ3: IoT デバイスに関する測定結果を送信

IoT デバイスからの測定結果の送信は、次の HTTP リクエストを使用すると非常に効率的で簡単です:

POST  http://130.206.80.40:5371/iot/d?k=[APIKEY]&i=[DEV_ID]

Headers:

{
  'Content-Type':  'text/plain',
  'X-Auth-Token' : '[TOKEN]'
}

Payload:

't|25'

前の例では、以前に IDAS サービスで定義された Context Broker と FIWARE Service の対応するエンティティに自動的に伝播する新しい温度測定値を送信します。[API_KEY] はサービスを作成するときに使用されたものでなければならず、かつ [DEV_ID] は以前に登録された装置識別子でなければなりません。

同様に、Tour Guide Application でも同じことができます:

POST http://localhost:7896/iot/d?k=tourguide-devices&i=restaurant-sensor-0115206c51f60b48b77e4c937835795c33bb953f

Headers:

{
  'Content-Type': 'text/plain',
}

Payload:

't|22.3'

次のペイロードで複数の測定値を同じメッセージで送信することもできます:

"alias1|value1#alias2|value2#alias3|value3..."

't|23#h|80#l|95#m|Quiet'

ステップ4: IoT デバイスから送信された測定値を読み込む

最後に、IoT デバイスを接続した後、適切なアクセス権を持つ開発者は Context Broker NGSI API を使用して、デバイスに割り当てられた NGSI エンティティをクエリできます。

最初の例では、パブリック FIWARE インスタンスを使用して、パブリック Context Broker (130.206.80.40:1026) に、Entity_ID =”thing:[ENTITY_ID]” および属性 temperature を正しい更新値でチェックインできます。

Tour Guide Application の例として、以下を実行することによって温度値が適切に伝播されたことを確認することができます (追加ヘッダを Fiware-Service: tourguide を使用します):

GET http://localhost:1026/v2/entities/0115206c51f60b48b77e4c937835795c33bb953f?attrs=temperature

{
  "id": "0115206c51f60b48b77e4c937835795c33bb953f",
  "type": "Restaurant",
  "temperature": {
    "type": "number",
    "value": "22.3",
    "metadata": {}
  }
}

Context Broker にアクセスする方法の例については、そのようなコンポーネントのセクションを参照してください。