use Net::SNMP in 99_myUtils funktioniert nicht

Begonnen von martin2day, 03 Februar 2017, 22:37:47

Vorheriges Thema - Nächstes Thema

martin2day

Guten Abend,

ich habe da ein weiteres Problem.
Ich möchte eine Anwesenheit in FHEM integrieren. Dies wird hier ausführlich erklärt:
https://wiki.fhem.de/wiki/Anwesenheitserkennung#Das_GEOFANCY_Modul
Ich möchte das Bsp. DHCP Überwachung auf Airport Basestation umsetzen.
Dazu habe ich Net::SNMP mit dem angezeigtem Befehl cpan install use Net::SNMP installiert.
Er sagt mir: Net::SNMP is up to date (v6.0.1)
Dann habe ich wie in der Anweisung erklärt versucht die Datei 99_myUtils zu erzeugen. Beim Abspeichern bekomme ich aber den Fehler:
Can't locate Net/SNMP.pm in @INC (you may need to install the Net::SNMP module) (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl ./FHEM) at ./FHEM/99_myUtils.pm line 12. BEGIN failed--compilation aborted at ./FHEM/99_myUtils.pm line 12.

Damit kann ich leider nichts anfangen? Kann mir hier bitte jemand einen Tipp geben?

Vielen Dank
Gruß Martin

Otto123

Hallo Martin,

ich hoffe Du hast die 99_myUtils.pm erzeugt und keine 99_myUtils.pl wie im Wiki beschrieben :)

Wie sieht die denn komplett aus?
Die Datei selbst hast Du so angelegt -> https://wiki.fhem.de/wiki/99_myUtils_anlegen  ?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

martin2day

Hallo Otto,

ja das habe ich gemacht. Über den Fehler bin ich aber auch erst gestolpert:

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;
use Net::SNMP;

sub
snmpCheck($$)
{
  my ($airport,$client)= @_;

  my $community = "public";
  my $host = $airport;
  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 && $nextid[0] && $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;
}


Gruß Martin

Otto123

#3
Du hast die 1; am Ende gelöscht! Schlimmer Fehler.

Schau nochmal ins Wiki.

Es könnte auch helfen, nach der CPAN Installation neu zu starten. Aber das weiß ich nicht. Ich hatte das aber schon, das System hat beim ersten mal festgestellt das ein Modul fehlt und dann ist dieser "Fehler" solange da bis irgendwas (ich weiß es leider nicht besser) neu gestartet wird. Im Zweifelsfall das System  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: Otto123 am 03 Februar 2017, 23:02:05
Du hast die 1; am Ende gelöscht! Schlimmer Fehler.

noch schlimmer ist der Fehler, die _Initialize() Funktion gelöscht zu haben...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Zitat von: betateilchen am 03 Februar 2017, 23:07:15
noch schlimmer ist der Fehler, die _Initialize() Funktion gelöscht zu haben...
Stimmt habe ich übersehen. Das ist der Grund!

Dabei steht es doch wirklich genau hier drin? -> https://wiki.fhem.de/wiki/99_myUtils_anlegen#Eigene_Routinen_einf.C3.BCgen

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Man braucht keinen WIKI Artikel, man muss einfach die in FHEM mitgelieferte Vorlage mit "Edit files" öffnen, unter dem richtigen Namen abspeichern und lesen, was dort drinsteht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martin2day

Hallo  :(

ich gebe euch recht...  aber in der anderen Datei steht es etwas verwirrender.
Ich habe mit der 99_myUtils noch nicht gearbeitet und da sah es für mich wie ein Beispiel aus.
Und da in der Anleitung steht:
Zuerst ist folgender Code in 99_myUtils.pl einzufügen:
Habe ich dies gemacht.

Mit der Änderung funktioniert das Script.
Die Erkennung aber leider noch nicht. Mal schauen wo da der Fehler zu suchen ist.

Gruß Martin

Otto123

#8
Zitat von: betateilchen am 03 Februar 2017, 23:16:23
Man braucht keinen WIKI Artikel, man muss einfach die in FHEM mitgelieferte Vorlage mit "Edit files" öffnen, unter dem richtigen Namen abspeichern und lesen, was dort drinsteht.
Wäre ja viel zu einfach  ;D ich weiß Du magst das Wiki nicht  ::)

