+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Aug 2010
    Beiträge
    672

    Standard Denkovi digital Inputs aus SNMP trap auslesen

    Ich versuche, die Digital Inputs eines Denkovi DAEnetIP4 auszulesen. Das Gerät sended SNMP traps, die OIDs sind: ".1.3.6.1.4.1.42505.1.2.1.1.7.x", wobei x ist 0 bis 7.

    Ich kann die Werte (0 oder 1) problemlos mit snmpget auslesen. Nun habe ich ein UDP-Socket und eine Registervariable in IPS eingerichtet. Letztere scheint die Zeichen vom Trap zu empfangen. Aber ich weiss nicht, wie ich aus diesen Zeichen die Werte der Inputs distillieren soll. Kann mir jemand helfen?

  2. #2
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,286

    Sprach der Chemiker

    Such mal nach S0+ plus Zähler auslesen/werten.
    Da hatte ich mal eine Auswertung zu geschrieben.


    Gesendet von iPad mit Tapatalk
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  3. #3
    Registriert seit
    Aug 2010
    Beiträge
    672

    meinst du diesen Skript? Elektronische Haushaltzähler(EHZ) auslesen.

    Kann ich das 1:1 auf die SNMP-Traps von Denkovi übertragen? Oder muss ich etwas anpassen? Hier ist ein Beispiel für die Denkovi-Traps (aus der UDP-Socket):

    Code:
    TXT: 14.08.2018 15:31:24.00 | RECEIVED [10.10.11.102:65534] | 0><STX><SOH><NUL><EOT><ETX>ips¤4<ACK><HT>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH>@<EOT><LF><LF><VT>f<STX><SOH><ACK><STX><SOH><SOH>C<EOT><NUL><SOH>'c0<NAK>0<DC3><ACK><SO>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH><STX><SOH><SOH><BEL><SOH><STX><SOH><NUL>
    HEX: 14.08.2018 15:31:24.00 | RECEIVED [10.10.11.102:65534] | 30 3E 02 01 00 04 03 69 70 73 A4 34 06 09 2B 06 01 04 01 82 CC 09 01 40 04 0A 0A 0B 66 02 01 06 02 01 01 43 04 00 01 27 63 30 15 30 13 06 0E 2B 06 01 04 01 82 CC 09 01 02 01 01 07 01 02 01 00 
    TXT: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 0><STX><SOH><NUL><EOT><ETX>ips¤4<ACK><HT>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH>@<EOT><LF><LF><VT>f<STX><SOH><ACK><STX><SOH><SOH>C<EOT><NUL><SOH>'t0<NAK>0<DC3><ACK><SO>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH><STX><SOH><SOH><BEL><SOH><STX><SOH><SOH>
    HEX: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 30 3E 02 01 00 04 03 69 70 73 A4 34 06 09 2B 06 01 04 01 82 CC 09 01 40 04 0A 0A 0B 66 02 01 06 02 01 01 43 04 00 01 27 74 30 15 30 13 06 0E 2B 06 01 04 01 82 CC 09 01 02 01 01 07 01 02 01 01 
    TXT: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 0><STX><SOH><NUL><EOT><ETX>ips¤4<ACK><HT>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH>@<EOT><LF><LF><VT>f<STX><SOH><ACK><STX><SOH><SOH>C<EOT><NUL><SOH>'?0<NAK>0<DC3><ACK><SO>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH><STX><SOH><SOH><BEL><SOH><STX><SOH><NUL>
    HEX: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 30 3E 02 01 00 04 03 69 70 73 A4 34 06 09 2B 06 01 04 01 82 CC 09 01 40 04 0A 0A 0B 66 02 01 06 02 01 01 43 04 00 01 27 83 30 15 30 13 06 0E 2B 06 01 04 01 82 CC 09 01 02 01 01 07 01 02 01 00 
    TXT: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 0><STX><SOH><NUL><EOT><ETX>ips¤4<ACK><HT>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH>@<EOT><LF><LF><VT>f<STX><SOH><ACK><STX><SOH><SOH>C<EOT><NUL><SOH>'¡0<NAK>0<DC3><ACK><SO>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH><STX><SOH><SOH><BEL><SOH><STX><SOH><SOH>
    HEX: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 30 3E 02 01 00 04 03 69 70 73 A4 34 06 09 2B 06 01 04 01 82 CC 09 01 40 04 0A 0A 0B 66 02 01 06 02 01 01 43 04 00 01 27 A1 30 15 30 13 06 0E 2B 06 01 04 01 82 CC 09 01 02 01 01 07 01 02 01 01 
    TXT: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 0><STX><SOH><NUL><EOT><ETX>ips¤4<ACK><HT>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH>@<EOT><LF><LF><VT>f<STX><SOH><ACK><STX><SOH><SOH>C<EOT><NUL><SOH>'¤0<NAK>0<DC3><ACK><SO>+<ACK><SOH><EOT><SOH>?Ì<HT><SOH><STX><SOH><SOH><BEL><SOH><STX><SOH><NUL>
    HEX: 14.08.2018 15:31:25.00 | RECEIVED [10.10.11.102:65534] | 30 3E 02 01 00 04 03 69 70 73 A4 34 06 09 2B 06 01 04 01 82 CC 09 01 40 04 0A 0A 0B 66 02 01 06 02 01 01 43 04 00 01 27 A4 30 15 30 13 06 0E 2B 06 01 04 01 82 CC 09 01 02 01 01 07 01 02 01 00

  4. #4
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,286

    Net wirklich.
    Ist die Suche so schwer.

    S0plus Zähler mit Expert Net Control Reader auswerten

    Ps: mit deinen Daten kann man auch was anfangen wenn man den Zusammenhang kennt.

    Ein Protokoll ist hier immer von Vorteil. Glaskugel in Rep.
    Geändert von RWN (14.08.18 um 18:07 Uhr)
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  5. #5
    Registriert seit
    Aug 2010
    Beiträge
    672

    Denkovi ist eine bulgarische Firma und verkauft IP-Relais mit digitalen und analogen Inputs. Diese Geräte sind in meiner Erfahrung viel stabiler und zuverlässiger als die "Pokeys". Sie bieten allerdings keine integrierte Programmierung, weswegen die Logik über IPS erfolgen muss.

    Die Doku zu den Boards ist hier.

    Weiteres über die Struktur der UDP-Pakete, welche die SNMP-Traps erhalten, ist nicht vorhanden. Die dazugehörige MIB-file ist hier.

    Ich denke dass ich den Herrn Denkov bitten muss, zusätzliche Erklärungen zu liefern. Oder lässt sich die Struktur ohne weiteres entziffern anhand der MIB-File? Ich habe auch StackOverflow abgesucht nach PHP-Snippets um ein SNMP Trap zu parsen, wurde aber nicht fündig.
    Geändert von aag (14.08.18 um 19:26 Uhr)

  6. #6
    Registriert seit
    Aug 2010
    Beiträge
    672

    Ich habe einige Perl-Scripts gefunden, die SNMP Traps decoden können, aber nichts in PHP. Perl kann man aber nicht ohne weiteres in IPS einbinden, oder?

  7. #7
    Registriert seit
    Jun 2005
    Beiträge
    3,486

    Tipp, auch wenn Du's ablehnen wirst, versuch's mal mit JSON
    Gruß Helmut

  8. #8
    Registriert seit
    Aug 2010
    Beiträge
    672

    danke, ich habe nichts gegen JSON, er und ich sind gute Freunde! Aber wie soll das gehen? Der Grund für die Traps ist dass sie als UDP direkt von Denkovi verschickt werden. Das reduziert den Overhead massiv, weil es nur einen Listener braucht. Alle Alternativen müssten m.E. ein aktives Polling betreiben, am besten 2x pro Sekunde. Oder sehe ich das falsch?

  9. #9
    Registriert seit
    Aug 2010
    Beiträge
    672

    Ich habe es gelöst. Dieser kleine Script wird der RegVar zugeordnet, welche die SNMP Traps vom Denkovi empfängt. Geliefert wird ein assoziativer Array mit 2 keys: Id (kann von 0 bis 7 gehen) und State (0 und 1, on oder off). Die Schaltvorgänge der digitalen inputs werden geloggt.

    PHP-Code:
     <?
    // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
    if ($_IPS['SENDER'] == "RegisterVariable") {
        
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
        //$data  = RegVar_GetBuffer($_IPS['INSTANCE']);

        // neu empfangene Daten an $data anhängen
        
    $data .= $_IPS['VALUE'];
     
        
    // wenn das Trennzeichen ; in $data gefunden worden ist
        
    if (strpos($data';')) {
            
    // $data in durch ; separierte Datensätze zerlegen
            
    $datasets explode(';'$data);
     
            
    // alle nicht durch ; terminierten Datensätze ausgeben
            
    for ($i 0$i count($datasets) - 1$i++) {
                echo 
    "empfangener Datensatz: ".$datasets[$i]."\n";
            }
     
            
    // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
            
    $data $datasets[count($datasets) - 1];
        }
     
        
    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
        
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
        
        }
        
    $dataString =     bin2Hex($data);
    $lenDs strlen($dataString);
    $digitalInput = array(
        
    "state" => substr($dataString$lenDs-1,1),
        
    "id" => substr($dataString$lenDs-71)
        );

        
    //add data to file
        
    file_put_contents('C:\Users\aag\Desktop\denkovi_logfile.txt'date("Y-m-d H:i:s") .
            
    " id: " $digitalInput["id"] . 
            
    " state: "$digitalInput["state"]  . " " .
            
    bin2Hex($data) . PHP_EOLFILE_APPEND);


    function 
    String2Hex($string){
        
    $hex='';
        for (
    $i=0$i strlen($string); $i++){
            
    $hex .= dechex(ord($string[$i]));
        }
        return 
    $hex;
    }
         
         
    ?>

  10. #10
    Registriert seit
    Aug 2010
    Beiträge
    672

    Ich habe es gelöst. Dieses kleine Skript wird der RegVar zugeordnet, welche die SNMP Traps vom Denkovi empfängt. (Die RegVar muss wiederum auf eine UDP socket zuhören, port 162, IP-Addresse des Denkovi). Keine Cutter-Instanz nötig. Geliefert wird ein assoziativer Array mit 2 keys: Id (kann von 0 bis 7 gehen) und State (0 und 1, on oder off). Die Schaltvorgänge der digitalen inputs werden geloggt.

    PHP-Code:
     <?
    // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
    if ($_IPS['SENDER'] == "RegisterVariable") {
        
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
        //$data  = RegVar_GetBuffer($_IPS['INSTANCE']);

        // neu empfangene Daten an $data anhängen
        
    $data .= $_IPS['VALUE'];
     
        
    // wenn das Trennzeichen ; in $data gefunden worden ist
        
    if (strpos($data';')) {
            
    // $data in durch ; separierte Datensätze zerlegen
            
    $datasets explode(';'$data);
     
            
    // alle nicht durch ; terminierten Datensätze ausgeben
            
    for ($i 0$i count($datasets) - 1$i++) {
                echo 
    "empfangener Datensatz: ".$datasets[$i]."\n";
            }
     
            
    // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
            
    $data $datasets[count($datasets) - 1];
        }
     
        
    // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
        
    RegVar_SetBuffer($_IPS['INSTANCE'], $data);
        
        }
        
    $dataString =     bin2Hex($data);
    $lenDs strlen($dataString);
    $digitalInput = array(
        
    "state" => substr($dataString$lenDs-1,1),
        
    "id" => substr($dataString$lenDs-71)
        );

        
    //add data to file
        
    file_put_contents('C:\Users\aag\Desktop\denkovi_logfile.txt'date("Y-m-d H:i:s") .
            
    " id: " $digitalInput["id"] . 
            
    " state: "$digitalInput["state"]  . " " .
            
    bin2Hex($data) . PHP_EOLFILE_APPEND);


    function 
    String2Hex($string){
        
    $hex='';
        for (
    $i=0$i strlen($string); $i++){
            
    $hex .= dechex(ord($string[$i]));
        }
        return 
    $hex;
    }
         
         
    ?>
    Geändert von aag (17.08.18 um 19:38 Uhr)

Ähnliche Themen

  1. Janitza UMG 605 Poweranalysator per SNMP auslesen
    Von kea im Forum Skripte, PHP, SQL
    Antworten: 1
    Letzter Beitrag: 20.08.18, 21:48
  2. Antworten: 1
    Letzter Beitrag: 20.08.18, 21:44
  3. denkovi relais + inputs, IPS-Modul?
    Von aag im Forum Haustechnik
    Antworten: 0
    Letzter Beitrag: 10.08.18, 11:15
  4. Antworten: 59
    Letzter Beitrag: 05.02.17, 20:08
  5. SNMP-Trap empfangen
    Von brausepaul im Forum Skripte, PHP, SQL
    Antworten: 18
    Letzter Beitrag: 10.01.15, 00:11

Stichworte