Outils pour utilisateurs

Outils du site


nut

Ceci est une ancienne révision du document !


Nut

Liens

APC Smart-UPS RM 2U 1000VA

On a trouvé un Onduleur… mais comment le monitorer!

nut

Installer “nut”

# apt-get update
# apt-get install nut

driver

Par le port série…

/etc/nut/ups.conf

Mettre dedans:

[smartups]
      driver = apcsmart
      port = /dev/ttyS0
      desc = UPS filer5

test

# upsdrvctl start
Network UPS Tools - UPS driver controller 2.0.4
Network UPS Tools (version 2.0.4) - APC Smart protocol driver
      Driver version 1.99.8, command table version 2.0
Detected Smart-UPS 1000 RM [AS0303211207(] on /dev/ttyS0

Yes !

:!: Unable to open /dev/ttyS0: Permission denied

Dans ce cas, on a peut être simplement oublié:

# adduser nut dialout

Afin que le user “nut” soi autorisé a utiliser le port serie!

Quand ca marche:

On peut arreter pour l'instant:

# upsdrvctl stop
Network UPS Tools - UPS driver controller 2.0.4
Stopping UPS: smartups

Port USB

Non testé.

config

upsd

upsd.conf

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL admin1 <IP_1>
ACL admin2 <IP_2>
ACL nagios <IP_3>

ACCEPT localhost admin1 admin2 nagios
REJECT all

:!: Il faut donner l'ip avec le mask ! a.b.c.d/mask . Exemple: 10.20.12.34/32

daemon

Editer /etc/default/nut, afin d'avoir:

# start upsd
START_UPSD=yes

Retour sous shell:

# /etc/init.d/ups-monitor start
Starting Network UPS Tools: upsdrvctl upsd.

test

# upsc smartups@localhost
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 00
battery.date: 01/15/03
battery.packs: 000
battery.runtime: 25080
battery.runtime.low: 120
battery.voltage: 27.67
battery.voltage.nominal: 024
driver.name: apcsmart
driver.parameter.port: /dev/ttyS0
driver.version: 2.0.4
driver.version.internal: 1.99.8
input.frequency: 50.00
input.quality: FF
input.sensitivity: H
input.transfer.high: 253
input.transfer.low: 208
input.transfer.reason: S
input.voltage: 228.9
input.voltage.maximum: 228.9
input.voltage.minimum: 227.5
output.voltage: 228.9
output.voltage.target.battery: 230
ups.delay.shutdown: 090
ups.delay.start: 000
ups.firmware: 618.3.I
ups.id: UPS_IDEN
ups.load: 000.0
ups.mfr: APC
ups.mfr.date: 01/15/03
ups.model: Smart-UPS 1000 RM
ups.serial: AS0303211207(
ups.status: OL
ups.temperature: 024.7
ups.test.interval: 1209600
ups.test.result: NO

C'est un bien vieille onduleur…

upsmon

Pas pour l'instant…

MGE

Par USB

J'ai suivit cette methode .

Packages

Pour APT:

# echo "deb http://opensource.mgeups.com/stable/debian binary/" >> /etc/apt/sources.list

Installer:

# apt-get update
# apt-get install mgeups-psp nut

On branche l'USB: entre le PC et l'onduleur:

# lsusb
Bus 004 Device 002: ID 0463:ffff MGE UPS Systems UPS

Ok.

Tester pilote

On créé/modifie rapidement le fichier /etc/nut/ups.conf pour avoir:

[upscave]
      driver = usbhid-ups
      port = auto
      desc = "MGE 1000"
      #vendorid = 0463

Et puis on test:

# upsdrvctl start
Network UPS Tools - UPS driver controller 2.2.0-
Network UPS Tools: 0.28 USB communication driver 0.28 - core 0.30 (2.2.0-)

Detected a UPS: MGE UPS SYSTEMS/ELLIPSE
Using subdriver: MGE HID 1.0

Mais j'ai surtout eu des erreurs… il a suffit que je débranche et rebranche l'USB, pour que ca marche.
Je n'ai plus eu d'erreur de ce genre par la suite: un reliquat de configuration “serie” devait parasiter l'USB ?

Mais surtout, ne pas oublier de faire:

# upsdrvctl stop
Network UPS Tools - UPS driver controller 2.2.0-

Sinon, la suite va deconner…

Fichiers de config

# ls -lart /etc/nut
-rw-r-----  1 root nut   3790 2008-08-03 00:31 ups.conf
-rw-r-----  1 root nut   2118 2008-08-03 00:35 upsd.conf
-rw-r-----  1 root nut   2322 2008-08-03 00:38 upsd.users
-rwxr-xr-x  1 root root  1670 2008-08-03 13:50 upssched-cmd
-rw-r-----  1 root nut   4611 2008-08-03 13:50 upssched.conf
-rw-r-----  1 root nut  11928 2008-08-03 16:06 upsmon.conf

ups.conf

[upscave]
      driver = usbhid-ups
      port = auto
      desc = "MGE 1000"
      #vendorid = 0463

upsd.conf

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL lan1 192.168.0.0/24
ACL lan2 192.168.0.0/24

ACCEPT localhost lan1 lan2
REJECT all

upsd.users

[user]
password        = <MOT_DE_PASSE_SECRET>
allowfrom       = localhost lan1 lan2
actions         = SET
instcmds        = ALL
upsmon master

upsmon.conf

MONITOR upscave@xencave 1 user <MOT_DE_PASSE_SECRET> master

MINSUPPLIES 1

SHUTDOWNCMD "/sbin/shutdown -h +0"

# TJ -----------------------------
# 03/08/2008
# En fait ca ne fonctionne pas, et d'ailleurs, est-ce une bonne idée ?
# Je pense qu'il est préférable que l'on redemarre le PC avec "wakeonlan"
# ----------
#POWERDOWNFLAG /etc/killpower

NOTIFYCMD /sbin/upssched

POLLFREQ 5

POLLFREQALERT 5

HOSTSYNC 15

DEADTIME 15

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+EXEC

RBWARNTIME 43200

NOCOMMWARNTIME 300

FINALDELAY 5

La plupart de ces lignes sont celles par defaut… J'ai surtout personnalisé le truc pour recevoir des mails sur l'etat de l'onduleur !

Le POWERDOWNFLAG est resté un mystere pour moi:
Alors que les scripts sont là (y compris /etc/init.d/halt), impossible d'éteindre l'onduleur, au lieu d'eteindre le PC de par lui-même. Le fichier nommé par le flag POWERDOWNFLAG n'est jamais créé…

L'autre problème évoqué ici, est le RAID qu'il vaut mieux arreter proprement: Or, je ne sais pas trop comment faire ca “proprement” ( mdadm –readonly –scan ? ).

Au final, je crois que c'est mieux ainsi: dés que la batterie est trop faible, la machine s'eteind. Il faudra la rallumer manuellement, eventuellement par un petit coup de “wakeonlan”.

upssched.conf

CMDSCRIPT /etc/nut/upssched-cmd

PIPEFN /var/run/nut/upssched.pipe

LOCKFN /var/run/nut/upssched.lock

AT ONBATT * START-TIMER onbatt 120
AT ONLINE * CANCEL-TIMER onbatt
AT COMMBAD * START-TIMER upsgone 10
AT COMMOK * CANCEL-TIMER upsgone
AT ONBATT * EXECUTE ups-on-batt
AT ONLINE * EXECUTE ups-on-line
AT LOWBATT * EXECUTE ups-low-batt
AT SHUTDOWN * EXECUTE ups-shutdown
AT NOCOMM * EXECUTE ups-no-comm

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

      # TJ ----------------------------
      ups-on-batt)
              logger -t upssched-cmd "Coupure de courant!"
              echo "Coupure de courant a la cave!" | mail -s "upssched-cmd: $1" root@localhost
              ;;
      ups-on-line)
              logger -t upssched-cmd "Retour du courant."
              echo "Retour du courant a la cave." | mail -s "upssched-cmd: $1" root@localhost
              ;;
      onbatt)
              logger -t upssched-cmd "Coupure de courant - confirme !"
              echo "Coupure de courant a la cave!!!" | mail -s "upssched-cmd: $1" root@localhost
              ;;

      ups-low-batt)
              logger -t upssched-cmd "Charge faible."
              echo "Charge batterie faible." | mail -s "upssched-cmd: $1" root@localhost
              ;;

      ups-shutdown)
              logger -t upssched-cmd "Shutdown en cours..."
              echo "Le Shutdown est en cours..." | mail -s "upssched-cmd: $1" root@localhost
              ;;

      ups-no-comm)
              logger -t upssched-cmd "Communication absente"
              echo "Il n'y a plus de communication avec l'onduleur..." | mail -s "upssched-cmd: $1" root@localhost
              ;;

      # -------------------------------

      upsgone)
              logger -t upssched-cmd "The UPS has been gone for awhile"
              ;;
      *)
              logger -t upssched-cmd "Unrecognized command: $1"
              # TJ ----------------------------
              echo "UPS info: $1" | mail -s "upssched-cmd:Unrecognized command" root@localhost
              # -------------------------------
              ;;
