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。

上面是一个简略的例子: