Skip to content

Commit

Permalink
fix: improve startup message order
Browse files Browse the repository at this point in the history
  • Loading branch information
philipparndt committed Oct 13, 2024
1 parent b832788 commit a83bdc4
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
8 changes: 5 additions & 3 deletions app/eltako/eltako.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/philipparndt/go-logger"
"io"
"net/http"
"sync"
)

type ShadingActor struct {
Expand Down Expand Up @@ -139,17 +140,18 @@ func (s *ShadingActor) String() string {
return fmt.Sprintf("ShadingActor{name: %s; ip: %s}", s.Name, s.IP)
}

func (s *ShadingActor) Start(cfg config.Eltako) error {
func (s *ShadingActor) Start(wg *sync.WaitGroup, cfg config.Eltako) error {
wg.Add(2)
err := s.UpdateToken()
if err != nil {
logger.Error(fmt.Sprintf("Initial token update failed for %s", s), err)
return err
}

go s.scheduleUpdateToken()
go s.scheduleUpdateToken(wg)

if cfg.PollingInterval > 0 {
go s.schedulePolling(cfg.PollingInterval)
go s.schedulePolling(wg, cfg.PollingInterval)
} else {
logger.Info(fmt.Sprintf("Polling disabled for %s", s))
}
Expand Down
7 changes: 5 additions & 2 deletions app/eltako/polling.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"fmt"
"github.com/philipparndt/go-logger"
"github.com/philipparndt/mqtt-gateway/mqtt"
"sync"
"time"
)

func (s *ShadingActor) schedulePolling(pollingInterval int) {
func (s *ShadingActor) schedulePolling(wg *sync.WaitGroup, pollingInterval int) {
errorCtr := 0
interval := time.Duration(pollingInterval) * time.Millisecond
logger.Info(fmt.Sprintf("Starting polling of %s with interval %s", s, interval))
wg.Done()
for {
position, err := s.getPosition()

Expand All @@ -28,9 +30,10 @@ func (s *ShadingActor) schedulePolling(pollingInterval int) {
}
}

func (s *ShadingActor) scheduleUpdateToken() {
func (s *ShadingActor) scheduleUpdateToken(wg *sync.WaitGroup) {
interval := time.Duration(60) * time.Minute
logger.Info(fmt.Sprintf("Scheduling token update of %s with interval %s", s, interval))
wg.Done()
for {
logger.Debug("Updating token")
err := s.UpdateToken()
Expand Down
6 changes: 5 additions & 1 deletion app/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,25 @@ import (
"github.com/philipparndt/mqtt-gateway/mqtt"
"os"
"os/signal"
"sync"
"syscall"
)

func startActors(cfg config.Eltako) *eltako.ActorRegistry {
registry := eltako.NewActorRegistry()

wg := sync.WaitGroup{}
for _, device := range cfg.Devices {
logger.Info(fmt.Sprintf("Initializing %s", device.String()))
actor := eltako.NewShadingActor(device)
err := actor.Start(cfg)
err := actor.Start(&wg, cfg)
if err != nil {
panic(err)
}

registry.AddActor(actor)
}
wg.Wait()

return registry
}
Expand Down

0 comments on commit a83bdc4

Please sign in to comment.