Onduleur nut notification mail

J’utilise un raspberry pi3.
J’ai un ondulleur Eaton ellipse eco
J’ai installé nut et knutclient.
Après configuration, Knutclient communique bien avec l’onduleur. J’arrive à envoyer des ordres depuis knutclient(reboot de l’onduleur)
Par contre, j’essaie en vain de faire envoyer un mail en cas de passage sur batterie et de retour de courant mais ça ne marche pas.
J’ai lu pleins de tutos, j’ai revérifié mes fichiers de configuration mais je ne vois rien qui cloche.
J’ai sûrement du passer à coté de quelque chose mais sans trouver quoi…

Pourriez vous m’aider ?
mes fichiers de configuration et autres sont dans /etc/nut
msmtp fonctionne les en manuel, les mails me parviennent bien.
nut inscrit bien les évènements dans le sys.log
voici les contenus de mes fichiers :


Network UPS Tools: example upsmon configuration

This file contains passwords, so keep it secure.



By default, upsmon splits into two processes. One stays as root and

waits to run the SHUTDOWNCMD. The other one switches to another userid

and does everything else.

The default nonprivileged user is set at compile-time with

‹ configure --with-user=… ›.

You can override it with ‹ -u  › when starting upsmon, or just

define it here for convenience.

Note: if you plan to use the reload feature, this file (upsmon.conf)

must be readable by this user! Since it contains passwords, DO NOT

make it world-readable. Also, do not make it writable by the upsmon

user, since it creates an opportunity for an attack by changing the

SHUTDOWNCMD to something malicious.

For best results, you should create a new normal user like « nutmon »,

and make it a member of a « nut » group or similar. Then specify it

here and grant read access to the upsmon.conf for that group.

This user should not have write access to upsmon.conf.



MONITOR (« master »|« slave »)

List systems you want to monitor. Not all of these may supply power

to the system running upsmon, but if you want to watch it, it has to

be in this section.

You must have at least one of these declared.

is a UPS identifier in the form @[:]

like ups@localhost, su700@mybox, etc.


- « su700@mybox » means a UPS called « su700 » on a system called « mybox »

- « fenton@bigbox:5678 » is a UPS called « fenton » on a system called

« bigbox » which runs upsd on port « 5678 ».

The UPS names like « su700 » and « fenton » are set in your ups.conf

in [brackets] which identify a section for a particular driver.

If the ups.conf on host « doghouse » has a section called « snoopy », the

identifier for it would be « snoopy@doghouse ».

is an integer - the number of power supplies that this UPS

feeds on this system. Most computers only have one power supply, so this

is normally set to 1. You need a pretty big or special box to have any

other value here.

You can also set this to 0 for a system that doesn’t supply any power,

but you still want to monitor. Use this when you want to hear about

changes for a given UPS without shutting down when it goes critical,

unless is 0.

and must match an entry in that system’s

upsd.users. If your username is « monmaster » and your password is

« blah », the upsd.users would look like this:


password = blah

upsmon master (or slave)

« master » means this system will shutdown last, allowing the slaves

time to shutdown first.

« slave » means this system shuts down immediately when power goes critical.


MONITOR myups@bigserver 1 monmaster blah master

MONITOR su700@server.example.com 1 upsmon secretpass slave

MONITOR myups@localhost 1 upsmon pass master (or slave)



Give the number of power supplies that must be receiving power to keep

this system running. Most systems have one power supply, so you would

put « 1 » in this field.

Large/expensive server type systems usually have more, and can run with

a few missing. The HP NetServer LH4 can run with 2 out of 4, for example,

so you’d set that to 2. The idea is to keep the box running as long

as possible, right?

Obviously you have to put the redundant supplies on different UPS circuits

for this to make sense! See big-servers.txt in the docs subdirectory

for more information and ideas on how to use this feature.




upsmon runs this command when the system needs to be brought down.

This should work just about everywhere … if it doesn’t, well, change it.

SHUTDOWNCMD « /sbin/shutdown -h +0 »



upsmon calls this to send messages when things happen

This command is called with the full text of the message as one argument.

The environment string NOTIFYTYPE will contain the type string of

whatever caused this event to happen.

Note that this is only called for NOTIFY events that have EXEC set with

