Outils pour utilisateurs

Outils du site


Panneau latéral



informatique:projets:pynut

Introduction

PyNUT est une classe d'abstraction écrite en Python permettant de se connecter à un serveur NUT (Network UPS Tools) et d'exécuter différentes commandes sans avoir à connaître le protocole de communication.

L'idée de cette classe vient d'un autre projet que je voulais réaliser. Avoir un outil graphique pour visualiser et gérer mes onduleurs connectées à NUT. Le projet graphique étant réalisé en Python également, j'ai opté pour la séparation (classe PyNUT + application graphique → modèle + vue) afin que les deux parties restent indépendantes.

L'application graphique se trouve ici : NUT-Monitor

Le projet PyNUT est amené a évoluer et plus tard proposera d'autres classes. Pour cette raison la classe 'PyNUT' à été renomée en 'PyNUTClient' à partir de la version 1.1

Liste des méthodes de la classe
class PyNUTClient :
  def __init__( self, host='127.0.0.1', port=3493, login=None, password=None, debug=False, timeout=5 ) :
 
  def GetRWVars( self, ups='' ) :
 
  def GetUPSCommands( self, ups='' ) :
 
  def GetUPSList( self ) :
 
  def GetUPSVars( self, ups='' ) :
 
  def RunUPSCommand( self, ups='', command='' ) :
 
  def SetRWVar( self, ups='', var='', value='' ) :

Documentation

Pour des besoins de distribution, l'intégralité du code de PyNUT est commenté en anglais. Vous trouverez donc dans ce chapitre la documentation des méthodes de la classe en français.

La classe PyNUTClient est compatible avec le module PyDOC de Python. Il vous suffit donc de taper 'pydoc PyNUT' pour obtenir une documentation succincte de PyNUTClient.

GetRWVars

Renvoi une liste des variables modifiables sur l'onduleur spécifié. Le format est un dictionnaire de type 'clé'⇒'valeur'.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.GetRWVars( ups='ups1' )
print( result )
 
>> {'battery.date': '10/25/07', 'ups.id': 'test'}

GetUPSCommands

Renvoi une liste des commandes supportées par l'onduleur spécifié. A noter que certaines de ces commandes ne seront utilisables qu'avec les droits nécessaires. Le résultat est présenté sous la forme d'un dictionnaire du type 'commande'⇒'description en anglais'.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.GetRWVars( ups='ups1' )
print( result )
 
>> {'test.battery.start' : 'Start a battery test',
    'calibrate.stop'     : 'Stop run time calibration',
    'shutdown.stayoff'   : 'Turn off the load and remain off',
    'test.battery.stop'  : 'Stop the battery test',
    'test.panel.start'   : 'Start testing the UPS panel',
    'calibrate.start'    : 'Start run time calibration',
    'load.off'           : 'Turn off the load immediately',
    'test.failure.start' : 'Start a simulated power failure',
    'shutdown.return'    : 'Turn off the load and return when power is back'}

GetUPSList

Renvoi la liste des onduleurs gérés sur le serveur NUT. Le résultat est présenté sous la forme d'un dictionnaire contenant 'Nom'⇒'Description'.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.GetUPSList()
print( result )
 
>> {'UPS1': 'Smart UPS 3000 Serveur de fichiers',
    'UPS2': 'Smart UPS 1000 Serveur de mail'}

GetUPSVars

Renvoi la liste de toutes les variables disponibles pour l'onduleur spécifié. Le résultat est présenté sous la forme d'un dictionnaire du type 'Variable'⇒'Valeur'.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.GetUPSVars( ups='UPS1' )
print( result )
 
>> {'input.transfer.high'           : '253',
    'battery.charge'                : '100.0',
    'ups.mfr'                       : 'APC',
    'battery.voltage.nominal'       : '024',
    'input.transfer.reason'         : 'S',
    'ups.test.interval'             : '1209600',
    'input.transfer.low'            : '208',
    'output.voltage'                : '234.0',
    'driver.version'                : '2.2.1-',
    'battery.charge.restart'        : '00',
    'ups.id'                        : 'test',
    'driver.parameter.pollinterval' : '2',
    'driver.parameter.port'         : '/dev/ttyS0',
    'battery.voltage'               : '27.10',
    'ups.test.result'               : 'NO',
    'ups.status'                    : 'OL',
    'battery.date'                  : '10/25/07',
    'ups.model'                     : 'Smart-UPS SC1000',
    'ups.serial'                    : 'XXXXXXXXXXXX',
    'output.voltage.nominal'        : '230',
    'ups.mfr.date'                  : '10/25/07',
    'driver.version.internal'       : '1.99.8',
    'input.voltage'                 : '234.0',
    'battery.runtime.low'           : '120',
    'input.sensitivity'             : 'H',
    'ups.load'                      : '001.9',
    'driver.name'                   : 'apcsmart',
    'input.voltage.maximum'         : '234.0',
    'input.frequency'               : '50.00',
    'ups.delay.shutdown'            : '060',
    'ups.delay.start'               : '000',
    'input.voltage.minimum'         : '232.0',
    'input.quality'                 : 'FF',
    'battery.runtime'               : '29040',
    'ups.firmware'                  : '737.3.I',
    'battery.alarm.threshold'       : '0'}

RunUPSCommand

Execute la commande spécifiée sur l'onduleur spécifié. La commande renvoi 'OK' si tout c'est bien passé ou lève une exception en cas de soucis. La commande doit être une des commandes renvoyés par la fonction 'GetUPSCommands'.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.RunUPSCommand( ups='UPS1', command='test.panel.start' )
print( result )
 
>> OK

SetRWVar

Cette fonction ajuste la valeur d'une variable sur l'onduleur spécifié. La variable doit faire partie des variables renvoyées par la commande GetRWVars(). Le résultat est 'OK' ou une exception est levée en cas d'échec.

Exemple
import PyNUT
 
ups    = PyNUT.PyNUTClient( host='serveur', login='upsadmin', password='upspass' )
result = ups.SetRWVar( ups='UPS1', var='battery.date', value='06/17/08' )
print( result )
 
>> OK

Téléchargement

PyNUT est disponible sous deux formes, une archive TAR contenant les fichiers nécessaires, et un paquet Debian qui fonctionne sous Ubuntu. Il ne devrait pas poser de soucis sur d'autres distributions de type Debian.

informatique/projets/pynut.txt · Dernière modification: 2013/11/25 23:39 (modification externe)