esac

Demarrer

start daemon

Verifier que le fichier /etc/default/nut contient:

# start upsd
START_UPSD=yes

# start upsmon
START_UPSMON=yes

Et un petit coup de :

# /etc/init.d/nut start
Starting Network UPS Tools: upsdrvctl upsd upsmon.

Verifions les logs:

# tail /var/log/syslog
Aug  3 17:14:44 xencave usbhid-ups[4036]: Startup successful
Aug  3 17:14:44 xencave upsd[4037]: listening on 0.0.0.0 port 3493
Aug  3 17:14:44 xencave upsd[4037]: Connected to UPS [upscave]: usbhid-ups-upscave
Aug  3 17:14:44 xencave upsd[4038]: Startup successful
Aug  3 17:14:44 xencave upsmon[4040]: Startup successful
Aug  3 17:14:44 xencave upsd[4038]: Connection from 192.168.0.1
Aug  3 17:14:44 xencave upsd[4038]: Client user@192.168.0.1 logged into UPS [upscave]

Ok.

test

# upsc upscave@localhost
battery.charge: 86
battery.charge.low: 30
battery.runtime: 2924
battery.type: PbAc
driver.name: usbhid-ups
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.2.0-
driver.version.data: MGE HID 1.0
driver.version.internal: 0.30
input.transfer.high: 264.0
input.transfer.low: 184.0
outlet.0.desc: Main Outlet
outlet.0.id: 1
outlet.0.switchable: no
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
output.voltage: 230.0
ups.beeper.status: enabled
ups.delay.shutdown: -1
ups.delay.start: -10
ups.load: 6
ups.mfr: MGE UPS SYSTEMS
ups.model: Ellipse 1000
ups.power.nominal: 1000
ups.productid: ffff
ups.serial: 1H6F4304V
ups.status: OL CHRG
ups.vendorid: 0463

