From d8b826cade29bc428d506bf02a624b9836f6743e Mon Sep 17 00:00:00 2001
From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr>
Date: Fri, 22 Nov 2024 21:25:11 +0100
Subject: [PATCH] Refactoring in progress

Move the XAALDevice.setup() to XAALInterface, and call it after device
creation
---
 xaal.go | 30 ++++++------------------------
 z2m.go  |  1 +
 2 files changed, 7 insertions(+), 24 deletions(-)

diff --git a/xaal.go b/xaal.go
index 953336b..b209ef7 100644
--- a/xaal.go
+++ b/xaal.go
@@ -76,6 +76,7 @@ type DebugDevice struct {
 type XAALDeviceInterface interface {
 	update(map[string]interface{})
 	GetXAALDevice() *xaal.Device
+	setup()
 }
 
 func (dev *XAALDevice) setup() {
@@ -95,9 +96,7 @@ func (dev *XAALDevice) GetXAALDevice() *xaal.Device {
 // Contact
 // =============================================================================
 func NewContact(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
-	dev := &Contact{XAALDevice{schemas.NewContact(addr), zDev, exp}}
-	dev.setup()
-	return dev
+	return &Contact{XAALDevice{schemas.NewContact(addr), zDev, exp}}
 }
 
 func (dev *Contact) update(payload map[string]interface{}) {
@@ -111,9 +110,7 @@ func (dev *Contact) update(payload map[string]interface{}) {
 // Thermometer
 // =============================================================================
 func NewThermometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
-	dev := &Thermometer{XAALDevice{schemas.NewThermometer(addr), zDev, exp}}
-	dev.setup()
-	return dev
+	return &Thermometer{XAALDevice{schemas.NewThermometer(addr), zDev, exp}}
 }
 
 func (dev *Thermometer) update(payload map[string]interface{}) {
@@ -127,9 +124,7 @@ func (dev *Thermometer) update(payload map[string]interface{}) {
 // Hygrometer
 // =============================================================================
 func NewHygrometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
-	dev := &Hygrometer{XAALDevice{schemas.NewHygrometer(addr), zDev, exp}}
-	dev.setup()
-	return dev
+	return &Hygrometer{XAALDevice{schemas.NewHygrometer(addr), zDev, exp}}
 }
 
 func (dev *Hygrometer) update(payload map[string]interface{}) {
@@ -145,7 +140,6 @@ func (dev *Hygrometer) update(payload map[string]interface{}) {
 func NewLinkQuality(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &LinkQuality{XAALDevice{schemas.NewLinkquality(addr), zDev, exp}}
 	dev.GetAttribute("level").Value = 0 // override type to int
-	dev.setup()
 	dev.RemoveAttribute("devices")
 	dev.UnsupportedAttributes = []string{"devices"}
 	return dev
@@ -167,7 +161,6 @@ func (dev *LinkQuality) update(payload map[string]interface{}) {
 // =============================================================================
 func NewBattery(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &Battery{XAALDevice{schemas.NewBattery(addr), zDev, exp}}
-	dev.setup()
 	dev.RemoveAttribute("devices")
 	dev.UnsupportedAttributes = []string{"devices"}
 	return dev
@@ -188,7 +181,6 @@ func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInter
 	dev.SetMethod("turn_on", dev.turnOn)
 	dev.SetMethod("turn_off", dev.turnOff)
 	dev.SetMethod("toggle", dev.toggle)
-	dev.setup()
 	return dev
 }
 
@@ -233,7 +225,6 @@ func (dev *PowerRelay) toggle(xaal.MessageBody) *xaal.MessageBody {
 // =============================================================================
 func NewPowerMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &PowerMeter{XAALDevice{schemas.NewPowermeter(addr), zDev, exp}}
-	dev.setup()
 	dev.RemoveAttribute("devices")
 	dev.UnsupportedAttributes = []string{"devices"}
 	return dev
@@ -281,7 +272,6 @@ func NewLamp(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 		dev.AddMethod("set_hsv", dev.setHSV)
 		dev.AddMethod("set_mode", dev.setMode)
 	}
-	dev.setup()
 	return dev
 }
 
@@ -442,7 +432,6 @@ func (dev *Lamp) setMode(body xaal.MessageBody) *xaal.MessageBody {
 // =============================================================================
 func NewButtonRemote(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &ButtonRemote{XAALDevice{schemas.NewButtonRemote(addr), zDev, exp}}
-	dev.setup()
 	dev.SetMethod("get_buttons", dev.getButtons)
 	return dev
 }
@@ -470,9 +459,7 @@ func (dev *ButtonRemote) getButtons(xaal.MessageBody) *xaal.MessageBody {
 // Motion
 // =============================================================================
 func NewMotion(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
-	dev := &Motion{XAALDevice{schemas.NewMotion(addr), zDev, exp}}
-	dev.setup()
-	return dev
+	return &Motion{XAALDevice{schemas.NewMotion(addr), zDev, exp}}
 }
 
 func (dev *Motion) update(payload map[string]interface{}) {
@@ -488,7 +475,6 @@ func (dev *Motion) update(payload map[string]interface{}) {
 func NewLuxMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &LuxMeter{XAALDevice{schemas.NewLuxmeter(addr), zDev, exp}}
 	dev.GetAttribute("illuminance").Value = 0 // override
-	dev.setup()
 	return dev
 }
 
@@ -507,7 +493,6 @@ func NewVoltMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterf
 	dev := &VoltMeter{XAALDevice{schemas.NewBasic(addr), zDev, exp}}
 	dev.DevType = "voltmeter.any"
 	dev.AddAttribute("voltage", 0.0)
-	dev.setup()
 	return dev
 }
 
@@ -525,7 +510,6 @@ func NewAmpMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterfa
 	dev := &AmpMeter{XAALDevice{schemas.NewBasic(addr), zDev, exp}}
 	dev.DevType = "ampmeter.any"
 	dev.AddAttribute("current", 0.0)
-	dev.setup()
 	return dev
 }
 
@@ -540,9 +524,7 @@ func (dev *AmpMeter) update(payload map[string]interface{}) {
 // Debug Device
 // =============================================================================
 func NewDebugDevice(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
-	dev := &DebugDevice{XAALDevice{schemas.NewBasic(addr), zDev, exp}}
-	dev.setup()
-	return dev
+	return &DebugDevice{XAALDevice{schemas.NewBasic(addr), zDev, exp}}
 }
 
 func (dev *DebugDevice) update(payload map[string]interface{}) {
diff --git a/z2m.go b/z2m.go
index 27486bc..5a5789a 100644
--- a/z2m.go
+++ b/z2m.go
@@ -127,6 +127,7 @@ func (zDev *Z2MDevice) FindXAALDevices(gw *Gateway) {
 		}
 
 		if dev != nil {
+			dev.setup()
 			zDev.XAALDevices = append(zDev.XAALDevices, dev)
 			xaalDev := dev.GetXAALDevice()
 			xaalDev.GroupID = grpAdd
-- 
GitLab