decrease sensitivity in hue2 (should fix double press, regular check over-updating and massive update storms when regular checks find a lot of incongruences), and fix rare race condition
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -55,6 +55,7 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
|
||||
|
||||
absences := make(map[int]time.Time)
|
||||
lastPress := make(map[string]time.Time)
|
||||
lastUpdate := time.Now()
|
||||
needFull := false
|
||||
|
||||
for {
|
||||
@@ -62,6 +63,10 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-lightRefreshTimer.C:
|
||||
if time.Since(lastUpdate) < time.Second*10 {
|
||||
continue
|
||||
}
|
||||
|
||||
if needFull {
|
||||
err := b.RefreshAll(ctx)
|
||||
if err != nil {
|
||||
@@ -79,9 +84,16 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
|
||||
return err
|
||||
}
|
||||
if updated > 0 {
|
||||
// Force this to cool for 30 seconds unless a manual update occurs.
|
||||
if updated > 10 {
|
||||
lastUpdate = time.Now().Add(time.Second * 15)
|
||||
}
|
||||
|
||||
log.Println(fmt.Sprintf("[Bridge %d]", b.externalID), "Updated", updated, "hue services (regular check)")
|
||||
}
|
||||
case <-b.needsUpdate:
|
||||
lastUpdate = time.Now()
|
||||
|
||||
updated, err := b.MakeCongruent(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -125,9 +137,11 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
|
||||
continue
|
||||
}
|
||||
|
||||
b.mu.Lock()
|
||||
if b.resources[patch.Owner.ID] == nil {
|
||||
needFull = true
|
||||
}
|
||||
b.mu.Unlock()
|
||||
|
||||
device, deviceOK := b.devices[patch.Owner.ID]
|
||||
if !deviceOK || device.ID == 0 {
|
||||
@@ -141,7 +155,7 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
|
||||
} else if patch.Button.LastEvent == "long_release" {
|
||||
valid = false
|
||||
} else {
|
||||
valid = lastPress[patch.ID].Unix() != data.CreationTime.Unix()
|
||||
valid = data.CreationTime.Sub(lastPress[patch.ID]) >= time.Second*2
|
||||
}
|
||||
|
||||
if valid {
|
||||
|
||||
Reference in New Issue
Block a user