refactor: embed mochi mqtt broker

This commit is contained in:
2026-08-03 14:19:28 +08:00
parent fefdba470a
commit 5edca1524f
13 changed files with 148 additions and 69 deletions

View File

@@ -11,18 +11,23 @@ import (
)
type MQTT struct {
Broker string `yaml:"Broker"`
ClientID string `yaml:"ClientID"`
Username string `yaml:"Username"`
Password string `yaml:"Password"`
UpTopic string `yaml:"UpTopic"`
DownTopic string `yaml:"DownTopic"`
AckTopic string `yaml:"AckTopic"`
QoS byte `yaml:"QoS"`
TLS bool `yaml:"TLS"`
CAFile string `yaml:"CAFile"`
CertificateFile string `yaml:"CertificateFile"`
PrivateKeyFile string `yaml:"PrivateKeyFile"`
Address string `yaml:"Address"`
ListenerID string `yaml:"ListenerID"`
Devices []MQTTDevice `yaml:"Devices"`
UpTopic string `yaml:"UpTopic"`
DownTopic string `yaml:"DownTopic"`
AckTopic string `yaml:"AckTopic"`
QoS byte `yaml:"QoS"`
TLS bool `yaml:"TLS"`
CAFile string `yaml:"CAFile"`
CertificateFile string `yaml:"CertificateFile"`
PrivateKeyFile string `yaml:"PrivateKeyFile"`
}
type MQTTDevice struct {
ClientID string `yaml:"ClientID"`
DeviceID string `yaml:"DeviceID"`
Username string `yaml:"Username"`
Password string `yaml:"Password"`
}
type HTTP struct {
Address string `yaml:"Address"`
@@ -50,13 +55,26 @@ func Load(path string) (Config, error) {
if err = yaml.Unmarshal(data, &cfg); err != nil {
return cfg, err
}
override(&cfg.MQTT.Password, "HEQI_IOT_MQTT_PASSWORD")
if len(cfg.MQTT.Devices) == 1 {
override(&cfg.MQTT.Devices[0].Password, "HEQI_IOT_MQTT_PASSWORD")
}
override(&cfg.HTTP.InternalToken, "HEQI_IOT_INTERNAL_TOKEN")
override(&cfg.Protocol.Key1, "HEQI_IOT_KEY_1")
override(&cfg.Protocol.Key2, "HEQI_IOT_KEY_2")
override(&cfg.Protocol.Key3, "HEQI_IOT_KEY_3")
if cfg.MQTT.Broker == "" || cfg.HTTP.Address == "" || cfg.HTTP.InternalToken == "" {
return cfg, fmt.Errorf("MQTT.Broker、HTTP.Address 和 HTTP.InternalToken 必填")
if cfg.MQTT.Address == "" || cfg.HTTP.Address == "" || cfg.HTTP.InternalToken == "" {
return cfg, fmt.Errorf("MQTT.Address、HTTP.Address 和 HTTP.InternalToken 必填")
}
if cfg.MQTT.ListenerID == "" {
cfg.MQTT.ListenerID = "mqtt-tcp"
}
if len(cfg.MQTT.Devices) == 0 {
return cfg, fmt.Errorf("MQTT.Devices 必填Broker 禁止匿名连接")
}
for index, device := range cfg.MQTT.Devices {
if device.ClientID == "" || device.DeviceID == "" || device.Username == "" || device.Password == "" {
return cfg, fmt.Errorf("MQTT.Devices[%d] 的 ClientID、DeviceID、Username 和 Password 必填", index)
}
}
return cfg, nil
}