(Gelöst) Benötige Hilfe beim PRESENCE

Begonnen von misux, 29 März 2018, 12:03:43

Vorheriges Thema - Nächstes Thema

misux

HI!!

Ich versuche mich mit dem PRESENCE Modul und der erkennung der mac Adressen im Fritzbos Natzwerk.

Ich habe die 99_myUtils ergäntzt und ein PRESENCE Define erstellt. Leider bekomme ich kein Handy angezeigt, bzw keine Verbindung...

Kann bitte jemand helfen wo mein Fehler ist? Würde mich sehr über Hilfe freuen!

HIer die ergänzung des 99_myUtils

# Enter you functions below _this_ line.

######## Presence, nach vorhandenen ip/mac in der Fritzbox suchen ############

sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
  if ($StatusFritz eq "weg") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");
    $Status = 0;
  } elsif ($StatusFritz eq "inactive") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");
    $Status = 0;
  } else {
    # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.
    Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}


und ein List vom meinem Presende define:

ZitatInternals:
   DEF        function {checkFritzMACpresent("MyBasis","34:69:87:b7:ad:ee")} 60 60
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       function
   NAME       DavidHandy
   NOTIFYDEV  global
   NR         133
   NTFY_ORDER 50-DavidHandy
   STATE      absent
   TYPE       PRESENCE
   READINGS:
     2018-03-29 11:53:42   model           function
     2018-03-29 12:01:43   presence        absent
     2018-03-29 12:01:43   state           absent
   helper:
     ABSENT_COUNT 0
     call       {checkFritzMACpresent("MyBasis","34:69:87:b7:ad:ee")}
Attributes:
   room       PRESENCE

rabehd

ZitatPresence, nach vorhandenen ip/mac in der Fritzbox suchen
Sind die Handys dort aufgelistet?
Auch funktionierende Lösungen kann man hinterfragen.

Otto123

Hi,

deine 99_myUtils ist ansonsten "rund"? Hast Du da noch mehr drin was funktioniert? -> https://wiki.fhem.de/wiki/99_myUtils_anlegen

Was steht im FHEM Log?
In deinem Device MyBasis ist die Mac sichtbar? Eventuell list MyBasis

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

misux

Ähm... Muss ich denn MyBasis auch anlegen? Das ist meine Fritzbox...

In der Fritzbox ist natürlich mein Handy mit der Mac Adersse und der IP vorhanden.


Habe mich an diese Anleitung gehalten: https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_per_regelm.C3.A4.C3.9Figer_Abfrage_.C3.BCber_das_PRESENCE_Modul

Meine Utils sind nur mit einem email Modul belegt:

Zitat##############################################
# $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;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

######## Presence, nach vorhandenen ip/mac in der Fritzbox suchen ############

sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
  if ($StatusFritz eq "weg") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");
    $Status = 0;
  } elsif ($StatusFritz eq "inactive") {
    Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");
    $Status = 0;
  } else {
    # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.
    Log 1, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}

######## DebianMail  Mail auf dem RPi versenden ############
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "myhome\XXXXXXX";
my $konto = "myhome\XXXXXXXX";
my $passwrd = "XXXXXXX";
my $provider = "smtp.1und1.de:587";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
Log 1, "sendEmail Anhang: $attach";

$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a $attach -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=auto -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}

1;

rabehd

#4
ZitatMuss ich denn MyBasis auch anlegen? Das ist meine Fritzbox
:o :o :o

Und was übergibst Du Deiner Funktion?
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden


Ich habe nur Deinen Link angeklickt.
Du hast kein Fritzbox-Device und übergibst der Funktion was? 8)
Auch funktionierende Lösungen kann man hinterfragen.

Otto123

#5
Zitat von: misux am 29 März 2018, 12:56:32
Ähm... Muss ich denn MyBasis auch anlegen? Das ist meine Fritzbox...
Und Dein FritzBox Gerät heisst MyBasis?
Die Fritzbox muss als FHEM Gerät vorhanden sein!

Deine 99_myUtils ist in Ordung, ich wollte nur sichergehen, dass die Sub aufrufbar ist.

BTW: Du kannst auch die zweite Routine nehmen, die sucht automatisch alle vorhandenen Fritzbox Geräte ab.

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

rabehd

Toll wäre es wenn Du die Frage von Otto und mir beantworten würdest.

Ein list von MyBasis.
Der Nachweis, dass das Handy dort gelistet ist.
Wie rufst Du checkFritzMACpresent($$) auf?
Auch funktionierende Lösungen kann man hinterfragen.

misux

 :-\

Puh... Jetzt bin ich fertig... Also im geistigen Sinne...

Dann verstehe ich die Anleitung offensichtlich nicht... Irgendwie kapier ich nicht was da wie eingetragen sein soll:
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden


Also für einen Anfänger ist es etwas unkomplett geschrieben die Anleitung. Und das die Fritzbox auch als device angelegt werden muss habe ich da auch nicht gefunden...


ZitatUnd Dein FritzBox Gerät heisst MyBasis?
Die Fritzbox muss als FHEM Gerät vorhanden sein!

Deine 99_myUtils ist in Ordung, ich wollte nur sichergehen, dass die Sub aufrufbar ist.

BTW: Du kannst auch die zweite Routine nehmen, die sucht automatisch alle vorhandenen Fritzbox Geräte ab.

Ja, meine Fritzbox heist MyBasis.

OKAY, nun stehe ich aufm Schlauch... :-[


Otto123

Zitat aus der Anleitung
ZitatFritzboxen und die FRITZ!WLAN Repeater speichern den Status angemeldeter Geräte. Dieser Status lässt sich mittels des FRITZBOX Moduls über Readings abfragen, die das Format mac_AA_AA_AA_AA_AA_AA haben und die MAC-Adressen der jeweils angemeldeten Geräte (AA:AA:AA:AA:AA:AA) enthalten. Das Reading existiert, wenn das Gerät angemeldet ist. Wenn das Gerät abgemeldet ist, existiert es nicht mehr. Es gibt auch noch den Zwischenstatus "inactive", der anscheinend gesetzt wird, bevor das Reading gelöscht wird.

Du hast ein define MyBasis FRITZBOX <ip der fritzbox> in deinem FHEM?
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

misux

Verdammt! Habe es als mein Handy verstanden... Ich dachte das ist mein Handy... Also DavidHandy.. Oh mann....

Okay, ich muss jetzt mit Sohnemann zum Doc, dann mach ich das nochmal richtig  ::)


Otto123

#10
Wie gesagt: nimm einfach die zweite Variante, die sucht einfach nach der Fritzbox. Die trotzdem als FHEM Gerät da sein muss!

Hintergrund: Beide Lösungsvarianten sind in zeitlicher Abfolge entstanden und dokumentiert. Eigentlich könnte die erste weg  ;)

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

rabehd

Entweder
Du schreibst hier für mich zu wenig Infomationen.

Oder
Bei Dir herrscht "gefährliches" Halbwissen (Dein System würde ich gern mal kennenlernen)

am wahrscheinlichsten ist: Ich bin das Problem ???
Auch funktionierende Lösungen kann man hinterfragen.

misux

Zitat von: rabehd am 29 März 2018, 14:55:50
Entweder
Du schreibst hier für mich zu wenig Infomationen.

Oder
Bei Dir herrscht "gefährliches" Halbwissen (Dein System würde ich gern mal kennenlernen)

am wahrscheinlichsten ist: Ich bin das Problem ???

Oder es ist beides... oder alle 3... ;D

nee, ich habe die Anleitung falsch verstanden... Ich habe nicht die Fritzbox define`d sondern mein handy...

So nun habe ich die Fritzbox drin... und wider Probleme... Ich habe in 99_myUtils die 2te variante eingetragen... Ich habe es aber auch richtig verstanden: beim Eintrag der 99_myUtils muss ich NICHTS ändern oder?

Hier ein List der Fritzbox:

Internals:
   APICHECKED 1
   CFGFN     
   DEF        192.168.1.254
   HOST       192.168.1.254
   INTERVAL   300
   LUAQUERY   1
   M3U_LOCAL  ./www/images/MyBasis.m3u
   M3U_URL    unknown
   MODEL      FRITZ!Box 7590 (UI)
   NAME       MyBasis
   NR         3706
   PERL       Modul functionality limited because of missing perl modules: Net::Telnet Soap::Lite
   REMOTE     1
   STATE      Didn't get a session ID
   TELNET     -1
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   READINGS:
     2018-03-29 16:15:15   box_fwVersion   154.06.92
     2018-03-29 16:15:15   box_model       FRITZ!Box 7590 (UI) [1und1]
     2018-03-29 16:15:24   lastReadout     Didn't get a session ID
     2018-03-29 16:15:24   state           Didn't get a session ID
   fhem:
     LOCAL      0
     definedHost 192.168.1.254
     is_double_wlan -1
     lastHour   0
     modulVersion $Date: 2018-02-27 18:58:54 +0100 (Tue, 27 Feb 2018) $
     sidTime    0
   helper:
     TimerCmd   MyBasis.Cmd
     TimerReadout MyBasis.Readout
Attributes:
   room       PRESENCE


HIer mein Handy:

Internals:
   DEF        function {checkAllFritzMACpresent("34:69:87:b7:ad:ee")} 60 60
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       function
   NAME       DavidHandy
   NOTIFYDEV  global
   NR         133
   NTFY_ORDER 50-DavidHandy
   STATE      absent
   TYPE       PRESENCE
   READINGS:
     2018-03-29 16:10:26   model           function
     2018-03-29 16:17:27   presence        absent
     2018-03-29 16:17:27   state           absent
   helper:
     ABSENT_COUNT 0
     call       {checkAllFritzMACpresent("34:69:87:b7:ad:ee")}
Attributes:
   room       PRESENCE

rabehd

Zitatsub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),

Du übergibst aber nur die MAC-Adresse.

Zitat{checkAllFritzMACpresent("34:69:87:b7:ad:ee")}
Auch funktionierende Lösungen kann man hinterfragen.

Otto123

Augen auf:
Didn't get a session ID

Passwort gesetzt?

@rabehd - das ist bei der zweiten Version richtig!

Aber die Fritzbox in FHEM muss erstmal funktionieren, darauf baut ja der Rest auf.
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