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

Added brightness and white color temp

parent 73b7aed5
Branches
No related tags found
No related merge requests found
......@@ -235,9 +235,9 @@ func (dev *PowerMeter) update(payload map[string]interface{}) {
// =============================================================================
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.SetMethod("turn_on", dev.turnOn)
dev.SetMethod("turn_off", dev.turnOff)
dev.SetMethod("toggle", dev.toggle)
dev.setup(zDev)
return dev
}
......@@ -255,17 +255,17 @@ func (dev *Lamp) update(payload map[string]interface{}) {
}
}
func (dev *Lamp) On(xaal.MessageBody) *xaal.MessageBody {
func (dev *Lamp) turnOn(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "ON"}`)
return nil
}
func (dev *Lamp) Off(xaal.MessageBody) *xaal.MessageBody {
func (dev *Lamp) turnOff(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "OFF"}`)
return nil
}
func (dev *Lamp) Toggle(xaal.MessageBody) *xaal.MessageBody {
func (dev *Lamp) toggle(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "TOGGLE"}`)
return nil
}
......@@ -274,16 +274,75 @@ func (dev *Lamp) Toggle(xaal.MessageBody) *xaal.MessageBody {
// Lamp Dimmer
// =============================================================================
func NewLampDimmer(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
dev := &LampDimmer{XAALDevice{schemas.NewLampDimmer(addr)}, *zDev}
dev := &LampDimmer{XAALDevice{schemas.NewLampColor(addr)}, *zDev}
dev.GetAttribute("mode").SetValue("white")
dev.SetMethod("turn_on", dev.turnOn)
dev.SetMethod("turn_off", dev.turnOff)
dev.SetMethod("toggle", dev.toggle)
dev.SetMethod("set_brightness", dev.setBrightness)
dev.SetMethod("set_white_temperature", dev.setWhiteTemperature)
dev.setup(zDev)
return dev
}
func (dev *LampDimmer) update(payload map[string]interface{}) {
value, exists := payload["brightness"].(float64)
// state
state, exists := payload["state"].(string)
if exists {
light := dev.GetAttribute("light")
switch state {
case "ON":
light.SetValue(true)
case "OFF":
light.SetValue(false)
}
}
// brightness
brightness, exists := payload["brightness"].(float64)
if exists {
dev.GetAttribute("brightness").SetValue(value)
brightness = math.Round(brightness / 255 * 100)
dev.GetAttribute("brightness").SetValue(brightness)
}
// color_temp
color_temp, exists := payload["color_temp"].(float64)
if exists {
// Mired = 1,000,000 / Temperature in Kelvin
color_temp = 1000000 / color_temp
dev.GetAttribute("white_temperature").SetValue(int(color_temp))
}
}
func (dev *LampDimmer) turnOn(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "ON"}`)
return nil
}
func (dev *LampDimmer) turnOff(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "OFF"}`)
return nil
}
func (dev *LampDimmer) toggle(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Set(`{"state": "TOGGLE"}`)
return nil
}
func (dev *LampDimmer) setBrightness(body xaal.MessageBody) *xaal.MessageBody {
// TODO: I don't know why we receive a uint64 instead of a float64
value, exists := body["brightness"].(uint64)
if exists {
dev.Z2MDevice.Set(fmt.Sprintf(`{"brightness": %d}`, value*255/100))
}
return nil
}
func (dev *LampDimmer) setWhiteTemperature(body xaal.MessageBody) *xaal.MessageBody {
value, exists := body["white_temperature"].(uint64)
if exists {
value = 1000000 / value
dev.Z2MDevice.Set(fmt.Sprintf(`{"color_temp": %d}`, value))
}
return nil
}
// =============================================================================
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment