+ Antworten
Seite 3 von 9 ErsteErste 1 2 3 4 5 ... LetzteLetzte
Ergebnis 21 bis 30 von 84
  1. #21
    Registriert seit
    Mar 2015
    Beiträge
    93

    Zitat Zitat von Hein09 Beitrag anzeigen
    Wie kann man das Programm snmpq.exe gegen das Programm SnmpGet.exe auswechseln?
    Weil nur den Programmnamen ändern funktioniert nicht, SnmpGet.exe kann nicht mit /v umgehen braucht -v, wo kann man das einstellen?
    Die Zeile:
    PHP-Code:
     $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.
    Geändert von mesa (03.01.16 um 11:32 Uhr)

  2. #22
    Registriert seit
    Aug 2009
    Beiträge
    200

    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

    HTML-Code:
     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:
    HTML-Code:
    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:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Variablen.jpg 
Hits:	383 
Größe:	34.6 KB 
ID:	32230
    was habe ich verkehrt eingestellt?

    Hein09

  3. #23
    Registriert seit
    Nov 2011
    Ort
    Tönisvorst
    Beiträge
    739

    Zitat Zitat von Hein09 Beitrag anzeigen
    Hallo Tuxtom007,

    hast Du den Fehler gefunden?

    Ich bekomme auch den Fehler "no reponse" wenn ich den Script teste.

    Wie kann man das Programm snmpq.exe gegen das Programm SnmpGet.exe auswechseln?
    Weil nur den Programmnamen ändern funktioniert nicht, SnmpGet.exe kann nicht mit /v umgehen braucht -v, wo kann man das einstellen?

    Tschau 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.

  4. #24
    Registriert seit
    Aug 2009
    Beiträge
    200

    vielen Dank für die Info.

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

    Hein09

  5. #25
    Registriert seit
    Nov 2011
    Ort
    Tönisvorst
    Beiträge
    739

    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.
    Geändert von Tuxtom007 (14.02.16 um 15:09 Uhr)

  6. #26
    Registriert seit
    Apr 2005
    Ort
    Köln
    Beiträge
    372

    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

    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
    IPS V4.4 always latest stable - auf Win 10 - ansonsten: Suchfunktionbenutzer

  7. #27
    Registriert seit
    Apr 2015
    Beiträge
    63

    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

  8. #28
    Registriert seit
    Feb 2011
    Beiträge
    647

    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
    IPS 5.3 @ Synology Docker DS916+ / RaspBerryMatic / ipsView / Sonos / PhilipsHue / Z-Wave / Unifi Protect / Ubiquity / Amazon Echo

  9. #29
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,154

    Zitat Zitat von thezepter Beitrag anzeigen
    Gibts hier eventuell auch ne Lösung für Raspi IPS User?
    ja, ein wenig im Script anpassen .

    Mein nicht perfektes Beispiel basiert auf dem Orginal und läuft mit einer SS430:
    PHP-Code:
    <?
    // *****************************************************************************
    // ** 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->debugIPS_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->debugIPS_LogMessage(IPS_GetName($_IPS['SELF']), "ERROR - registerSNMPObj: Variable description ".$desc." already exists, it must be unique!");
                    exit;
                }
                if (
    $oid==$obj->OID) {
                    if (
    $this->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_LogMessage(IPS_GetName($_IPS['SELF']), "Execute SNMP-Query: ".$this->binary.$exec_param);
                
    $obj->value str_replace('"'''trim(system($this->binary.$exec_param)));

                if (
    $this->debugIPS_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($input0$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($input0$pos);
                
    $result round(trim($result));
            }
            return 
    $result;
        }

        private function 
    convertPercent($input) {
            
    $pos stripos($input"%");
            if (
    $pos === false) {
                
    $result = -1;
            } else {
                
    $result substr($input0$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($input0$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;
        }
    }
    ?>
    MfG Ralf

  10. #30
    Registriert seit
    Feb 2011
    Beiträge
    647

    Zitat Zitat von ralf Beitrag anzeigen
    ja, ein wenig im Script anpassen .

    Mein nicht perfektes Beispiel basiert auf dem Orginal und läuft mit einer SS430:
    PHP-Code:
    <?
    // *****************************************************************************
    // ** 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->debugIPS_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->debugIPS_LogMessage(IPS_GetName($_IPS['SELF']), "ERROR - registerSNMPObj: Variable description ".$desc." already exists, it must be unique!");
                    exit;
                }
                if (
    $oid==$obj->OID) {
                    if (
    $this->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_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->debugIPS_LogMessage(IPS_GetName($_IPS['SELF']), "Execute SNMP-Query: ".$this->binary.$exec_param);
                
    $obj->value str_replace('"'''trim(system($this->binary.$exec_param)));

                if (
    $this->debugIPS_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($input0$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($input0$pos);
                
    $result round(trim($result));
            }
            return 
    $result;
        }

        private function 
    convertPercent($input) {
            
    $pos stripos($input"%");
            if (
    $pos === false) {
                
    $result = -1;
            } else {
                
    $result substr($input0$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($input0$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.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	1.PNG 
Hits:	122 
Größe:	21.6 KB 
ID:	34895
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	2.PNG 
Hits:	140 
Größe:	171.9 KB 
ID:	34896

    Gruß
    Christian
    IPS 5.3 @ Synology Docker DS916+ / RaspBerryMatic / ipsView / Sonos / PhilipsHue / Z-Wave / Unifi Protect / Ubiquity / Amazon Echo

Ähnliche Themen

  1. Status der Synology DS per Script auslesen?
    Von hardlog im Forum Skripte, PHP, SQL
    Antworten: 33
    Letzter Beitrag: 03.01.17, 01:32
  2. Switch über SNMP auslesen und saubere Verarbeitung - Wie?
    Von Artaios im Forum Skripte, PHP, SQL
    Antworten: 32
    Letzter Beitrag: 16.09.14, 11:35
  3. SNMP Geräte auslesen am Beispiel einer APC USV
    Von sanman im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 8
    Letzter Beitrag: 03.06.13, 16:15
  4. SNMP und PHP 5.4
    Von pitty im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 14.02.12, 13:54

Stichworte