2

シグナスとオリオンに関する公式ドキュメントに従いました。すべての汎用イネーブラが正しくデプロイされ、ログ ファイルにエラーが記録されていません。しかし、奇妙なことが起こり、Orion は Cygnus に通知しません。

このメカニズムをテストするために、公式ドキュメントで提供されている Car エンティティの例に従いました。

私のエンティティ作成bashスクリプト:

(curl $1:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
  "contextElements": [
    {
      "type": "Car",
      "isPattern": "false",
      "id": "Car1",
      "attributes": [
      {
        "name": "speed",
        "type": "integer",
        "value": "75"
      },
      {
        "name": "fuel",
        "type": "float",
        "value": "12.5"
      }
      ]
    }
  ],
  "updateAction": "APPEND"
}
EOF

私のエンティティサブスクリプションbashスクリプト:

(curl $1:1026/v1/subscribeContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Fiware-Service: vehicles' --header 'Fiware-ServicePath: /4wheels' -d @- | python -mjson.tool) <<EOF
{
    "entities": [
        {
            "type": "Car",
            "isPattern": "false",
            "id": "Car1"
        }
    ],
    "attributes": [
        "speed",
        "oil_level"
    ],
    "reference": "http://$2:5050/notify",
    "duration": "P1M",
    "notifyConditions": [
        {
            "type": "ONCHANGE",
            "condValues": [
                "speed"
            ]
        }
    ],
    "throttling": "PT1S"
}
EOF

私のエンティティ更新bashスクリプト:

(curl $1:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
  "contextElements": [
    {
      "type": "Car",
      "isPattern": "false",
      "id": "Car1",
      "attributes": [
      {
        "name": "speed",
        "type": "integer",
        "value": $2
      }
      ]
    }
  ],
  "updateAction": "UPDATE"
}
EOF

: Orion はすべてのリクエストに応答します。

これらのスクリプトを実行した後、cygnus は orion から報告された情報を受け取り、それをデータベースに保存する必要がありますが、何も起こりません。/var/log/cygnus/cygnus.log ファイルにも /var/log/contextBroker/contextBroker.log ファイルにも、orion 通知に関する情報は報告されません。

: 公式ドキュメントで提供されている notify.sh スクリプトを使用すると、Cygnus は正常に動作し、すべてのデータがデータベースに保存されます。

:開いているポートに関する他の質問の問題を読みましたが、それらは私のものには当てはまりません。

編集1

orion をサブスクライブすると、応答は次のようになります。

{
    "subscribeResponse": {
        "duration": "P1M",
        "subscriptionId": "563e12b4f4d8334d599753e0",
        "throttling": "PT1S"
    }
}

anentity を更新すると、orion はそれを返します。

{
    "contextResponses": [
        {
            "contextElement": {
                "attributes": [
                    {
                        "name": "speed",
                        "type": "integer",
                        "value": ""
                    }
                ],
                "id": "Car1",
                "isPattern": "false",
                "type": "Car"
            },
            "statusCode": {
                "code": "200",
                "reasonPhrase": "OK"
            }
        }
    ]
}

orion からエンティティを取得するには、次のスクリプトを使用しました。

(curl $1:1026/v1/queryContext -s -S --header 'Content-Type: application/json' \
    --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
    "entities": [
        {
            "type": "Car",
            "isPattern": "false",
            "id": "Car1"
        }
    ]
} 
EOF

応答:

{
    "contextResponses": [
        {
            "contextElement": {
                "attributes": [
                    {
                        "name": "fuel",
                        "type": "float",
                        "value": "12.5"
                    },
                    {
                        "name": "speed",
                        "type": "integer",
                        "value": "123"
                    }
                ],
                "id": "Car1",
                "isPattern": "false",
                "type": "Car"
            },
            "statusCode": {
                "code": "200",
                "reasonPhrase": "OK"
            }
        }
    ]
}

: 速度値が正常に更新されました。

4

1 に答える 1

1

Fiware-Serviceサブスクリプション リクエストのおよびヘッダーを考慮してFiware-ServicePath、サービス「vehicles」の「/4wheels」サービス パスで実行されています。ただし、エンティティ作成リクエストはそのようなヘッダーを使用しないため、デフォルト サービスのデフォルト サービス パス ("/") に作成されます。したがって、サブスクリプションはエンティティを「カバー」していないため、エンティティの更新は通知をトリガーしません。

この問題の解決策の 1 つは、同じサービスとサブスクリプションのサービス パス (つまり、サービス "vehicles" の "/4wheels" サービス パス) にエンティティを作成することです。

サービスサービス パスの概念については、Orion の公式ドキュメントを確認してください。

于 2015-11-10T14:21:57.193 に答える