Anzeige APCUPSD Statusmeldungen

Einsatz:

Einbindung von APC UPS via APCUPSD Statusmeldungen in IP-Symcon. Das Script sendet eine "STATUS"-Anfrage an den APCUPSD via ClientSocket und wertet die Daten aus.
Zur Verarbeitung in IPS ist es notwendig, die empfangenen Datensätze zu dekodieren. Jede APC UPS verfügt über eine individuelle ID, die als Kennzeichnung einer UPS dient. Damit ist es möglich, das gleiche Script für mehrere APC-UPS im Netzwerk einzusetzen. Dieses Script wird durch einen zeitgesteuerten IPS-Event (bei mir alle 2min) zyklisch aufgerufen.
Die Scripte bietet z.Z. eine Implementierung für die wichtigsten Parameter, kann aber leicht erweitert werden. Desweiteren wurde eine dynamische Erstellung und Verwaltung der IPS-Variablen sowie von zusätzlichen Variablenprofilen integriert.

Sourcecode: (V0.9 13.11.2011)

Funktion:

Das Script implementiert die Auswertung der Status-Daten eines oder mehrerer APCUPSD-Installationen und wird gewöhnlich über einen Timer (in IPS "zyklisches Ereignis") gestartet. Dazu wird kurzzeitig eine Socketverbindung zu den konfigurierten APCUPD-Instanzen aufgebaut, ein Status-Befehl gesendet und das Ergebnis verarbeitet.
Für jede UPS wird eine neue IPS-Kategorie in den IPS-Baum eingefügt und dort für viele übermittelte Parameter spezifische Variablen selbstständig angelegt, die sich anschliesssend beliebig weiterverarbeiten lassen. Leider sind die Variablen zwischen den Modellgruppen unterschiedlich, so das ggfls. eine Anpassung der Schlüsselwörter im Script vorgenommen werden muss. Defaultseitig vorhandene Variablen, die nicht von der USV gefüllt werden können, werden wieder gelöscht. Ausnahme: "NominalPower(NOMPOWER)" wird nur von wenigen UPS bereit gestellt, wird aber zur Berechnung der aktuellen Leistung benöigt. Es wird versucht, diesen Wert aus der Modellbezeichnung und einer Equivalenztabelle (array $nomvalues) zu ermitteln, ansonsten wird ein default Wert eingesetzt, dessen Variablenwert in IPSymcon geändert werden kann.
Den Variablen wurden gängige Variablenprofile zugewiesen, wobei nicht im IPS-Standard enthaltene Profile dynamisch angelegt werden. Damit können die APC Statusdaten auch im Webfront automatisch visualisiert werden Weiterhin werden alle Meldungen in Logfiles geschrieben werden.
Das Regvar-Script kann man auch über die Konsole ausführen.

Dynamisch erzeugte Variablen
Dynamisch erzeugte Variablen

Webfront
Ansicht im Webfront


Installation

Für jede UPS ist ein APCUPSD auf einem anderen Host und/oder Port zukonfigurieren. APCUPSD ist für viele Betriebssysteme erhältlich. Host bzw. IP-Adresse und Port (default 3551) sind zu notieren. Testweise sollte nun das Programm "apcaccess" aus der APCUPSD-Installation (im "bin" bzw "/sbin"-Verzeichnis) mit dem Host und Port aufgerufen werden, z.B.

 apcaccess status localhost:3551

IPS-Konfiguration:

Dann wird in IPSymcon für jede APCUPSD-Installation eine IPS-Clientsocket-Instanz und eine zugehörige RegisterVariablen-Instanz mit der jeweiligen ClientSocket-Instanz als Parent angelegt.

IPS-Instanzen IPS-Instancen

In der Clientsocket-Instanz sind die notierten Werte für Host bzw. IP-Adresse und Port einzutragen. Zum Eintragen muss die Checkbox "Socket öffnen" aktiviert werden. Im späteren Betrieb ist der Clientsocket normalerweise geschlossen und wird nur zeitweise durch das Script für die Abfrage geöffnet.

Clientsocket IPS-Client Socket

Es ist ein neues Script mit dem Inhalt von apcregvar.phps zu erstellen und in jeder "Registervariable"-Instance als Ziel zuzuweisen.
Am Anfang des Scriptes sind die IDs der RegisterVariablem-Instancen einzutragen, deren zugeordnete Clientsocket-Instancen abgefragt werden sollen.

 $regvars=array(39883,39131);
Die StatusVariablen werden später automatisch erzeugt.

IPS RegisterVariable
IPS Register Variable

Es ist dem Script ein neues zyklisches Ereignis mit der gewünschten Abfragerate zuszuweisen. Einen guten Kompromiss zwischen erzeugter Last und schneller Benachrichtigung stellen für mich Werte zwischen 2-5min dar.

IPS Event
IPS Timer Event


Spezielle Konfiguration

Am Enfang des Scriptes befindet sich eine Konfigurationssection, in der einige Optionen gesetzt werden können.

Kategorie- und Variablennamen: Die Namen der angelegten Kategorien kann man ändern, nicht aber deren Hierarchie und die Namen der Variablen. Die Masterkategorie wird in der globalen Variablen geändert. Der Parent der Masterkategorie ist per Default die IP-Symcon-Root (ID=0). Diese kann aber ebenfalls auf eine andere existierende! Kategorie geändert werden, sodass der Variablenbaum an beliebiger Stelle eingehängt werden kann.

 $GLOBALS['parent']=0; //parent ID of master category
 $GLOBALS['catname']='APCUPSD'; //master category name
 
Identifikation:Das Script benötigt eine eindeutige GeräteID, um die Werte bei mehreren USV den richtigen Variablen zuordnen zu können. Ab Version 0.6 wird dafür 'SERIALNO' verwendet. Möglicherweise wird aber nicht bei allen USV dieser Wert geliefert. Dann muss ein alternativer eindeutiger Parameter genutzt werden,wenn dieser die USV sicher unterscheidet. Kandidaten dafür sind z.B. HOSTNAME, UPSNAME oder MODEL. Dafür muss die entsprechende globale Variablen geändert werden.
$GLOBALS['idname']='SERIALNO';
Logging: Das Logfile für das RegVar-Script kann am Anfang des Scriptes in der Variable "$logfile" gesetzt werden. Will man das Logging abschalten, muss die Variable für den entsprechenden Bereich auf eine leere Zeichkette gesetzt werden.
 $logfile="";
NominalPower: Es wird folgende Logik verwendet: Eigene Parameter
Die verschiedenen APC-Modelle stellen eine unterschiedliche Anzahl von Parametern zur Verfügung. Deshalb und aus Gründen der Übersichtlichkeit ist es nicht sinnvoll, alle Parameter im Script anzugeben. Wer möchte, kann das Script aber relativ einfach ergänzen. Details sind in diesem und dem nachfolgenden Posting zu finden.

Index
Disclaimer

© 2010-2011 Thomas Dreßler
Alle Rechte vorbehalten
letzte Änderung 13.11.2011