Skip to content

itskenny0/home-assistant-cpu-governor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

Server Power Controller

A Python script for CPU power management on Linux servers with Home Assistant integration via MQTT.

Features

  • CPU Control: Set governors, turbo boost, and max frequency
  • System Metrics: Monitor CPU frequency, usage, temperature, memory, load, and power consumption
  • Storage Monitoring: NVMe and HDD/SSD temperature sensors
  • Multi-Socket Support: Works with multi-CPU server systems
  • Home Assistant Integration: Auto-discovery via MQTT with sensors and controls
  • Power Modes: Quick presets for powersave and performance profiles
  • Intel & AMD Support: Compatible with both Intel P-State and AMD CPUFreq drivers

Requirements

  • Python 3.6+
  • Linux with sysfs CPU frequency scaling support
  • Root privileges (for CPU control)
  • paho-mqtt (optional, for MQTT/Home Assistant integration)
pip install paho-mqtt

Usage

Show Current Status

sudo ./server_powerctl.py --status

One-Shot Commands

# Enable powersave mode (low frequency, no turbo)
sudo ./server_powerctl.py --power-save enable

# Enable performance mode (max frequency, turbo on)
sudo ./server_powerctl.py --power-save disable

# Set CPU governor
sudo ./server_powerctl.py --set-governor ondemand

# Enable/disable turbo boost
sudo ./server_powerctl.py --set-turbo on
sudo ./server_powerctl.py --set-turbo off

# Set maximum CPU frequency (MHz)
sudo ./server_powerctl.py --set-max-freq 2400

Run as MQTT Daemon

sudo ./server_powerctl.py \
  --mqtt-broker 192.168.1.100 \
  --mqtt-user homeassistant \
  --mqtt-password secret \
  --interval 2.0

Command Line Options

Option Description
--status Show current system status and exit
--power-save enable/disable Apply powersave or performance mode
--set-governor GOVERNOR Set CPU governor (e.g., powersave, performance, ondemand)
--set-turbo on/off Enable or disable turbo boost
--set-max-freq MHZ Set maximum CPU frequency in MHz
--mqtt-broker HOST MQTT broker address (enables daemon mode)
--mqtt-port PORT MQTT broker port (default: 1883)
--mqtt-user USER MQTT username
--mqtt-password PASS MQTT password
--ha-discovery-prefix PREFIX Home Assistant discovery prefix (default: homeassistant)
--interval SECONDS Update interval for daemon mode (default: 2.0)
-v, --verbose Enable verbose logging

Home Assistant Integration

When running in daemon mode, the script automatically publishes MQTT discovery messages. Home Assistant will create:

Sensors

  • CPU Frequency (MHz)
  • CPU Usage (%)
  • CPU Temperature (°C)
  • Memory Usage (%)
  • Load Average
  • CPU Power (W)
  • CPU Governor
  • Turbo Boost State
  • Power Mode
  • Max Frequency Setting
  • NVMe/HDD Temperatures (auto-detected)

Controls

  • CPU Governor (select): Choose from available governors
  • Turbo Boost (switch): Toggle turbo boost on/off
  • Max CPU Frequency (number/slider): Set maximum frequency
  • Power Mode (select): Quick switch between performance and powersave

Running as a Service

Create /etc/systemd/system/server-powerctl.service:

[Unit]
Description=Server Power Controller
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /path/to/server_powerctl.py \
  --mqtt-broker 192.168.1.100 \
  --mqtt-user homeassistant \
  --mqtt-password secret
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Enable and start:

sudo systemctl daemon-reload
sudo systemctl enable server-powerctl
sudo systemctl start server-powerctl

License

The Unlicense

About

Allows configuring the CPU governor (and related) of a Proxmox server from Home Assistant.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages