An-/Abwesenheitserkennung mit WLAN und Fritz!Box

Begonnen von borsti67, 25 Juli 2015, 21:21:04

Vorheriges Thema - Nächstes Thema

Nitaro

#180
Hallo zusammen,

erstmal Danke für super Lösung.

Ich habe sie heute "eingebaut" und getestet. Mir ist dabei folgendes aufgefallen:
Wenn ich mein Device in den Flugmodus versetze, ändert sich das Reading oft in
mac_XX_XX_XX_XX_XX_XX  MeinDevice (WLAN, 0 / 0 Mbit/s, 0)
und verweilt so. Es springt nicht auf "inactive" oder verschwindet. Der Status bleibt
somit "present".

Ich verwende eine FB 7580 Fritz!OS 7.10 und einen Fritz Repeater 1750 im Mesh.
Ich bin absolut kein Programierer, daher meine Frage, könnt ihr das einbauen dass der Status
auf "absent" springt wenn das Reading wie oben aussieht.

Gruß
Nitaro

Otto123

#181
Hi nitaro,

im Wiki steht doch dafür die Lösung?
https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_.C3.BCber_mehrere_Fritzboxen_oder_AVM_Repeater_und_Fritzbox
Wenn Du dazu noch Fragen hast, musst Du konkret deine Konfiguration posten, hier im Thread gab es gefühlt 1000 Lösungen. Ich verwende das so schon lange nicht mehr, werde aber versuchen zu helfen.


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

Nitaro

Guten Morgen Otto123,

vielen Dank, da habe ich tatsächlich nicht aufmerksam genug gelesen.
Was oder wie verwendest du das denn inzwischen ?

Gruß
Nitaro

Otto123

Moin,

primär mach ich Anwesenheit über Bluetooth. Die Fritzbox macht bei mir kein Wlan / LAN mehr, das macht ein WRT1900ACS mit OpenWrt.

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

smile7779

Hallo zusammen,
habe jetzt doch noch mal eine Frage  ;) Ich hatte bei der An./Abwesenheitserkennung aktuelle Daten bis 28.04.2019. Leider tut sich da nichts mehr bzgl. Aktualisierung. Hat da jemand schon einmal das gleiche Problem gehabt? Bekomme bei STATE immer folgende Meldung: Didn't get a session ID. Meine 99my_Utils.pm habe ich auch noch einmal beigelegt. Stimmen die Einstellungen darin? Und wo trage ich diesen Code ein: my $StatusFritz = ReadingsVal($_, $MAC, "weg");
if ($StatusFritz eq "weg") {
} elsif ($StatusFritz eq "inactive") {
} elsif ($StatusFritz =~ /(.*)s, 0/) {
                # Dieser Zweig testet auf "<geraetename> (WLAN, 0 / 0 Mbit/s, 0)"
} else {
  $Status = 1;
}


ich denke der gehört in 99_myUtils.pm, oder?

Internals:
   APICHECKED 1
   DEF        192.168.178.1
   HOST       192.168.178.1
   INTERVAL   60
   LUAQUERY   1
   M3U_LOCAL  ./www/images/FritzAnwesenheit.m3u
   M3U_URL    unknown
   MODEL      FRITZ!Box 5490
   NAME       FritzAnwesenheit
   NR         80
   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:
     2019-04-28 20:58:17   alarm1          Wecker 1
     2019-04-28 20:58:17   alarm1_state    off
     2019-04-28 20:58:17   alarm1_target   FON 1
     2019-04-28 20:58:17   alarm1_time     00:00


############################################################
########      presence über FRITZBOX            ############
############################################################

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 4, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}
}


Vielen Dank und schönen Feiertag :D

Razor

Hallo, ich versuche geade die Lösung nachzuvollziehen und habe mir eine 99my_Utils.pm erzeugt, dort steht bisher
##############################################
# $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.


1;


drin, liege ich da richtig, dass ich diesen Inhalt lösche und durch die hier beschriebenen ############################################################
########      presence über FRITZBOX            ############
############################################################

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 4, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}
ersetzte und anpasse auf meine Geräte?

Danke

Frank_Huber

Was hiervon verstehst du nicht?

# Enter you functions below _this_ line.

Gesendet von meinem Doogee S60 mit Tapatalk


Razor


Frank_Huber

[emoji1360]
Also nix löschen, nur einfügen.

Gesendet von meinem Doogee S60 mit Tapatalk


Otto123

Hallo  smile7779,

primär arbeitet dein Fritzbox Modul nicht. Es kann sich offenbar nicht mit der Box verbinden. Was ist am 29.4. passiert? Update FHEM? Update Fritzbox?
Schon mal beides neu gestartet?

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

Christian72D

Ich arbeite auch mit dem "checkFritzMACpresent" Funktion, läuft auch super.

Aber kann man es verhindern, daß sie den Status immer neu setzt? Ich würde gerne ein DOIF auf den Residents Status laufen lassen, aber komischerweise ignoriert dieses das "event on change" attribut. Ich vermute, daß es damit zusammenhängt, daß der Status immer neu geschrieben wird.

2020.03.22 09:56:07 2: ROOMMATE set Christian home
2020.03.22 09:56:17 2: ROOMMATE set Christian home
2020.03.22 09:58:07 2: ROOMMATE set Christian home
2020.03.22 09:58:17 2: ROOMMATE set Christian home
2020.03.22 10:00:07 2: ROOMMATE set Christian home
2020.03.22 10:00:17 2: ROOMMATE set Christian home
2020.03.22 10:02:07 2: ROOMMATE set Christian home
2020.03.22 10:02:17 2: ROOMMATE set Christian home
2020.03.22 10:04:07 2: ROOMMATE set Christian home
2020.03.22 10:04:17 2: ROOMMATE set Christian home
2020.03.22 10:06:07 2: ROOMMATE set Christian home
2020.03.22 10:06:17 2: ROOMMATE set Christian home
2020.03.22 10:08:07 2: ROOMMATE set Christian home
2020.03.22 10:08:17 2: ROOMMATE set Christian home

juemuc

Du must do always setzen.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Otto123

Eigenartig finde ich das Zeitraster:
Zitat2020.03.22 09:56:07 2: ROOMMATE set Christian home
2020.03.22 09:56:17 2: ROOMMATE set Christian home
2020.03.22 09:58:07 2: ROOMMATE set Christian home
2020.03.22 09:58:17 2: ROOMMATE set Christian home
nach 10 sec
alle 2 min bzw. nach 1:50

Wie kommt das? Ob das alles was mit diesem Thread und dieser Funktion checkFritzMACpresent zu tun hat?
do always dürfte erstmal nicht helfen  :-X
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

Christian72D

Zitat von: Otto123 am 22 März 2020, 10:40:25
Eigenartig finde ich das Zeitraster:nach 10 sec
alle 2 min bzw. nach 1:50

Wie kommt das? Ob das alles was mit diesem Thread und dieser Funktion checkFritzMACpresent zu tun hat?
do always dürfte erstmal nicht helfen  :-X

Der zweite Eintrag jeweils dürfte von der BTLE Erkenung kommen, ich wollte mich um eine Sache nach der anderen kümmern.

An einem fehlenden "DO always" denke ich auch nicht, daß es daran liegt. Wäre sonst wohl auch im Wiki angemerkt.

SirBen

Moin,
wollte kurz Bescheid geben, dass der Code im Wiki fehlerhaft ist. Es fehlt eine Klammer.
Das hier steht im Wiki:
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($d),
  #           zu suchende MAC ($m),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($d,$m) = @_;
  $m =~ s/:/_/g;
  $m = "mac_".uc($m);
  return ReadingsVal($d,$m,"inactive") ne "inactive") ? 1 : 0;
}


Die Klammer vor ReadingsVal fehlt.

Ansonsten funktioniert der Code super!

Gruß Ben