Temperature-based USB fan controller that monitors Home Assistant temperature sensors and automatically controls USB-powered fans via uhubctl.
- Monitors temperature via Home Assistant API
- Hysteresis control (turns on at 28°C, off at 25°C)
- Failsafe: activates fans on API errors
- Automatic restart on failure
- Systemd service integration
sudo apt install uhubctlpip install requestsOr using requirements.txt:
pip install -r requirements.txt-
Clone or copy files to your target directory (e.g.,
/home/<username>/PiTemp) -
Make the script executable:
chmod +x racktemp.py- Set your Home Assistant configuration:
export HASS_API_TOKEN="your_token_here"
export HASS_URL="your_home_assistant_url"
export HASS_SENSOR="sensor.your_sensor_name"- Test the script manually:
python3 racktemp.py-
Edit
temp.serviceand update:User=with your usernameWorkingDirectory=with your installation pathExecStart=with the correct path to racktemp.pyEnvironment=HASS_API_TOKEN=with your actual tokenEnvironment=HASS_URL=with your Home Assistant URLEnvironment=HASS_SENSOR=with your sensor nameStandardOutput=andStandardError=paths
-
Create log directory:
mkdir -p ~/PiTemp/log- Copy service file:
sudo cp temp.service /etc/systemd/system/rack-fan-control.service- Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable rack-fan-control.service
sudo systemctl start rack-fan-control.service- Check status:
sudo systemctl status rack-fan-control.serviceEdit racktemp.py to customize:
TEMP_ON = 28- Temperature threshold to turn fans ON (°C)TEMP_OFF = 25- Temperature threshold to turn fans OFF (°C)HASS_URL- Your Home Assistant URL (set in environment)HASS_SENSOR- Your sensor name (set in environment)control_usb_port("1-1", "1,2,3,4", state)- USB hub location and ports
[Unit]
Description=Rack Fan Control Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=<username>
WorkingDirectory=/home/<username>/PiTemp
ExecStart=/usr/bin/python3 /home/<username>/PiTemp/racktemp.py
Environment=HASS_API_TOKEN=<insert_your_token_here>
Environment=HASS_URL=<your_home_assistant_url>
Environment=HASS_SENSOR=sensor.<your_sensor_name>
Restart=always
RestartSec=10
StandardOutput=append:/home/<username>/PiTemp/log/rack-fan-control.log
StandardError=append:/home/<username/PiTemp/log/rack-fan-control.log
[Install]
WantedBy=multi-user.targetView logs:
# Service logs
sudo journalctl -u rack-fan-control.service -f
# Application logs
tail -f ~/PiTemp/log/rack-fan-control.logCommon issues:
- uhubctl not found: Install with
sudo apt install uhubctl - Permission denied: Ensure user has USB control permissions or run service as root
- API errors: Verify HASS_API_TOKEN and network connectivity
MIT