Запрос OCB из JavaScript (WireCloud)
Я пытаюсь получить поля типа для каждого атрибута моих сущностей. Запрашивать Орион и получать объекты - это не проблема (я делаю это через виджет NGSI Source), а способ получения этих параметров.
Из источника 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]));
}
};
На мой виджет:
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];
}
Я пытаюсь закодировать нечто подобное, чтобы получить значение поля типа. Как я могу это сделать? (Я уверен, что это довольно легко...)
1 ответ
Вы не можете использовать текущую реализацию оператора источника NGSI (по крайней мере v3.0.2), если хотите получить метаданные типа атрибутов, поскольку источник NGSI использует flat
вариант (отбрасывая эту информацию).
Мы изучаем обновление этого оператора, чтобы разрешить создание подписок без использования flat
вариант. Основная проблема заключается в том, что другие компоненты ожидают, что данные, предоставленные этим оператором, будут предоставлены в формате, возвращаемом при использовании flat
вариант. Я обновлю этот ответ после более глубокого анализа проблемы.