NOTIFYFLAG. See NOTIFYFLAG below for more details.

Making this some sort of shell script might not be a bad idea. For more

information and ideas, see docs/scheduling.txt


NOTIFYCMD /bin/notifyme



Polling frequency for normal activities, measured in seconds.

Adjust this to keep upsmon from flooding your network, but don’t make

it too high or it may miss certain short-lived power events.




Polling frequency in seconds while UPS on battery.

You can make this number lower than POLLFREQ, which will make updates

faster when any UPS is running on battery. This is a good way to tune

network load if you have a lot of these things running.

The default is 5 seconds for both this and POLLFREQ.



HOSTSYNC - How long upsmon will wait before giving up on another upsmon

The master upsmon process uses this number when waiting for slaves to

disconnect once it has set the forced shutdown (FSD) flag. If they

don’t disconnect after this many seconds, it goes on without them.

Similarly, upsmon slave processes wait up to this interval for the

master upsmon to set FSD when a UPS they are monitoring goes critical -

that is, on battery and low battery. If the master doesn’t do its job,

the slaves will shut down anyway to avoid damage to the file systems.

This « wait for FSD » is done to avoid races where the status changes

to critical and back between polls by the master.



DEADTIME - Interval to wait before declaring a stale ups « dead »

upsmon requires a UPS to provide status information every few seconds

(see POLLFREQ and POLLFREQALERT) to keep things updated. If the status

fetch fails, the UPS is marked stale. If it stays stale for more than

DEADTIME seconds, the UPS is marked dead.

A dead UPS that was last known to be on battery is assumed to have gone

to a low battery condition. This may force a shutdown if it is providing

a critical amount of power to your system.

Note: DEADTIME should be a multiple of POLLFREQ and POLLFREQALERT.

Otherwise you’ll have « dead » UPSes simply because upsmon isn’t polling

them quickly enough. Rule of thumb: take the larger of the two

POLLFREQ values, and multiply by 3.



POWERDOWNFLAG - Flag file for forcing UPS shutdown on the master system

upsmon will create a file with this name in master mode when it’s time

to shut down the load. You should check for this file’s existence in

your shutdown scripts and run ‹ upsdrvctl shutdown › if it exists.

See the shutdown.txt file in the docs subdirectory for more information.

POWERDOWNFLAG /etc/killpower


NOTIFYMSG - change messages sent by upsmon when certain events occur

You can change the default messages to something else if you like.

NOTIFYMSG « message »

NOTIFYMSG ONLINE « UPS %s on line power »

NOTIFYMSG ONBATT « UPS %s on battery »

NOTIFYMSG LOWBATT « UPS %s battery is low »

NOTIFYMSG FSD « UPS %s: forced shutdown in progress »

NOTIFYMSG COMMOK « Communications with UPS %s established »

NOTIFYMSG COMMBAD « Communications with UPS %s lost »

NOTIFYMSG SHUTDOWN « Auto logout and shutdown proceeding »

NOTIFYMSG REPLBATT « UPS %s battery needs to be replaced »

NOTIFYMSG NOCOMM « UPS %s is unavailable »

NOTIFYMSG NOPARENT « upsmon parent process died - shutdown impossible »

Note that %s is replaced with the identifier of the UPS in question.

Possible values for :

ONLINE : UPS is back online

ONBATT : UPS is on battery

LOWBATT : UPS has a low battery (if also on battery, it’s « critical »)

FSD : UPS is being shutdown by the master (FSD = « Forced Shutdown »)

COMMOK : Communications established with the UPS

COMMBAD : Communications lost to the UPS

SHUTDOWN : The system is being shutdown

REPLBATT : The UPS battery is bad and needs to be replaced

NOCOMM : A UPS is unavailable (can’t be contacted for monitoring)

NOPARENT : The process that shuts down the system has died (shutdown impossible)


NOTIFYFLAG - change behavior of upsmon when NOTIFY events occur

By default, upsmon sends walls (global messages to all logged in users)

and writes to the syslog when things happen. You can change this.












Possible values for the flags:

SYSLOG - Write the message in the syslog

WALL - Write the message to all users on the system

EXEC - Execute NOTIFYCMD (see above) with the message

IGNORE - Don’t do anything

If you use IGNORE, don’t use any other flags on the same line.


RBWARNTIME - replace battery warning time in seconds

upsmon will normally warn you about a battery that needs to be replaced

every 43200 seconds, which is 12 hours. It does this by triggering a

NOTIFY_REPLBATT which is then handled by the usual notify structure

you’ve defined above.

If this number is not to your liking, override it here.



NOCOMMWARNTIME - no communications warning time in seconds

upsmon will let you know through the usual notify system if it can’t

talk to any of the UPS entries that are defined in this file. It will

trigger a NOTIFY_NOCOMM by default every 300 seconds unless you

change the interval with this directive.



FINALDELAY - last sleep interval before shutting down the system

On a master, upsmon will wait this long after sending the NOTIFY_SHUTDOWN

before executing your SHUTDOWNCMD. If you need to do something in between

those events, increase this number. Remember, at this point your UPS is

almost depleted, so don’t make this too high.

Alternatively, you can set this very low so you don’t wait around when

it’s time to shut down. Some UPSes don’t give much warning for low

battery and will require a value of 0 here for a safe shutdown.

Note: If FINALDELAY on the slave is greater than HOSTSYNC on the master,

the master will give up waiting for the slave to disconnect.



CERTPATH - path to certificates (database directory or directory with CA’s)

When compiled with SSL support, you can enter the certificate path here.

With NSS:

Certificates are stored in a dedicated database (splitted in 3 files).

Specify the path of the database directory.

CERTPATH /etc/nut/cert/upsmon

With OpenSSL:

Directory containing CA certificates in PEM format, used to verify

the server certificate presented by the upsd server. The files each

contain one CA certificate. The files are looked up by the CA subject

name hash value, which must hence be available.

CERTPATH /usr/ssl/certs

See ‹ docs/security.txt › or the Security chapter of NUT user manual

for more information on the SSL support in NUT.


CERTIDENT - self certificate name and database password


When compiled with SSL support with NSS, you can specify the certificate

name to retrieve from database to authenticate itself and the password

required to access certificate related private key.

CERTIDENT « my nut monitor » « MyPasSw0rD »

See ‹ docs/security.txt › or the Security chapter of NUT user manual

for more information on the SSL support in NUT.


CERTHOST - security properties for an host


When compiled with SSL support with NSS, you can specify security directive

for each server you can contact.

Each entry maps server name with the expected certificate name and flags

indicating if the server certificate is verified and if the connection

must be secure.

CERTHOST localhost « My nut server » 1 1

See ‹ docs/security.txt › or the Security chapter of NUT user manual

for more information on the SSL support in NUT.


CERTVERIFY - make upsmon verify all connections with certificates


When compiled with SSL support, make upsmon verify all connections with


Without this, there is no guarantee that the upsd is the right host.

Enabling this greatly reduces the risk of man in the middle attacks.

This effectively forces the use of SSL, so don’t use this unless

all of your upsd hosts are ready for SSL and have their certificates

in order.

When compiled with NSS support of SSL, can be overriden for host

specified with a CERTHOST directive.


FORCESSL - force upsmon to use SSL


When compiled with SSL, specify that a secured connection must be used

to communicate with upsd.

If you don’t use ‹ CERTVERIFY 1 ›, then this will at least make sure

that nobody can sniff your sessions without a large effort. Setting

this will make upsmon drop connections if the remote upsd doesn’t

support SSL, so don’t use it unless all of them have it running.

When compiled with NSS support of SSL, can be overriden for host

specified with a CERTHOST directive.

MONITOR eaton@localhost 1 user mpasse master

NOTIFYCMD ~/etc/nut/upssched.conf

NOTIFYMSG ONBATT « %s fonctionne sur batterie »
NOTIFYMSG ONLINE « %s fonctionne sur EDF »
NOTIFYMSG LOWBATT « %s has a low battery! »
NOTIFYMSG SHUTDOWN « System is being shutdown! »


fichier upssched.conf

Network UPS Tools - upssched.conf sample file



This script gets called to invoke commands for timers that trigger.

It is given a single argument - the in your

AT … START-TIMER defines.

*** This must be defined before the first AT line. Otherwise the

program will complain and exit without doing anything.