Knutclient

Bilan

Plus stable que la version sur port “serie”: J'avais des “lags” étrange et la configuration était mal foutu.

Par port série

:!: Il s'agit d'une vieille methode. la version USB est plus mieux.
# aptitude install nut

En fait, j'ai betement recopié des fichiers que j'avais déja…

Xen et ttyS0

Par défaut, Xen se réserve l'usage du port ttyS0 (COM1, pour les vieux).

Voir comment récuperer l'usage de ce port ici.

dialout

Autorisé le user nut a utiliser le port ttyS0 !
Effectivement:

# id nut
uid=105(nut) gid=105(nut) groupes=105(nut)
# ls /dev/ttyS0 -lart
crw-rw---- 1 root dialout 4, 64 2008-08-02 12:00 /dev/ttyS0

Donc:

# adduser nut dialout
Ajout de l'utilisateur « nut » au groupe « dialout »...
Terminé.

Les fichiers

  1. rw-r—– 1 root nut 127 2006-01-15 18:45 upsd.conf
  2. rw-r—– 1 root nut 95 2006-01-15 18:47 upsd.users
  3. rw-r—– 1 root nut 325 2006-01-15 18:57 upssched.conf
  4. rw-r—– 1 root nut 43 2007-09-06 15:21 ups.conf
  5. rw-r—– 1 root nut 334 2008-08-02 12:04 upsmon.conf

Sans oublier, dans /root/prod/nut :

  1. rwxr-xr-x 1 root root 175 2008-08-02 11:08 upssched-tj

upsd.conf

# access-lists:
ACL     all     0.0.0.0/0
ACL     localhost       127.0.0.1/32
ACL     lan     192.168.0.0/24

# rights:
ACCEPT  localhost lan
REJECT  all

upsd.users

[user]
password        = <MOT_DE_PASSE_SECRET>
allowfrom       = localhost lan
actions         = SET
instcmds        = ALL
upsmon master

upssched.conf

# generated by myself
CMDSCRIPT       /root/prod/nut/upssched-tj
PIPEFN          /var/run/nut/upssched-tj.pipe
LOCKFN          /var/run/nut/upssched-tj.lock

# TJ
# Appele le script 'upssched-tj.pl' apres 120 s sur batterie
# (sinon, ca coupera ulterieurement, sur fin batterie)

AT ONBATT * START-TIMER shutdown 120
AT ONLINE * CANCEL-TIMER shutdown

ups.conf

[upscave]

driver=mge-shut
port=/dev/ttyS0

upsmon.conf

# define ups to monitor
MONITOR upscave@localhost 1 user <MOT_DE_PASSE_SECRET> master

# define the shutdown command
SHUTDOWNCMD     "/sbin/shutdown -h now"

# TJ
POLLFREQ        20
POLLFREQALERT   10
DEADTIME        60

NOTIFYCMD       /sbin/upssched
NOTIFYFLAG      COMMOK  SYSLOG
NOTIFYFLAG      COMMBAD SYSLOG
NOTIFYFLAG      ONBATT  SYSLOG+WALL+EXEC
NOTIFYFLAG      ONLINE  SYSLOG+WALL+EXEC

/etc/aliases

Ajouter:

upscave: root

/root/prod/nut/upssched-tj

:!: ce fichier est mal foutu. voir l'install USB plutot
#!/bin/sh

# actually send the shutdown signal to master (will broadcast to all slaves)
# TJ : je desactive le shutdown programme sur timeout (sched...)
# /sbin/upsmon -c fsd

(Sert plus a grand chose …?)

Bilan

Bof. Ca eteind la machine, alors que je voudrais que ca coupe le courant avant que le systeme eteigne la machine. (Sinon, la machine ne remonte pas quand le courant revient)

Tips

commandes

Forcer l'arret du “maitre” comme si il y a avait eu une coupure de courant:

# upsmon -c fsd

La procedure “shutdown” est immédiatement engagé.

Couper le jus dans 10 secondes !

# upsrw -s ups.delay.shutdown=10 -u user -p <MOT_DE_PASSE_SECRET> upscave@localhost
nut.1224897164.txt.gz · Dernière modification : 2008/10/25 01:12 de thierry