2017-08-21 15 views
0

累積REST APIを使用しています。定期的なリアルタイム通知が機能します(例:私たちは/ alarms/*を購読して接続/ポーリングループを開始し、アラームを生成すると期待されるJSONを受信します。特定のモジュールやステートメントはインストールされていません。 しかし、我々はSmartRESTと同じことをしようとすると、我々はすぐにアラームが作成されると、このエラーが表示されます。SmartRESTで累積リアルタイム通知を受信する方法は?

40,,/alarms/177649296,Could not find any templates subscribed for the channel 

リファレンスガイド(http://cumulocity.com/guides/reference/smartrest/)に続いて、すべての要求が同じを持っているところ、我々は、このようにそれを試してみましたX-IDヘッダおよびすべての要求は、最後の一つを除いて、予想されるHTTPステータス200となし、エラーメッセージが表示される:

  1. /sの
    体にPOSTを実行して、スマートな応答テンプレートを登録します。 11,102,,,$.channel
  2. Handhake:へのPOST/CEP /リアルタイム
    ボディ:80 レスポンスが私たちのclientId(例えばあります191het1z38bp7iq1m96jqqt8jnef)
  3. 購読:81,191het1z38bp7iq1m96jqqt8jnef,/alarms/*
  4. 接続:/CEP /リアルタイムにPOST
    ボディ:通常のRESTの場合83,191het1z38bp7iq1m96jqqt8jnef

POSTボディ
/CEP /リアルタイムにします通知は2つの要素を持つJSON配列で構成され、どちらもプロパティ "channel"を持ちます。それが私たちの応答テンプレートから期待されるものです。代わりに、前述のエラー40が発生します。

レスポンステンプレートが間違っていますか?それはX-Idと正しく一致していませんか? 「チャンネルに登録されたテンプレート」がないということは何を意味していますか?サブスクリプションは特定のレスポンステンプレートではなく、clientIdに対して実行され、テンプレートは自動的に一致するはずです。おそらく "テンプレート"は "X-Id"を意味するのでしょうか?ドキュメンテーションは、その言葉の意味に関してあいまいであるようです。しかし、とにかく、私たちはすべてのリクエストで同じX-Idヘッダーを使用しました。

私たちが間違っていることについての何かの指摘は、私たちが今ではほとんど何かを試したので、評価されるでしょう。

答えて

1

SmartRESTプロトコルは、IoTデバイス< - >プラットフォーム通信用に開発されました。そのため、通常はデバイスが自分自身で作成したデータを購読する必要がないため、リアルタイムデータを購読するための設計はまったくありませんでした(デバイスが必要とする操作を除く)。

これは、使用することは可能ですが、いくつかの制限があると述べています。あなたのアプローチは基本的には正しいですが、サブスクリプションには1つの問題があります。サブスクリプションでは、購読しているチャンネルにあなたのX-Idをリンクしていますが、チャンネル/アラーム/ *にメッセージが公開されていないため、ワイルドカードの購読はSmartRESTでは機能しません。このような奇妙なエラーメッセージは、アラームが表示されたチャンネルに登録されたテンプレートがないと言っていました。 CometDの内部では、ワイルドカード加入のためにアラームが受信されますが、SmartRESTの部分は機能しません。

メッセージはdeviceId(例:/ alarms/12345)のチャンネルに公開されています。 /alarms/12345を購読すると、それが動作します。もちろん、必要な数のチャンネルを購読できますが、ワイルドカードの購読は機能しません。

テンプレートについては、次のことを知る必要があります。 SmartREST解析は、CometDの生JSONではなく、内部のペイロード(たとえば、アラーム)で行われます。だから、アラーム用のテンプレートは、次のようになります。これは、オブジェクトが厳しさを持っている場合にのみトリガーすると、ID、種類および重症度を返します

11,500,,$.severity,$.id,$.type,$.severity 

+0

ありがとうございます!それはまさに私が必要とした説明です。私たちはいつもワイルドカードでテストしました。とても便利でした。 SmartRESTがそれをサポートしていないことを知らなかった。特定のチャンネルを購読すると、それは機能します。 :) –

+0

ちょっとした説明:実験では、「自分の購読しているチャンネルにあなたのX-Idをリンクしています」という質問に記載されているキューイングメカニズムに関連していないことが示されています。https://stackoverflow.com/q/35841237/8495341 If私は別のハンドシェイクを行いますが、同じX-Idを使用すると、以前のサブスクリプションとその間にサーバーにキューイングされていたデータは新しい接続に持ち越されず、それらのいずれも取得しません通知。これは意味があります。なぜなら、複数のデバイスがいつでも同じX-Idに接続できるからです。 –

+0

はい、正しいです。 X-Idは、一般的なCometDプロセスとは関係ありません。 JSONからCSVへのマッピングに使用されます。あなたが得るものとキャッシュされるものは、JSONペイロードを使用するかのようにCometDプロセスによって定義されます – TyrManuZ

関連する問題