物聯網開源開發平臺 Shifu 開放內測!第一版技術文件釋出

亞馬遜雲開發者 發表於 2022-06-22

Shifu 是由邊無際Edgenesis自主研發的物聯網開源開發和管理平臺,開發者通過Shifu可以輕鬆實現連線、監控和控制任何物聯網裝置。

Shifu正式上線GitHub平臺,釋出第一版技術文件,並開啟內測。

熱烈歡迎具有創新力的軟體工程師和有志於探索物聯網業務場景的開發者加入我們,共同構建物聯網時代的開發者生態。

技術文件地址(複製連結檢視)
https://cn.docs.edgenesis.io/

GitHub地址(加入社群可檢視程式碼)
https://github.com/Edgenesis/...

Shifu技術文件目錄:

// 歡迎

// Shifu基本架構

// 快速上手:安裝

// 快速上手:DeviceShifu

// 快速上手:接入一個PLC

// 快速上手:新增新驅動

歡迎

Shifu (github頁面:https://github.com/Edgenesis/...) 是一個基於Kubernetes的開源物聯網開發和管理平臺。使用Shifu,開發者可以更簡單地連線、監控和控制任何物聯網裝置。

物聯網裝置

一個物聯網裝置是指可以與其他裝置、系統、服務進行線上或本地連線和交流的裝置,例如:

  • 一個製造廠裡的機械臂,它接收本地自動化控制系統的命令完成各種動作。
  • 一輛自動導引車,它受到操縱者的遠端控制。
  • 一輛汽車上的溫度計,它命令空調升溫或降溫,同時也傳送溫度資料到雲端。

通訊

Shifu相容不同的通訊協議和驅動,它將不同裝置的不同形式的請求進行統一,以HTTP的形式對使用者開放,使得使用者可以更簡單地使用裝置的功能。

Shifu與使用者和裝置之間的關係,可以用下圖來表示:

image.png

Shifu與裝置之間的通訊: Shifu在持續增加對於新協議和驅動的相容。對於當前相容的列表,參見當前相容的裝置協議和驅動。

當前,Shifu支援下列協議與裝置進行互動:

1.HTTP

2.MQTT

3.RTSP for streaming

4.Siemens S7

5.TCP socket

Shifu與使用者之間的通訊: Shifu在持續增加新協議供使用者進行選擇。對於當前可用協議的列表,參見當前使用者可用的協議。

當前,Shifu支援使用者使用下列協議進行通訊:

1.HTTP

功能

Shifu作為一個物聯網裝置管理和開發平臺,提供以下功能:從裝置取得資料。

Shifu基本架構

Shifu是一個Kubernetes原生的平臺,它的所有元件都以Pod的形式執行。

下圖是Shifu架構的概覽:

image.png

EdgeDevice

Shifu定義了一個CRD EdgeDevice,它描述了一個連線到Shifu的實際裝置的各項資訊。

每一個EdgeDevice擁有兩個部分:EdgeDeviceSpec 和 EdgeDeviceStatus.

EdgeDeviceSpec包含了裝置的基本資訊。

它擁有四個元素:

image.png

EdgeDevicePhase定義了裝置的當前狀態:

image.png

DeviceShifu

EdgeDevice定義了名為DeviceShifu的Kubernetes Pod. DeviceShifu是一個實際裝置的數字化表示,或數字孿生。

每一個DeviceShifu都與一個實際裝置相關聯。使用者與DeviceShifu進行互動,就可以實現與實際裝置的互動。

南向 - DeviceShifu接收使用者的請求,對請求進行轉換併傳送到裝置。

北向 - DeviceShifu收集裝置資料,進行轉換併傳送給使用者端。

Shifu Utils

Shifu在持續加入新的工具類服務來保證不同協議和驅動的相容。

MQTT Broker

MQTT Broker被用來幫助MQTT資訊的訂閱和釋出。當前,Shifu使用了Mosquitto來實現相容。

RTSP Client

RTSP Client保證了流媒體資訊的傳輸。

Siemens S7 Suite

Siemens S7 Suite支援了西門子S7系列PLC的操作。當前,Shifu使用了Snap7來實現相容。

HTTP to SSH driver stub

HTTP to SSH driver stub使得Shifu可以允許使用者任意新增新的命令列驅動。

快速上手

依賴項

Shifu需要以下依賴項:

Golang: Golang是Shifu的開發語言。

Docker: Shifu的各項服務以Docker映象的形式存在。

kind: Kind用於以Docker的方式執行本地的Kubernetes叢集。

kubectl: Kubernetes的操作工具。

kubebuilder: Kubebuilder用於安裝CRD。

Shifu需要一個kubernetes cluster以啟動。使用kind可以做一個快速的搭建:

image.png

當cluster建立完成後,我們就可以快速開始使用Shifu了。

快速配置

Shifu提供了shifu_install.yml檔案,可以用於快速安裝:

image.png

分步操作

也可以按照如下步驟進行安裝:

image.png

安裝Shifu成功後,就可以接入新裝置了。

快速上手 DeviceShifu

本文將通過一個簡單的“helloworld”虛擬裝置的例子,來展示如何向Shifu接入裝置,生成DeviceShifu,並進行操作。

Helloworld 裝置

Helloworld裝置只有一個功能:每次收到請求時,返回“hello world”資訊。

步驟

1.準備虛擬裝置

本次要建立的虛擬裝置是一個軟體應用,它每次收到HTTP GET請求時,都會返回“Hello_world from device via shifu!” 這條資訊。另外,我們還將使用Shifu的資料收集功能對這條資訊進行每秒一次的自動收集。

在開發路徑中,建立一個helloworld.go檔案,包含如下內容:

image.png

生成 go.mod 檔案:

image.png

新增 Dockerfile:

image.png

建立映象

image.png

2.準備 EdgeDevice:

EdgeDevice的基本資訊:假設所有配置檔案都儲存在 /helloworld-device/configuration

Deployment 配置:
helloworld-deployment.yaml

image.png

硬體和連線資訊:
helloworld-edgedevice.yaml

image.png

Service:
helloworld-service.yaml

image.png

3.準備DeviceShifu

使用下面的配置檔案,Shifu將自動生成DeviceShifu的Pod。假設所有配置檔案都儲存在 /helloworld-device/configuration.

ConfigMap:
deviceshifu-helloworld-configmap.yaml

image.png

Deployment:
deviceshifu-helloworld-deployment.yaml

image.png

Service:
deviceshifu-helloworld-service.yaml

image.png

4.建立 DeviceShifu

下面的步驟都需要要求Shifu平臺已經啟動並且正在執行

1.載入剛剛構建完成的docker映象

image.png

2.讓Shifu通過配置建立DeviceShifu的Pod

image.png

3.啟動一個nginx的伺服器

image.png

現在使用kubectl來檢視Pods:

image.png

叢集中應當有以下Pod:

image.png

檢視建立的EdgeDevice:

image.png

DeviceShifu的細節資訊以及狀態可以通過 describe 命令獲取:

image.png

4.使用nginx:

image.png

5.與DeviceShifu進行互動:

應該得到以下輸出:

image.png

6.在日誌中檢視收集到的資料:

image.png

現在 helloworld 裝置已經完全整合到Shifu框架中,可以通過上述方式來通過DeviceShifu與其互動。

如果需要更新configuration,請先delete再apply configurtaion:

image.png

快速上手接入一個PLC

Shifu對西門子S7系列PLC提供了相容。使用者可以使用Shifu,通過HTTP請求對S7 PLC的記憶體進行修改。本文將介紹如何接入一臺西門子S7-1200 1214C PLC並且與它互動。

連線

在接入Shifu之前,PLC應當已經通過乙太網完成物理連線,並且擁有一個IP地址。這裡我們使用192.168.0.1。

Shifu需要如下例所示的配置檔案來獲取IP地址與裝置型別:plc-deployment.yaml

image.png

同時,Shifu還需要一些通用的配置檔案:deviceshifu-plc-configmap.yaml

image.png

deviceshifu-plc-deployment.yaml

image.png

deviceshifu-plc-service.yaml

image.png

plc-edgedevice.yaml

image.png

plc-service.yaml

image.png

向Shifu新增PLC裝置,建立和啟動DeviceShifu:

image.png

操作

Shifu支援通過HTTP請求來編輯PLC記憶體。

sendsinglebit:

修改一個bit,它需要下列引數:

rootaddress: 記憶體區域名稱,比如M代表Merker,Q代表Digital Output。

address: 記憶體區域中的地址。

start: 開始位置。

digit: 從開始位置起第幾個bit。

value: 需要修改成為的數值.

比如,plc-device/sendsinglebit?rootaddress=M&address=0&start=2&digit=2&value=1 會將 M0.2 的第二個 bit 修改為1.

getcontent:

得到記憶體區域中一個byte的值,它需要下列引數:

rootaddress: 記憶體區域名稱,比如M代表Merker,Q代表Digital Output。

address: 記憶體區域中的地址。

start: 開始位置。

比如 plc-device/sendsinglebit?rootaddress=M&address=0&start=2 會返回 M0.2 的一個 byte 的值.

getcpuordercode:

得到PLC的靜態資訊。

快速上手新增新驅動

如果裝置是通過命令列直接呼叫驅動程式中的可執行檔案進行通訊,Shifu支援將他直接接入,從而可以遠端操作使用這類驅動的裝置。

HTTP to SSH driver stub

這個元件的功能是將接收到的HTTP請求轉化為對驅動可執行檔案的命令並遠端執行。

配置

首先,我們需要將帶有可執行檔案的驅動打包成一個Docker容器映象。

在Deployment的配置中,Shifu需要下列四個元素:

EDGEDEVICE_DRIVER_SSH_KEY_PATH:SSH key 的路徑,Shifu需要通過它來訪問驅動的容器。

EDGEDEVICE_DRIVER_HTTP_PORT(可選): 驅動容器的HTTP伺服器埠,預設值為11112.

EDGEDEVICE_DRIVER_EXEC_TIMEOUT_SECOND(可選): 一個操作的超時設定。

EDGEDEVICE_DRIVER_SSH_USER(可選): 通過 SSH 連線到驅動程式容器的使用者,預設為root。

下面是一個簡單的例子:

image.png

物聯網開源開發平臺 Shifu 開放內測!第一版技術文件釋出