7.4 subscriptionの動作確認 |
---|
2022年4月13日 |
||
|
||
2022年4月13日 |
||
それでは、温度が変化したら、通知が前節で用意したコンシューマ(Webサーバ)に通知されるように設定しましょう。 以下のjsonファイルを用意します。筆者はpostSubscription.jsonというファイルで作りました。 |
||
{ "description": "Notify temperature changes of Building001", "subject": { "entities": [ { "idPattern": "urn:ngsi-ld:Room:001.*", "type": "Room" } ], "condition": { "attrs": [ "temperature" ] } }, "notification": { "http": { "url": "http://hostpc:3000/subscriptions/temperature-change" } } } |
||
上記のjsonで、subjectはEntityと通知条件を指定する部分、notificationは、どこに通知するかをしていする部分です。この指定では、subject内のidPatternに"urn:ngsi-ld:Room:001.*"という記述があります。最後の".*"は何でもありという指定です。つまり、本書の場合は、この建物のすべての部屋(Room)のidが全て該当する指定となっています。条件は、temperatureというAttributeが更新されると、通知される指定です。通知先は、hostpcというサーバ(つまり、Windows)の3000番のボードとなります。その後ろのパスは何でも構いませんが、色々なSubscriptionが設定される事を想定し、この様なパスとしました。 次に以下のコマンドをPowerShellで実行します。 |
||
curl -iX POST -H 'Content-Type: application/json' -d @d:\postSubscription.json 'http://localhost:1026/v2/subscriptions' | ||
この様に、Subscriptionの設定は、subscriptionsというエンドポイントに対して実行します。 結果は以下の様になりました。 |
||
PS C:\Users\owner> curl -iX POST -H 'Content-Type: application/json' -d @d:\postSubscription.json 'http://localhost:1026/v2/subscriptions' HTTP/1.1 201 Created Connection: Keep-Alive Content-Length: 0 Location: /v2/subscriptions/624a39ed88e83d3c082bb31b Fiware-Correlator: 1be1fe00-b3ad-11ec-ad91-0242ac120003 Date: Mon, 04 Apr 2022 00:21:02 GMT PS C:\Users\owner> |
||
この場合は、/v2/subscriptions/624a39ed88e83d3c082bb31bという場所に格納されたことがわかりますね。 それでは、ちゃんと格納されたかどうか読み出してみましょう。 |
||
curl -X GET 'http://localhost:1026/v2/subscriptions/624a39ed88e83d3c082bb31b' |
||
PS C:\Users\owner> curl -X GET 'http://localhost:1026/v2/subscriptions/624a39ed88e83d3c082bb31b' {"id":"624a39ed88e83d3c082bb31b","description":"Notify temperature changes ofBuilding001","status":"active","subject":{"entities":[{"idPattern":"urn:ngsi-ld:Room:001.*","type":"Room"}],"condition":{"attrs":["temperature"]}},"notification":{"attrs":[],"onlyChangedAttrs":false,"attrsFormat":"normalized","http":{"url":"http://hostpc:3000/subscriptions/temperature-change"}}} PS C:\Users\owner> |
||
この様にちゃんと格納されていることがわかります。 |
||
|
||
2022年4月13日 |
||
本チュートリアルは本家Fiware.orgのチュートリアルの環境をそのまま流用していますが、何らかの理由によりDocker ContainerのFiware/OrionからWindows上のプログラムへの通信が失敗する現象が確認されています。原因は究明出来ていませんが、筆者の環境ではPCをリブートすると事により現象が収まります。尚、リブート後は、Mongo-DBとFiware/orionのContainerのstopとrmを実行したあと、再度runしなおす必要があります。 | ||
いよいよ温度を変化させてみましょう。cUrlで、以下の様に打ちます。 |
||
curl -X PUT -H 'Content-Type:text/plain' -d 10 http://localhost:1026/v2/entities/urn:ngsi-ld:Room:001-001-001/attrs/temperature/value | ||
これは、"urn:ngsi-ld:Room:001-001-001"というidを持つ"Room"コンテキストのtemperatureの値を10に書き換えるという意味を持ちます。そうすると、Consumerに以下の様に表示されました。 |
||
部屋 : 展示室 室温 : 10 172.22.32.1 - - [07/May/2022 15:23:47] "POST /subscriptions/temperature-change HTTP/1.1" 200 - |
||
temperatureの値を変化させたために、fiware/orionがsubscriptionの指定と照らし合わせ、条件が合致したために、指定された"hostpc"のポート3000の"/subscriptions/temperature-change"に対し、POSTに行ったことが分かります。 因みに、POSTされたメッセージは以下の通りです。 |
||
{ "subscriptionId": "624d28bedad97c726d36631b", "data": [ { "id": "urn:ngsi-ld:Room:001-001-001", "type": "Room", "name": { "type": "StructuredValue", "value": { "type": "Text", "value": "展示室" }, "metadata": {} }, "refFloor": { "type": "StructuredValue", "value": { "type": "Text", "value": "urn:ngsi-ld:Floor:001-001" }, "metadata": {} }, "temperature": { "type": "StructuredValue", "value": 10, "metadata": {} } } ] } |
||
Pythonのconsumerのプログラムで、 |
||
print('部屋 : {}'.format(json_dict['data'][0]['name']['value']['value'])) | ||
という箇所がありましたが、これは、メッセージの中のdataの記述の中の最初(ひとつしかありませんが)の記述の中のnameの記述の中のvalueの記述の中のvalueの項目に格納されている値を取り出していたという事になります。 |
||