Zitat von: martin2day am 03 Februar 2017, 23:18:14
Ich habe mit der 99_myUtils noch nicht gearbeitet und da sah es für mich wie ein Beispiel aus.
Und da in der Anleitung steht:
Zuerst ist folgender Code in 99_myUtils.pl einzufügen:
Habe ich dies gemacht.
Was wieder mal betateilchen Recht gibt  :-X

Ich habe den Wikiartikel an dieser Stelle ergänzt/präzisiert.

So dann gute Nacht, jetzt beginnt gleich die Forumspause  :P

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

martin2day

Otto,

vielen Dank.
Das sind halt die Fehler über die man als Anfänger ganz schnell stolpert.
Als Pro bemerkt man das sicher gar nicht, weil man das einfach voraussetzt.

Auf alle Fälle funktioniert auch diese Option wunderbar.
Ich bin echt begeistert, wie zuverlässig das ganze funktioniert und umsetzbar ist.

Gruß Martin

australien

Hallo zusammen

ich versuche nun seit 2 Tagen das ganze zu verwirklichen.

mein dhcp läuft auf einer NanoStation M5 und ich vermute dass die OID nicht übereinstimmt. Der snmp Server ist gestartet, aber unter der mitgelieferten OID im 99_myUtils kommt immer nur "absent"


DEF 
function {snmpCheck("10.68.0.1","0x34a395d6843a")} 15 15

MODE function

NAME iPhone

NOTIFYDEV global

NTFY_ORDER 50-iPhone

STATE absent

TIMEOUT_NORMAL 15
TIMEOUT_PRESENT 15

TYPE PRESENCE

Readings presence absent 2017-02-10 19:21:16
state absent


oder hab ich was übersehen?

raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

CoolTux

list vom Device bitte und die komplette Funktion die aufgerufen wird.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

australien

Hallo CoolTux

Danke für deine Hilfe, woher bekomme ich die "list vom Device"?


hier ist die 99_mmUtils


##############################################
# $Id: 99_Utils.pm 3595 $
package main;
use strict;
use warnings;
use POSIX;
use Net::SNMP;
use Data::Dumper;

sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# start with your own functions below this line
sub
snmpCheck($$)
{
  my ($airport,$client)= @_;

  my $community = "public";
  my $host = $airport;
  my $oid = ".1.3.6.1.4.1.14988.1.1.1.2.1.3";
  #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 %r = ();
  my $response = $session->get_next_request($oid);
  my @nextid = keys %$response;
  while ( $nextid[0] =~ m/^$oid/ ) {
    @r{ keys %$response } = values %$response;

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

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

  return 0;
}

1;
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

CoolTux

In der FHEM Kommandozeile list iPhone eingeben.
Bau Dir in Deine Funktion Logausgaben ein. Kannst du am einfachsten mit printf machen. Die Ausgabe erscheint dann im fhem Log.
Ich gehe davon aus das Du Deine Funktion kennst. Schaue also wo er hängt. Der Socketaufbau funktioniert?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

australien

die list ist

Internals:
   DEF        function {snmpCheck("10.68.0.1","0x34a395b6843f")} 15 15
   MODE       function
   NAME       iPhone
   NOTIFYDEV  global
   NR         111
   NTFY_ORDER 50-iPhone_Robert_orig
   STATE      absent
   TIMEOUT_NORMAL 15
   TIMEOUT_PRESENT 15
   TYPE       PRESENCE
   Readings:
     2017-02-10 20:24:45   presence        absent
     2017-02-10 20:24:45   state           absent
   Helper:
     ABSENT_COUNT 0
     call       {snmpCheck("10.68.0.1","0x34a395b6843f")}
Attributes:
   room       Anwesenheit
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"