我的设置: docker-compose:
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'
我的用例是这样的:
有一个为员工提供水瓶的办公室。有一个 “传感器”可以对水瓶进行计数。当员工正在 一个水瓶,传感器将更新固件中的值。当。。。的时候 数量低于3的软件应通知订户。订户 现在可以订购新的水壶了。
我有几个问题:
numberOfBottles<10
下,订阅永远不会触发。当我使用类似numberOfBottles!=10
之类的东西时,http://delivery:8080/subscription/office
一个额外的问题:如果我能解决第一个问题:
订阅被触发时,是否可以将address
的属性urn:ngsi-ld:DeliverService:unit001
发送到网址http://delivery:8080/subscription/office
?
答案 0 :(得分:1)
据我所知,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配置设置为true:
- IOTA_AUTOCAST=true
在供应时使用"Number"
作为属性类型(而不是"Integer"
)。
这在this section of the documentation中有更详细的描述。