add support for hue temp sensor, fix saturation not working for hue bulbs.
This commit is contained in:
@@ -132,6 +132,7 @@ type SensorData struct {
|
||||
ButtonEvent int `json:"buttonevent"`
|
||||
LastUpdated string `json:"lastupdated"`
|
||||
Presence bool `json:"presence"`
|
||||
Temperature int
|
||||
} `json:"state"`
|
||||
Config struct {
|
||||
On bool `json:"on"`
|
||||
|
||||
@@ -266,6 +266,9 @@ func (d *Driver) ListDevices(ctx context.Context, bridge models.Bridge) ([]model
|
||||
case "ZLLPresence":
|
||||
device.Capabilities = append(device.Capabilities, models.DCPresence)
|
||||
device.Icon = "sensor"
|
||||
case "ZLLTemperature":
|
||||
device.Capabilities = append(device.Capabilities, models.DCTemperatureSensor)
|
||||
device.Icon = "thermometer"
|
||||
case "Daylight":
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ func (s *hueLightState) Update(state models.DeviceState) {
|
||||
s.stale = true
|
||||
}
|
||||
|
||||
input.Sat = ptrInt(int(state.Color.Hue * 255))
|
||||
input.Sat = ptrInt(int(state.Color.Saturation * 255))
|
||||
if *input.Sat > 254 {
|
||||
*input.Sat = 254
|
||||
}
|
||||
@@ -118,6 +118,7 @@ func (state *hueSensorState) Update(newData SensorData) *models.Event {
|
||||
switch newData.Type {
|
||||
case "ZLLSwitch":
|
||||
{
|
||||
// Ignore old events.
|
||||
if time.Since(stateTime) > time.Second*3 {
|
||||
return nil
|
||||
}
|
||||
@@ -151,7 +152,6 @@ func (state *hueSensorState) Update(newData SensorData) *models.Event {
|
||||
}
|
||||
case "ZLLPresence":
|
||||
{
|
||||
// TODO: Test this!
|
||||
if state.prevData != nil && state.prevData.State.Presence != newData.State.Presence {
|
||||
name := models.ENSensorPresenceStarted
|
||||
if !newData.State.Presence {
|
||||
@@ -177,6 +177,21 @@ func (state *hueSensorState) Update(newData SensorData) *models.Event {
|
||||
}
|
||||
}
|
||||
}
|
||||
case "ZLLTemperature":
|
||||
if time.Since(stateTime) > (time.Minute * 15) {
|
||||
return nil
|
||||
}
|
||||
|
||||
if !state.prevTime.Equal(stateTime) {
|
||||
return &models.Event{
|
||||
Name: models.ENSensorTemperature,
|
||||
Payload: map[string]string{
|
||||
"temperature": strconv.FormatFloat(float64(newData.State.Temperature)/100, 'f', 2, 64),
|
||||
"deviceId": strconv.Itoa(state.externalID),
|
||||
"deviceInternalId": newData.UniqueID,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
+5
-2
@@ -54,7 +54,8 @@ var (
|
||||
DCButtons DeviceCapability = "Buttons"
|
||||
DCPresence DeviceCapability = "Presence"
|
||||
DCIntensity DeviceCapability = "Intensity"
|
||||
DCTemperature DeviceCapability = "Temperature"
|
||||
DCTemperatureControl DeviceCapability = "TemperatureControl"
|
||||
DCTemperatureSensor DeviceCapability = "TemperatureSensor"
|
||||
)
|
||||
|
||||
var Capabilities = []DeviceCapability{
|
||||
@@ -62,8 +63,10 @@ var Capabilities = []DeviceCapability{
|
||||
DCColorHS,
|
||||
DCColorKelvin,
|
||||
DCButtons,
|
||||
DCPresence,
|
||||
DCIntensity,
|
||||
DCTemperature,
|
||||
DCTemperatureControl,
|
||||
DCTemperatureSensor,
|
||||
}
|
||||
|
||||
func (d *Device) Validate() error {
|
||||
|
||||
@@ -26,6 +26,7 @@ var (
|
||||
ENSensorPresenceStarted = "SensorPresenceStarted"
|
||||
ENSensorPresenceEnding = "SensorPresenceEnding"
|
||||
ENSensorPresenceEnded = "SensorPresenceEnded"
|
||||
ENSensorTemperature = "SensorTemperature"
|
||||
)
|
||||
|
||||
func BridgeConnectedEvent(bridge Bridge) Event {
|
||||
|
||||
Reference in New Issue
Block a user