Ai
43 Star 347 Fork 190

GVPiBUILDING-X/driver-box

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
mqtt_export.go 2.23 KB
一键复制 编辑 原始数据 按行查看 历史
三刀 提交于 2024-04-29 17:28 +08:00 . 设备SN重命名为ID
package export
import (
"crypto/tls"
"encoding/json"
mqtt "github.com/eclipse/paho.mqtt.golang"
"github.com/ibuilding-x/driver-box/driverbox/event"
"github.com/ibuilding-x/driver-box/driverbox/plugin"
"go.uber.org/zap"
"log"
"time"
)
type MqttExport struct {
Broker string `json:"broker"`
Username string `json:"username"`
Password string `json:"password"`
ClientID string `json:"client_id"`
init bool
client mqtt.Client
handler mqtt.MessageHandler
ExportTopic string
}
func (export *MqttExport) Init() error {
if len(export.ExportTopic) == 0 {
panic("exportTopic is blank")
}
options := mqtt.NewClientOptions()
options.AddBroker(export.Broker)
options.SetUsername(export.Username)
options.SetPassword(export.Password)
options.SetClientID(export.ClientID)
// tsl 设置
if options.Servers[0].Scheme == "ssl" {
options.SetTLSConfig(&tls.Config{
InsecureSkipVerify: true,
})
}
options.SetOnConnectHandler(export.onConnectHandler)
options.SetConnectionLostHandler(export.onConnectionLostHandler)
export.client = mqtt.NewClient(options)
token := export.client.Connect()
if token.WaitTimeout(5*time.Second) && token.Error() != nil {
return token.Error()
}
return nil
}
// onConnectHandler 连接成功
func (export *MqttExport) onConnectHandler(client mqtt.Client) {
log.Println("mqttExport init success")
export.init = true
}
// onConnectionLostHandler 连接丢失
func (export *MqttExport) onConnectionLostHandler(client mqtt.Client, err error) {
log.Fatal("local mqtt connect lost", zap.Error(err))
}
// ExportTo 导出消息:写入Edgex总线、MQTT上云
func (export *MqttExport) ExportTo(deviceData plugin.DeviceData) {
log.Println("export...")
bytes, _ := json.Marshal(deviceData)
token := export.client.Publish(export.ExportTopic, 0, false, bytes)
if token.Error() != nil {
log.Fatal(token.Error())
}
}
// 继承Export OnEvent接口
func (export *MqttExport) OnEvent(eventCode string, key string, eventValue interface{}) error {
if event.EventCodeDeviceStatus == eventCode {
export.client.Publish("/driverbox/event/"+export.ClientID, 0, false, map[string]any{"deviceId": key, "online": eventValue})
}
return nil
}
func (export *MqttExport) IsReady() bool {
return export.init
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/iBUILDING-X/driver-box.git
git@gitee.com:iBUILDING-X/driver-box.git
iBUILDING-X
driver-box
driver-box
master

搜索帮助