A shell script with a big case…esac construct should work nicely for this.

An example has been provided to help you get started.

#CMDSCRIPT /bin/upssched-cmd



This sets the file name of the FIFO that will pass communications between

processes to start and stop timers. This should be set to some path where

normal users can’t create the file, due to the possibility of symlinking

and other evil.

Note: if you are running Solaris or similar, the permissions that

upssched sets on this file are not enough to keep you safe. If

your OS ignores the permissions on a FIFO, then you MUST put this in

a protected directory!

Note 2: by default, upsmon will run upssched as whatever user you have

defined with RUN_AS_USER in upsmon.conf. Make sure that user can

create files and write to files in the path you use for PIPEFN and


My recommendation: create a special directory for upssched, make it

owned by your upsmon user, then use it for both.

This is commented out by default to make you visit this file and think

about how your system works before potentially opening a hole.

PIPEFN /var/run/nut/upssched/upssched.pipe



REQUIRED. This was added after version 1.2.1.

upssched needs to be able to create this filename in order to avoid

a race condition when two events are dispatched from upsmon at nearly

the same time. This file will only exist briefly. It must not be

created by any other process.

You should put this in the same directory as PIPEFN.

LOCKFN /var/run/nut/upssched/upssched.lock



Define a handler for a specific event on UPS .

can be the special value * to apply this handler to every

possible value of .

Run the command via your CMDSCRIPT when it happens.

Note that any AT that matches both the and the

for the current event will be used.


Possible AT commands


Start a timer called that will trigger after

seconds, calling your CMDSCRIPT with as the first



Start a timer that’ll execute when any UPS (*) has been gone 10 seconds




Cancel a running timer called , if possible. If the timer

has passed then pass the optional argument to CMDSCRIPT.


If a specific UPS (myups@localhost) comes back online, then stop the

timer before it triggers

AT COMMOK myups@localhost CANCEL-TIMER upsgone



Immediately pass as an argument to CMDSCRIPT.


If any UPS (*) reverts to utility power, then execute

‹ ups-back-on-line › via CMDSCRIPT.

AT ONLINE * EXECUTE ups-back-on-line

LOCKFN /var/lib/nut/upssched.lock
PIPEFN /var/lib/nut/upssched.pipe

CMDSCRIPT ~/etc/nut/upssched-cmd

AT ONBATT * EXECUTE ups-on-batt
AT ONLINE * EXECUTE ups-back-on-power
#AT ONBATT * START-TIMER earlyshutdown 30
#AT ONLINE * CANCEL-TIMER earlyshutdown
AT ONBATT * START-TIMER onbattwarn 5

update-rc.d ups-monitor defaults

Adding system startup for /etc/init.d/ups-monitor …
/etc/rc0.d/K20ups-monitor → …/init.d/ups-monitor
/etc/rc1.d/K20ups-monitor → …/init.d/ups-monitor
/etc/rc6.d/K20ups-monitor → …/init.d/ups-monitor
/etc/rc2.d/S20ups-monitor → …/init.d/ups-monitor
/etc/rc3.d/S20ups-monitor → …/init.d/ups-monitor
/etc/rc4.d/S20ups-monitor → …/init.d/ups-monitor
/etc/rc5.d/S20ups-monitor → …/init.d/ups-monitor

et mon fichier upssched-cmd

! /bin/sh

This script should be called by upssched via the CMDSCRIPT directive.

Here is a quick example to show how to handle a bunch of possible

timer names with the help of the case structure.

This script may be replaced with another program without harm.

The first argument passed to your CMDSCRIPT is the name of the timer

from your AT lines.

case $1 in
echo -e « Subject: nut: $NOTIFYTYPE\r\n\r\nUPS: $UPSNAME\r\nAlert type: $NOTIFYTYPE\r\n\r\nupsc $UPSNAME » | msmtp -a alerte monmail@gmail.com
echo -e « Subject: nut: $NOTIFYTYPE\r\n\r\nUPS: $UPSNAME\r\nAlert type: $NOTIFYTYPE\r\n\r\nupsc $UPSNAME » | msmtp -a alerte monmail@gmail.com
logger -t upssched-cmd « Unrecognized command: $1 »

Merci d’avance pour votre aide :slight_smile: