--- slug: restart-or-shutdown-your-proxmox-node-from-home-assistant-automation title: "Restart or shutdown your Proxmox node from Home Assistant automation" tags: [self-hosting, homelab, Proxmox, Smart Home, Home Assistant] image: /img/blog/2023/12/power_switch.jpg --- There is a [UPS monitoring through NUT](/2023-12-19-monitor-usb-ups-connected-to-synology-nas-in-home-assistant/index.md) configured in my Home Assistant. So I decided my Home Assistant could shut down my homelab servers on a low UPS battery. We will use [Proxmox VE API](https://pve.proxmox.com/wiki/Proxmox_VE_API) and Home Assistant [RESTful Command](https://www.home-assistant.io/integrations/rest_command/) integration for this. ## Proxmox user and permissions Let's do things right and don't allow Home Assistant to log in with the root user to your Proxmox environment. We will create a _role_ first. Go to your _Datacenter_ view in Proxmox web UI choose _Permissions -> Roles_ and hit _Create_. We will create a `PowerManager` role with `Sys.PowerMgmt` privileges. This will allow our user to execute shutdown/restart commands through Proxmox API, but nothing more. ![](001.png) Next, we will create a user. In Proxmox web UI go to _Permissions -> Users_ and hit _Add_. Give him a username and password, and choose _"Proxmox VE authentication server"_ as a _Realm_: ![](002.png) Next, we will go to our _Datacenter_ view in Proxmox web UI choose _Permissions_ and hit _Add_. Here, we will set `/nodes/` as the Path, select our newly created _User_ and our newly created _Role_ for him: ![](003.png) Lastly, we will need an API token to make API calls. For this, we will go to _Permissions -> API_ Tokens and click _Add_. Choose our newly created user, give the token an ID, and disable _Privilege Separation_. ![](004.png) After clicking _Add_ we will see the token. We need to write down the token ID and token itself to use it in Home Assistant later. ## Home Assistant integration Now to the Home Assistant. We will need to edit our `configuration.yaml` file as currently, this is the only way to add RESTful Command integration. Here is an example: ```yaml rest_command: spacedock_one_shutdown: url: "https://192.168.99.3:8006/api2/json/nodes/spacedock-one/status" method: post headers: Authorization: PVEAPIToken=pwrmngr@pve!power=73892874-ad34-4b98-83e2-7be787f9bee3 content_type: "application/x-www-form-urlencoded" payload: "command=shutdown" verify_ssl: false ``` The `url` should have the next format: `https://:8006/api2/json/nodes//status`. The authorization header should have the next format: `PVEAPIToken=@pve!=` You can use `shutdown` or `reboot` as a `command`. After restarting Home Assistant you will have a new service available. In our example, it would be `rest_command.spacedock_one_shutdown`. Calling it will do the trick.