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 connectionyangxijie/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`获取实时视频流
本文由边无际受权公布