本文是基于华为官方提供测试用例kubeedge-temperature-demo进行测试。
功能说明
本示例主要是测试设备通过kubeedge边缘侧向云端发送数据。
设备端代码main.go更改
1、去掉与设备硬件相关代码,将温度值设为周期性累加的方式,以便于在云端观察温度值的变化。
2、配置MQTT服务的地址,即kubeedge边缘节点的IP地址
试验
在云端查看边缘节点状态。本例使用的边缘节点是localhost节点。
配置设备的yaml文件:
cd ~/kubeEdge/examples-master/kubeedge-temperature-demo/crds
vim device.yaml
部署设备
$ kubectl delete -f devicemodel.yaml
devicemodel.devices.kubeedge.io "temperature-model" deleted
$ kubectl create -f device.yaml
device.devices.kubeedge.io/temperature created
更改deployment.yaml
部署deployment.yaml
$ kubectl create -f deployment.yaml
deployment.apps/temperature-mapper created
在云端查看设备状态
$ kubectl get devicemodel
NAME AGE
temperature-model 49m
$ kubectl get device
NAME AGE
temperature 51m
在云端观察:
设备端main.go源码分析
流程:
1、连接 mqtt:connectToMqtt,需要边缘端开启 mqtt 服务,并监听 1883 端口,否则会连接失败。
2、采集温度:ReadDHTxxWithContextAndRetry(本实验中去掉了该函数)。
3、将温度值发布到mqtt:publishToMqtt。
4、之后进入 KubeEdge 系统,在云端可查看状态。
其它说明:
发布主题指定如下
deviceTwinUpdate := "$hw/events/device/" + "temperature" + "/twin/update"
temperature 为设备名称。需要与 Device 中的 metadata.name 保持一致。此名称也是 kubectl get device 查看到的名称。可修改使其不一致,观察效果。
发布消息前先创建消息体:createActualUpdateMessage,结构体为 DeviceTwinUpdate,具体如下:
map[string]*MsgTwin{"temperature-status": {Actual: &TwinValue{Value: &actualValue}, Metadata: &TypeMetadata{Type: "Updated"}}}
实际数据:24℃
{"event_id":"","timestamp":0,"twin":{"temperature-status":{"actual":{"value":"24C"},"metadata":{"type":"Updated"}}}}
查看device.yaml:
status:
twins:
- propertyName: temperature-status
desired:
metadata:
type: string
value: ''
补充:
本次在测试时,遇到kubeedge边缘节点Mqtt拒绝连接问题
connect error: Network Error : dial tcp 192.168.50.40:1883: connect: connection refused
原因:通过systemctl status mosquitto查看状态mosquitto没有启动
root@localhost:/kubeedge# systemctl status mosquitto
● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
解决:systemctl start mosquitto
再次查看状态:
root@localhost:/kubeedge# systemctl status mosquitto
● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-03-31 01:50:13 UTC; 3s ago
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
Main PID: 1386 (mosquitto)
Tasks: 1
Memory: 564.0K
CPU: 26ms
CGroup: /system.slice/mosquitto.service
└─1386 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf