EdgeX Foundry初體驗(三)--開啟隨機設備服務及如何控制設備


=====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范圍內:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM