Ankündigung

Einklappen
Keine Ankündigung bisher.

SNMP Befehle senden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    SNMP Befehle senden

    Hallo,
    bin nicht recht fündig geworden und wollte mal fragen ob es mittels des eibPCs irgendwie möglich ist SNMP Werte(Befehl) zu senden.Abfragen wäre auch cool aber nur zweitrangig.

    Hintergrund ist das man damit viele Netzwerkteilnehmer die mittels POE versorgt werden zentral ausschalten kann. Kommen bei den neuen Strompreisen doch viele Euros zusammen.

    Grüße und frohes Pfingsten

    Hannes

    #2
    Das ist möglich. Allerdings hängt verlangt das Kenntnis der Programmierung des EibPC (zumindest mein Code unten), sowie die des SNMP,

    Ich hatte hier vor Jahren mal was für einen Kunden gemacht und es sollten einfach die Werte auf den Bus ausgegeben werden.
    Die Makrolib ist anbei im zip.
    snmp.zip
    Code:
    [Macros]
    //-----------------------------------------------------------------------
    // Der Scheduler muss pro Babelmaster genau einmal eingebunden werden
    // Hier vergeben wir den Namen "BableG1", dessen IP ist hier 192.168.22.1
    Scheduler(BableG1,192.168.22.1)
    Scheduler(BableG2,192.168.22.2)
    //-----------------------------------------------------------------------
    // Integer oder Floatwerte ausgeben
    // vgl. Tabelle Bable_Buster_ACU_1_2_Site_FS.docx
    //
    // Z.B. Register 129 (letzte Zahl in der Zeile):
    // Operating Unit Integer 1.3.6.1.4.1.3815.1.2.2.1.1.1.1.1.2.129
    // Man weiß also Integer Register 129
    //
    // Damit kann man nun dieses Register auf die GA 1/2/3 (Vorzeichenlos 16 Bit = u16) mappen:
    IntegerAufGA(BableG1,130,'1/2/3'u16)
    FloatAufGA(BableG1,4,'1/2/4'f16)
    SendeNachUDPInteger(BableG1,44,$Integer$, 192.168.22.1,8000)
    SendeNachUDPInteger(BableG1,129,$Integer2$, 192.168.22.1,8000)
    SendeNachUDPInteger(BableG1,130,$mit Wert$, 192.168.22.1,8000)
    SendeNachUDPFloat(BableG1,4,$Float$, 192.168.22.1,8000)
    
    // Damit die Register vom EibPC auch alle 10 Sekunden angefordert werden:
    FrageRegisterInteger(BableG1,129,cycle(0,10))
    FrageRegisterFloat(BableG1,4,cycle(0,10))
    
    
    // Oder hier ein 1-Bit Alarm-Signal, Integer 0/1 auf Register 43
    // High pressure sensor alarm Integer 1.3.6.1.4.1.3815.1.2.2.1.1.1.1.1.2.43
    IntegerAufGA(BableG1,43,'1/2/2'b01)
    FrageRegisterInteger(BableG1,43,cycle(0,10))
    
    // Wenn man alles eintreffende sehen will, hier einfach auskommentieren:
    // DebugAlleWerte(BableG1,'1/2/5'c14)
    
    //-----------------------------------------------------------------------
    // Flieskommawerte ausgeben
    // Blowing temperature order Float 1.3.6.1.4.1.3815.1.2.2.1.1.2.1.1.2.4
    // (Target utlet temperature in °C)
    // ist also Register 4 (letzte Zahl)
    
    
    
    //-----------------------------------------------------------------------
    // Falls Probleme auftreten: Es können die Debugwerte auch direkt auf eine
    // TextGA ausgegeben werden. Normalerweise nicht notwendig, Kommentar entfernen
    // und GA eintragen, falls gewünscht.
    //
    
    
    [MacroLibs]
    //Makro-Bibliotheken
    SNMPConverter-4.lib
    
    [EibPC]
    
    // Wenn man die GA, die in den obigen Beispiel verwendet wurden, im Monitor sehen will,
    // so muss man die Kommentare der nächsten Zeilen entfernen
    dummy_b01='1/2/2'b01
    dummy_u16='1/2/3'u16
    dummy_f16='1/2/4'f16
    dummy_c14='1/2/5'c14
    //
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hi,
      danke für dein Beispiel aber nach einem Tag Urlaub kann ich leider keine wirklichen Resultate aufzeigen
      Bin ich wohl einfach zu dumm zu

      Hab auch versucht mit Wireshark mal denTraffic zu loggen aber das Ziel ( Switch) hängt dazwischen und damit kann ich dort keine Pakete anschauen die vom EibPC zum Switch gehen.

      1.3.6.1.2.1.105.1.1.1.3.1.2 i 2
      die 2 stellt den Port der geschaltet werden soll und dannach setzt ich den Integer auf den Wert 2 für AUS oder auf den Wert 1 für EIN

      Bei dem direkten Zugriff über : snmpset -v 2c -c Legion 192.168.2.99 1.3.6.1.2.1.105.1.1.1.3.1.2 i 2

      Kann ich es schön mitschneiden:
      0000 90 2e 16 66 93 dd a0 63 91 6c 1b bc 08 00 45 00
      0010 00 4c 00 00 40 00 40 11 b4 2b c0 a8 02 63 c0 a8
      0020 02 c2 00 a1 d3 3d 00 38 54 94 30 2e 02 01 01 04
      0030 06 4c 65 67 69 6f 6e a2 21 02 04 00 d2 fc 36 02
      0040 01 00 02 01 00 30 13 30 11 06 0c 2b 06 01 02 01
      0050 69 01 01 01 03 01 02 02 01 02

      Da der Scheduler die einzelnen Punkte aber selbsständig abfragt und ich im Debugger auch keine Änderungen der Variablen sehe geht die Anfrage wohl ins leere.

      Name_BabelID = 72908620366440705u64
      // Register Basis Request: die Letzen 4 bytes für das Register (float oder int)
      Name_Req_SNMPDeviceRegBasisFLOAT= 16843522u32
      Name_Req_SNMPDeviceRegBasisINTEGER=16843521u32
      // Request SNMP Version
      Name_Req_SNMP_Version=2
      // Request ID wird per Zufallszahl generiert
      Name_RequestID=0u32
      // Der Public Key 0x61,0x72,0x65,0x64,x5f,0x70,0x75,0x62,0x6c,0x69,0 x63
      Name_Request_Community=$Legion$
      // Die Länge des Keys plus Spek
      Name_Request_CommunityLen=shift(size(Name_Request_ Community),8s08)+4u16
      //
      Name_Req_Error=0x0102u16
      // Der Requestheader
      Name_Req_PaketTyp_Request= 0x040225a0u32


      Die im Readudp wurden aufgrund der ausbleibenden Antwort vom Switch nicht bearbeitet von mir:
      // Ab hier Implemtierungsabhängig
      Name_PosEnd=Name_PosEnd+3u16;
      Name_SNMPDevice = stringcast(Name_Data,Name_SNMPDevice,Name_PosEnd);
      Name_PosEnd=Name_PosEnd+8u16;
      Name_SNMPDeviceRegBasis = stringcast(Name_Data,Name_SNMPDeviceRegBasis,Name_ PosEnd);
      Name_PosEnd=Name_PosEnd+4u16;
      Name_SNMPDeviceReg= stringcast(Name_Data,0,Name_PosEnd);
      if Name_SNMPDeviceReg>128 then Name_PosEnd=Name_PosEnd+1u16 endif;
      Name_PosEnd=Name_PosEnd+1u16;
      Name_SNMPRegTyp= stringcast(Name_Data,0,Name_PosEnd);
      Name_PosEnd=Name_PosEnd+1u16;
      Name_SNMPRegData= split(Name_Data,Name_PosEnd,Name_PosEnd+20u16);
      Name_Count=Name_Count+1u64;

      Gibts da noch irgendwo etwas nachzulesen oder hat jemand Tips?

      Grüße Hannes

      Kommentar


        #4
        Du solltest dir einen managed Switch besorgen, um die LAN Telegramme zwischen dem Endgerät und dem EibPC mit Wireshark beobachten zu können. Das macht dann die Sache viel leichter und man erkennt m.E. auch besser, was da schief läuft. So ist das eher ein Blindflug.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Wenn ich dir jetzt sag das ich einen Managed habe nutzt uns das nicht wirklich weiter

          Zumal der Switch das Endgerät ist da er die Port auschaltet.Dazwischen kommt halt nix und der Switch weiß auch das der Traffic nicht weiter im Netzwerk verteilt werden muss.

          Hab mich heute noch etwas bezüglich des Aufbaus des SNMP Paketes schlau gemacht und kann es nun zumindest nachvollziehen.
          Die Daten selber sind ja schöne Bytes die man packen kann.
          Aber den Header kann ich nicht ganz nachvollziehen wie der zustande kommt.
          Leider setzt ihr auch einen eigenen Header um bei sendudp diese Daten zu markieren.Dh ich hba 2x einen Header drinnen.Meinen gewollten und den von euch gesetzten.
          In eurem Makro nutzt ihr die Shift Funktion um euren Internen Header zu überschreiben oder liege ich da falsch?
          Name_Req_SNMPUDPHeader+Name_Req_SNMPUDPHeaderLen+s hift(convert(Name_Req_LenOffset,0u32),8s08),
          Wie bekomme ich denn nun den Standard Header von euch :
          90 2e 16 66 93 dd 70 b3 d5 dc 88 c4 08 00 45 00
          00 76 42 8e 40 00 40 11 71 c2 c0 a8 02 14 c0 a8
          02 c2 12 c7 00 a1 00 62 39 5a
          mit meinem SNMP Header überschrieben?

          a0 63 91 6c 1b bc
          90 2e 16 66 93 dd 08 00 45 00 00 4c bc 55 00 00
          80 11 00 00 c0 a8 02 c2 c0 a8 02 63 fa 33 00 a1
          00 38 86 bf 30 2e 02 01


          Grüße

          Hannes

          Kommentar


            #6
            Zitat von HannesKannes Beitrag anzeigen
            Wenn ich dir jetzt sag das ich einen Managed habe nutzt uns das nicht wirklich weiter
            Wenn Du uns jetzt noch verraten hättest was für einen managed Switch Du hast.

            Bei einem managed Switch kann man in der Regel einen Port-mirror aktivieren um den Traffic mitzuschneiden.
            Meine Installation: VM Debian Buster SH NG 1.8.1, SmartVISU 3.0, KNX, DMX, 1-wire, Fortigate 30E IPS, VMware vSphere 6.7

            Kommentar


              #7
              Zitat von HannesKannes Beitrag anzeigen
              .
              Leider setzt ihr auch einen eigenen Header um bei sendudp diese Daten zu markieren.
              Naja, bei sendudp musst Du dann deinen Header eintragen, da kannst du ja Byte für Byte vorgeben. [Oder ich versteh die Frage nicht]
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Zitat von yachti Beitrag anzeigen
                Wenn Du uns jetzt noch verraten hättest was für einen managed Switch Du hast.

                Bei einem managed Switch kann man in der Regel einen Port-mirror aktivieren um den Traffic mitzuschneiden.

                Hi Yachti,

                danke für deinen Hinweis.Ich habe einen Netgear M4100 und einen GS728TP. Sollte aber nicht mehr von Belang sein da ich nun den Hintergrund für den Managed Server Hinweis verstanden habe.Das Mirroring hat das Problem aufgezeigt und nun läuft es Danke dir !

                Kommentar


                  #9
                  Zitat von enertegus Beitrag anzeigen
                  Naja, bei sendudp musst Du dann deinen Header eintragen, da kannst du ja Byte für Byte vorgeben. [Oder ich versteh die Frage nicht]
                  War mein Fehler. War etwas verwirrt da der Header ja noch andere Informationen aufgrund der anderen Rechner hatte.Mit dem Mirroring, über den Managed Server, war zu sehen das der Header korrekt war und ich musste nur noch die Bytes senden .

                  Grüße und vielen Dank

                  Kommentar

                  Lädt...
                  X