Frage SNMP

  • Ich hätte da mal ne Frage an die Expertenrunde...

    Ich würde gerne Drucker per SNMP auslesen... mit der UDF versteht sich...
    Frage: Wie kann ich am besten SNMP OIDs verketten? Ich würde gerne bestimmte Werte der einzelnen Drucker (hier exemplarisch nur 2) auslesen.
    Für einen Wert klappt es wunderbar, aber wie bekomme ich den zweiten übermittelt? Nur Nacheinander? Ist also eine Abfrage gelaufen und hat den Wert ausgespuckt die nächste?

    die Global $oid1 und $oid2 sind ja gleichbleibend... aber im $test1 = _SNMPBuildPacket spuckt er mir immer einen Fehler aus... wenn ich ihn den Befehl so abschicken möchte...
    $SNMP_ReqID: possibly used before declaration.

    die snmp_udf.au3 ist eine snmp_UDF-v1.7.4.au3 der bequemlichkeit geschuldet nur umbenannt.

    Wer kann mir da mal helfen?

    Spoiler anzeigen
    • Offizieller Beitrag

    Deine Variablen-Entschlüsselung kann nicht funktionieren, aus "$var" & 1 wird nicht die Variable $var1, sondern der String "$var1".
    Das löst man so:

  • Guten Morgen,

    ich muss nochmal das Thema öffnen, offenbar kann kann die SNMP-UDF insbesondere _SNMPBuildPacket offenbar (laut Kommentaren in der UDF) an der ersten Stelle (OID) kein Array nutzen... mache ich genau dieses wie vin BugFix vorgeschlagen, erhalten ich auch tatsächlich immer die selbe Ausgabe, obwohl eine andere OID übergeben wird... (zumindest sagt ein Consolewrite auf $test einen anderen String)

    Spoiler anzeigen

    Gibts vielleicht noch einen anderen Lösungsvorschlag?

    • Offizieller Beitrag

    offenbar kann kann die SNMP-UDF insbesondere _SNMPBuildPacket offenbar (laut Kommentaren in der UDF) an der ersten Stelle (OID) kein Array nutzen... mache ich genau dieses wie vin BugFix vorgeschlagen, erhalten ich auch tatsächlich immer die selbe Ausgabe, obwohl eine andere OID übergeben wird.

    Kann ich nicht nachvollziehen, den Gedanken.
    In deinem Skript führst du die OID in einem Array, aber an den Aufruf der Funktion _SNMPBuildPacket übergibst du doch kein Array, sondern nur den Inhalt des jeweiligen Array-Elements, einen String.
    Der Kommentar in der UDF verweist nur darauf, dass keine Unterstützung (mehr) für ein Array als Parameter für OID besteht.

    • Offizieller Beitrag

    1. Klappt es, wenn du die Befehlsaufrufe einzeln schreibst und nicht in einer Schleife?
    2. Setze doch mal ein ConsoleWrite('$snmpOID = ' & $snmpOID & @CRLF) in die UDF, direkt unter den Funktionskopf von _SNMPBuildPacket um zu prüfen, ob der korrekte Wert in der Funktion landet. Wenn dem so ist (wovon ich eigentlich ausgehe), mußt du der internen Funktionsverarbeitung folgen um zu sehen, wo der Fehler auftritt.

  • Also ich habe jetzt mal die zweite OID händisch eingetragen, erhalten aber trotzdem als Ergebnis die vom ersten Wert... ;(
    also selbst ein ganz effes "nacheinander" ohne Schleife würde mich zu selben Ergebnis bringen...

    Spoiler anzeigen

    Skript

    Spoiler anzeigen

    UDF

    Ich habe auch deine Zweite Idee beherzt versucht umzusetzen, da wird aber nix ausgespuckt in der Consolewrite? ?(

    • Offizieller Beitrag

    Wende dich am Besten an den Autor der UDF im engl. Forum. Wenn beim händischen Eintragen ein falscher Wert kommt, scheint das Verarbeitungsproblem innerhalb der UDF zu liegen.

    Passiert das auch, wenn du mal den PC neu startest und dann mit Wert 2 die Funktion aufrufst? - Wenn es dann klappt, wäre es ein Hinweis, dass intern die Variable mit der OID nicht änderbar ist, wenn sie einmal gesetzt ist (wäre ganz schön sinnfrei).

  • Lösung gefunden... ganz von allein...

    Spoiler anzeigen

    $test = _SNMPBuildPacket($oid[$i], $SNMP_Community, $SNMP_Version, 1, "A0", "32") <<< Hier lag der Fehler... die ganze Zeit über hatte ich da A1 drin.