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与用户和设备之间的关系,可以用下图来表示:
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。
下面是一个简单的例子: