Fiware orion 订阅发送空体
Fiware orion subscription sending empty body
我的设置:
docker-撰写:
version: "3.1"
services:
mongo-db:
image: mongo:3.6
hostname: mongo-db
container_name: db-mongo
expose:
- "27017"
ports:
- "27017:27017"
networks:
- default
command: --bind_ip_all --smallfiles
volumes:
- mongo-db:/data
orion:
image: fiware/orion:2.1.0
hostname: orion
container_name: fiware-orion
depends_on:
- mongo-db
networks:
- default
expose:
- "1026"
ports:
- "1026:1026"
command: -dbhost mongo-db -logLevel DEBUG
logging:
driver: none
healthcheck:
test: curl --fail -s http://localhost:1026/version || exit 1
iot-agent:
image: fiware/iotagent-ul:latest
hostname: iot-agent
container_name: fiware-iot-agent
depends_on:
- mongo-db
networks:
- default
expose:
- "4041"
- "7896"
ports:
- "4041:4041"
- "7896:7896"
logging:
driver: none
environment:
- "IOTA_CB_HOST=orion"
- "IOTA_CB_PORT=1026"
- "IOTA_NORTH_PORT=4041"
- "IOTA_REGISTRY_TYPE=mongodb"
- "IOTA_LOG_LEVEL=DEBUG"
- "IOTA_TIMESTAMP=true"
- "IOTA_MONGO_HOST=mongo-db"
- "IOTA_MONGO_PORT=27017"
- "IOTA_CB_NGSI_VERSION=v2"
- "IOTA_MONGO_DB=iotagentul"
- "IOTA_HTTP_PORT=7896"
- "IOTA_PROVIDER_URL=http://iot-agent:4041"
networks:
default:
ipam:
config:
- subnet: 172.18.1.0/24
volumes:
mongo-db: ~
上下文:
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Furniture:unit001", "type":"Furniture",
"name":{
"type":"Text", "value":"Bürostuhl"
},
"price":{
"type":"Integer", "value":404.40
}
},
{
"id":"urn:ngsi-ld:Furniture:unit002", "type":"Furniture",
"name":{
"type":"Text", "value":"Bürotisch"
},
"price":{
"type":"Integer", "value":203.40
}
},
{
"id":"urn:ngsi-ld:DeliverService:unit001", "type":"ServiceProvider",
"name":{
"type":"Text", "value":"trinkajo"
},
"address":{
"type":"PostalAddress",
"value":{
"telephoneNumber":"43q4q53",
"internetAdresse":"https://www.345345.de/"
}
}
},
{
"id":"urn:ngsi-ld:BottleCounter:001", "type":"BottleCounter",
"name":{
"type":"Text", "value":"Wasserflaschenzähler"
},
"numberOfBottles": {"type":"Integer", "value":645}
}
]
}'
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Furniture:unit001", "type":"Furniture",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
},
{
"id":"urn:ngsi-ld:Furniture:unit002", "type":"Furniture",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
},
{
"id":"urn:ngsi-ld:DeliverService:unit001", "type":"ServiceProvider",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
}
]
}'
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Office:001", "type" : "Office",
"name":{
"type":"Text",
"value":"didi-Hamburg"
},
"sizeInM2":{
"type":"Integer",
"value":60
},
"address":{
"type":"PostalAddress",
"value":{
"country":"Germany",
"locality":"sdfg",
"street":"sdfg",
"houseNumber" : "34",
"postalCode":"34533"
}
}
}
]
}'
curl -iX POST \
'http://localhost:4041/iot/services' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"services": [
{
"apikey": "4jggokgpepnvsb2uv4s40d59ov",
"cbroker": "http://orion:1026",
"entity_type": "Thing",
"resource": "/iot/d"
}
]
}'
curl -G -X GET \
'http://localhost:1026/v2/entities/urn:ngsi-ld:Office:001' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d 'type=Office' \
-d 'options=keyValues' | json_pp
curl -iX POST \
'http://localhost:4041/iot/devices' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"devices": [
{
"device_id": "bottleCounter001",
"entity_name": "urn:ngsi-ld:BottleCounter:001",
"entity_type": "BottleCounter",
"timezone": "Europe/Berlin",
"attributes": [
{ "object_id": "c", "name": "numberOfBottles", "type": "Integer" }
],
"static_attributes": [
{ "name":"refOffice", "type": "Relationship", "value": "urn:ngsi-ld:Office:001"}
]
}
]
}'
订阅:
curl -iX POST \
--url 'http://localhost:1026/v2/subscriptions' \
--header 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
--data '{
"description": "Notify me of low stock in Office 001",
"subject": {
"entities": [{"idPattern": ".*", "type" : "BottleCounter"}],
"condition": {
"attrs": ["numberOfBottles"],
"expression": {"q": "numberOfBottles<10;refOffice==urn:ngsi-ld:Office:001"}
}
},
"notification": {
"http": {
"url": "http://delivery:8080/subscription/office"
}
}
}'
我是如何成功更新值的 numberOfBottles
:
curl -iX POST \
'http://localhost:7896/iot/d?k=4jggokgpepnvsb2uv4s40d59ov&i=bottleCounter001' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-H 'Content-Type: text/plain' \
-d 'c|2'
我的用例是这样的:
There is an office with water bottles for the employee. There is a
'sensor' which can count the water bottles. When an employee is taking
a water bottle the sensor will update the value in fiware. When the
number is below 3 fiware should notify the subscriber. The subscriber
can now order new water bottles.
我有几个问题:
- 条件
numberOfBottles<10
永远不会触发订阅。当我使用类似 numberOfBottles!=10
的东西时,它正在工作
- 只有一个空体发送到url
http://delivery:8080/subscription/office
一个奖励问题:如果我能解决第一个问题:
有没有办法在触发订阅时将属性 address
从 urn:ngsi-ld:DeliverService:unit001
发送到 url http://delivery:8080/subscription/office
?
据我所知,IOTA 默认配置为使用 NGSIv1 向 CB 发送更新。 NGSIv1 API(已弃用 :) 的限制之一是数字总是被解析为字符串。因此,numberOfBottles<10
过滤器不起作用是有道理的。
为了克服这个问题,IOTA 应该配置为使用 NGSIv2。将以下内容添加到 docker-compose.yml 中的 iot-agent 环境并重新部署:
- IOTA_CB_NGSI_VERSION=v2
关于奖金问题,我想@JasonFox 已经在问题评论中回答了。
编辑: 我发现您正在使用 UL 代理。不同于 JSON 代理(它允许您在发送给代理的请求中指定 JSON 支持的值,例如数字),UL 编码是基于文本的。因此,为了将数值推进到 CB,您需要(除了上述 IOTA_CB_NGSI_VERSION 设置之外):
设置IOTA_AUTOCAST配置为真:
- IOTA_AUTOCAST=true
在配置时使用 "Number"
作为属性类型(而不是 "Integer"
)。
这在 this section of the documentation 中有更详细的描述。
我的设置: docker-撰写:
version: "3.1"
services:
mongo-db:
image: mongo:3.6
hostname: mongo-db
container_name: db-mongo
expose:
- "27017"
ports:
- "27017:27017"
networks:
- default
command: --bind_ip_all --smallfiles
volumes:
- mongo-db:/data
orion:
image: fiware/orion:2.1.0
hostname: orion
container_name: fiware-orion
depends_on:
- mongo-db
networks:
- default
expose:
- "1026"
ports:
- "1026:1026"
command: -dbhost mongo-db -logLevel DEBUG
logging:
driver: none
healthcheck:
test: curl --fail -s http://localhost:1026/version || exit 1
iot-agent:
image: fiware/iotagent-ul:latest
hostname: iot-agent
container_name: fiware-iot-agent
depends_on:
- mongo-db
networks:
- default
expose:
- "4041"
- "7896"
ports:
- "4041:4041"
- "7896:7896"
logging:
driver: none
environment:
- "IOTA_CB_HOST=orion"
- "IOTA_CB_PORT=1026"
- "IOTA_NORTH_PORT=4041"
- "IOTA_REGISTRY_TYPE=mongodb"
- "IOTA_LOG_LEVEL=DEBUG"
- "IOTA_TIMESTAMP=true"
- "IOTA_MONGO_HOST=mongo-db"
- "IOTA_MONGO_PORT=27017"
- "IOTA_CB_NGSI_VERSION=v2"
- "IOTA_MONGO_DB=iotagentul"
- "IOTA_HTTP_PORT=7896"
- "IOTA_PROVIDER_URL=http://iot-agent:4041"
networks:
default:
ipam:
config:
- subnet: 172.18.1.0/24
volumes:
mongo-db: ~
上下文:
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Furniture:unit001", "type":"Furniture",
"name":{
"type":"Text", "value":"Bürostuhl"
},
"price":{
"type":"Integer", "value":404.40
}
},
{
"id":"urn:ngsi-ld:Furniture:unit002", "type":"Furniture",
"name":{
"type":"Text", "value":"Bürotisch"
},
"price":{
"type":"Integer", "value":203.40
}
},
{
"id":"urn:ngsi-ld:DeliverService:unit001", "type":"ServiceProvider",
"name":{
"type":"Text", "value":"trinkajo"
},
"address":{
"type":"PostalAddress",
"value":{
"telephoneNumber":"43q4q53",
"internetAdresse":"https://www.345345.de/"
}
}
},
{
"id":"urn:ngsi-ld:BottleCounter:001", "type":"BottleCounter",
"name":{
"type":"Text", "value":"Wasserflaschenzähler"
},
"numberOfBottles": {"type":"Integer", "value":645}
}
]
}'
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Furniture:unit001", "type":"Furniture",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
},
{
"id":"urn:ngsi-ld:Furniture:unit002", "type":"Furniture",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
},
{
"id":"urn:ngsi-ld:DeliverService:unit001", "type":"ServiceProvider",
"refOffice": {
"type": "Relationship",
"value": "urn:ngsi-ld:Office:001"
}
}
]
}'
curl -iX POST \
'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"actionType":"APPEND",
"entities":[
{
"id":"urn:ngsi-ld:Office:001", "type" : "Office",
"name":{
"type":"Text",
"value":"didi-Hamburg"
},
"sizeInM2":{
"type":"Integer",
"value":60
},
"address":{
"type":"PostalAddress",
"value":{
"country":"Germany",
"locality":"sdfg",
"street":"sdfg",
"houseNumber" : "34",
"postalCode":"34533"
}
}
}
]
}'
curl -iX POST \
'http://localhost:4041/iot/services' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"services": [
{
"apikey": "4jggokgpepnvsb2uv4s40d59ov",
"cbroker": "http://orion:1026",
"entity_type": "Thing",
"resource": "/iot/d"
}
]
}'
curl -G -X GET \
'http://localhost:1026/v2/entities/urn:ngsi-ld:Office:001' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d 'type=Office' \
-d 'options=keyValues' | json_pp
curl -iX POST \
'http://localhost:4041/iot/devices' \
-H 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-d '{
"devices": [
{
"device_id": "bottleCounter001",
"entity_name": "urn:ngsi-ld:BottleCounter:001",
"entity_type": "BottleCounter",
"timezone": "Europe/Berlin",
"attributes": [
{ "object_id": "c", "name": "numberOfBottles", "type": "Integer" }
],
"static_attributes": [
{ "name":"refOffice", "type": "Relationship", "value": "urn:ngsi-ld:Office:001"}
]
}
]
}'
订阅:
curl -iX POST \
--url 'http://localhost:1026/v2/subscriptions' \
--header 'Content-Type: application/json' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
--data '{
"description": "Notify me of low stock in Office 001",
"subject": {
"entities": [{"idPattern": ".*", "type" : "BottleCounter"}],
"condition": {
"attrs": ["numberOfBottles"],
"expression": {"q": "numberOfBottles<10;refOffice==urn:ngsi-ld:Office:001"}
}
},
"notification": {
"http": {
"url": "http://delivery:8080/subscription/office"
}
}
}'
我是如何成功更新值的 numberOfBottles
:
curl -iX POST \
'http://localhost:7896/iot/d?k=4jggokgpepnvsb2uv4s40d59ov&i=bottleCounter001' \
-H 'fiware-service: didi' \
-H 'fiware-servicepath: /' \
-H 'Content-Type: text/plain' \
-d 'c|2'
我的用例是这样的:
There is an office with water bottles for the employee. There is a 'sensor' which can count the water bottles. When an employee is taking a water bottle the sensor will update the value in fiware. When the number is below 3 fiware should notify the subscriber. The subscriber can now order new water bottles.
我有几个问题:
- 条件
numberOfBottles<10
永远不会触发订阅。当我使用类似numberOfBottles!=10
的东西时,它正在工作 - 只有一个空体发送到url
http://delivery:8080/subscription/office
一个奖励问题:如果我能解决第一个问题:
有没有办法在触发订阅时将属性 address
从 urn:ngsi-ld:DeliverService:unit001
发送到 url http://delivery:8080/subscription/office
?
据我所知,IOTA 默认配置为使用 NGSIv1 向 CB 发送更新。 NGSIv1 API(已弃用 :) 的限制之一是数字总是被解析为字符串。因此,numberOfBottles<10
过滤器不起作用是有道理的。
为了克服这个问题,IOTA 应该配置为使用 NGSIv2。将以下内容添加到 docker-compose.yml 中的 iot-agent 环境并重新部署:
- IOTA_CB_NGSI_VERSION=v2
关于奖金问题,我想@JasonFox 已经在问题评论中回答了。
编辑: 我发现您正在使用 UL 代理。不同于 JSON 代理(它允许您在发送给代理的请求中指定 JSON 支持的值,例如数字),UL 编码是基于文本的。因此,为了将数值推进到 CB,您需要(除了上述 IOTA_CB_NGSI_VERSION 设置之外):
设置IOTA_AUTOCAST配置为真:
- IOTA_AUTOCAST=true
在配置时使用
"Number"
作为属性类型(而不是"Integer"
)。
这在 this section of the documentation 中有更详细的描述。