Author SHA1 Message Date
gisle 01975c74a9 fix scene reassignment on expiry not working.
continuous-integration/drone/push Build is passing
2021-10-08 15:14:38 +02:00
gisle cdf5173503 fixed a rare hue driver crash on startup and crash if an event sets an invalid scene id.
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2021-10-06 20:10:57 +02:00
gisle def494ba45 scene stuff is ready for prime time now.
continuous-integration/drone/push Build is passing
2021-10-06 20:00:58 +02:00
gisle 1b7e495a59 more scene stuff. There's still no command and API to push scenes and unassign (aside from setting a temporary scene and waiting it out).
continuous-integration/drone/push Build is passing
2021-10-05 20:11:53 +02:00
gisle 07173e4e56 Merge branch 'asmodeus' into feature-scenesystem
continuous-integration/drone/push Build is passing
2021-10-04 20:14:16 +02:00
gisle 7b0028ee2b new scene system is kind of working. I haven't tested changing between scenes and Transition effect yet, though.
continuous-integration/drone/push Build is passing
2021-10-04 20:13:57 +02:00
gisle d23a7327ef Merge branch 'asmodeus' into feature-scenesystem
continuous-integration/drone/push Build is failing
2021-10-03 18:42:33 +02:00
gisle a3695a3ddd some more work.
continuous-integration/drone/push Build is failing
2021-09-28 21:57:28 +02:00
gisle ffa757f742 rewrite of publishing mechanism to make scenes first-class.
continuous-integration/drone/push Build is failing
2021-09-26 22:15:49 +02:00
gisle f87c69efc7 this does not work, it needs massive changes.
continuous-integration/drone/push Build is passing
2021-09-26 16:20:02 +02:00
gisle b4fd6df454 Merge branch 'asmodeus' into feature-scenesystem
continuous-integration/drone/push Build is failing
2021-09-26 10:51:28 +02:00
gisle 44716c84d1 scene system so far.
continuous-integration/drone/push Build is failing
2021-09-25 19:04:54 +02:00
2 changed files with 14 additions and 3 deletions
+13 -2
View File
@@ -110,16 +110,19 @@ func (p *Publisher) Run() {
ticker := time.NewTicker(time.Millisecond * 100)
deleteList := make([]int, 0, 8)
updatedList := make([]models.Device, 0, 16)
reassignList := make([]models.Device, 0, 16)
for range ticker.C {
deleteList = deleteList[:0]
updatedList = updatedList[:0]
reassignList = reassignList[:0]
p.mu.Lock()
for i, scene := range p.scenes {
if (!scene.endTime.IsZero() && time.Now().After(scene.endTime)) || scene.Empty() {
deleteList = append(deleteList, i-len(deleteList))
updatedList = append(updatedList, scene.AllDevices()...)
reassignList = append(reassignList, scene.AllDevices()...)
log.Printf("Removing scene instance for %s (%d)", scene.data.Name, scene.data.ID)
@@ -139,6 +142,14 @@ func (p *Publisher) Run() {
p.scenes = append(p.scenes[:i], p.scenes[i+1:]...)
}
for _, device := range reassignList {
p.reassignDevice(device)
if p.sceneAssignment[device.ID] != nil {
p.sceneAssignment[device.ID].UpsertDevice(device)
}
}
for _, device := range updatedList {
if !p.started[device.BridgeID] {
p.started[device.BridgeID] = true
@@ -159,10 +170,10 @@ func (p *Publisher) Run() {
// should trigger an update.
func (p *Publisher) reassignDevice(device models.Device) bool {
var selectedAssignment *models.DeviceSceneAssignment
for _, assignment := range device.SceneAssignments {
for i, assignment := range device.SceneAssignments {
duration := time.Duration(assignment.DurationMS) * time.Millisecond
if duration <= 0 || time.Now().Before(assignment.StartTime.Add(duration)) {
selectedAssignment = &assignment
selectedAssignment = &device.SceneAssignments[i]
}
}
+1 -1
View File
@@ -171,7 +171,7 @@ func (c *EventCondition) checkDevice(key string, device Device) (matches bool, s
return c.matches(strconv.FormatFloat(device.State.Temperature, 'f', -1, 64)), false
case "scene":
if len(device.SceneAssignments) == 0 {
return false, false
return c.matches("-1"), false
}
sceneId := -1