写点什么

物联网开源开发平台 Shifu 开放内测!第一版技术文档发布

  • 2022 年 6 月 22 日
  • 本文字数:3254 字

    阅读完需:约 11 分钟

物联网开源开发平台 Shifu 开放内测!第一版技术文档发布

Shifu 是由边无际 Edgenesis 自主研发的物联网开源开发和管理平台,开发者通过 Shifu 可以轻松实现连接、监控和控制任何物联网设备。


Shifu 正式上线 GitHub 平台,发布第一版技术文档,并开启内测。


热烈欢迎具有创新力的软件工程师和有志于探索物联网业务场景的开发者加入我们,共同构建物联网时代的开发者生态。


技术文档地址(复制链接查看)https://cn.docs.edgenesis.io/

GitHub 地址(加入社群可查看代码)https://github.com/Edgenesis/shifu


Shifu 技术文档目录:

// 欢迎

// Shifu 基本架构

// 快速上手:安装

// 快速上手:DeviceShifu

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

// 快速上手:添加新驱动

欢迎

Shifu (github 页面:https://github.com/Edgenesis/...) 是一个基于 Kubernetes 的开源物联网开发和管理平台。使用 Shifu,开发者可以更简单地连接、监控和控制任何物联网设备。

物联网设备

一个物联网设备是指可以与其他设备、系统、服务进行在线或本地连接和交流的设备,例如:


  • 一个制造厂里的机械臂,它接收本地自动化控制系统的命令完成各种动作。

  • 一辆自动导引车,它受到操纵者的远程控制。

  • 一辆汽车上的温度计,它命令空调升温或降温,同时也发送温度数据到云端。

通信

Shifu 兼容不同的通信协议和驱动,它将不同设备的不同形式的请求进行统一,以 HTTP 的形式对用户开放,使得用户可以更简单地使用设备的功能。


Shifu 与用户和设备之间的关系,可以用下图来表示:



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 架构的概览:


EdgeDevice

Shifu 定义了一个 CRD EdgeDevice,它描述了一个连接到 Shifu 的实际设备的各项信息。

每一个 EdgeDevice 拥有两个部分:EdgeDeviceSpec 和 EdgeDeviceStatus.


EdgeDeviceSpec 包含了设备的基本信息。


它拥有四个元素:



EdgeDevicePhase 定义了设备的当前状态:


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 可以做一个快速的搭建:



当 cluster 创建完成后,我们就可以快速开始使用 Shifu 了。

快速配置

Shifu 提供了 shifu_install.yml 文件,可以用于快速安装:

分步操作

也可以按照如下步骤进行安装:



安装 Shifu 成功后,就可以接入新设备了。

快速上手 DeviceShifu

本文将通过一个简单的“helloworld”虚拟设备的例子,来展示如何向 Shifu 接入设备,生成 DeviceShifu,并进行操作。

Helloworld 设备

Helloworld 设备只有一个功能:每次收到请求时,返回“hello world”信息。

步骤

1.准备虚拟设备

本次要创建的虚拟设备是一个软件应用,它每次收到 HTTP GET 请求时,都会返回“Hello_world from device via shifu!” 这条信息。另外,我们还将使用 Shifu 的数据收集功能对这条信息进行每秒一次的自动收集。


在开发路径中,创建一个 helloworld.go 文件,包含如下内容:



生成 go.mod 文件:



添加 Dockerfile:


创建镜像



2.准备 EdgeDevice:


EdgeDevice 的基本信息:假设所有配置文件都保存在 /helloworld-device/configuration


Deployment 配置:

helloworld-deployment.yaml



硬件和连接信息:

helloworld-edgedevice.yaml



Service:

helloworld-service.yaml



3.准备 DeviceShifu


使用下面的配置文件,Shifu 将自动生成 DeviceShifu 的 Pod。假设所有配置文件都保存在 /helloworld-device/configuration.


ConfigMap:

deviceshifu-helloworld-configmap.yaml



Deployment:

deviceshifu-helloworld-deployment.yaml



Service:

deviceshifu-helloworld-service.yaml



4.创建 DeviceShifu


下面的步骤都需要要求 Shifu 平台已经启动并且正在运行


1.加载刚刚构建完成的 docker 镜像



2.让 Shifu 通过配置创建 DeviceShifu 的 Pod



3.启动一个 nginx 的服务器



现在使用 kubectl 来查看 Pods:


集群中应当有以下 Pod:



查看创建的 EdgeDevice:



DeviceShifu 的细节信息以及状态可以通过 describe 命令获取:



4.使用 nginx:



5.与 DeviceShifu 进行交互:


应该得到以下输出:



6.在日志中查看收集到的数据:



现在 helloworld 设备已经完全整合到 Shifu 框架中,可以通过上述方式来通过 DeviceShifu 与其交互。


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


快速上手接入一个 PLC

Shifu 对西门子 S7 系列 PLC 提供了兼容。用户可以使用 Shifu,通过 HTTP 请求对 S7 PLC 的内存进行修改。本文将介绍如何接入一台西门子 S7-1200 1214C PLC 并且与它交互。

连接

在接入 Shifu 之前,PLC 应当已经通过以太网完成物理连接,并且拥有一个 IP 地址。这里我们使用 192.168.0.1。


Shifu 需要如下例所示的配置文件来获取 IP 地址与设备类型:plc-deployment.yaml



同时,Shifu 还需要一些通用的配置文件:deviceshifu-plc-configmap.yaml



deviceshifu-plc-deployment.yaml



deviceshifu-plc-service.yaml



plc-edgedevice.yaml



plc-service.yaml



向 Shifu 添加 PLC 设备,创建和启动 DeviceShifu:


操作

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。


下面是一个简单的例子:




用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
物联网开源开发平台 Shifu 开放内测!第一版技术文档发布_物联网_亚马逊云科技 (Amazon Web Services)_InfoQ写作社区