=====1. 配置文件的修改 ======
將文件docker-compose.yml中的內容進行修改,開啟隨機設備服務
~]# ll
total 16
-rw-------. 1 root root 1249 anaconda-ks.cfg
-rw-r--r--. 1 root root 11451 docker-compose.yml
~]# pwd
/root
去掉random前面的#號
~]#vim docker-compose.yml # device-random: # image: edgexfoundry/docker-device-random-go:0.7.1 # ports: # - "49988:49988" # container_name: edgex-device-random # hostname: edgex-device-random # networks: # - edgex-network # volumes: # - db-data:/data/db # - log-data:/edgex/logs # - consul-config:/consul/config # - consul-data:/consul/data # depends_on: # - data # - command 。。。。。。。。 去掉#以后,改為下面的內容: device-random: image: edgexfoundry/docker-device-random-go:0.7.1 ports: - "49988:49988" container_name: edgex-device-random hostname: edgex-device-random networks: - edgex-network volumes: - db-data:/data/db - log-data:/edgex/logs - consul-config:/consul/config - consul-data:/consul/data depends_on: - data - command
查看可以啟動的容器微服務:其中多了一個device-random
~]# docker-compose config --services volume consul config-seed mongo logging notifications metadata data command scheduler export-client export-distro rulesengine device-virtual device-random portainer
=====2.,啟動新添加的微服務容器======
啟動它:
~]# docker-compose up -d device-random edgex-files is up-to-date edgex-mongo is up-to-date edgex-core-consul is up-to-date Starting edgex-config-seed ... done edgex-support-logging is up-to-date edgex-core-metadata is up-to-date edgex-core-data is up-to-date edgex-core-command is up-to-date Starting edgex-device-random ... done
查看是否正常啟動:
~]# docker-compose ps -a Name Command State Ports ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- edgex-config-seed /bin/sh -c /edgex/cmd/conf ... Exit 0 edgex-core-command /core-command --consul --p ... Up 0.0.0.0:48082->48082/tcp edgex-core-consul docker-entrypoint.sh agent ... Up 8300/tcp, 8301/tcp, 8301/udp, 8302/tcp, 8302/udp, 0.0.0.0:8400->8400/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/tcp, 8600/udp edgex-core-data /core-data --consul --prof ... Up 0.0.0.0:48080->48080/tcp, 0.0.0.0:5563->5563/tcp edgex-core-metadata /core-metadata --consul -- ... Up 0.0.0.0:48081->48081/tcp, 48082/tcp edgex-device-random /device-random --registry ... Up 0.0.0.0:49988->49988/tcp edgex-device-virtual /bin/sh -c java -jar -Djav ... Up 0.0.0.0:49990->49990/tcp edgex-export-client /export-client --consul -- ... Up 0.0.0.0:48071->48071/tcp edgex-export-distro /export-distro --consul -- ... Up 0.0.0.0:48070->48070/tcp, 0.0.0.0:5566->5566/tcp edgex-files /bin/sh -c /usr/bin/tail - ... Up edgex-mongo docker-entrypoint.sh /bin/ ... Up 0.0.0.0:27017->27017/tcp edgex-support-logging /support-logging --consul ... Up 0.0.0.0:48061->48061/tcp edgex-support-notifications /support-notifications --c ... Up 0.0.0.0:48060->48060/tcp edgex-support-rulesengine /bin/sh -c java -jar -Djav ... Up 0.0.0.0:48075->48075/tcp edgex-support-scheduler /support-scheduler --consu ... Up 0.0.0.0:48085->48085/tcp root_portainer_1 /portainer -H unix:///var/ ... Exit 1
當device-random這個微服務正常啟動以后,會自動注冊一個設備,名字叫做Random-Integer-Generator01,此設備會將隨機數發送到EdgeX,此設備會在下一篇的文中通過UI界面展示出來,暫時不用過多關注,就理解為有個虛擬設備掛到了edgex上。
驗證device-random是否在正常發送數據到edgex,可以通過EdgeX Logging 服務來驗證,此服務位於edgex-core-data的event/device中,在瀏覽器中使用下面的URL來確認:(本機地址為192.168.0.133)
http://192.168.0.133:48080/api/v1/event/device/Random-Integer-Generator01/100
這上面的這些數據就是這個random device在發送數據給edgex,可能上面的情況看得不太明顯,可以復制數據轉換為json文件來查看:
這個random device會發出
- RandomValue_Int8、
- RandomValue_Int16、
- RandomValue_Int32
這 3 種屬性值,而且三個類型的值不是一起發出,而是每次只發一種。
紅色: 設備名稱
藍色:隨機數屬性
綠色:隨機值
[ { "id": "5ee0ab3d0e3608000184a581", "pushed": 0, "device": "Random-Integer-Generator01", "created": 1591782205002, "modified": 0, "origin": 1591782205000, "schedule": null, "event": null, "readings": [ { "id": "5ee0ab3d0e3608000184a582", "pushed": 0, "created": 1591782205002, "origin": 1591782205000, "modified": 0, "device": "Random-Integer-Generator01", "name": "RandomValue_Int32", "value": "-1016650009" } ] }, { "id": "5ee0ab3d0e3608000184a583", "pushed": 0, "device": "Random-Integer-Generator01", "created": 1591782205003, "modified": 0, "origin": 1591782205001, "schedule": null, "event": null, "readings": [ { "id": "5ee0ab3d0e3608000184a584", "pushed": 0, "created": 1591782205003, "origin": 1591782205001, "modified": 0, "device": "Random-Integer-Generator01", "name": "RandomValue_Int16", "value": "31326" } ] }, { "id": "5ee0ab3d0e3608000184a585", "pushed": 0, "device": "Random-Integer-Generator01", "created": 1591782205004, "modified": 0, "origin": 1591782205000, "schedule": null, "event": null, "readings": [ { "id": "5ee0ab3d0e3608000184a586", "pushed": 0, "created": 1591782205004, "origin": 1591782205000, "modified": 0, "device": "Random-Integer-Generator01", "name": "RandomValue_Int8", "value": "-49" } ] }, { "id": "5ee0ab420e3608000184a587", "pushed": 0, "device": "Random-Integer-Generator01", "created": 1591782210002, "modified": 0, "origin": 1591782210001, "schedule": null, "event": null, "readings": [ { "id": "5ee0ab420e3608000184a588", "pushed": 0, "created": 1591782210002, "origin": 1591782210001, "modified": 0, "device": "Random-Integer-Generator01", "name": "RandomValue_Int8", "value": "-54" } ] }, { "id": "5ee0ab420e3608000184a589", "pushed": 0, "device": "Random-Integer-Generator01", "created": 1591782210002, "modified": 0, "origin": 1591782210000, "schedule": null, "event": null, "readings": [ { "id": "5ee0ab420e3608000184a58a", "pushed": 0, "created": 1591782210002, "origin": 1591782210000, "modified": 0, "device": "Random-Integer-Generator01", "name": "RandomValue_Int32", "value": "1202123764" } ] }, 。。。。。。
從上面這些行為可以看出 這個device在不斷的向edge發送自己的數據。
=====3. 控制設備======
從設備讀取數據只是 EdgeX 的一部分功能,我們也可以使用它來控制設備。當設備注冊 EdgeX 服務時,它會提供設備配置文件,該設備配置文件描述該設備可用的數據讀數,以及可以控制它的命令。
比如:上面當我們的隨機數設備服務注冊設備 Random-Integer-Generator01 時,它使用了一個配置文件,該配置文件里定義了用於更改它將生成的隨機數的最小值和最大值范圍的命令。
~]# docker-compose ps -a
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
edgex-config-seed /bin/sh -c /edgex/cmd/conf ... Exit 0
edgex-core-command /core-command --consul --p ... Up 0.0.0.0:48082->48082/tcp
edgex-core-consul docker-entrypoint.sh agent ... Up 8300/tcp, 8301/tcp, 8301/udp, 8302/tcp, 8302/udp, 0.0.0.0:8400->8400/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/tcp, 8600/udp
edgex-core-data /core-data --consul --prof ... Up 0.0.0.0:48080->48080/tcp, 0.0.0.0:5563->5563/tcp
edgex-core-metadata /core-metadata --consul -- ... Up 0.0.0.0:48081->48081/tcp, 48082/tcp
edgex-device-random /device-random --registry ... Up 0.0.0.0:49988->49988/tcp
edgex-device-virtual /bin/sh -c java -jar -Djav ... Up 0.0.0.0:49990->49990/tcp
edgex-export-client /export-client --consul -- ... Up 0.0.0.0:48071->48071/tcp
edgex-export-distro /export-distro --consul -- ... Up 0.0.0.0:48070->48070/tcp, 0.0.0.0:5566->5566/tcp
edgex-files /bin/sh -c /usr/bin/tail - ... Up
edgex-mongo docker-entrypoint.sh /bin/ ... Up 0.0.0.0:27017->27017/tcp
edgex-support-logging /support-logging --consul ... Up 0.0.0.0:48061->48061/tcp
edgex-support-notifications /support-notifications --c ... Up 0.0.0.0:48060->48060/tcp
edgex-support-rulesengine /bin/sh -c java -jar -Djav ... Up 0.0.0.0:48075->48075/tcp
edgex-support-scheduler /support-scheduler --consu ... Up 0.0.0.0:48085->48085/tcp
root_portainer_1 /portainer -H unix:///var/ ... Exit 1
(本機IP:192.168.0.133)在瀏覽器中輸入下面的URL以得到配置文件:
http://192.168.0.133:48082/api/v1/device/name/Random-Integer-Generator01
同樣把配置文件內容用json轉為可讀模式:
(以屬性名稱為GenerateRandomValue_Int8為例)
紅色: 設備名稱
綠色: url為可操作Random-Integer-Generator01的控制指令(就是使用這些指令來控制這個設備,假如這個設備有跳躍,跑步,走步等多個動作,一個url表示一個動作或者多個動作)
橙色: 請求url時的動作,Get或者PUT
亮綠色背景色:屬性名字
{ "id": "5ee0ab379f8fc20001df7e1d", "name": "Random-Integer-Generator01", "adminState": "UNLOCKED", "operatingState": "ENABLED", "lastConnected": 0, "lastReported": 0, "labels": [ "device-random-example" ], "location": null, "commands": [ { "created": 1591782199972, "modified": 0, "origin": 0, "id": "5ee0ab379f8fc20001df7e18", "name": "GenerateRandomValue_Int8", "get": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int8", "responses": [ { "code": "200", "description": null, "expectedValues": [ "RandomValue_Int8" ] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e18" }, "put": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int8", "responses": [ { "code": "200", "description": null, "expectedValues": [] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "parameterNames": [ "Min_Int8", "Max_Int8" ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e18" } }, { "created": 1591782199973, "modified": 0, "origin": 0, "id": "5ee0ab379f8fc20001df7e19", "name": "GenerateRandomValue_Int16", "get": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int16", "responses": [ { "code": "200", "description": null, "expectedValues": [ "RandomValue_Int16" ] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e19" }, "put": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int16", "responses": [ { "code": "200", "description": null, "expectedValues": [] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "parameterNames": [ "Min_Int8", "Max_Int8" ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e19" } }, { "created": 1591782199973, "modified": 0, "origin": 0, "id": "5ee0ab379f8fc20001df7e1a", "name": "GenerateRandomValue_Int32", "get": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int32", "responses": [ { "code": "200", "description": null, "expectedValues": [ "RandomValue_Int32" ] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e1a" }, "put": { "path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int32", "responses": [ { "code": "200", "description": null, "expectedValues": [] }, { "code": "503", "description": "service unavailable", "expectedValues": [] } ], "parameterNames": [ "Min_Int32", "Max_Int32" ], "url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e1a" } } ] }
使用配置文件中的url請求該設備可以被控制的動作:
"url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e18" 在請求的時候rul中的edgex-core-command要替換為本機IP
在瀏覽器中以GET方式請求GenerateRandomValue_Int8的控制指令,可以看到value值是18(默認情況下生成的隨機數范圍是 -128 到 127)
可以通過PUT方式來修改GenerateRandomValue_Int8的控制指令值得范圍
注意:GET和PUT方式請求的URL內容是一樣的,只是請求方式不一樣。
通過PUT方式來修改范圍,因為在配置文件有這樣一個字段parameterNames
"put": {
"path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int8",
"responses": [
{
"code": "200",
"description": null,
"expectedValues": []
},
{
"code": "503",
"description": "service unavailable",
"expectedValues": []
}
],
"parameterNames": [
"Min_Int8",
"Max_Int8"
],
"url": "http://edgex-core-command:48082/api/v1/device/5ee0ab379f8fc20001df7e1d/command/5ee0ab379f8fc20001df7e18"
}
在put方式的body里設置這個參數:
在進行get請求的時候,value值就變成了0-10范圍內: