SNMP Client - Geräte-Status von NAS (QNAP, Synology) oder SNMP Servern allg. auslesen

Die Zeile:

 $exec_param =" /h:". $this->host ." /c:". $this->community ." /o:". $oid ." /v"; 

beschreibt den Parameter-String, welcher hinter der snmpq.exe ausgeführt wird.

Leider kann ich deinen SNMP Client nicht testen, da ich mit IPS 4.0b auf ein Ubuntu-System umgestiegen bin.

Schau dir am besten mal die Doku zu deinem Client an, der nutzt wohl anstatt „/“ Bindestriche „-“ für die Parameter. Ausserdem ist fraglich, ob das Ausgabeformat des Clients mit dem Skript ohne Anpassung ausgelesen werden kann. Es wird sich bestimmt unterscheiden.

ich habe noch mal Dein Script getestet und Debug eingeschaltet.
Habe vorher die IP Adresse und den Pfad zum Programm geändert.
Ich bekomme nach dem ersten Durlauf diese Meldung

 New SNMPObj registered, now monitoring '1' snmp variables
New SNMPObj registered, now monitoring '2' snmp variables
New SNMPObj registered, now monitoring '3' snmp variables
New SNMPObj registered, now monitoring '4' snmp variables
New SNMPObj registered, now monitoring '5' snmp variables
New SNMPObj registered, now monitoring '6' snmp variables
New SNMPObj registered, now monitoring '7' snmp variables
New SNMPObj registered, now monitoring '8' snmp variables
New SNMPObj registered, now monitoring '9' snmp variables
New SNMPObj registered, now monitoring '10' snmp variables
New SNMPObj registered, now monitoring '11' snmp variables
New SNMPObj registered, now monitoring '12' snmp variables
New SNMPObj registered, now monitoring '13' snmp variables
New SNMPObj registered, now monitoring '14' snmp variables
New SNMPObj registered, now monitoring '15' snmp variables
New SNMPObj registered, now monitoring '16' snmp variables
New SNMPObj registered, now monitoring '17' snmp variables
Updating 17 variable(s)

und zusätlich noch 17 mal folgendes:

Execute SNMP-Query: C:\IP-Symcon\ssnmpq\ssnmpq.exe /h:192.168.178.100 /c:public /o:1.3.6.1.4.1.24681.1.2.12.0 /v
Result of ModelName: Simple SNMP Command Line Query Tool, Toomas Kaljus, January 2007

Command Line Switches:

  /h:        Host name or IP address (default is localhost)
  /c:   community name (default is public)
  /o:    object ID (default is subkeys from 1.3.6.1.2.1.1)
  /v[+|-]          display values only (hide type and OID information)
  /n[+|-]          numeric form only (do not load any MIBs)
  /s[+|-]          surf subkeys
  /w[+|-]          load all Windows MIBs from ...\system32\*.mib
  /r[+|-]          load all RFC MIBs from ...\mib\*.mib (slow)
  /m:        Path to additional MIB-files (multiple allowed)
  /d[+|-]          download all missing RFCs and extract MIBs from them
  /t:     Socket timeout for SNMP queries (default is 5 seconds)
  /x:        Export results to CSV file (requires /s)
Execute SNMP-Query: C:\IP-Symcon\ssnmpq\ssnmpq.exe /h:192.168.178.100 /c:public /o:1.3.6.1.4.1.24681.1.2.2.0 /v
Result of SystemTotalMem: Simple SNMP Command Line Query Tool, Toomas Kaljus, January 2007

und die Variablen wurden so befüllt:
Variablen.jpg
was habe ich verkehrt eingestellt?

Hein09

Sorry für die späte Antwort.

Ich muss gestehen, ich habe seit Wochen IPS nicht laufen gehabt, warte derzeit auf die finale 4.0, dann werde ich erst wieder rangehen und einige Sachen neu und anders machen.
Somit ist auf SNMP liegen geblieben.

vielen Dank für die Info.

Habe meins mit SnmpGet.exe nach dieser Anleitung https://www.symcon.de/forum/threads/18158-Auslesen-einer-APC-SmartUPS-USV-mit-ssnmp zum laufen gebracht.

Hein09

Hallo,

also ich werde auch mal den Weg mit „SnmpGet.exe“ probieren, „snmpq.exe“ funktioniert bei mir auf zwei Rechnern überhaupt nicht ( Notebook & IPS-Rechner, beide Windows10 64Bit ).

Ich kann mit beiden Tools diverses Geräte und OIDs abfragen, bei snmpq.exe bekomme ich nur ein „no response“, bei SnmpGet.exe immer eine Antwort mit den werten.
Da auch andere Tools wie „The Dude“ einwandfreie SNMP-Antworten liefern, behaupte ich mal snmpq.exe ist aufgrund seine Alters nicht mehr so ganz Windows10 tauglich.

Werde mal das Script aus dem APC-Usv Thread ausprobieren.

EDIT: SnmpGet.exe ist für mich erledigt. Das funktioniert bei mir überhaupt nicht. bei 25 aufeinanderfolgenden Abfragen kommen vielleicht zweimal Antworten zurück. Die Anfragen ans Gerät gehen nicht mal raus, egal ob ich meinen Drucker, die Switche oder NAS / Rechner abfrage ( mit Wireshark mitgetracet )
Mit SnmpWalk kann ich vom selben Rechner aber problem den komplett OID-Baum auslesen und in eine Datei wegschreiben, also kann ich alles Problem mit Netzwerk, den Geräten oder dem lokalen Rechner ausschliessen, bleibt eben nur noch die Software übrig.

Mein Problem mit der „no response“ Fehlermeldung habe ich lösen können:

Am Schluss der Abfrage einfach noch ein /t:1000 für den Timeout anhängen - scheinbar ist die QNAP etwas zu lahm für solche Abfragen :slight_smile:

Des Weiteren habe ich den ersten Punkt von der OID entfernt.

Somit läuft es jetzt auch bei mir mit meiner TS-420

LG Tom

Hab seit kurzem ein Fehler im Script, das früher gut lief.
Könnte das mit der V4 Version zu tun haben?

Notice: A non well formed numeric value encountered in C:\apps\IP-Symcon\scripts\43352.ips.php on line 35

Fatal error: Uncaught exception ‚Exception‘ with message ‚Unknown SNMP protocol version‘ in C:\apps\IP-Symcon\scripts\43352.ips.php:35

Hat mir da jemand vielleicht ein Tip?

Danny

Gibts hier eventuell auch ne Lösung für Raspi IPS User ?
Habe seit heute auch nen Synology DS916+ und würde ihn gerne abfragen und visualisieren.

Gruß
Christian

ja, ein wenig im Script anpassen ;).

Mein nicht perfektes Beispiel basiert auf dem Orginal und läuft mit einer SS430:


<?
// *****************************************************************************
// ** Script zum Auslesen der MIB von SNMP Server
// ** Die Idee stammt von hardlog aus dem Symcon Forum (https://www.symcon.de/forum/threads/26977-Status-der-Synology-DS-per-Script-auslesen?p=247930#post247930)
// ** läuft so nur unter Windows, da das Komandozeilenprogramm "ssmnpq.exe"
// ** benötig: genanntes Programm hier http://www.digigrupp.com/ssnmpq/ downloaden
// ** in einen beliebigen Ornder entpacken und den Ornder in diesem Script
// ** entsprechend anpassen
// ** Bei NAS-Servern wie Synology / QNAP muss der SNMP-Dienst aktiviert werden.
// ** Den Standardport am SNMP Server bitte nicht ändern.
// **
// ** Dieses Skript funktioniert folgendermaßen:
// ** Du konfigurierst, welche Werte deines SNMP Servers du gerne auslesen,
// ** möchtest (siehe "registerSNMPObj" weiter unten).
// ** Das Skript wird den Datentyp der SNMP Daten ermitteln und als IPS-Variablen
// ** unterhalb des Skriptes anlegen (sofern diese nicht bereits existieren.)
// ** Der Name der Variable entspricht der von dir benannten "Beschreibung" für
// ** den SNMP-Wert.
// ** Die Werte der Variablen werden mit jeder Ausführung des Skripts aktualisiert.
// **
// ** Das Skript legt benötigte Variablenprofile an. Diese sind mit einem Präfix
// ** "SNMP_" versehen. Beispielsweise "SNMP_CapacityMB".
// *****************************************************************************

/**
KONFIGURATION der SNMP Verbindung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**/
$host          = "192.168.100.254"; 	// IP Adresse deines SNMP Servers (QNAP, Synology, etc.)
$community     = "public";				// SNMP Community
$binary        = "snmpget";			// Pfad zum SNMP Binary
$debug         = false;					// Bei true werden Debuginformationen (echo) ausgegeben

$snmp = new SNMP($host, $community, $binary, $debug);          //DIESE ZEILE NICHT VERÄNDERN!

/**
KONFIGURATION abzurufender Werte
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mit $snmp->registerSNMPObj($oid, $desc, $convertType) kannst du angeben,
welche Daten per SNMP abgerufen werden sollen.
Die Funktion benötigt drei Parameter:

Parameter1 ($oid):
------------------
die ID des Wertes am SNMP Server (Mit dem iReasoning MIB Browser kannst du mit
einem Windowsprogramm angenehm nach gültigen ID's in deinem System suchen.
http://www.ireasoning.com

Die vorbelegten OIDs basieren auf den Werten meiner QNAP und müssen evtl.
angepasst werden.

Parameter2 ($desc):
-------------------
Die Bezeichnung legt fest, wie die IPS-Variable genannt werden soll.

Bitte berücksichtige, dass jede OID und jede Bezeichnung eindeutig sein müssen
(keine doppelten Einträge). Ausserdem löscht das Skript keine einmal erstellten
Variablen. D.h. wenn du eine Bezeichnung umbenennst, denn musst du die "alte"
Variable manuell löschen.

Parameter 3 (convertType)
-------------------------
dieser Parameter ist optional. Wird er nicht gesetzt oder als "none" übergeben,
werden die Daten "wie empfangen" in der zugehörigen IPS-Variable gespeichert.

In einigen Fällen ist dies jedoch nicht erwünscht. Beispielsweise liefert eine
QNAP als freie Festplattenkapazität den Wert inkl. der Mengeneinheit als Text:
3.96 TB. Damit ist eine geeignete Weiterverarbeitung in IPS sowie ein Logging
der Variable ausgeschlossen.

Um das zu ändern beinhaltet das Skript einige "Converter". In diesem Fall auf
die Rohdaten der QNAP abgestimmt. Der Converter "Capacity" wandelt MB/GB/TB
(Megabyte, Gigabyte, Terrabyte)-Strings in Megabyte Zahlen um.
Aus "3.96 TB" werden "3960000".

Derzeit verfügbare Converter:
CapacityMB (Speichergrößen in Megabyte als Float)
CapacityGB(Speichergrößen in Megabyte als Float)
CapacityTB (Speichergrößen in Megabyte als Float)
Temperature (Celsius Temperatur als Integer)
FanSpeed (RPM als Integer)
SmartStatus (S.M.A.R.T Informationen der HDD, Ergebnis ist Boolean => gut / schlecht)

**/

$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.12.0", "ModelName");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.2.0", "SystemTotalMem", "CapacityMB");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.3.0", "SystemFreeMem", "CapacityMB");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.17.1.4.1", "SysVolumeTotalSize", "CapacityGB");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.17.1.5.1", "SysVolumeFreeSize", "CapacityGB");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.4.0", "SystemUptime");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.5.0", "CPU-Temperature", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.6.0", "System-Temperature", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.15.1.3.1", "System-FanSpeed", "FanSpeed");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.3.1", "HDTemperature1", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.3.2", "HDTemperature2", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.3.3", "HDTemperature3", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.3.4", "HDTemperature4", "Temperature");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.7.1", "HDSmartInfo1", "SmartStatus");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.7.2", "HDSmartInfo2", "SmartStatus");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.7.3", "HDSmartInfo3", "SmartStatus");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.11.1.7.4", "HDSmartInfo4", "SmartStatus");
$snmp->registerSNMPObj(".1.3.6.1.4.1.24681.1.2.1.0", "CPU usage", "Percent");

// ***** ab hier nichts mehr ändern
$snmp->update();

class SNMP
{
    //Objekteigenschaften
    protected $host;                   //SNMP Serveradresse
    protected $community;              //SNMP Community
    protected $binary;                 //Dateipfad zur ssnmpq.exe
    public	  $debug = false;          //Bei true werden Debuginformationen ausgegeben
    protected $snmpobj=array();        //array registrierter snmp objekte welche beim server abgefragt werden

    //IPS Datentypen
    const tBOOL     = 0;
    const tINT      = 1;
    const tFLOAT    = 2;
    const tSTRING   = 3;

    public function __construct($host, $community, $binary, $debug) {
        $this->host         = $host;
        $this->community    = $community;
        $this->binary       = $binary;
        $this->debug        = $debug;


        //Prüfe ob Variablenprofile existieren und erstelle diese wenn nötig
        $this->createVariableProfile("SNMP_Percent", self::tFLOAT, "", " %", 2);
        $this->createVariableProfile("SNMP_CapacityMB", self::tFLOAT, "", " MB", 0);
        $this->createVariableProfile("SNMP_CapacityGB", self::tFLOAT, "", " GB", 0);
        $this->createVariableProfile("SNMP_CapacityTB", self::tFLOAT, "", " TB", 0);
        $this->createVariableProfile("SNMP_Temperature", self::tINT, "", " °C", 0);
        $this->createVariableProfile("SNMP_FanSpeed", self::tINT, "", " RPM", 0);
        if (!IPS_VariableProfileExists("SNMP_SmartStatus")) {
            $this->createVariableProfile("SNMP_SmartStatus", self::tBOOL, "", "", 0);
            IPS_SetVariableProfileAssociation("SNMP_SmartStatus", 1, "Gut", "", 0x00FF04);
            IPS_SetVariableProfileAssociation("SNMP_SmartStatus", 0, "Defekt", "", 0xFF0000);
        }
    }

    private function createVariableProfile($name, $type, $pre, $suff, $digits) {
        if (!IPS_VariableProfileExists($name)) {
            if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "INFO - VariablenProfil ".$name." existiert nicht und wird angelegt.");
            IPS_CreateVariableProfile($name, $type);
            IPS_SetVariableProfileDigits($name, $digits);
            IPS_SetVariableProfileText($name, $pre, $suff);
        }
    }

    public function registerSNMPObj($oid, $desc, $convertType = "none") {

        //prüfe auf doppelte Einträge beim Registrieren neuer SNMP Objekte
        foreach($this->snmpobj as $obj) {
            if ($desc==$obj->desc) {
                if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "ERROR - registerSNMPObj: Variable description ".$desc." already exists, it must be unique!");
                exit;
            }
            if ($oid==$obj->OID) {
                if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "ERROR - registerSNMPObj: Variable OID ".$oid." already exists, it must be unique!");
                exit;
            }
        }

        //prüfe ob IPS Variablen für SNMP Objekt existiert (Variablenname entspricht description)
		$parentID = IPS_GetParent($_IPS['SELF']); // übergeordnete Kategorie als Basis
//        $parentID = $_IPS['SELF'];
        $ips_var = @IPS_GetVariableIDByName($desc, $parentID);
        if ($ips_var == false) {
            if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Variable ".$desc." not found - create IPSVariable");

            if ($convertType == "none")
	            $type = $this->getSNMPType($oid);
            if ($convertType == "CapacityMB" || $convertType == "CapacityGB" || $convertType == "CapacityTB" || $convertType == "Percent")
   	         $type = self::tFLOAT;
            if ($convertType == "Temperature")
      	      $type = self::tINT;
            if ($convertType == "FanSpeed")
         	   $type = self::tINT;
            if ($convertType == "SmartStatus")
            	$type = self::tBOOL;
            if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Type of OID ".$oid." is ".$type);

            $ips_var = IPS_CreateVariable($type);
            IPS_SetName($ips_var, $desc);
            IPS_SetParent($ips_var, $parentID);

            //Verknüpfe Variablenprofil mit neu erstellter Variable
            if ($convertType == "CapacityMB")
   	         IPS_SetVariableCustomProfile($ips_var, "SNMP_CapacityMB");
            if ($convertType == "CapacityGB")
	            IPS_SetVariableCustomProfile($ips_var, "SNMP_CapacityGB");
            if ($convertType == "CapacityTB")
            	IPS_SetVariableCustomProfile($ips_var, "SNMP_CapacityTB");
            if ($convertType == "Temperature")
         	   IPS_SetVariableCustomProfile($ips_var, "SNMP_Temperature");
            if ($convertType == "FanSpeed")
      	      IPS_SetVariableCustomProfile($ips_var, "SNMP_FanSpeed");
            if ($convertType == "SmartStatus")
   	         IPS_SetVariableCustomProfile($ips_var, "SNMP_SmartStatus");
            if ($convertType == "Percent")
	            IPS_SetVariableCustomProfile($ips_var, "SNMP_Percent");
        }

        $count = count($this->snmpobj);
        array_push($this->snmpobj, new SNMPObj($oid, $desc, $convertType, $ips_var));
        $count = count($this->snmpobj);
        if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "New SNMPObj registered, now monitoring ".$count." snmp variables");
    }

    //startet eine Abfrage am SNMP Server und aktualisiert die IPS-Variablen der registrierten
    //SNMP Objekte
    public function update() {
        if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Updating ".count($this->snmpobj)." variable(s)");

        foreach ($this->snmpobj as $obj) {
//            $oid = ltrim($obj->OID,".");
            $oid = $obj->OID;
            $exec_param =" -v1 -O vq -c ".$this->community." ".$this->host." ". $oid ."";
            if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Execute SNMP-Query: ".$this->binary.$exec_param);
            $obj->value = str_replace('"', '', trim(system($this->binary.$exec_param)));

            if ($this->debug) IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Result of ".$obj->desc.": ".$obj->value);

            if ($obj->convertType == "Percent") $obj->value = $this->convertPercent($obj->value, "%");
            if ($obj->convertType == "CapacityMB") $obj->value = $this->convertCapacity($obj->value, "MB");
            if ($obj->convertType == "CapacityGB") $obj->value = $this->convertCapacity($obj->value, "GB");
            if ($obj->convertType == "CapacityTB") $obj->value = $this->convertCapacity($obj->value, "TB");
            if ($obj->convertType == "Temperature") $obj->value = $this->convertTemperature($obj->value);
            if ($obj->convertType == "FanSpeed") $obj->value = $this->convertFanSpeed($obj->value);
            if ($obj->convertType == "SmartStatus") $obj->value = $this->convertSmartStatus($obj->value);

            SetValue($obj->ips_var, $obj->value);
        }
    }

    //prüfe um welchen SNMP Rückgabetyp es sich handelt
    //returns 3 => String / 1 => Integer / 2 => Float
    private function getSNMPType($oid) {
        $oid = ltrim($oid,".");
        $exec_param =" -v1 -O v -c ".$this->community." ".$this->host." ". $oid;
        $result = system($this->binary.$exec_param);
        $pos_start = stripos ($result, " = ");
        $pos_end = stripos ($result, ': "');
        $type = substr($result, $pos_start, $pos_end - $pos_start);
        switch($type) {
            case "STRING":
            	return self::tSTRING;
            case "Integer":
            	return self::tINT;
            case "Timeticks":
            	return self::tFLOAT;
            default:
            	return self::tSTRING;
        }
    }

    //returns -1 on error
    private function convertCapacity($input, $unit) {
        $pos = stripos($input, "MB");
        if ($pos === false) {
            $pos = stripos($input, "GB");
            if ($pos === false) {
                $pos = stripos($input, "TB");
                if ($pos === false) {
                    return -1;
                } else {
                    $funit = "TB";
                }
            } else {
                $funit = "GB";
            }
        } else {
            $funit = "MB";
        }

        $result = substr($input, 0, $pos);
        $result = trim($result);

        switch ($funit) {
            case "GB":
            $result = $result*1000;
            break;
            case "TB":
            $result = $result*1000*1000;
            break;
        }

        switch($unit) {
            case "MB":
            return round($result);
            case "GB":
            return round($result / 1000);
            case "TB";
            return round($result / 1000000);
        }
    }

    //returns -1 on error
    private function convertTemperature($input) {
        $pos = stripos($input, "C");
        if ($pos === false) {
            $result = -1;
        } else {
            $result = substr($input, 0, $pos);
            $result = round(trim($result));
        }
        return $result;
    }

    private function convertPercent($input) {
        $pos = stripos($input, "%");
        if ($pos === false) {
            $result = -1;
        } else {
            $result = substr($input, 0, $pos);
            $result = trim($result);
        }
        return $result;
    }

    //returns -1 on error
    private function convertFanSpeed($input) {
        $pos = stripos($input, "RPM");
        if ($pos === false) {
            $result = -1;
        } else {
            $result = substr($input, 0, $pos);
            $result = round(trim($result));
        }
        return $result;
    }

    private function convertSmartStatus($input) {
        $pos = stripos($input, "GOOD") + stripos($input, "Normal");
        if ($pos === false) {
            return false;
        } else {
            return true;
        }
    }

}

class SNMPObj
{
    //Objekteigenschaften
    public $OID;                   //SNMP Message ID
    public $desc;                  //Beschreibung
    public $value;                 //Wert
    public $convertType;           //Typ-Converter
    public $ips_var;               //ID der IPS-Variable welche den SNMP Wert speichert

    public function __construct($OID, $desc, $convertType, $ips_var) {
        $this->OID            = $OID;
        $this->desc           = $desc;
        $this->convertType    = $convertType;
        $this->ips_var        = $ips_var;
    }
}
?>

Danke Dir Ralf ! Bin eben mal dazu gekommen es auszuprobieren… gibt es da noch irgendetwas zu beachten ?
Habe den Dienst aktiviert und im Script die IP angepasst. Bekomme aber keine Werte.


Gruß
Christian

Die OIDs (".1.3.6.1.4.1.24681.1.2.12.0" entspricht „ModelName“) der Synology sind offensichtlich andere wie bei QNAP, somit kommen keine Daten oder das Format der Rückmeldung ist anders.

Zum OIDs suchen kannst du z.B. snmp tester nutzen, googeln hilft auch ;)…

Um das Format der Rückmeldung zu prüfen musst du das snmp-Kommando auf deinem PI aufrufen und dir das Ergebnis ansehen.

Kleine Synology Starthilfe::slight_smile:

HDUnit .1.3.6.1.2.1.25.2.3.1.4.41
HDTotal .1.3.6.1.2.1.25.2.3.1.5.41
HDUsed .1.3.6.1.2.1.25.2.3.1.6.41

wobei die .41 das jeweilige Drive ist (geht bei mir weiter mit .42 .43 .44)

Vielleicht passt das ja so bei Dir …

LG Tom

Achso… ok :wink:
Habe hier eine Auflösung für die Synology Teile gefunden.

Komme aber auch mit den OID´s nicht weiter.

Weiß auch nicht wo ich die Info her bekomme, was ich hier eintragen muss für einen synology.

$community     = "public";                // SNMP Community
$binary        = "snmpget";            // Pfad zum SNMP Binary

Ob der Binary Pfad stimmt ?! Keine Ahnung. Und „public“ als Community hab ich einfach mal im Synology so eingetragen… obs stimmt ?!

Das kannst du einfach auf dem PI ausprobieren. Auf der Console/Shell das Kommando aufrufen, also snmpget ;).

Sollte eigentlich installiert sein und eine Ausgabe liefern.

Kommando not found ^^

Ok… ich installiere mal snmp auf dem Pi wo IPS drauf läuft und versuch dann noch mal. ^^
Melde mich wieder…

EDIT: So… snmpget ist auf dem Pi nun ausführbar :smiley:
Aber das Script gibt mir immer noch keine Werte aus.

Vielleicht hab ich das mit den OID´s noch nicht so ganz geschnallt…

Die System OID ist z.b.
.1.3.6.1.4.1.6574.1

Die System Temp. greift auf die SystemOID zu und hat selbst die OID
.2

Dann lautet die komplette OID die ich verwenden muss doch:

$snmp->registerSNMPObj(".1.3.6.1.4.1.6574.1.2", "System-Temperature", "Temperature");

korrekt ?


Was zum Teil funktioniert.

$snmp->registerSNMPObj(".1.3.6.1.4.1.2021.4.5.0", "SystemTotalMem", "CapacityMB");

Interessant… Das Script gibt für den Speicher einen Text aus „8093612“ (Größe des Arbeitsspeichers.)
Das ist auch das einzige. Die Variable wird aber nicht gefüllt.
Müsste hier warscheinlich noch die Umrechnung im Script anpassen, da ja kb ausgegeben werden, aber trotzdem müsste doch die Variable gefüllt werden oder nicht ? Und warum bekomme ich aus den anderen OID´s obe nichts raus ? Hab ich die falsch zusammengesetzt ?

Bei meiner QNAP lassen sich diverse Werte nicht Einzel pro Festplatte auslesen, sonder nur im Block. Dann bekommt man eben die Temperatur für alle ( bei mir ) 8 Slots angezeigt. Ähnliches bei einigen Systemwerten.
Versuchs mal, die OID um eine Stelle zu kürzen.

Würde heißen, man müsste die in ein Array schreiben, aber das verließen mich meine PHP Kenntnisse

Gesendet mit Tapatalk

Hallo thezepter,

hast du es inzwischen hinbekommen mit den OID’s ?
Ich stehe jetzt vor dem gleichen Problem. Allerdings habe ich die richtigen gefunden,
per Konsole kann ich auch diese verwenden. Nur in IPS werden die Variablen nicht gefüllt

Wäre klasse wenn du dich mal melden könntest oder sonst einer eine Idee hat.

Gruß

