Repository contains the NUT configuration and tells how to install Docker, Docker Compose and run the Home Assistant as a Docker container. Additionally I present how to turn off the Mikrotik router from the Raspberry Pi if the battery level state is low.
I decided to "promote" this video that is just an excellent example that explains step by step how to install and configure NUT on a Raspberry Pi. Network UPS Tools (NUT Server) Ultimate Guide.
lsusb
commandIt will allow you to find out what device is connected through the USB port.
sudo apt update
sudo apt install nut nut-client nut-server
sudo nut-scanner -U
You can see the result, so you can just copy and paste it into the notepad or make a note of it and you can use some of these values in your configuration.
So let's edit this file
vim /etc/nut/ups.conf
and add at the end opf file:
[aio]
driver = nutdrv_qx
subdriver = fabula
port = auto
langid_fix="0x409"
vendorid = "0001"
productid = "0000"
product = "MEC0003"
vendor = "MEC"
bus = "003"
desc = "UPS Green Cell AiO 600VA 360W"
pollinterval = 5
override.battery.charge.low = 30
override.battery.charge.warning = 35
override.battery.runtime.low = 450
override.ups.delay.shutdown = 150
override.ups.delay.start = 60
override.ups.realpower.nominal = 360
override.battery.voltage.low = 10.400000
override.battery.voltage.high = 13.000000
override.battery.packs = 12
runtimecal = 600,100,1200,50
chargetime = 28800
idleload = 10
You can make a backup of this file or modify it.
I had to test some of these settings and read a NUT documentation that you can find it here: NUT manual
I had to change the driver to nutdrv_qx and modify a little bit the ups.conf to be able to work with the mentioned UPS.
add a line to monitor a UPS
Edit
/etc/nut/upsd.conf
and modify it to listen on all IP addresses if you want to be able to connect to it from other devices / containers / virtual machines
/etc/nut/nut.conf
And change the mode to netserver
/etc/nut/upsd.users
Add users
[upsmon]
password = secret
upsmon master
If a help is needed with any part, do not hesitate to ask.
I had to set up Home Assistant as the docker container on a raspberry Pi and add my Green Cell UPS there. I had to do that because I am using AdGuard Home on a Raspberry Pi and I was not able to run it together.
First I had to create a yaml file
vim home-assistant.yml
Then run the below commands
The first one installs the docker
sudo curl -sSL https://get.docker.com | sh
This one creates the user
sudo usermod -aG docker ${USER}
The next one installs the docker-compose
sudo pip3 install docker-compose
This one enables the docker to start during the boot process
sudo systemctl enable docker
And start and check the status
sudo systemctl start docker
sudo systemctl status docker
sudo docker-compose -f home-assistant.yml up -d --remove-orphans
Check is the containter running
sudo docker ps
List all containters
sudo docker container ls -a
To kill a container, use the below command:
sudo docker kill a1c19f3ec04e
To restart the container:
sudo docker container restart homeassistant
Start the container during the boot process
sudo docker update --restart unless-stopped $(docker ps -q)
The Home Assistant is working locally so, I had to create a ssh tunnel to be able to access it from my laptop.
Actually Home Assistant detected UPS automatically. I see the basic information like load, power etc.
Now it is time to write a bash script that will log into Mikrotik router and perform the shutdown command before the raspberry will shut down. I will use a bash script that I tested on my Mikrotik hap ac2.
Of course sshpass has to be installed with the below command
sudo apt install sshpass
-p 2244 is a nonstandard ssh port
Then edit crontab
crontab -e
and add the below entry to run every minute:
*/1 * * * * /root/mikrotik.sh
I created a nut user on a mikrotik and additionally tested it with RSA keys without a passphrase what in LAN is let's say secure enough. All you have to do is to save private and public key in openSSH format, but not the newest one, but instead the standard format
sshpass -f /root/creds
Then you have to add the below line to crontab for root account but it can be also a pi user and it will run every one minute.
*/1 * * * * /root/mikrotik.sh
The default system logger is rsyslog. Add the following to /etc/rsyslog.d/99-nut.conf
Then perform the below commands:
touch /var/log/nut.log
chown root:adm /var/log/nut.log
chmod 640 /var/log/nut.log
systemctl restart rsyslog
All the nut logs will go there.
dmesg presented the below types of alerts
"entered blocking, disabled , forwarding state"
To get rid this from rsyslog I performed the below steps:
sudo vim /etc/udev/rules.d/99-nut-ups.rules
In the file /etc/nut/upssched.conf I defined below actions:
Early shutdown I have set to 180 seconds.
And the /bin/upssched-cmd file contains the below:
My bash script catches the Mikrotik phrase from the log. I had to test it to be sure for 100% it is working as expected.
Finally I have it working and the Raspberry Pi is shutting down as it should.
Install th below tools:
sudo apt install postfix msmtp
sudo vim /etc/postfix/main.cf
sudo vim /etc/msmtprc
sudo vim /etc/aliases
and add at the end
root: your-email address@example.com
Perform the below command
sudo postconf | grep config_directory
Create emailnotify.sh in /root
Then set it as executable
sudo chmod +x emailnotify.sh
Then edit crontab
crontab -e
and add the below entry:
@reboot /root/emailnotify.sh
Now if the UPS will go down you will be notified and also when the raspberry pi will boot up.