diff --git a/README.md b/README.md index 60065eb..8cd89fb 100644 --- a/README.md +++ b/README.md @@ -499,6 +499,12 @@ devices that you have specified within your config. > fan2go fan --id cpu rpm 546 + +> fan2go fan --id cpu mode +No control, 100% all the time (0) + +> fan2go fan --id cpu mode auto +Automatic control by integrated hardware (2) ``` ### Sensors diff --git a/cmd/fan/mode.go b/cmd/fan/mode.go new file mode 100644 index 0000000..28ad79b --- /dev/null +++ b/cmd/fan/mode.go @@ -0,0 +1,71 @@ +package fan + +import ( + "fmt" + "github.com/markusressel/fan2go/internal/fans" + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "strconv" + "strings" +) + +var modeCmd = &cobra.Command{ + Use: "mode", + Short: "Get/Set the current pwm mode setting of a fan", + Long: ``, + Args: cobra.RangeArgs(0, 1), + RunE: func(cmd *cobra.Command, args []string) error { + pterm.DisableOutput() + + fan, err := getFan(fanId) + if err != nil { + return err + } + + if len(args) > 0 { + firstArg := args[0] + argAsInt, err := strconv.Atoi(firstArg) + var pwmEnabled fans.ControlMode + if err != nil { + switch strings.ToLower(firstArg) { + case "auto": + pwmEnabled = fans.ControlModeAutomatic + case "pwm": + pwmEnabled = fans.ControlModePWM + case "disabled": + pwmEnabled = fans.ControlModeDisabled + default: + return fmt.Errorf("unknown mode: %s, must be a integer in (1..3) or one of: 'auto', 'pwm', 'disabled'", firstArg) + } + } else { + pwmEnabled = fans.ControlMode(argAsInt) + } + err = fan.SetPwmEnabled(pwmEnabled) + if err != nil { + return err + } + } + + pwmEnabled, err := fan.GetPwmEnabled() + if err != nil { + return err + } + + switch fans.ControlMode(pwmEnabled) { + case fans.ControlModeDisabled: + fmt.Printf("No control, 100%% all the time (%d)", pwmEnabled) + case fans.ControlModePWM: + fmt.Printf("Manual PWM control, gives fan2go control (%d)", pwmEnabled) + case fans.ControlModeAutomatic: + fmt.Printf("Automatic control by integrated hardware (%d)", pwmEnabled) + default: + fmt.Printf("Unknown (%d)", pwmEnabled) + } + + return err + }, +} + +func init() { + Command.AddCommand(modeCmd) +}