乐趣区

关于程序员:设备模块化接入用Shifu完成物联网应用开发

Shifu 是一个 Kubernetes 原生的 IoT 设施虚拟化框架。Shifu 心愿帮忙 IoT 利用开发者以即插即用的形式实现 IoT 设施的虚拟化、监督、管控和自动化。本文通过在本地集群中部署 Shifu,实现通过 MQTT、Http 等形式接入物联设施,体验了用容器开发的门路实现物联网利用开发。

Shifu 官网:https://shifu.run/zh-Hans/
Github 仓库:https://github.com/Edgenesis/…

创立集群并装置 Shifu

# 启动 Docker
$ open -a docker

# 创立集群
$ sudo kind create cluster --image="kindest/node:v1.24.0"

# 提前准备镜像导入集群
$ sudo docker pull quay.io/brancz/kube-rbac-proxy:v0.12.0 
$ sudo docker pull edgehub/shifu-controller:v0.1.1
$ sudo docker pull nginx:1.21
$ sudo kind load docker-image quay.io/brancz/kube-rbac-proxy:v0.12.0 edgehub/shifu-controller:v0.1.1 nginx:1.21

# 装置 shifu
$ git clone https://github.com/Edgenesis/shifu.git
$ cd shifu
$ sudo kubectl apply -f pkg/k8s/crd/install/shifu_install.yml

# 跑一个应用程序
$ sudo kubectl run --image=nginx:1.21 nginx

设施接入

MQTT

测试 MQTT 服务器

# shellA
$ mosquitto_sub -h 82.157.170.202 -t topic0

# shellB
$ mosquitto_pub -h 82.157.170.202 -t topic0 -m "哈哈哈"

接入设施

$ sudo docker pull edgehub/deviceshifu-http-mqtt:v0.1.1
$ sudo kind load docker-image edgehub/deviceshifu-http-mqtt:v0.1.1
$ sudo kubectl apply -f examples/my_mqtt/mqtt_deploy

读取数据

$ sudo kubectl exec -it nginx -- bash

$ curl http://deviceshifu-mqtt.deviceshifu.svc.cluster.local/mqtt_data

连贯温度计和 LED

  • 先将两个设施连贯到电脑
  • 而后启起来两个转 HTTP 的服务 进行演示
  • 而后部署至 Shifu
  • 利用开发后进行联动

连贯设施至电脑

  • 温度计应用串口服务器通过网线连贯至电脑
  • LED 应用 RS485 转 USB 的芯片连贯至电脑

本地启动 HTTP 服务

$ cd api_thermometer
$ uvicorn --host 0.0.0.0 --port 23330 main:app

$ cd api_led
$ uvicorn --host 0.0.0.0 --port 23331 main:app

本地验证

$ curl http://localhost:23330/temperature
$ curl http://localhost:23330/humidity
$ curl http://localhost:23331/setfloat\?value\=123.4

接入设施

  • 批改 http_thermometer/deployment/http_edgedevice.yaml 中 ip 地址。
  • 批改 http_led/deployment/http_edgedevice.yaml 中 ip 地址。
$ sudo docker pull edgehub/deviceshifu-http-http:v0.1.1
$ sudo kind load docker-image edgehub/deviceshifu-http-http:v0.1.1
$ sudo kubectl apply -f examples/my_http_led/deployment
$ sudo kubectl apply -f examples/my_http_thermometer/deployment

与设施交互

$ sudo kubectl exec -it nginx -- bash

$ curl http://my-thermometer.deviceshifu.svc.cluster.local/temperature
$ curl http://my-thermometer.deviceshifu.svc.cluster.local/humidity
$ curl http://my-led.deviceshifu.svc.cluster.local/setfloat?value=23.4

利用开发

将温度和湿度读取,而后在 LED 下面间歇显示进去。

$ sudo docker build -t yangxijie/connection:v0.0.1 .
$ sudo docker images | grep connection
yangxijie/connection  v0.0.1  a9526147ddad  2 minutes ago  125MB
$ sudo kind load docker-image yangxijie/connection:v0.0.1
$ sudo kubectl run --image=yangxijie/connection:v0.0.1 connection-name

西门子 PLC

接入设施

$ sudo docker pull edgehub/deviceshifu-http-http:v0.1.1
$ sudo docker pull edgehub/plc-device:v0.0.1
$ sudo kind load docker-image edgehub/deviceshifu-http-http:v0.1.1 edgehub/plc-device:v0.0.1
$ sudo kubectl apply -f examples/my_plc/plc-deployment

与设施交互

$ sudo kubectl run nginx --image=nginx:1.21 -n deviceshifu 
$ sudo kubectl exec -it nginx -n deviceshifu -- bash

$ curl "deviceshifu-plc/sendsinglebit?rootaddress=Q&address=0&start=0&digit=1&value=1"; echo

海康威视摄像头

接入设施

获取摄像头 ip 地址,批改 rtsp/camera-deployment/deviceshifu-camera-deployment.yaml 中的 ip 地址

$ sudo docker pull edgehub/deviceshifu-http-http:v0.1.1
$ sudo docker pull edgehub/camera-python:v0.0.1
$ sudo kind load docker-image edgehub/deviceshifu-http-http:v0.1.1 edgehub/camera-python:v0.0.1
$ sudo kubectl apply -f examples/my_rtsp/camera-deployment

与设施交互

# 集群中应用 curl 交互
$ sudo kubectl exec -it nginx -- bash

$ curl http://deviceshifu-camera.deviceshifu.svc.cluster.local/info

# 本机浏览器拜访
$ sudo kubectl port-forward svc/deviceshifu-camera -n deviceshifu 8080:80
# 输出 `localhost:8080/info` 查看信息
# 输出 `localhost:8080/capture` 获取图片
# 输出 `localhost:8080/move/{up|down|left|right}` 操控相机地位
# 输出 `localhost:8080/stream?timeout=0` 获取实时视频流

本文由边无际受权公布

退出移动版