Hallo,

ich denke häufig ist das Problem, dass hier jeder einen anderen SNMP Client nutzt. Da ändert sich dann die Syntax der Ergebnisse.

Ich bin zum Beispiel jetzt auf Linux umgestiegen. Hier habe ich ein Ergebnis des SNMP Clients das so aussieht:


symcon@ips:~$ snmpget -v 1 -O v 192.168.10.252 -c public 1.3.6.1.4.1.24681.1.2.17.1.5.1
STRING: "1.65 TB"

Unter Windows mit dem Client von hier: SnmpGet (Cmd-Line Tool) – SnmpSoft Website


D:\>SnmpGet.exe -r:192.168.10.252 -v:1 -o:1.3.6.1.4.1.24681.1.2.17.1.5.1
SnmpGet v1.01 - Copyright (C) 2009 SnmpSoft Company
[ More useful network tools on http://www.snmpsoft.com ]

OID=.1.3.6.1.4.1.24681.1.2.17.1.5.1
Type=OctetString
Value=1.65 TB

Der damals von mir verwendete Client hatte ein anderes Ergebnis wie beide oben. Deshalb ist der Parser entsprechend eures Abfrageergebnisses anzupassen.

Die Linux/Ubuntu Variante ergänze ich gleich mal im Ursprungspost.

Hi mesa,

Ich habe es ebenfalls mit SnmpGet.exe

$binary        = "C:\IP-Symcon\automatic\SnmpGet\SnmpGet.exe"; 

versucht und über die CommandLine funktioniert es einwandfrei:

CommandLine

C:\IP-Symcon\automatic\SnmpGet>SnmpGet.exe -v:1 -r:192.170.5.86 -t:10 -c:public -o:1.3.6.1.4.1.24681.1.2.17.1.5.1
SnmpGet v1.01 - Copyright (C) 2009 SnmpSoft Company
[ More useful network tools on http://www.snmpsoft.com ]

OID=.1.3.6.1.4.1.24681.1.2.17.1.5.1
Type=OctetString
Value=86.93 GB

[HR][/HR]
Php: 1
Habe den ParserTeil im Skript von Post#1 für die Funktionen

  • public function update()
  • private function getSNMPType($oid)

wie folgt angepasst:


#$exec_param =" -v1 -O v -c ".$this->community." ".$this->host." ". $oid .""; 
$exec_param =" -v:1 -r:".$this->host." -t:10 -c:".$this->community." -o:". $oid ."";

Bekomme da immer die Meldung:

Notice:  A non well formed numeric value encountered in C:\IP-Symcon\scripts\57473.ips.php on line 36

Fatal error:  Uncaught exception 'Exception' with message 'Unknown SNMP protocol version' in C:\IP-Symcon\scripts\57473.ips.php:36
Stack trace:
#0 C:\IP-Symcon\scripts\57473.ips.php(36): SNMP->__construct('192.170.5.86', 'public', 'C:\\IP-Symcon\\au...', 0)
#1 {main}
  thrown in C:\IP-Symcon\scripts\57473.ips.php on line 36
Abort Processing during Fatal-Error: Uncaught exception 'Exception' with message 'Unknown SNMP protocol version' in C:\IP-Symcon\scripts\57473.ips.php:36
Stack trace:
#0 C:\IP-Symcon\scripts\57473.ips.php(36): SNMP->__construct('192.170.5.86', 'public', 'C:\\IP-Symcon\\au...', 0)
#1 {main}
  thrown
   Error in Script C:\IP-Symcon\scripts\57473.ips.php on Line 36

[HR][/HR]
Php: 2
Führe ich ein eigenes Skript mit dem „Hauptbefehl“ aus, funktioniert es ebenfalls einwandfrei:


<?
$data = system("C:\IP-Symcon\automatic\SnmpGet\SnmpGet.exe -v:1 -r:192.170.5.86 -t:10 -o:1.3.6.1.4.1.24681.1.2.17.1.5.1");
print_r ($data);
?>
SnmpGet v1.01 - Copyright (C) 2009 SnmpSoft Company
[ More useful network tools on http://www.snmpsoft.com ]

OID=.1.3.6.1.4.1.24681.1.2.17.1.5.1
Type=OctetString
Value=86.93 GB
Value=86.93 GB

Jetzt steh ich am Schlauch :confused: :slight_smile:

$exec_param kommt zweimal vor.
Hast du beide Varianten angepasst?