0

meteor でホームオートメーションシステムを構築しようとしています。したがって、私は次のことをしたいと思います。

私はあらゆる種類のソースから読んでいるすべての異なる liveValues を含むコレクションを持っています。各ドキュメントは、たとえばセンサーの値と実際の値です。

次に、thing という 2 番目のコレクションを作成します。このコレクションでは、このことのデータを使用して、たとえば「室温生活」などのすべての「こと」を追加したいと思います。1 つの属性は、liveValues の 1 つに接続する必要があります。

Web インターフェイスでは、Thing の背後にある liveValue は問題にならないため、Meteor the Thing コレクションを公開してサブスクライブしたいと考えています。

ここで、オプションの複雑な部分が始まります。

データをクライアントに公開するにはどうすればよいですか? LiveValue が変更されたときにリアクティブな更新が行われますか? 「もの」コレクションとは異なるコレクションだからです。

私の考えでは、1 つの「もの」ドキュメントへの 1 つのサブスクリプションを介してこれを行いたいと考えています。このサブスクリプションで、liveValue コレクションの liveValue の更新を取得します。

これは実行可能ですか?

誰かがこれをどのように処理できるか考えていますか?

meteor-reactive-publishについて何か聞いたことがありますが、これが解決策かどうかはわかりません。また、これにはサーバーに多くの電力が必要だと聞いたことがあります。

ご協力いただきありがとうございます。

4

1 に答える 1

0

したがって、基本的には、サーバー側のドキュメントをクライアント側の 1 つのリアクティブ コレクションにマージする必要があります。

docsobserveChangesで説明されているように、Meteor Collections が提供するものを使用する必要があります。

これにより、次のように、サーバー側のコレクションの変更を観察し、クライアント側の集約されたコレクションに公開できます。

// Get the data from a kind of sensor
var cursor = SomeSensor.find({/* your query */});

var self = this;

// Observe the changes in the cursor and publish
// it to the 'things' collection in client
var observer = cursor.observeChanges({
  added: function (document) {
    self.added('things', document._id, document);
  },
  removed: function (document) {
    self.removed('things', document._id, document);
  },
  changed: function (document) {
    self.changed('things', document._id, document);
  }
});

// Make the publication ready
self.ready();

// Stop the observer on subscription stop
self.onStop(function () {
  observer.stop();
});

これにより、thingsコレクションにはすべてのセンサーからのデータが反応的に含まれます。

お役に立てば幸いです。

于 2016-11-13T14:44:25.797 に答える