snmpcheck gibt ausschliesslich Wert 0 aus

Begonnen von mahlzeit24/7, 28 Oktober 2013, 18:26:03

Vorheriges Thema - Nächstes Thema

mahlzeit24/7

Hallo Zusammen,

da ich nicht ständig durch Netzwerk pingen möchte, habe ich mich mit dem SNMP Check versucht und stosse da leider an meine Grenzen

der Router kann snmp:

root@HPDebianNAS:/opt/fhem/log# snmpwalk -v 1 -c public 192.168.2.1 .1.3.6.1.2.1.3.1.1.2
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.2 = Hex-STRING: 00 08 9B C1 B6 EB
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.3 = Hex-STRING: 00 1D EC 01 B6 3C
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.4 = Hex-STRING: 00 14 22 DD 9C 92
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.5 = Hex-STRING: 00 26 2D 05 22 1A
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.6 = Hex-STRING: 00 27 19 FE 47 06
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.16 = Hex-STRING: 00 D0 B8 06 F7 0B
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.17 = Hex-STRING: 00 16 01 C5 F2 76
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.100 = Hex-STRING: 00 21 6A A0 B0 4C
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.101 = Hex-STRING: D0 E7 82 3F E3 83
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.102 = Hex-STRING: 00 25 D3 87 49 43
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.108 = Hex-STRING: 10 9A DD 0B A8 23
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.111 = Hex-STRING: 64 31 50 A4 F9 3F
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.116 = Hex-STRING: 04 46 65 83 22 EA
iso.3.6.1.2.1.3.1.1.2.2.192.168.2.132 = Hex-STRING: 34 51 C9 86 31 3B

leider kommt von  function {snmpCheck("192.168.2.1","0x0446658322EA")} 30 30  ausschliesslich ein 0 zurück, obwohl ich über wlan z.b. surfe

2013.10.28 18:16:08 5: PRESENCE_DoLocalFunctionScan: Samsung|{snmpCheck("192.168.2.1","0x0446658322EA")}|0
2013.10.28 18:16:08 5: Cmd: >{snmpCheck("192.168.2.1","0x0446658322EA")}<
2013.10.28 18:16:08 4: Connection accepted from telnet:127.0.0.1:57552
2013.10.28 18:16:08 5: Cmd: >{PRESENCE_ProcessLocalScan('Samsung|0|absent')}<
2013.10.28 18:16:08 5: PRESENCE_ProcessLocalScan: Samsung|0|absent
2013.10.28 18:16:08 5: Triggering Samsung (1 changes)
2013.10.28 18:16:08 5: Notify loop for Samsung absent
2013.10.28 18:16:08 4: eventTypes: PRESENCE Samsung absent -> absent

an welcher Stelle kann ich das script in 99_myutils.pm dazu veranlassen, den snmpget output ins log zu schreiben?

package main;

use strict;
use warnings;
use POSIX;



# start with your own functions below this line
use Net::SNMP;
sub
snmpCheck($$)
{
  my ($airport,$client)= @_;

  my $community = "public";
  my $host = 192.168.2.1;
  my $oid = ".1.3.6.1.2.1.3.1.1.2";
  #my $oid = ".1.3.6.1.2.1.3.1.1.2.25.1.10.0.1";

  my ( $session, $error ) = Net::SNMP->session(
    -hostname => $host,
    -community => $community,
    -port => 161,
    -version => 1
  );

  if( !defined($session) ) {
    return 0;
    return "Can't connect to host $host.";
  }

  my @snmpoids = ();

  my $response = $session->get_next_request($oid);
  my @nextid = keys %$response;
  while ( $nextid[0] =~ m/^$oid/ ) {
    push( @snmpoids, $nextid[0] );

    $response = $session->get_next_request( $nextid[0] );
    @nextid = keys %$response;
  }

  if( !defined($response = $session->get_request( @snmpoids ) ) ) {
    return 0;
  }

  foreach my $value (values %$response) {
    return 1 if( $value eq $client )
  }

  return 0;
}

# behind your last function, we need the following
1;


herzliche Grüße

Frank

justme1968

snmpCheck macht zur zeit nur einen einfachen string vergleich und die snmp lib liefert die hex werte klein geschrieben zurück.

d.h. du musst den string auch im aufruf klein schreiben: snmpCheck("192.168.2.1","0x0446658322ea")

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

Hallo Andre,

danke für die rasche Antwort. Das macht Sinn, ich hatte es umgehend implementiert, leider steht das device immernoch auf

state  absent  2013-10-28 19:34:58

hier nochmal die definition

function {snmpCheck("192.168.2.1","0x0446658322ea")} 30 30

hat das evtl was mit dem OS zu tun (debian wheezy)? und der snmp perl version v5.14.2?

Herzliche Grüße

Frank

justme1968

du kannst vor die foreach zeile einLog 3, Dumper $response; einbauen. und wenn es probleme gibt noch vor das sub ein use Data::Dumper;

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

na, jetzt kommt bewegung hinein:

2013.10.28 20:21:20 2: PRESENCE: error while processing device Samsung - unexpected function out                        put (expected 0 or 1): Undefined subroutine &main::snmpCheck called at (eval 15714) line 1.

nur schient das auch wieder ein anderes temporäres problem zu sein, sollte der dumper jetzt nicht ins logfile schreiben?

justme1968

irgendetwas ist beim editieren imt deinem file passiert. fhem kann es (vermutlich durch einen syntax fehler) nicht mehr laden.

