From 8f648de9299d65773daa999824cfa00b45fd241c Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Sat, 22 May 2021 10:06:49 +0200 Subject: [PATCH] =?UTF-8?q?=C3=9F=C3=BE=E2=86=92=C2=AAn=C2=A0=E2=82=AC?= =?UTF-8?q?=C2=AE=C2=A0=E2=82=ACn=C2=A0=C3=9F=C3=BE=C5=93=C2=AE,=C2=A0?= =?UTF-8?q?=C3=9F=C3=BE=C5=93=C2=AE=20=C3=9F=C5=93=CF=80=CF=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/events.go | 12 +++++++----- models/bridge.go | 9 +++++---- models/device.go | 43 ++++++++++++++++++------------------------ models/driver.go | 13 ++++++++----- 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/app/services/events.go b/app/services/events.go index fe85fc4..ae7dbde 100644 --- a/app/services/events.go +++ b/app/services/events.go @@ -19,12 +19,11 @@ func StartEventHandler() { // Dispatch an HourChanged event at every hour go func() { - for { - now := time.Now() - nextHour := now.Add(time.Hour).Truncate(time.Hour) - time.Sleep(nextHour.Sub(now)) + drift := time.Now().Add(time.Minute).Truncate(time.Minute).Sub(time.Now()) + time.Sleep(drift + time.Millisecond * 5) - config.EventChannel <- models.Event{Name: "HourChanged"} + for range time.NewTicker(time.Minute).C { + config.EventChannel <- models.Event{Name: "TimeChanged"} } }() } @@ -36,6 +35,9 @@ func handleEvent(event models.Event) { if !event.HasPayload("hour") { event.AddPayload("hour", time.Now().In(loc).Format("15")) } + if !event.HasPayload("minute") { + event.AddPayload("minute", time.Now().In(loc).Format("04")) + } handlers, err := config.EventHandlerRepository().FetchAll(ctx) if err != nil { diff --git a/models/bridge.go b/models/bridge.go index 3f71e79..bd7ee26 100644 --- a/models/bridge.go +++ b/models/bridge.go @@ -1,10 +1,11 @@ package models type Bridge struct { - ID int - Name string - Driver DriverType - ConnectionString string + ID int + Name string + Driver DriverType + Address string + Token string } type DriverType string diff --git a/models/device.go b/models/device.go index 4fbbdb6..907e904 100644 --- a/models/device.go +++ b/models/device.go @@ -6,14 +6,17 @@ import ( ) type Device struct { - ID int `json:"id"` - BridgeID int `json:"bridgeID"` - Icon string `json:"icon"` - Name string `json:"name"` - Capabilities []DeviceCapability `json:"capabilities"` - Properties map[string]string `json:"properties"` - State DeviceState `json:"state"` - Tags []string `json:"tags"` + ID int `json:"id"` + BridgeID int `json:"bridgeID"` + InternalID string `json:"internalId"` + Icon string `json:"icon"` + Name string `json:"name"` + Capabilities []DeviceCapability `json:"capabilities"` + ButtonNames []string `json:"buttonNames"` + DriverProperties map[string]string `json:"driverProperties"` + UserProperties map[string]string `json:"userProperties"` + State DeviceState `json:"state"` + Tags []string `json:"tags"` } // DeviceState contains optional state values that @@ -45,29 +48,19 @@ type DeviceRepository interface { } var ( - DCPower DeviceCapability = "Power" - DCColorHS DeviceCapability = "ColorHS" - DCColorKelvin DeviceCapability = "ColorKelvin" - DCButtonDefault DeviceCapability = "ButtonDefault" - DCButtonOn DeviceCapability = "ButtonOn" - DCButtonOff DeviceCapability = "ButtonOff" - DCButtonPlus DeviceCapability = "ButtonPlus" - DCButtonMinus DeviceCapability = "ButtonMinus" - DCButtonToggle DeviceCapability = "ButtonToggle" - DCIntensity DeviceCapability = "Intensity" - DCTemperature DeviceCapability = "Temperature" + DCPower DeviceCapability = "Power" + DCColorHS DeviceCapability = "ColorHS" + DCColorKelvin DeviceCapability = "ColorKelvin" + DCButtons DeviceCapability = "Buttons" + DCIntensity DeviceCapability = "Intensity" + DCTemperature DeviceCapability = "Temperature" ) var Capabilities = []DeviceCapability{ DCPower, DCColorHS, DCColorKelvin, - DCButtonDefault, - DCButtonOn, - DCButtonOff, - DCButtonPlus, - DCButtonMinus, - DCButtonToggle, + DCButtons, DCIntensity, DCTemperature, } diff --git a/models/driver.go b/models/driver.go index 02d2a06..0dd269d 100644 --- a/models/driver.go +++ b/models/driver.go @@ -1,14 +1,17 @@ package models -import "context" +import ( + "context" + "time" +) type DriverResolver interface { ResolveFor(bridge Bridge) (Driver, error) } type Driver interface { - SearchBridge(ctx context.Context, address string) (Bridge, error) - SearchDevices(ctx context.Context, bridge Bridge) ([]Device, error) - Consume(ctx context.Context, bridge Bridge, devices []Device, ch chan Event) (chan <-struct{}, error) - Publish(ctx context.Context, bridge Bridge, device Device) error + SearchBridge(ctx context.Context, address string, dryRun bool) ([]Bridge, error) + SearchDevices(ctx context.Context, bridge Bridge, timeout time.Duration) ([]Device, error) + Consume(ctx context.Context, bridge Bridge, devices []Device, ch chan Event) (chan<- struct{}, error) + Publish(ctx context.Context, bridge Bridge, devices []Device) error }