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。
上面是一个简略的例子: