Auslesen einer APC SmartUPS USV mit ssnmp

Hallöchen,

ich setze gerade meinen IPS Server neu auf. Um nicht ständig das PHP SNMP Modul manuell nachpflegen zu müssen, habe ich mich nun auf das tool ssnmpq gestürzt. Danke an msc für die Inspiration

Installation: Ist im Header beschrieben. Ganz Easy :wink:

Das Script tut soweit alles alleine: Variablen anlegen incl. Variablenprofile, ein zyklisches Ereignis alle X Minuten (konfigurierbar), sich selbst auf hidden setzen usw. Sofern sinnvoll wird auch das Logging der Variablen aktiviert.

Viel Spaß :wink:


<?PHP
/*
Das folgende Script fragt beim Aufruf eine APC USV ab und speichert die Werte in die entsprechenden Variablen.
Die Variablen und deren Profile werden beim ersten Start des Scriptes automatisch generiert sofern sie nicht schon existieren.
Das Script setzt sich selbst auf "hidden", damit ein Link auf die Instanz im Webfront/iFront das Script nicht anzeigt.

Installation:
1. Eine neue Instanz anlegen (Dummy-Module)
2. Script unter dieser Instanz anlegen und den Inhalt dieser Datei dort einfügen
3. Script speichern und einmal ausführen
4. Fertig ;-)

Viel Spaß!

Autor: Konfu
Grundlage: Das Script von "sanman" aus dem Thread "SNMP Geräte auslesen am Beispiel einer APC USV"
Kontakt: Bitte über das IPS Forum oder als PN
*/

// ## Veränderbare Daten ##############################################################################

// USV Host-Config
$host           = "192.168.xxx.xxx";
$community      = "xxxxxxxxxx";

// ssnmpq Binary
$binary = "C:\Programme\ssnmpq\ssnmpq.exe";

// In welchem Abstand (Minuten) soll das Script ausgeführt werden?
$minutes = 5;

// Variablen-Namen definieren
$upsstatus      = "USV Status";
$load           = "USV Auslastung";
$batstat        = "Batterie Status";
$batcap         = "Batterie Ladezustand";
$batrem         = "Batterielaufzeit bei Stromausfall";
$batstatus      = "Zustand der Batterien";
$battemp        = "Batterie Temperatur";
$voltin         = "Spannung am Eingang";
$voltout        = "Spannung am Ausgang";
$freq           = "Frequenz Ausgangsspannung";
$switchrsn      = "Grund fuer Umschalten auf Batteriebetrieb";
$selftest       = "Ergebnis letzter Selbsttest";
$lasttest       = "Datum letzter Selbsttest";
$lastread       = "Datum letzte SNMP Abfrage";

//Debug Ausgabe aktivieren?
$debug          = false;

//## Ab hier nichts mehr ändern #######################################################################

//OIDs
$upsstatusOID   = ".1.3.6.1.4.1.318.1.1.1.4.1.1.0";
$loadOID        = ".1.3.6.1.4.1.318.1.1.1.4.2.3.0";
$batstatOID     = ".1.3.6.1.4.1.318.1.1.1.2.1.1.0";
$batcapOID      = ".1.3.6.1.4.1.318.1.1.1.2.2.1.0";
$batremOID      = ".1.3.6.1.4.1.318.1.1.1.2.2.3.0";
$batstatusOID   = ".1.3.6.1.4.1.318.1.1.1.2.2.4.0";
$battempOID     = ".1.3.6.1.4.1.318.1.1.1.2.2.2.0";
$voltinOID      = ".1.3.6.1.4.1.318.1.1.1.3.2.1.0";
$voltoutOID     = ".1.3.6.1.4.1.318.1.1.1.4.2.1.0";
$freqOID        = ".1.3.6.1.4.1.318.1.1.1.4.2.2.0";
$switchrsnOID   = ".1.3.6.1.4.1.318.1.1.1.3.2.5.0";
$selftestOID    = ".1.3.6.1.4.1.318.1.1.1.7.2.3.0";
$lasttestOID    = ".1.3.6.1.4.1.318.1.1.1.7.2.4.0";


//SNMP Query Funktion
function snmpget($oid)
{
	global $host, $community, $binary;

	$oid = ltrim($oid,".");
	$value = IPS_Execute($binary, "/h:$host /c:$community /o:$oid /v", false, true);
	$value = trim($value);
	return $value;
}

// ID des Archive Handlers auslesen
$archive = IPS_GetInstanceIDByName ( "Archive Handler", 0 );

// Variablen auf Existenz Prüfen. Wenn es die Variable nicht gibt wird sie angelegt.

//Zähler für Positionsbestimmung setzen
$zaehler = 1;

// Wo sind wir?
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

//Dieses Script auf "hidden" setzen, damit es im Webfront nicht auftaucht.
IPS_SetHidden($IPS_SELF, true);

// Ereignis für zyklische Abfrage anlegen, sofern nicht schon vorhanden
// Vorgehen:
// 1. Prüfen ob dieses Script Children hat (Ereignisse sind Children)
// 2. Prüfen ob eines dieser Childs ein Ereignis ist
// 3. Prüfen ob eines dieser Ereignisse ein zyklisches Ereignis ist
// 4. Bei zylischen Ereignissen den Zähler $ereignisse hochzählen
// 5. Wenn die Anzahl der zyklischen Ereignisse ($ereignisse) 0 ist, wird ein
//    passendes Ereignis angelegt

$ereignisse = 0;
$children = IPS_GetChildrenIDs($IPS_SELF);
$amount = count($children);
if ($amount > 0)
{
	foreach ($children as $id)
	{
	   $array = IPS_GetObject($id);
		$type = $array["ObjectType"];
		if ($type == 4)
		{
		   $event = IPS_GetEvent ( $id );
			if ($event["EventType"]== 1)
			{
		   	$ereignisse++;
			}
		}
	}

}

if ($ereignisse == 0)
{
	$eid = IPS_CreateEvent(1);
	IPS_SetEventCyclic($eid, 0, 0, 0, 2, 2 ,$minutes); //Alle 2 Minuten
	IPS_SetParent($eid, $_IPS['SELF']);
	IPS_SetEventActive($eid, true);
}

//-------------------------------------------------------------
// USV Status
if (!IPS_VariableProfileExists("UPS_Status"))
{
        IPS_CreateVariableProfile("UPS_Status", 1);
        IPS_SetVariableProfileAssociation("UPS_Status", 1, "Unbekannt", "", 0xFF0000);
        IPS_SetVariableProfileAssociation("UPS_Status", 2, "Online", "", 0x00FF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 3, "On Battery", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 4, "On Smart Boost", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 5, "Timed Sleeping", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 6, "Software Bypass", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 7, "Off", "", 0xC0C0C0);
        IPS_SetVariableProfileAssociation("UPS_Status", 8, "Rebooting", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_Status", 9, "Switched Bypass", "", 0xFF0000);
        IPS_SetVariableProfileAssociation("UPS_Status", 10, "Hardware Failure Bypass", "", 0xFF0000);
        IPS_SetVariableProfileAssociation("UPS_Status", 11, "Sleeping Until Power Returns", "", 0xC0C0C0);
        IPS_SetVariableProfileAssociation("UPS_Status", 12, "On Smart Trim", "", 0xFFFF00);
		  IPS_SetVariableProfileIcon("UPS_Status",  "Power");
        if ($debug) { echo "Profil UPS_Status wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($upsstatus, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $upsstatusID = IPS_CreateVariable(1);
        IPS_SetName($upsstatusID, $upsstatus);
        IPS_SetParent($upsstatusID, $parentID);
        IPS_SetVariableCustomProfile($upsstatusID, "UPS_Status");
        IPS_SetPosition($upsstatusID, $zaehler);
        AC_SetLoggingStatus($archive, $upsstatusID, true);
        if ($debug) { echo "Variable $upsstatusID ($upsstatus) wurde angelegt.
"; }
}
else { $upsstatusID = $Var;     }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// USV Auslastung
if (!IPS_VariableProfileExists("UPS_Percentage"))
{
        IPS_CreateVariableProfile("UPS_Percentage", 1);
        IPS_SetVariableProfileText("UPS_Percentage", "", " %");
        IPS_SetVariableProfileValues("UPS_Percentage", 0, 100, 1);
        IPS_SetVariableProfileDigits("UPS_Percentage", 0);
		  IPS_SetVariableProfileIcon("UPS_Percentage",  "Intensity");
        if ($debug) { echo "Profil UPS_Percentage wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($load, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $loadID = IPS_CreateVariable(1);
        IPS_SetName($loadID, $load);
        IPS_SetParent($loadID, $parentID);
        IPS_SetVariableCustomProfile($loadID, "UPS_Percentage");
        IPS_SetPosition($loadID, $zaehler);
        AC_SetLoggingStatus($archive, $loadID, true);
        if ($debug) { echo "Variable $loadID ($load) wurde angelegt.
"; }
}
else { $loadID = $Var;  }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Status

if (!IPS_VariableProfileExists("UPS_BatteryStatus"))
{
        IPS_CreateVariableProfile("UPS_BatteryStatus", 1);
        IPS_SetVariableProfileAssociation("UPS_BatteryStatus", 1, "Unbekannt", "", 0xFFFF00);
        IPS_SetVariableProfileAssociation("UPS_BatteryStatus", 2, "Geladen", "", 0x00FF00);
        IPS_SetVariableProfileAssociation("UPS_BatteryStatus", 3, "Leer", "", 0xFF0000);
		  IPS_SetVariableProfileIcon("UPS_BatteryStatus",  "Battery");
        if ($debug) { echo "Profil UPS_BatteryStatus wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($batstat, $parentID);
if ($Var === false)
{
        // Variable Anlegen
        $batstatID = IPS_CreateVariable(1);
        IPS_SetName($batstatID, $batstat);
        IPS_SetParent($batstatID, $parentID);
        IPS_SetVariableCustomProfile($batstatID, "UPS_BatteryStatus");
        IPS_SetPosition($batstatID, $zaehler);
        AC_SetLoggingStatus($archive, $batstatID, true);
        if ($debug) { echo "Variable $batstatID ($batstat) wurde angelegt.
"; }
}
else { $batstatID = $Var; }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Kapazit‰t
$Var = @IPS_GetVariableIDByName($batcap, $parentID);
if ($Var === false)
{
        // Variable Anlegen
        $batcapID = IPS_CreateVariable(1);
        IPS_SetName($batcapID, $batcap);
        IPS_SetParent($batcapID, $parentID);
        IPS_SetVariableCustomProfile($batcapID, "UPS_Percentage");
        IPS_SetPosition($batcapID, $zaehler);
        AC_SetLoggingStatus($archive, $batcapID, true);
        if ($debug) { echo "Variable $batcapID ($batcap) wurde angelegt.
"; }
}
else { $batcapID = $Var; }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Restlaufzeit
if (!IPS_VariableProfileExists("UPS_BatteryRuntime"))
{
        IPS_CreateVariableProfile("UPS_BatteryRuntime", 1);
        IPS_SetVariableProfileText("UPS_BatteryRuntime", "", " Minuten");
        IPS_SetVariableProfileDigits("UPS_BatteryRuntime", 0);
		  IPS_SetVariableProfileIcon("UPS_BatteryRuntime",  "Clock");
        if ($debug) { echo "Profil UPS_BatteryRuntime wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($batrem, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $batremID = IPS_CreateVariable(1);
        IPS_SetName($batremID, $batrem);
        IPS_SetParent($batremID, $parentID);
        IPS_SetVariableCustomProfile($batremID, "UPS_BatteryRuntime");
        IPS_SetPosition($batremID, $zaehler);
        AC_SetLoggingStatus($archive, $batremID, true);
        if ($debug) { echo "Variable $batremID ($batrem) wurde angelegt.
"; }
}
else { $batremID = $Var;        }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie tauschen
if (!IPS_VariableProfileExists("UPS_BatteryChange"))
{
        IPS_CreateVariableProfile("UPS_BatteryChange", 1);
        IPS_SetVariableProfileAssociation("UPS_BatteryChange", 1, "Batterien sind OK", "", 0x00FF00);
        IPS_SetVariableProfileAssociation("UPS_BatteryChange", 2, "Batterien müssen getauscht werden", "", 0xFF0000);
		  IPS_SetVariableProfileIcon("UPS_BatteryChange",  "Battery");
        if ($debug) { echo "Profil UPS_BatteryChange wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($batstatus, $parentID);
if ($Var === false)
{
        // Variable Anlegen
        $batstatusID = IPS_CreateVariable(1);
        IPS_SetName($batstatusID, $batstatus);
        IPS_SetParent($batstatusID, $parentID);
        IPS_SetVariableCustomProfile($batstatusID, "UPS_BatteryChange");
        IPS_SetPosition($batstatusID, $zaehler);
        AC_SetLoggingStatus($archive, $batstatusID, true);
        if ($debug) { echo "Variable $batstatusID ($batstatus) wurde angelegt.
"; }
}
else { $batstatusID = $Var; }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Temperatur
if (!IPS_VariableProfileExists("UPS_BatteryTemperature"))
{
        IPS_CreateVariableProfile("UPS_BatteryTemperature", 2);
        IPS_SetVariableProfileText("UPS_BatteryTemperature", "", " °C");
        IPS_SetVariableProfileValues("UPS_BatteryTemperature", 0, 100, 0.5);
        IPS_SetVariableProfileDigits("UPS_BatteryTemperature", 1);
		  IPS_SetVariableProfileIcon("UPS_BatteryTemperature",  "Temperature");
		  if ($debug) { echo "Profil UPS_BatteryTemperature wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($battemp, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $battempID = IPS_CreateVariable(2);
        IPS_SetName($battempID, $battemp);
        IPS_SetParent($battempID, $parentID);
        IPS_SetVariableCustomProfile($battempID, "UPS_BatteryTemperature");
        IPS_SetPosition($battempID, $zaehler);
        AC_SetLoggingStatus($archive, $battempID, true);
        if ($debug) { echo "Variable $battempID ($battemp) wurde angelegt.
"; }
}
else { $battempID = $Var;       }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Eingangsspannung
if (!IPS_VariableProfileExists("UPS_Voltage"))
{
        IPS_CreateVariableProfile("UPS_Voltage", 2);
        IPS_SetVariableProfileText("UPS_Voltage", "", " V");
        IPS_SetVariableProfileDigits("UPS_Voltage", 1);
		  IPS_SetVariableProfileIcon("UPS_Voltage",  "Gauge");
		  if ($debug) { echo "Profil UPS_Voltage wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($voltin, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $voltinID = IPS_CreateVariable(2);
        IPS_SetName($voltinID, $voltin);
        IPS_SetParent($voltinID, $parentID);
        IPS_SetVariableCustomProfile($voltinID, "UPS_Voltage");
        IPS_SetPosition($voltinID, $zaehler);
        AC_SetLoggingStatus($archive, $voltinID, true);
        if ($debug) { echo "Variable $voltinID ($voltin) wurde angelegt.
"; }
}
else { $voltinID = $Var;        }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Batterie Ausgangsspannung
$Var = @IPS_GetVariableIDByName($voltout, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $voltoutID = IPS_CreateVariable(2);
        IPS_SetName($voltoutID, $voltout);
        IPS_SetParent($voltoutID, $parentID);
        IPS_SetVariableCustomProfile($voltoutID, "UPS_Voltage");
        IPS_SetPosition($voltoutID, $zaehler);
        AC_SetLoggingStatus($archive, $voltoutID, true);
        if ($debug) { echo "Variable $voltoutID ($voltout) wurde angelegt.
"; }
}
else { $voltoutID = $Var;       }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Netzfrequenz
if (!IPS_VariableProfileExists("UPS_Frequency"))
{
        IPS_CreateVariableProfile("UPS_Frequency", 1);
        IPS_SetVariableProfileText("UPS_Frequency", "", " Hz");
        IPS_SetVariableProfileValues("UPS_Frequency", 40, 60, 1);
        IPS_SetVariableProfileDigits("UPS_Frequency", 0);
		  IPS_SetVariableProfileIcon("UPS_Frequency",  "Graph");
        if ($debug) { echo "Profil UPS_Frequency wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($freq, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $freqID = IPS_CreateVariable(1);
        IPS_SetName($freqID, $freq);
        IPS_SetParent($freqID, $parentID);
        IPS_SetVariableCustomProfile($freqID, "UPS_Frequency");
        IPS_SetPosition($freqID, $zaehler);
        AC_SetLoggingStatus($archive, $freqID, true);
        if ($debug) { echo "Variable $freqID ($freq) wurde angelegt.
"; }
}
else { $freqID = $Var;  }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Umschaltgrund
if (!IPS_VariableProfileExists("UPS_SwitchReason"))
{
        IPS_CreateVariableProfile("UPS_SwitchReason", 1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 1, "Kein Ereigniss", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 2, "zu hohe Eingangsspannung", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 3, "Spannungsabfall", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 4, "Stromausfall(keine Eingangsspannung)", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 5, "Geringer tempor‰rer Leistungsabfall", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 6, "Gro?er tempor‰rer Leistungsabfall", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 7, "kleine Spannungsspitze", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 8, "gro?e Spannungsspitze", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 9, "USV Selbsttest", "", -1);
        IPS_SetVariableProfileAssociation("UPS_SwitchReason", 10, "Ausgleichen von Spannungsschwankungen", "", -1);
		  IPS_SetVariableProfileIcon("UPS_SwitchReason",  "Information");
        if ($debug) { echo "Profil UPS_SwitchReason wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($switchrsn, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $switchrsnID = IPS_CreateVariable(1);
        IPS_SetName($switchrsnID, $switchrsn);
        IPS_SetParent($switchrsnID, $parentID);
        IPS_SetVariableCustomProfile($switchrsnID, "UPS_SwitchReason");
        IPS_SetPosition($switchrsnID, $zaehler);
        AC_SetLoggingStatus($archive, $switchrsnID, true);
        if ($debug) { echo "Variable $switchrsnID ($switchrsn) wurde angelegt.
"; }
}
else { $switchrsnID = $Var;     }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Datum letzter Selbsttest

if (!IPS_VariableProfileExists("UPS_Date"))
{
        IPS_CreateVariableProfile("UPS_Date", 3);
		  IPS_SetVariableProfileIcon("UPS_Date",  "Information");
        if ($debug) { echo "Profil UPS_Date wurde angelegt.
"; }
}
$Var = @IPS_GetVariableIDByName($lasttest, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $lasttestID = IPS_CreateVariable(3);
        IPS_SetName($lasttestID, $lasttest);
        IPS_SetParent($lasttestID, $parentID);
        IPS_SetVariableCustomProfile($lasttestID, "UPS_Date");
        IPS_SetPosition($lasttestID, $zaehler);
        if ($debug) { echo "Variable $lasttestID ($lasttest) wurde angelegt.
"; }
}
else { $lasttestID = $Var;      }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------
// Ergebnis letzter Selbsttest
if (!IPS_VariableProfileExists("UPS_LastSelftest"))
{
        IPS_CreateVariableProfile("UPS_LastSelftest", 1);
        IPS_SetVariableProfileAssociation("UPS_LastSelftest", 1, "Erfolgreich", "", 0x00FF00);
        IPS_SetVariableProfileAssociation("UPS_LastSelftest", 2, "Fehler", "", 0xFF0000);
        IPS_SetVariableProfileAssociation("UPS_LastSelftest", 3, "Unbekannt", "", 0xFFFFFF);
        IPS_SetVariableProfileAssociation("UPS_LastSelftest", 4, "in Bearbeitung", "", 0xC0C0C0);
		  IPS_SetVariableProfileIcon("UPS_LastSelftest",  "Information");
        if ($debug) { echo "Profil UPS_LastSelftest wurde angelegt.
"; }
}

$Var = @IPS_GetVariableIDByName($selftest, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $selftestID = IPS_CreateVariable(1);
        IPS_SetName($selftestID, $selftest);
        IPS_SetParent($selftestID, $parentID);
        IPS_SetVariableCustomProfile($selftestID, "UPS_LastSelftest");
        IPS_SetPosition($selftestID, $zaehler);
        AC_SetLoggingStatus($archive, $selftestID, true);
        if ($debug) { echo "Variable $selftestID ($selftest) wurde angelegt.
"; }
}
else { $selftestID = $Var;      }
$zaehler++;
//-------------------------------------------------------------
// Datum letzte Abfrage
$Var = @IPS_GetVariableIDByName($lastread, $parentID);
if ($Var === false) //Wenn es die Variable nicht gibt, wird sie angelegt ...
{
        $lastreadID = IPS_CreateVariable(3);
        IPS_SetName($lastreadID, $lastread);
        IPS_SetParent($lastreadID, $parentID);
        IPS_SetVariableCustomProfile($lastreadID, "UPS_Date");
        IPS_SetPosition($lastreadID, $zaehler);
        if ($debug) { echo "Variable $lastreadID ($lastread) wurde angelegt.
"; }
}
else { $lastreadID = $Var; }

$Var = false; //Sicher is sicher ...
$zaehler++;
//-------------------------------------------------------------

$Var = false; //Sicher is sicher ...
//==============================================================================
// SNMP Querries

$value = snmpget ($upsstatusOID);
SetValue($upsstatusID, $value);
if ($debug) { echo "$upsstatus : $value
"; }

$value = snmpget ($loadOID);
SetValue($loadID, $value);
if ($debug) { echo "$load : $value
"; }

$value = snmpget ($batstatOID);
SetValue($batstatID, $value);
if ($debug) { echo "$batstat : $value
"; }

$value = snmpget ($batcapOID);
SetValue($batcapID, $value);
if ($debug) { echo "$batcap : $value
"; }

$value = snmpget ($batremOID);
$hour = substr($value, 0, 2);
$min = substr($value, 3, 2);
$runtime = $hour*60+$min;
$value = (int)$runtime;
SetValue($batremID, $runtime);
if ($debug) { echo "$batrem : $runtime
"; }

$value = snmpget ($batstatusOID);
SetValue($batstatusID, $value);
if ($debug) { echo "$batstatus : $value
"; }

$value = snmpget ($battempOID);
SetValue($battempID, $value);
if ($debug) { echo "$battemp : $value
"; }

$value = snmpget ($voltinOID);
SetValue($voltinID, $value);
if ($debug) { echo "$voltin : $value
"; }

$value = snmpget ($voltoutOID);
SetValue($voltoutID, $value);
if ($debug) { echo "$voltout : $value
"; }

$value = snmpget ($freqOID);
SetValue($freqID, $value);
if ($debug) { echo "$freq : $value
"; }

$value = snmpget ($switchrsnOID);
SetValue($switchrsnID, $value);
if ($debug) { echo "$switchrsn : $value
"; }

$value = snmpget ($selftestOID);
SetValue($selftestID, $value);
if ($debug) { echo "$selftest : $value
"; }

$value = snmpget ($lasttestOID);
$d1 = substr ( $value, 0, 2 );
$d2 = substr ( $value, 3, 2 );
$d3 = substr ( $value, 6, 4 );
$value = $d2 .".". $d1 . ".". $d3;
SetValue($lasttestID, $value);
if ($debug) { echo "$lasttest : $value
"; }

$date = date("d.m.Y H:i:s");
SetValueString($lastreadID, $date);
if ($debug) { echo "$lastreadID : $date
"; }
?>

Hallo,

Danke, gute Idee, ich nutze ssnmpq jetzt mit Speedfan.

Schöne Grüße
Thomas

Das schreit doch nach einem Tutorial für Speedfan und snmp :wink:

Auf jeden Fall! Ich hatte genau nach sowas gefragt und ThomasD hatte darauf auch schon mit

… bis V2.5 mit Speedfan und snmp.
Jetzt mit speedfan und ssnmpq. …
bestätigt, dass es ansich geht.
Ich bin gespannt. :wink:

Hallo,

hier läuft das Thema schon länger:
http://www.ip-symcon.de/forum/f56/cpu-temperatur-wf-anzeigen-15585/#post134490
Wird sollten dort weiter diskutieren.

Schöne Grüße
Thomas

Um nicht ständig das PHP SNMP Modul manuell nachpflegen zu müssen
Da braucht man nichts manuell nachzupflegen. Einfach beim Liveupdate die entsprechende Datei abwählen, fertig. :confused:

Das sieht vielversprechend aus. Für welche USVs funktionirtd as Skript?

Wobei ich grade gesehen habe, dass in der Beschreibung des Tools ur von Windows 32 Bit di Rede ist, schade oder hat das schon mal jemand unter 64 Bit getestet?

Hallo,

die ssnmpq Software läuft auch unter Win7 64Bit.
Und es funktioniert im Prinzip mit jeden SNMP Gerät.

Schöne Grüße
Thomas

Cool, das muss ich mal testen, denn die andere Lösung die es hier mal gab lief mit einem speziellen Tool, das aber mit meiner USV nicht klar kommt.

Das ist super - vielen Dank! Liege ich aber richtig mit meiner Befürchtung, dass dies nur bei den grossen APC-Geräten mit Ethernet-Schnittstelle geht?

Ich habe ein BK350EI mit USB-Schnittstelle: vermutlich bin ich dabei „out of luck“? Sorry für die naïve Frage…

schonmal mit apcupsd oder nut versucht? Wenn es eine Standard APC-USB-Schnittstelle hat, stehen die Chancen gut. Dafür gibt es auch Scripte hier im Forum.
Tommi

ich werde wahrscheinlich ein OpenUPS kaufen. Die haben eine API, und hier ist ihre Auskunft:

On Sat, 05 May 2012, AAG wrote:
> Hello, I am considering purchasing a few OpenUPS units. My question is: can the OpenUPS be configured that Win7 will send an email whenever a power event occurs? I understand that you provide an API, but this is a very common issue and I wonder whether you have a box-ready solution that does not need much programming.


Thank you for contacting us and your interest in our products! Using our API with an e-mail sender software you can set it to send e-mails when you loose the main power and the OpenUPS is on batteries. Check the openups state variable from the api. Please see the included example:

switch (state)
{
case 1: printf("State: Battery ");break;
case 2: printf("State: VIn ");break;
case 3: printf("State: only USB ");break;
default printf("State: Error ");

Should you need other details, please contact us!