diff --git a/config.go b/config.go index c8f7ae3621e3c9f72ea2c3e4cb66fb9d1c303912..b5a046900fbeac512f03767e4023c8b3b6c2930a 100644 --- a/config.go +++ b/config.go @@ -1,8 +1,68 @@ package main -import "github.com/google/uuid" +import ( + "gitlab.imt-atlantique.fr/xaal/code/go/core/uuid" + "gitlab.imt-atlantique.fr/xaal/code/go/core/xaal" + "gopkg.in/ini.v1" +) var ( mqttTopic = "zigbee2mqtt" mqttClientID = "z2m-" + uuid.New().String() ) + +type Config struct { + brokerHost string + topic string + logLevel string + brokerPort int + baseAddr uuid.UUID +} + +func parseConfig() (*Config, error) { + // Default configuration + config := Config{brokerHost: "mqtt", topic: "zigbee2mqtt", logLevel: "INFO", brokerPort: 1883} + // Parse the configuration file + cfg, err := ini.Load(xaal.GetConfigDir() + "/z2m.ini") + if err != nil { + return nil, err + } + sec := cfg.Section(ini.DefaultSection) + + // NOTE: This parsing is painful to write, I should look for a better way to do it + + // broker + broker, err := sec.GetKey("broker") + if err == nil { + config.brokerHost = broker.String() + } + // topic + topic, err := sec.GetKey("topic") + if err == nil { + config.topic = topic.String() + } + // log level + level, err := sec.GetKey("log_level") + if err == nil { + config.logLevel = level.String() + } + // port + port, err := sec.GetKey("port") + if err == nil { + value, err := port.Int() + if err != nil { + return nil, err + } + config.brokerPort = value + } + // base address + addr, err := sec.GetKey("base_addr") + if err == nil { + baseAddr, err := uuid.FromString(addr.String()) + if err != nil { + return nil, err + } + config.baseAddr = baseAddr + } + return &config, nil +} diff --git a/main.go b/main.go index 3f7a5690edfeaeb23ed7560eb67f5ce2fa48cace..4973312e68493afd9ed53a3809f184f1001bbc82 100644 --- a/main.go +++ b/main.go @@ -1,25 +1,21 @@ package main import ( - "flag" - "fmt" "log/slog" "gitlab.imt-atlantique.fr/xaal/code/go/core/xaal" ) func main() { - mqttBroker := flag.String("broker", "", "The MQTT broker URL") - flag.Parse() - - if *mqttBroker == "" { - fmt.Println("Error: MQTT broker URL is required") + cfg, err := parseConfig() + if err != nil { + slog.Error("Error parsing configuration file: ", "err", err) return } + // spew.Dump(cfg) xaal.SetupLogger() - client := mqttSetup(*mqttBroker, 1883) - // client.Publish("zigbee2mqtt/0x70b3d52b600f89d3/set", 0, false, `{"state": "toggle"}`) + client := mqttSetup(cfg.brokerHost, cfg.brokerPort) eng := xaal.NewEngine() gw := NewGW(client) diff --git a/z2m.go b/z2m.go index 52ccfb9d9f3bc8caedf101b9f899bb45db11b8b5..561936479cb11f57466b775065d61158b1119e0c 100644 --- a/z2m.go +++ b/z2m.go @@ -91,11 +91,10 @@ func (zDev *Z2MDevice) HandleMessage(msg MQTT.Message) { if err != nil { slog.Error("Error decoding JSON", "err", err) } else { - slog.Info("Updating device:", "name", zDev.FriendlyName) + slog.Debug("Updating device:", "name", zDev.FriendlyName) for _, dev := range zDev.XAALDevices { dev.update(data) } - } } @@ -259,14 +258,13 @@ func mqttPublishHander(client MQTT.Client, msg MQTT.Message) { if slices.Contains(ignoredTopics, msg.Topic()) { return } - slog.Debug("Received message on", "topic", msg.Topic()) - + // slog.Debug("Received message on", "topic", msg.Topic()) // Is it devices definitions ? if msg.Topic() == mqttTopic+"/bridge/devices" { jsonParseDevices(msg.Payload()) } else { dev := GetGW().GetZDeviceByTopic(msg.Topic()) - mqttDumpMsg(msg) + // mqttDumpMsg(msg) if dev != nil { dev.HandleMessage(msg) }