schau mal ob du im logfile oder wenn du fhem von hand startest auf der console mehr findest.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

Hi Andre,


geht alles wieder, nur der snmpcheck ist unverändert.

NAchdem ich dumper eingefügt hatte machte ich mich vergebens auf die suche des dumps, dann hab ich die erste zeile rausgenommen und die letzten 3 eingefügt.

#Log 5, Dumper $response;
open my $FH, '>', '/opt/fhem/log/dumm.log';
print $FH Dumper $response;
close $FH;

beides ohne erfolg.

Nu hab ich noch schnell snmp auf meinem owrt wlan installiert, leider mit dem selben problem.

Irgendwie bin ich ratlos.....


Herzliche Grüße
Frank

justme1968

nimm mal wieder meine log zeile und kopier sie jeweils hinter die beiden zeilen mit $session->get_next_request.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

müsste der dumper nicht ins fhem log schreiben?

root@HPDebianNAS:/opt/fhem/log# tail -f fhem-2013-10.log | grep -i samsung
2013.10.28 23:45:49 4: HTTP FHEMWEB:192.168.2.102:55716 GET /fhem&detail=Samsung&detail=Samsung&dev.setSamsung=Samsung&cmd.setSamsung=set&arg.setSamsung=statusRequest&val.setSamsung=
2013.10.28 23:45:49 4: eventTypes: PRESENCE Samsung statusRequest -> statusRequest
2013.10.28 23:45:49 4: HTTP FHEMWEB:192.168.2.102:55717 GET /fhem&detail=Samsung&detail=Samsung&dev.setSamsung=Samsung&cmd.setSamsung=set&arg.setSamsung=statusRequest&val.setSamsung=
2013.10.28 23:45:49 4: eventTypes: PRESENCE Samsung statusRequest -> statusRequest
2013.10.28 23:45:49 4: HTTP FHEMWEB:192.168.2.102:55716 GET /fhem?detail=Samsung
2013.10.28 23:45:49 4: /fhem?detail=Samsung / RL:2231 / text/html; charset=UTF-8 / Content-Encoding: gzip
2013.10.28 23:45:49 4: eventTypes: PRESENCE Samsung absent -> absent
2013.10.28 23:45:49 4: HTTP FHEMWEB:192.168.2.102:55719 GET /fhem?cmd={AttrVal(%22Samsung%22,%22room%22,%22%22)}&XHR=1
2013.10.28 23:45:49 4: /fhem?cmd={AttrVal(%22Samsung%22,%22room%22,%22%22)}&XHR=1 / RL:29 / text/plain; charset=UTF-8 / Content-Encoding: gzip
2013.10.28 23:45:51 4: eventTypes: PRESENCE Samsung absent -> absent

ich hab das set manuell ausgelöst.....

justme1968

ohne das '| grep'. samsung taucht in den zeilen die der dumper produziert nicht auf.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

ohne grep

2013.10.28 23:59:47 4: Connection accepted from telnet:127.0.0.1:39852
2013.10.28 23:59:47 4: eventTypes: PRESENCE Handy1 online -> online
2013.10.28 23:59:53 4: myVBUSDevice: COLLECTOR:    10.7 (Celsius)
2013.10.28 23:59:53 4: myVBUSDevice: STORAGE:      58.3 (Celsius)
2013.10.28 23:59:53 4: myVBUSDevice: FRESHWATER:   59 (Celsius)
2013.10.28 23:59:53 4: myVBUSDevice: HEATING:      63.5 (Celsius)
2013.10.28 23:59:53 4: myVBUSDevice: THROUGHPUT:   30 (l/min)
2013.10.28 23:59:53 4: myVBUSDevice: VENT_STORAGE: 30 (Umin
2013.10.28 23:59:53 4: myVBUSDevice: VENT_HEATING: 0
2013.10.28 23:59:58 4: Connection accepted from telnet:127.0.0.1:39854
2013.10.28 23:59:58 4: eventTypes: PRESENCE Samsung absent -> absent

weit und breit nichts in Loglevel 4, werd nochmal 5 starten........

justme1968

die log zeilen sind loglevel 3...

wie genau setzt du den loglevel ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mahlzeit24/7

auch nicht



PRESENCE_DoLocalFunctionScan: Samsung|{snmpCheck("192.168.2.1","0x0446658322ea")}|0
2013.10.29 00:03:00 5: Cmd: >{snmpCheck("192.168.2.1","0x0446658322ea")}<
2013.10.29 00:03:00 4: Connection accepted from telnet:127.0.0.1:39953
2013.10.29 00:03:00 5: Cmd: >{PRESENCE_ProcessLocalScan('Samsung|0|absent')}<
2013.10.29 00:03:00 5: PRESENCE_ProcessLocalScan: Samsung|0|absent
2013.10.29 00:03:00 5: Triggering Samsung (1 changes)
2013.10.29 00:03:00 5: Notify loop for Samsung absent
2013.10.29 00:03:00 4: eventTypes: PRESENCE Samsung absent -> absent


ok, lass mers, ich haks ab als "geht nicht" und versuch mit dem lanping leben zu lernen. snmp wär halt elegant gewesen.

Dank Dir vielmals

Herzliche Grüße


Frank

mahlzeit24/7

naja, in der fhem.cfg doch........


attr global verbose 3......

justme1968

du kannst noch ein log jeweils auf $session und $error einbauen nach dem die snmp sessio aufgemacht wird.

und auch mal '{snmpCheck("192.168.2.1","0x0446658322EA")}' im command feld oder der telnet console aufrufen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968