WireCloudは、Context BrokerやObject Storage GEを含む多くのGEをサポートしています。以下は、開発者がWireCloud上で実行されているウィジェットとオペレータからOrion Context Broker(FIWAREのPub / Sub Context Broker GEのリファレンス実装)インスタンスにアクセスする方法の例です。これと他のFIWARE GEをWireCloudから使用する方法の詳細については、WireCloudチュートリアルを参照してください。
まず 、Orion Context Brokerとシームレスに相互運用できるように、FIWARE NGSI Open RESTful APIにアクセスするため、WireCloudが提供するjavascriptバインディングを使用するウィジェットとオペレータは、記述ファイル(config.xml
ファイル)に要件としてNGSI機能を追加する必要があります。
以下は、WDLのXMLフレーバーを使用したウィジェット記述の例です:
<?xml version='1.0' encoding='UTF-8'?>
<widget xmlns="http://wirecloud.conwet.fi.upm.es/ns/macdescription/1" vendor="CoNWeT" name="observation-reporter" version="1.0">
<details>
<title>Observation Reporter</title>
<authors>aarranz</authors>
<email>aarranz@conwet.com</email>
<image>images/catalogue.png</image>
<smartphoneimage>images/smartphone.png</smartphoneimage>
<description>Creates a new observation</description>
<doc>http://www.envirofi.eu/</doc>
</details>
<requirements>
<feature name="NGSI"/>
</requirements>
<wiring/>
<contents src="index.html" contenttype="text/html" charset="utf-8" useplatformstyle="true"/>
<rendering height="20" width="5"/>
</widget>
同じウィジェット記述のRDF / xmlフレーバーは次のとおりです:
<?xml version='1.0' encoding='UTF-8'?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:wire="http://wirecloud.conwet.fi.upm.es/ns/widget#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:usdl="http://www.linked-usdl.org/ns/usdl-core#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ns1="http://purl.org/goodrelations/v1#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:vcard="http://www.w3.org/2006/vcard/ns#"
>
<wire:Widget rdf:about="http://wirecloud.conwet.fi.upm.es/ns/widget#CoNWeT/observation-reporter/1.0">
<vcard:addr>
<vcard:Work rdf:nodeID="Nb17ce611aa2645e488515f86eb855e53">
<vcard:email>aarranz@conwet.com</vcard:email>
</vcard:Work>
</vcard:addr>
<usdl:utilizedResource>
<usdl:Resource rdf:about="index.html">
<wire:codeCacheable>True</wire:codeCacheable>
</usdl:Resource>
</usdl:utilizedResource>
<wire:hasPlatformWiring>
<wire:PlatformWiring rdf:nodeID="Neecb97db81ed40859b8c04e935a9a9cc"/>
</wire:hasPlatformWiring>
<wire:displayName>Observation Reporter</wire:displayName>
<wire:hasiPhoneImageUri rdf:resource="images/smartphone.png"/>
<usdl:versionInfo>1.0</usdl:versionInfo>
<usdl:hasProvider>
<ns1:BusinessEntity rdf:nodeID="N9a6bf56577c741ac806997a80281afff">
<foaf:name>CoNWeT</foaf:name>
</ns1:BusinessEntity>
</usdl:hasProvider>
<wire:hasImageUri rdf:resource="images/catalogue.png"/>
<wire:hasPlatformRendering>
<wire:PlatformRendering rdf:nodeID="N713e5ea11dce4750a592c754c748def7">
<wire:renderingHeight>20</wire:renderingHeight>
<wire:renderingWidth>5</wire:renderingWidth>
</wire:PlatformRendering>
</wire:hasPlatformRendering>
<wire:hasRequirement>
<wire:Feature rdf:nodeID="N3cb336bd9b6243ecbf345c80442498f9">
<rdfs:label>NGSI</rdfs:label>
</wire:Feature>
</wire:hasRequirement>
<dcterms:title>observation-reporter</dcterms:title>
<dcterms:description>Creates a new observation</dcterms:description>
<dcterms:creator>
<foaf:Person rdf:nodeID="Ndb72cb5a7f3844b29b72f304baaa14a7">
<foaf:name>aarranz</foaf:name>
</foaf:Person>
</dcterms:creator>
</wire:Widget>
</rdf:RDF>
Context Brokerによって提供される最も重要な操作の1つは、サブスクリプションのサポートです。サブスクリプションを使用することで、ダッシュボードは関心のあるエンティティのステータスについて適切なタイミングで通知を取得できます。サブスクリプションはクエリと非常によく似ていますが、クエリとサブスクリプションの主な違いは、サブスクリプションが非同期である一方、クエリは同期オペレーションであることです。さらに、Orion Context Brokerは、同等のクエリ操作のために返されるデータを含む最初の通知を送信します。この方法では、現在の値と通知された変更の間にギャップがないことがわかります。
サブスクリプションは、createSubscription
メソッドを使用して作成されます。次の例は、管理しているトラック(vans)の位置の変化について通知する方法を説明しています:
var entityIdList = [
{type: 'Van', id: '.*', isPattern: true}
];
var attributeList = null;
var duration = 'PT3H';
var throttling = null;
var notifyConditions = [{
type: 'ONCHANGE',
condValues: ['current_position']
}];
var options = {
flat: true,
onNotify: function (data) {
// called when the context broker sends a new notification
},
onSuccess: function (data) {
ngsi_subscriptionId = data.subscriptionId;
}
};
var ngsi_connection = new NGSI.Connection(ngsi_server[, options]);
ngsi_connection.createSubscription(entityIdList, attributeList, duration, throttling, notifyConditions, options);
この例では、createSubscriptionを呼び出すと、'Van'型のエンティティの'current_position'属性が変更されるたびに、Context BrokerがonNotify関数を呼び出すようになります。Orion Context Brokerは実行時にパターンを評価することを考慮する必要があります。パターンを使用すると、通知条件が満たされている場合、新しいエンティティに関する通知を受け取ることができます。
このサブスクリプションは、Context Brokerが通知の送信を停止する3時間後に期限切れになります。とにかく、ウィジェット/オペレータは、期限切れになっても、updateSubscription
メソッドを使用してそれらのサブスクリプションを継続(renew)することができます 。サブスクリプションはcancelSubscription
メソッドを使用して取り消すことができ、Context Brokerはサブスクリプションに関する情報をすべて解放します。いずれの場合でも、ウィジェット/オペレータがアンロードされると、WireCloudは自動的にサブスクリプションをキャンセルします。
例として、flatオプションを使用するときにonNotifyコールバックに渡されるdataパラメータの値を次に示します:
{
"elements": {
"van2": {
"id": "van2",
"type": "Van",
"current_position": "43.47258, -3.8026643"
},
"van4": {
"id": "van4",
"type": "Van",
"current_position": "43.471214, -3.7994885"
}
},
"subscriptionId": "53708768286043030c116e2c",
"originator": "localhost"
}
ウィジェットとオペレータのOrion Context Brokerの使い方についてのWireCloudチュートリアルでは、接続の作成、クエリの作成、ページネーションの処理、エンティティの作成、属性の更新、ジオロケーション機能の使用などを詳しく説明しています。また、完全な例も含まれています。チュートリアルで使用されるAPI呼び出しの詳細については、NGSI javascript APIのドキュメントを参照してください。