Update 13 December 2019: Changed mac_address to mac
Besides my application server running Proxmox VE I have a NAS (Network Attached Storage) containing plenty of media, backups of my photography, and many delicious recipes. My NAS is currently running the FreeNAS operating system and despite it’s many faults, I’ll be sticking to that OS for the foreseeable future. My NAS is far from perfect. In fact, it’s borderline embarrassing. I bought the cheapest case I could find and fitted the absolute minimum of hardware. It isn’t particularly quiet and nothing is dampened so during writes this thing gets loud. Seeing as it sits right next to where I sleep there’s no way of leaving it turned on 24/7. This is where Home Assistant enters the fray. I needed a way of remotely turning my FreeNAS on and off as it sits in a shelf that isn’t easy to reach. And this is what the endresult looks like in my Lovelace UI:
For this to work I’m using the FreeNAS API to trigger a system shutdown from Home Assistant. Turning on the FreeNAS is way easier thanks to Wake on LAN (WOL) integration in Home Assistant. Let me start by showing you how to use the WOL switch to turn on your FreeNAS instantly.
Turning on a FreeNAS using Home Assistant
If you’re considering implementing this I’m going to assume you are technically well versed and understand the basics of Home Assistant and FreeNAS. For the WOL switch to work you need to know the IP (though this is technically only optional) and MAC of your FreeNAS. To find out your MAC simply enter the command ifconfig in your FreeNAS’ shell and look for hwaddr. The IP is solely used for Home Assistant to figure out if your FreeNAS is turned on or not. So if you’re going to use the switch in the UI I’d recommend adding the IP.
switch: - platform: wake_on_lan name: FreeNAS host: YOUR-FREENAS-IP mac: "XX:XX:XX:XX:XX:XX"
Turning off a FreeNAS using Home Assistant
Turning off a FreeNAS using Home Assistant is slightly more complex. There’s no reverse WOL or anything similar and no universal way of handling shutdowns so instead I’ve opted to use the FreeNAS API. To make the API call simply create a REST command containing the following details:
rest_command: freenas_shutdown: url: http://IP-OF-YOUR-FREENAS/api/v1.0/system/shutdown/ method: post username: !secret freenas_user password: !secret freenas_password headers: content-Type: application/json
As you might have noticed, I’ve used the secret file to store my credentials. I had to use root to get this API call to work. There might be a nicer and safer way of doing this. To do this simply open the secrets.yaml on your Home Assistant server and enter the following on a new line:
freenas_user: YOUR-ROOT-USER freenas_password: YOUR-PASSWORD
Tying it all together in one switch
Now that the FreeNAS RESTful Command is complete it can be added to the switch created in the first step. To do so, simply add the turn_off variable at the end of the switch as seen below:
switch: platform: wake_on_lan name: FreeNAS host: YOUR-FREENAS-IP mac_address: "XX:XX:XX:XX:XX:XX" turn_off: service: rest_command.freenas_shutdown
And there you have it, FreeNAS can now be controlled by Home Assistant. This switch can be used in automations using switch.turn_on, switch.toggle, and switch.turn_off and can be placed in the UI.