diff --git a/cmd/fhomed/daemon.go b/cmd/fhomed/daemon.go index 671be71..272dac3 100644 --- a/cmd/fhomed/daemon.go +++ b/cmd/fhomed/daemon.go @@ -44,8 +44,8 @@ func daemon(ctx context.Context, config *highlevel.Config, name, pin string) err return err } - go serviceListener(ctx, client) - go websiteListener(ctx, config, apiConfig) + //go serviceListener(ctx, client) + //go websiteListener(ctx, config, apiConfig) // Here we listen to HomeKit events and convert them to API calls to F&Home // to keep the state in sync. diff --git a/cmd/fhomed/main.go b/cmd/fhomed/main.go index 7b2b942..84f55cd 100644 --- a/cmd/fhomed/main.go +++ b/cmd/fhomed/main.go @@ -169,13 +169,13 @@ func loadConfig() *highlevel.Config { } } -func homekitSyncer(config *highlevel.Config, name, pin string) error { - fhomeClient, err := highlevel.Connect(config, nil) +func homekitSyncer(ctx context.Context, config *highlevel.Config, name, pin string) error { + fhomeClient, err := highlevel.Connect(ctx, config, nil) if err != nil { return fmt.Errorf("failed to create api client: %v", err) } - userConfig, err := fhomeClient.GetUserConfig() + userConfig, err := fhomeClient.GetUserConfig(ctx) if err != nil { slog.Error("failed to get user config", slog.Any("error", err)) return err @@ -185,7 +185,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { slog.Int("cells", len(userConfig.Cells)), ) - systemConfig, err := fhomeClient.GetSystemConfig() + systemConfig, err := fhomeClient.GetSystemConfig(ctx) if err != nil { slog.Error("failed to get system config", slog.Any("error", err)) return err @@ -216,7 +216,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { slog.String("callback", "OnLightbulbUpdate"), } - err := fhomeClient.SendEvent(ID, value) + err := fhomeClient.SendEvent(ctx, ID, value) if err != nil { attrs = append(attrs, slog.Any("error", err)) slog.LogAttrs(context.TODO(), slog.LevelError, "failed to send event", attrs...) @@ -233,7 +233,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { slog.String("callback", "OnLEDUpdate"), } - err := fhomeClient.SendEvent(ID, value) + err := fhomeClient.SendEvent(ctx, ID, value) if err != nil { attrs = append(attrs, slog.Any("error", err)) slog.LogAttrs(context.TODO(), slog.LevelError, "failed to send event", attrs...) @@ -250,7 +250,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { slog.String("callback", "OnGarageDoorUpdate"), } - err := fhomeClient.SendEvent(ID, value) + err := fhomeClient.SendEvent(ctx, ID, value) if err != nil { attrs = append(attrs, slog.Any("error", err)) slog.LogAttrs(context.TODO(), slog.LevelError, "failed to send event", attrs...) @@ -267,7 +267,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { slog.String("callback", "OnGarageDoorUpdate"), } - err = fhomeClient.SendEvent(ID, value) + err = fhomeClient.SendEvent(ctx, ID, value) if err != nil { attrs = append(attrs, slog.Any("error", err)) slog.LogAttrs(context.TODO(), slog.LevelError, "failed to send event", attrs...) @@ -289,7 +289,7 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { // In this loop, we listen to events from F&Home and send updates to HomeKit // to keep the state in sync. for { - msg, err := fhomeClient.ReadMessage(api.ActionStatusTouchesChanged, "") + msg, err := fhomeClient.ReadMessage(ctx, api.ActionStatusTouchesChanged, "") if err != nil { slog.Error("failed to read message", slog.Any("error", err)) return err @@ -308,7 +308,11 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { } cellValue := resp.Response.CellValues[0] - printCellData(&cellValue, apiConfig) + err = highlevel.PrintCellData(&cellValue, apiConfig) + if err != nil { + slog.Error("failed to print cell data", slog.Any("error", err)) + return err + } // handle lightbulb { @@ -366,42 +370,3 @@ func homekitSyncer(config *highlevel.Config, name, pin string) error { } } } - -func mustGetenv(varname string) string { - value := os.Getenv(varname) - if value == "" { - slog.Error(varname + " env var is empty or not set") - os.Exit(1) - } - return value -} - -// printCellData prints the values of its arguments into a JSON object. -func printCellData(cellValue *api.CellValue, cfg *api.Config) error { - cell, err := cfg.GetCellByID(cellValue.IntID()) - if err != nil { - return fmt.Errorf("failed to get cell with ID %d: %v", cellValue.IntID(), err) - } - - // Find panel ID of the cell - var panelName string - for _, panel := range cfg.Panels { - for _, c := range panel.Cells { - if c.ID == cell.ID { - panelName = panel.Name - break - } - } - } - - slog.Debug("object state changed", - slog.Int("id", cell.ID), - slog.String("panel", panelName), - slog.String("name", cell.Name), - slog.String("desc", cell.Desc), - slog.String("display_type", string(cellValue.DisplayType)), - slog.String("value", cellValue.Value), - slog.String("value_str", cellValue.ValueStr), - ) - return nil -} diff --git a/go.sum b/go.sum index c9b20ba..cf1532e 100644 --- a/go.sum +++ b/go.sum @@ -293,8 +293,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=