一、容器管理
1.容器操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装并启动EdgeX
sudo docker-compose up -d # -d 后台运行容器
# 查看所有容器运行状况
sudo docker-compose ps
# 显示容器日志
docker-compose logs -f [compose-contatainer-name]
# 停止容器
sudo docker-compose stop
# 启动容器
sudo docker-compose start
# 停止和删除所有容器
sudo docker-compose down
2.查看容器日志
1
2
# docker-compose logs
# docker-compose logs -f [compose-contatainer-name]
二、EdgeX UI 操作
1.访问 UI
1.1. consul
1
2
# 访问地址
http://192.168.202.233:8500
1.2. EdgeX Console
1
2
# 访问地址
http://192.168.202.233:4000/
2.创建 MQTT 设备
2.1.创建设备配置文件
设备配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
name: "my-custom-device-profile"
manufacturer: "iot"
model: "MQTT-DEVICE"
description: "Test device profile"
labels:
- "mqtt"
- "test"
deviceResources:
-
name: randnum
isHidden: true
description: "device random number"
properties:
valueType: "Float32"
readWrite: "R"
-
name: ping
isHidden: true
description: "device awake"
properties:
valueType: "String"
readWrite: "R"
-
name: message
isHidden: false
description: "device message"
properties:
valueType: "String"
readWrite: "RW"
-
name: json
isHidden: false
description: "JSON message"
properties:
valueType: "Object"
readWrite: "RW"
mediaType: "application/json"
deviceCommands:
-
name: values
readWrite: "R"
isHidden: false
resourceOperations:
- { deviceResource: "randnum" }
- { deviceResource: "ping" }
- { deviceResource: "message" }
2.2.添加设备
设备配置
使用此配置文件来定义设备和调度作业。device-mqtt 在启动时生成一个相对实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
# Pre-define Devices
deviceList:
- name: "my-custom-device"
profileName: "my-custom-device-profile"
description: "MQTT device is created for test purpose"
labels: [ "MQTT", "test" ]
protocols:
mqtt:
CommandTopic: "command/my-custom-device"
autoEvents:
- interval: "30s"
onChange: false
sourceName: "message"
3.设备配置文件
3.1.配置文件管理
3.2.修改配置文件
4.设备
4.1.设备管理
4.2.修改设备信息
4.3.命令
4.4.自动采集
5.设备通信
5.1.设备命令
5.2.事件
5.3.读值
三、REST API
1.查询执行命令
1
2
3
$ curl http://localhost:59882/api/v3/device/all | json_pp
$ curl http://localhost:59882/api/v3/device/name/device-name
1
2
3
4
[root@edgex compose-builder]# curl http://localhost:59882/api/v3/device/all
{"apiVersion":"v3","statusCode":200,"totalCount":2,"deviceCoreCommands":[{"deviceName":"MQTT-test-device","profileName":"Test-Device-MQTT-Profile","coreCommands":[{"name":"ping","get":true,"path":"/api/v3/device/name/MQTT-test-device/ping","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"ping","valueType":"String"}]},{"name":"message","get":true,"set":true,"path":"/api/v3/device/name/MQTT-test-device/message","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"message","valueType":"String"}]},{"name":"json","get":true,"set":true,"path":"/api/v3/device/name/MQTT-test-device/json","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"json","valueType":"Object"}]},{"name":"allValues","get":true,"set":true,"path":"/api/v3/device/name/MQTT-test-device/allValues","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"randfloat32","valueType":"Float32"},{"resourceName":"randfloat64","valueType":"Float64"},{"resourceName":"message","valueType":"String"}]},{"name":"randfloat32","get":true,"set":true,"path":"/api/v3/device/name/MQTT-test-device/randfloat32","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"randfloat32","valueType":"Float32"}]},{"name":"randfloat64","get":true,"set":true,"path":"/api/v3/device/name/MQTT-test-device/randfloat64","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"randfloat64","valueType":"Float64"}]}]},{"deviceName":"my-custom-device","profileName":"my-custom-device-profile","coreCommands":[{"name":"values","get":true,"path":"/api/v3/device/name/my-custom-device/values","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"randnum","valueType":"Float32"},{"resourceName":"ping","valueType":"String"},{"resourceName":"message","valueType":"String"}]},{"name":"message","get":true,"set":true,"path":"/api/v3/device/name/my-custom-device/message","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"message","valueType":"String"}]},{"name":"json","get":true,"set":true,"path":"/api/v3/device/name/my-custom-device/json","url":"http://edgex-core-command:59882","parameters":[{"resourceName":"json","valueType":"Object"}]}]}]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@edgex compose-builder]# curl http://localhost:59882/api/v3/device/name/my-custom-device
{
"apiVersion": "v3",
"statusCode": 200,
"deviceCoreCommand": {
"deviceName": "my-custom-device",
"profileName": "my-custom-device-profile",
"coreCommands": [{
"name": "json",
"get": true,
"set": true,
"path": "/api/v3/device/name/my-custom-device/json",
"url": "http://edgex-core-command:59882",
"parameters": [{
"resourceName": "json",
"valueType": "Object"
}]
}, {
"name": "values",
"get": true,
"path": "/api/v3/device/name/my-custom-device/values",
"url": "http://edgex-core-command:59882",
"parameters": [{
"resourceName": "randnum",
"valueType": "Float32"
}, {
"resourceName": "ping",
"valueType": "String"
}, {
"resourceName": "message",
"valueType": "String"
}]
}, {
"name": "message",
"get": true,
"set": true,
"path": "/api/v3/device/name/my-custom-device/message",
"url": "http://edgex-core-command:59882",
"parameters": [{
"resourceName": "message",
"valueType": "String"
}]
}]
}
}
2.SET 命令
1
2
3
$ curl http://localhost:59882/api/v3/device/name/my-custom-device/message \
-H "Content-Type:application/json" -X PUT \
-d '{"message":"Hello!"}'
1
2
3
4
5
6
7
8
9
# curl http://localhost:59882/api/v3/device/name/my-custom-device/message \
-H "Content-Type:application/json" -X PUT \
-d '{"message":"Hello!"}'
[root@edgex compose-builder]# curl http://localhost:59882/api/v3/device/name/my-custom-device/message \
> -H "Content-Type:application/json" -X PUT \
> -d '{"message":"Hello!"}'
{"apiVersion":"v3","statusCode":200}
3.GET 命令
1
$ curl http://localhost:59882/api/v3/device/name/my-custom-device/message
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# curl http://localhost:59882/api/v3/device/name/my-custom-device/message
[root@edgex compose-builder]# curl http://localhost:59882/api/v3/device/name/my-custom-device/message
{
"apiVersion": "v3",
"statusCode": 200,
"event": {
"apiVersion": "v3",
"id": "2bac78a7-b959-44d9-ac9c-c8e39b8f4b56",
"deviceName": "my-custom-device",
"profileName": "my-custom-device-profile",
"sourceName": "message",
"origin": 1708510731459679263,
"readings": [{
"id": "8d14ecae-a1a1-439b-8fe1-f85f50783548",
"origin": 1708510731459675461,
"deviceName": "my-custom-device",
"resourceName": "message",
"profileName": "my-custom-device-profile",
"valueType": "String",
"value": "Hello!"
}]
}
}
4.调度作业
autoEvents
调度作业在设备定义文件的部分中定义:
1
2
3
4
autoEvents:
Interval: "30s"
OnChange: false
SourceName: "message"
服务启动后,查询core-data的读取API。结果显示服务每30秒自动执行一次命令,如下所示:
1
$ curl http://localhost:59880/api/v3/reading/resourceName/message | json_pp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# curl http://localhost:59880/api/v3/reading/resourceName/message
[root@edgex compose-builder]# curl http://localhost:59880/api/v3/reading/resourceName/message
{
"apiVersion": "v3",
"statusCode": 200,
"totalCount": 840,
"readings": [{
"id": "2beff7bf-fe84-4301-9baa-ef283b99c0b3",
"origin": 1708510957760593943,
"deviceName": "my-custom-device",
"resourceName": "message",
"profileName": "my-custom-device-profile",
"valueType": "String",
"value": "Hello!"
},
{
"id": "e45e0f64-3f28-41a8-91be-0f4c0865a2f7",
"origin": 1708510950004786813,
"deviceName": "my-custom-device",
"resourceName": "message",
"profileName": "my-custom-device-profile",
"valueType": "String",
"value": "Hello World"
},
......
]
}
5.异步设备读值
订阅device-mqtt
a DataTopic
,等待真实设备向 MQTT Broker 发送值,然后device-mqtt
解析该值并转发到北向。
数据格式包含以下值:
- name = device name
- cmd = deviceResource name
- method = get or set
- cmd = device reading
以下结果显示模拟设备每 15 秒发送一次读数:
1
$ curl http://localhost:59880/api/v3/reading/resourceName/randnum | json_pp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# curl http://localhost:59880/api/v3/reading/resourceName/randnum
[root@edgex compose-builder]# curl http://localhost:59880/api/v3/reading/resourceName/randnum
{
"apiVersion": "v3",
"statusCode": 200,
"totalCount": 824,
"readings": [{
"id": "c4acd21d-6ea5-4a29-a865-4d748c7740b6",
"origin": 1708514190002112819,
"deviceName": "my-custom-device",
"resourceName": "randnum",
"profileName": "my-custom-device-profile",
"valueType": "Float32",
"value": "2.510000e+01"
}, {
"id": "d23c8625-d5ea-4fb2-ac95-659d533573ae",
"origin": 1708514115001993970,
"deviceName": "my-custom-device",
"resourceName": "randnum",
"profileName": "my-custom-device-profile",
"valueType": "Float32",
"value": "2.810000e+01"
}, {
"id": "c71a58ac-9846-43fe-9533-bf378fbee649",
"origin": 1708514070003642414,
"deviceName": "my-custom-device",
"resourceName": "randnum",
"profileName": "my-custom-device-profile",
"valueType": "Float32",
"value": "2.720000e+01"
},
......
]
}