1

エンティティの各属性のタイプフィールドを取得しようとしています。Orion にクエリを実行してエンティティを取得することは問題ではなく (NGSI ソース ウィジェットを使用してこれを行います)、これらのパラメーターを取得する方法です。

NGSI ソースから (Orion インスタンスへの通常のサブスクリプション):

 var doInitialSubscription = function doInitialSubscription() {

    this.subscriptionId = null;

    this.ngsi_server = MashupPlatform.prefs.get('ngsi_server');
    this.ngsi_proxy = MashupPlatform.prefs.get('ngsi_proxy');
    this.connection = new NGSI.Connection(this.ngsi_server, {
        ngsi_proxy_url: this.ngsi_proxy
    });

    var types = MashupPlatform.prefs.get('ngsi_entities').split(new RegExp(',\\s*'));
    var entityIdList = [];
    var entityId;
    for (var i = 0; i < types.length; i++) {
        entityId = {
            id: '.*',
            type: types[i],
            isPattern: true
        };
        entityIdList.push(entityId);
    }
    var attributeList = null;
    var duration = 'PT3H';
    var throttling = null;
    var notifyConditions = [{
        'type': 'ONCHANGE',
        'condValues': MashupPlatform.prefs.get('ngsi_update_attributes').split(new RegExp(',\\s*'))
    }];
    var options = {
        flat: true,
        onNotify: handlerReceiveEntity.bind(this),
        onSuccess: function (data) {
            this.subscriptionId = data.subscriptionId;
            this.refresh_interval = setInterval(refreshNGSISubscription.bind(this), 1000 * 60 * 60 * 2);  // each 2 hours
            window.addEventListener("beforeunload", function () {
                this.connection.cancelSubscription(this.subscriptionId);
            }.bind(this));
        }.bind(this)
    };
    this.connection.createSubscription(entityIdList, attributeList, duration, throttling, notifyConditions, options);
};
 var handlerReceiveEntity = function handlerReceiveEntity(data) {
    for (var entityId in data.elements) {
        MashupPlatform.wiring.pushEvent("entityOutput", JSON.stringify(data.elements[entityId]));
    }
};

MyWidget へ:

MashupPlatform.wiring.registerCallback("entityInput", function (entityString) {
    var entity;
    entity = JSON.parse(entityString);
    id = entity.id;
    type = entity.type;
    for(var attr in entity){
        attribute = entity[attr];
    }

フィールドの値を取得するために、同様のコードを作成しようとしています。どうやってやるの?(確かに簡単そうですが…)

4

1 に答える 1

2

NGSI ソースがオプションを使用する (その情報を破棄する) ため、属性のタイプ メタデータを取得する場合、現在の NGSI ソース オペレーターの実装 (少なくとも v3.0.2) を使用することはできませんflat

オプションを使用せずにサブスクリプションを作成できるように、このオペレーターを更新することを検討していflatます。ここでの主な問題は、他のコンポーネントが、この演算子によって提供されるデータが、flatオプションの使用時に返される形式で提供されることを期待していることです。問題をより深く分析した後、この回答を更新します。

于 2015-02-06T15:02:05.280 に答える