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)
 		}