Skip to content
Snippets Groups Projects
Commit f7b3ef59 authored by KERDREUX Jerome's avatar KERDREUX Jerome
Browse files

Big refactoring of device creation.. cleaner

parent b47ebb92
Branches
No related tags found
No related merge requests found
......@@ -16,7 +16,8 @@ func newDevices(gw *Gateway, zDev *Z2MDevice) {
for i, expose := range zDev.Definition.Exposes {
addr, _ := baseAddr.Add(int64(i))
deviceMap := map[string]func(uuid.UUID, *Z2MDevice){
var dev XAALDeviceInterface
deviceMap := map[string]func(uuid.UUID, *Z2MDevice) XAALDeviceInterface{
"contact": NewContact,
"temperature": NewThermometer,
"humidity": NewHygrometer,
......@@ -28,17 +29,17 @@ func newDevices(gw *Gateway, zDev *Z2MDevice) {
// }
if createFunc, ok := deviceMap[expose.Name]; ok {
createFunc(addr, zDev)
dev = createFunc(addr, zDev)
} else if expose.Type == "switch" {
NewPowerRelay(addr, zDev)
dev = NewPowerRelay(addr, zDev)
} else if expose.Type == "light" {
NewLamp(addr, zDev)
dev = NewLamp(addr, zDev)
}
// if dev != nil {
// zDev.XAALDevice = append(zDev.XAALDevice, dev)
// // gw.engine.AddDevice(dev)
// }
if dev != nil {
zDev.XAALDevices = append(zDev.XAALDevices, dev)
gw.engine.AddDevice(dev.getXAALDevice())
}
}
}
......
......@@ -44,6 +44,7 @@ type Lamp struct {
type XAALDeviceInterface interface {
update(map[string]interface{})
getXAALDevice() *xaal.Device
}
func (dev *XAALDevice) setup(zDev *Z2MDevice) {
......@@ -52,17 +53,19 @@ func (dev *XAALDevice) setup(zDev *Z2MDevice) {
dev.HWID = zDev.IeeeAddress
dev.Version = zDev.SwBuildID
dev.Info = "z2m:" + zDev.Type + ":" + zDev.FriendlyName
GetGW().engine.AddDevice(dev.Device)
}
func (dev *XAALDevice) getXAALDevice() *xaal.Device {
return dev.Device
}
// ----------------------------------------------------------------------------
// Contact
// ----------------------------------------------------------------------------
func NewContact(addr uuid.UUID, zDev *Z2MDevice) {
func NewContact(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &Contact{XAALDevice{schemas.NewContact(addr)}}
dev.setup(zDev)
// TODO: put this in Z2MDevice
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *Contact) update(payload map[string]interface{}) {
......@@ -73,10 +76,10 @@ func (dev *Contact) update(payload map[string]interface{}) {
// ----------------------------------------------------------------------------
// Thermometer
// ----------------------------------------------------------------------------
func NewThermometer(addr uuid.UUID, zDev *Z2MDevice) {
func NewThermometer(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &Thermometer{XAALDevice{schemas.NewThermometer(addr)}}
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *Thermometer) update(payload map[string]interface{}) {
......@@ -87,10 +90,10 @@ func (dev *Thermometer) update(payload map[string]interface{}) {
// ----------------------------------------------------------------------------
// Hygrometer
// ----------------------------------------------------------------------------
func NewHygrometer(addr uuid.UUID, zDev *Z2MDevice) {
func NewHygrometer(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &Hygrometer{XAALDevice{schemas.NewHygrometer(addr)}}
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *Hygrometer) update(payload map[string]interface{}) {
......@@ -101,10 +104,10 @@ func (dev *Hygrometer) update(payload map[string]interface{}) {
// ----------------------------------------------------------------------------
// LinkQuality
// ----------------------------------------------------------------------------
func NewLinkQuality(addr uuid.UUID, zDev *Z2MDevice) {
func NewLinkQuality(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &LinkQuality{XAALDevice{schemas.NewLinkquality(addr)}}
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *LinkQuality) update(payload map[string]interface{}) {
......@@ -116,10 +119,10 @@ func (dev *LinkQuality) update(payload map[string]interface{}) {
// ----------------------------------------------------------------------------
// Battery
// ----------------------------------------------------------------------------
func NewBattery(addr uuid.UUID, zDev *Z2MDevice) {
func NewBattery(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &Battery{XAALDevice{schemas.NewBattery(addr)}}
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *Battery) update(payload map[string]interface{}) {
......@@ -130,21 +133,22 @@ func (dev *Battery) update(payload map[string]interface{}) {
// ----------------------------------------------------------------------------
// PowerRelay
// ----------------------------------------------------------------------------
func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice) {
func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr)}, *zDev}
dev.SetMethod("turn_on", dev.On)
dev.SetMethod("turn_off", dev.Off)
dev.SetMethod("toggle", dev.Toggle)
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *PowerRelay) update(payload map[string]interface{}) {
value := payload["state"].(string)
power := dev.GetAttribute("power")
if value == "ON" {
dev.GetAttribute("power").SetValue(true)
power.SetValue(true)
} else {
dev.GetAttribute("power").SetValue(false)
power.SetValue(false)
}
}
......@@ -174,21 +178,22 @@ func (dev *PowerRelay) Toggle(xaal.MessageBody) *xaal.MessageBody {
// ----------------------------------------------------------------------------
// Lamp
// ----------------------------------------------------------------------------
func NewLamp(addr uuid.UUID, zDev *Z2MDevice) {
func NewLamp(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &Lamp{XAALDevice{schemas.NewLamp(addr)}, *zDev}
dev.SetMethod("turn_on", dev.On)
dev.SetMethod("turn_off", dev.Off)
dev.SetMethod("toggle", dev.Toggle)
dev.setup(zDev)
zDev.XAALDevices = append(zDev.XAALDevices, dev)
return dev
}
func (dev *Lamp) update(payload map[string]interface{}) {
value := payload["state"].(string)
light := dev.GetAttribute("light")
if value == "ON" {
dev.GetAttribute("light").SetValue(true)
light.SetValue(true)
} else {
dev.GetAttribute("light").SetValue(false)
light.SetValue(false)
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment