edgexfoundry之Device Service GO SDK


首先,此文Device Service SDK的翻譯來自官方文檔,edgex的版本是Geneva,是我按照官方文檔一步一步運行的,希望更多研究edgex的小伙伴一起學習!
官方文檔地址:edgex官方文檔

Device Service SDK

EdgeX設備服務軟件開發套件(SDK)可幫助開發人員為EdgeX創建新的設備連接器。 SDK提供了每種設備服務所需的通用支架。這使開發人員可以更快地創建新的設備/傳感器連接器。

EdgeX社區已經提供了許多設備服務。但是,社區無法提供每種協議和每種傳感器的方式。即使EdgeX社區為每種協議提供了設備服務,您的用例,傳感器或安全性基礎結構也可能需要自定義。因此,設備服務SDK提供了擴展或自定義EdgeX設備連接性的方法。

EdgeX提供了兩個SDK,以幫助開發人員創建新的設備服務。 EdgeX的大多數是用Go和C編寫的。因此,有一個用Go和C編寫的設備服務SDK,以支持EdgeX中當今使用的更流行的語言。將來,社區可能會提供備用語言SDK。

SDK是被合並到新的微服務中的庫。它們使編寫新設備服務變得更加容易。通過將SDK庫導入到新的設備服務項目中,開發人員就可以專注於特定於通過設備協議與設備通信的代碼。

SDK中的代碼處理其他細節,例如:-設備服務的初始化-配置服務-將傳感器數據發送到核心數據-管理與核心元數據的通信-等等。

SDK中的代碼還有助於確保您的設備服務符合EdgeX的規則和標准。例如,它確保服務在啟動時已在EdgeX注冊表服務中注冊。

  • go sdk

在本指南中,您將創建一個簡單的設備服務,該服務會生成一個隨機數,以模擬從實際設備中獲取數據。通過這種方式,您將探索一些SDK框架,並完成設備服務而無需實際與之交談來進行必要的工作。

1.安裝依賴

2.獲取Go的EdgeX設備SDK

3.請按照以下步驟在文件系統上創建文件夾,下載Device SDK,並在系統上獲取GoLang設備服務SDK。

  1. 在文件系統上創建一個嵌套文件夾的集合〜/ go / src / github.com / edgexfoundry。此文件夾將保存您的新設備服務。在Linux中,使用單個mkdir命令創建目錄
mkdir -p ~/go/src/github.com/edgexfoundry
  1. 在終端窗口中,將目錄更改為剛創建的文件夾,並使用所示命令在Go中拉下SDK。
cd ~/go/src/github.com/edgexfoundry
git clone --depth 1 --branch v1.2.2 https://github.com/edgexfoundry/device-sdk-go.git
  1. 創建一個文件夾,其中將包含新的設備服務。文件夾的名稱也是您要提供新設備服務的名稱。 EdgeX的標准做法是在設備服務的名稱前加上device-。在此示例中,使用名稱“ device-simple”。
mkdir ~/go/src/github.com/edgexfoundry/device-simple
  1. 將示例代碼從device-sdk-go復制到device-simple:
cd ~/go/src/github.com/edgexfoundry
cp -rf ./device-sdk-go/example/* ./device-simple/

  1. 將Makefile復制到簡單設備上:
cp ./device-sdk-go/Makefile ./device-simple
  1. 將version.go復制到簡單設備上:
cp ./device-sdk-go/version.go ./device-simple/

  1. 完成這些步驟后,您的設備簡單文件夾應類似於以下列表。

image-20201125155617477

  • 啟動新的設備服務

有了設備服務應用程序結構之后,現在就可以對該服務進行編程,使其像傳感器數據獲取服務一樣工作。

1.將文件夾更改為設備簡單目錄。

2.使用您喜歡的文本編輯器打開cmd / device-simple文件夾中的main.go文件。修改導入語句。在導入語句中,將github.com/edgexfoundry/device-sdk-go/example/driver替換為github.com/edgexfoundry/device-simple/driver。還要用github.com/edgexfoundry/device-simple替換github.com/edgexfoundry/device-sdk-go。完成編輯后,保存文件。

3.在您喜歡的文本編輯器中打開在基本文件夾(〜/ go / src / github.com / edgexfoundry / device-simple)中找到的Makefile,並進行以下更改

image-20201125161148428

4.保存

5.輸入:

GO111MODULE=on go mod init

6.使用編輯器打開和編輯在〜/ go / src / github.com / edgexfoundry / device-simple中創建的go.mod文件。將下面突出顯示的代碼添加到文件底部。此代碼指示要使用哪個版本的設備服務SDK和關聯的EdgeX Contracts模塊

require (
    github.com/edgexfoundry/device-sdk-go v1.2.2
    github.com/edgexfoundry/go-mod-core-contracts v0.1.58
)
  • Build your Device Service

為確保您移動和更新的代碼仍然有效,請構建設備服務。在終端窗口中,確保您仍在設備簡單文件夾(包含Makefile的文件夾)中。通過發出以下命令來構建服務:

make build

如果沒有錯誤,則您的服務已准備就緒,可以添加自定義代碼以生成數據值,就像已連接傳感器一樣。

  • 自定義您的設備服務

您正在創建的設備服務不會與真實設備對話。取而代之的是,它將生成一個隨機數,服務通常會在該隨機數處進行調用以從實際設備獲取傳感器數據。

1.在/ driver文件夾中找到simpledriver.go文件,然后使用您喜歡的編輯器將其打開。

2.In the import() area at the top of the file, add "math/rand" under "time".

image-20201125205250361

3.在同一文件(simpledriver.go)中找到HandleReadCommands()函數。在此文件中找到以下代碼行(第87行左右):

if reqs[0].DeviceResourceName == "SwitchButton" {
        cv, _ := dsModels.NewBoolValue(reqs[0].DeviceResourceName, now, s.switchButton)
        res[0] = cv
}

在上述條件前面添加條件(if-else)代碼:

if reqs[0].DeviceResourceName == "randomnumber" {
       cv, _ := dsModels.NewInt32Value(reqs[0].DeviceResourceName, now, int32(rand.Intn(100)))
       res[0] = cv
} else

代碼的第一行檢查當前請求是否針對名為“ randomnumber”的資源。第二行代碼生成一個整數(0到100之間),並將其用作設備服務發送到EdgeX的值-模仿從真實設備收集數據的過程。在這里,設備服務通常會捕獲來自設備的一些傳感器讀數,並將數據發送到EdgeX。您需要在HandleReadCommands中進行一些自定義工作,以與設備進行對話,獲取最新的傳感器值並將其發送到EdgeX。

4.Save the simpledriver.go file

  • 創建設備配置文件Creating your Device Profile

設備配置文件是YAML文件,它描述EdgeX的設備類別。有關設備類型,這些設備提供的數據以及如何命令該設備的一般特征都在設備配置文件中。設備配置文件告訴設備服務從設備收集了哪些數據以及如何獲取數據。

請按照以下步驟為簡單的隨機數生成設備服務創建設備配置文件。

1.瀏覽cmd / device-simple / res文件夾中的文件。請注意此文件夾中已經存在的示例Simple-Driver.yaml設備配置文件。用您喜歡的編輯器打開文件並瀏覽其內容。請注意文件中的deviceResources如何表示設備的屬性(如SwitchButton,X,Y和Z旋轉的屬性)。類似地,coreCommands指定發布給設備的命令。

2.本文檔中提供了針對隨機數設備的預先創建的設備配置文件。下載random-generator-device.yaml並將文件保存到〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple / res文件夾。

3.在文本編輯器中打開random-generator-device.yaml文件。在此設備配置文件中,所描述的設備具有deviceResource:randomnumber。請注意類型與deviceResource的關聯方式。在這種情況下,設備配置文件會通知EdgeX隨機數將是INT32。在現實世界的物聯網情況下,此deviceResource列表可能會很廣泛。您可能會發現此部分中充滿了許多deviceResources和與不同類型相關聯的每個deviceResource,而不是單個deviceResource。還請注意設備配置文件如何描述REST命令(“獲取隨機數”)以調用以從設備服務獲取隨機數。

  • Configuring your Device Service(配置設備服務)

現在更新新設備服務的配置。本文檔提供了一個新的configuration.toml文件。此配置文件:

  • 更改服務運行的端口,以免與其他設備服務沖突
  • 更改自動事件頻率,該頻率確定設備服務何時從模擬設備收集數據(每10秒)
  • 在服務啟動時設置隨機數生成設備的初始配置

下載configuration.toml並將文件保存到〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple / res文件夾(覆蓋現有配置文件)。將設備服務的主機地址更改為系統的IP地址。

警告:在configuration.toml中,將主機地址(第7行附近)更改為系統主機的IP地址。這樣,當創建新設備時,核心元數據可以回調到新設備服務。由於EdgeX的其余部分(包括核心元數據)將在Docker中運行,因此必須提供Docker網絡上主機系統的IP地址,以允許Docker中的元數據從Docker調出到主機上運行的新設備服務系統。

  • Rebuild your Device Service(重建設備服務)

就像您在上面的“構建設備服務”步驟中所做的一樣,構建設備簡單服務,該服務將創建作為設備服務的可執行程序。在終端窗口中,確保您位於設備簡單文件夾(包含Makefile的文件夾)中。通過發出以下命令來構建服務:
cd ~/go/src/github.com/edgexfoundry/device-simple
make build

如果沒有錯誤,那么將創建您的服務並將其放在〜/ go / src / github.com / edgexfoundry / device-simple / cmd / device-simple文件夾中。在文件夾中查找設備簡單的可執行文件。

Run your Device Service運行設備服務

允許由Device Service Go SDK構成的新創建的設備服務創建模仿傳感器的數據,然后將其發送到EdgeX:

1.按照Docker入門指南來啟動所有EdgeX。從包含docker-compose文件的文件夾中,通過以下調用啟動EdgeX:

docker-compose up -d

2.在終端窗口中,將目錄更改為device-simple的cmd / device-simple文件夾,然后運行新的device-simple服務。

cd ~/go/src/github.com/edgexfoundry/device-simple/cmd/device-simple
./device-simple

這將啟動服務,並立即在終端中顯示日志條目。

3.使用瀏覽器,輸入以下URL以查看服務正在生成並發送到EdgeX的事件/讀取數據:
http://localhost:48080/api/v1/event/device/RandNum-Device01/100
該請求要求核心數據提供與RandNum-Device-01相關的最近100個事件/讀數。


免責聲明!

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



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