UPDATE 2014-02-24: neues Modul
Hallo Leute,
im Zuge des "ich lerne mal ein Modul Programmieren" ist bei mir ein Modul entstanden, welches die Anwesenheit von Devices im LAN/WLAN prüft. Toll werdet ihr sagen, aber warum noch eines. Es gibt doch das PRSENCE Modul?
Dies soll auch keine Konkurrenz zu Presence sein sondern ich möchte das Modul hier mal zur Diskussion stellen.
Das Modul läuft nur, wenn FHEM auf der Fritzbox installiert ist.
Das Modul kann via dem attribut devicetype zwischen ios und others unterscheiden. Im Prinzip ganz einfach: bei den iPhones muß man ja dem Telefon quasi beweisen, dass es noch da ist, obwohl es z.B. nicht mehr auf Ping antwortet. Bei others (ganz speziell Android), sind die so geschwätzig, dass man eher sicher stellen muß, dass man absent richtig erkannt hat. Je nach Stellung dieses Attributes werden unterschiedliche Algorythmen zur Anwesenheitserkennung gefahren.
iOS:im Prinzip vier Stufen:
i.) wenn es auf Ping antwortet ist es present
ii.) wenn kein Ping, aber beim letzten mal Ping und active=1, dann ebenfalls present, aber interner Level "unsure"
iii.) wenn alle auf 0 sind, dann immer noch present, aber interner level "preabsent". Dieser Zustand wird nun 5 Minuten lang überwacht. Wenn in den 5 Min. keine Aktivität kam, dann ist das Handy wohl nicht zu Hause ->absent.
iv.) absent
Dies dient dazu, die 'lustige' Funktion der iPhones das WLAN auszuschalten auszutricksen. Seiteneffekt ist halt, dass es 5 Min. länger dauert bis es von present->absent geht.
absent->present geht sofort (je nach Wert in timerabsent; wenn timerabsent=30, dann dauert es maximal 30 Sek. bis das Handy erfasst wurde)
othersDas Modul überprüft, ob ein Gerät auf einen Ping antwortet, es wertet die beiden Device Bits 'active' und 'online' auf der Fritzbox aus und es wertet die Verbindungsgeschwindigkeit aus. Aus all diesen vier Rückmeldungen zieht es dann Schlüsse, ob das Gerät da ist oder nicht.
Dabei kann man mit dem attribut 'checking' drei Modi wählen:
ultra: es müssen alle vier Bedingungen erfüllt sein, damit das Device als present gilt
verbose: es muß entweder auf einen Ping antworten, oder active UND online gesetzt oder die Verbindungsgeschwindigkeit > 0 sein
relaxed: eine der vier Bedingungen muß erfüllt sein.
Die Abfrageintervalle setzt man mit den Attributen 'timerpresent' und 'timerabsent'. Falls nicht gesetzt werden standardmässig alle 120 Sekunden gepollt.
Das Attribut pingmode bestimmt die Art und Weise, wie der Ping ausgeführt wird: busybox nutzt den Fritzbox command, netping nutzt die Perl Implementierung. Einen Unterschied in den Resultaten konnte ich allerdings nicht ausmachen. Perl Mode ist halt einfacher im Code, da direkt 0|1 zurück gegeben wird
Das Attribut pingcount ist die Anzahl der Ping Messages die raus gehen. Je höher die Zahl, desto zuverlässiger aber auch desto länger die Laufzeit (FHEM steht zu diesem Zeitpunkt).
Anlegen kann man so ein Device mittels
define <fhemname> FB_PRESENCE <fritzbox-device-name>
Wobei fritzbox-device-name der Name des Gerätes ist, wie er in der Fritzbox Konfiguration angegeben wurde. Das Modul sucht sich dann die zugehörigen Informationen wie IP und MAC selbst heraus.
Zitatdefine myfone FB_PRESENCE TEL-Lisa
Set und Get gibt es bei dem Modul nicht.
Wie gesagt, ich wollte das hier mal zur Diskussion stellen, da es mich selbst überascht hat, wie gut dieses Verfahren auch bei iOS Devices funktioniert.
ich freue mich natürlich auch über Kommentare à lá "was soll der Mist"
Wer einen Bug findet, immer gerne her damit. Ich versuche das dann zu beheben.
----------------------------------------------
vergleich zu 73_PRESENCE.pm
- läuft nur wenn FHEM auf Fritzbox ist und FHEM root ist (also nicht mit AVM Image)
+ wertet mehrere Kriterien aus
+ egal ob das Gerät am WLAN der FB oder an einem Access Point dran ist
----------------------------------------------
Zukunft:
- die iPhones scheinen einen festen Rhytmus zu haben, wann sie das WLAN einschalten. Durch Variation der eigenen Aufruffrequenz möchte ich versuchen, diesen Rhythmus genau zu treffen. Falls jemand Infos hat, wie der Rhytmus ist, dann gerne her damit.
wenn ich nämlich zufällig mal den Rhytmus erwischt habe, antwortet es immer (!) über Stunden hinweg auch Nachts auf den Ping.
- NightWatch: einen Zeitraum einzuführen (z.B. 22:00h bis 6:00h) bei dem man zu 99% davon ausgehen kann, dass das Telephon zu Hause ist
Hi,
ich finds gut, dass du was gemacht hast und das hier zur Verfügung stellst :)
Habe selber Schwierigkeiten mit der Erkennung über die Fritzbox und verwende deswegen lan-ping.
Meiner Meinung nach solltest du das Modul aber so universell wie möglich halten, z.B. noch einbauen, dass es erkennt, ob es auf der Fritzbox läuft, und wenn nicht, ... eben nur über ping ... oder so ähnlich funktioniert, je nachdem, was sich realisieren lässt :-)
Soweit erstmal, werds mir bei Gelegenheit mal anschauen und testen ;-)
lg
stephan
Hi,
das Modul erkennt bereits ob es auf der Fritzbox läuft und auch ob FHEM unter root läuft. Sollte das nicht der Fall sein, so lässt sich das Element nicht anlegen.
Der Vorschlag von Dir würde dann bedeuten, dass das Modul nur im lan-ping Modus läuft, der ja identisch zum existierenden PRESENCE Modul ist.
Im Prinzip ist ein Teil der Funktionalität des Modules (theoretisch) auf mit der PESENCE und einer structure lösbar:
für das gleiche Gerät werden drei PRESENCE angelegt. Einmal mit lan-ping, einmal mit fritzbox (hier aber nur Auswertung eines Bits; nicht active und online) sowie fritzbox mit dem fritzbox-repeater attribut gesetzt. Die structure fasst dann alle drei Devices zusammen.
Persönlich habe ich aber den Eindruck, dass structure nicht funktioniert: irgendwie werde ich den Eindruck nicht los, dass immer das letzte Device der structure, welches einen Update des state gemacht hat dann durch kommt.
Mein Modul geht in diesem Setup sowohl mit Repeater als auch mit weiteren Access Points. Ich betreieb bei mir im Haus neben der Fritzbox noch zwei Access Points, die die gleiche WLAN SSID haben. Dies erkennt das Modul auch (durch Auswertung von online und active).
Sollte das Device an einem Repeater eingeloggt sein, so wird es durch die Auswertung von speed erkannt.
Wer sich also oft mit dem Gerät durch das Haus bewegt und sich somit von einem AP oder Repeater zum nächsten (automatisch) verbindet hat hier nun eine Lösung, die den Zustand trotzdem sauber erkennt. Zumindest bei mir tut es so :-)
Du kannst bei der Structure einstellen, wie sie reagieren soll ... bei mir klappt das eigentlich ganz gut. Ich habe das so, dass sie ihren Status erst ändert, wenn alle Geräte Offline sind, und dann das Haus abschaltet.
http://fhem.de/commandref.html#structure
Aber gut, dann trifft es mein Einsatzgebiet wohl doch nicht ganz, da ich nur einen einzigen AP habe (die Fbox) ;-)
lg
stephan
ist zwar ein bisschen Off-Topic, aber ich habe mir mal spasseshalber drei dummys angelegt und diese in einer structure zusammengefasst. strucure ist wie folgt definiert:
define mytest structure dummy01 dummy02 dummy03
attr mytest clientstate_behavior relative
attr mytest clientstate_priority on|on off|off
Alle dummy haben even-on-change gesetzt (ist aber egal, da der Effekt der gleiche ist). Resultat: der letzte dummy, der geändert wird setzt die structure. Sprich es können 2 von 3 auf on sein, wenn die letzte Änderung off ist, dann ist die structure off. Wie gesagt habe ich mir den Code des structure Moduls nicht angesehen und kann also auch nicht sagen, warum das dass Problem ist
Hi,
ich finde das Modul super! Nur ein Feature würde ich gerne zusätzlich haben:
Eine Auswahl welche Bedingung erfüllt sein müssen oder einen zusätzlichen Modus, bei dem Active, Pingonline und Speed ausgewertet werden (ohne Online, da einige Geräte für falsche Informationen sorgen).
Gruß Arek
Hi,
sorry, ich habe komplett vergessen auf deine Frage zu antworten. Jetzt aber ...
Die Idee ist gut, die Auswertung des 'online' optional zu machen. Das setzte ich mal so um und stelle es dieser Tage hier bereit.
Hi, bin durch Zufall über dein Modul gestossen und muss sagen richtig gut.
Ich habe das Problem, das ich auswerten will ob mein tv läuft oder nicht, da der TV nicht anpingbar ist und über einen repeater im Netz hängt, habe die anderen Lösungen nie zum Erfolg geführt.
Das einzige was mich stört, ist das die Fritzbox den TV immer länger online sieht, als er in Wirklichkeit ist. Hier sollte es noch eine Lösung geben, bzw die Attribute eine Möglichkeit nur bestimmte stati abzufragen, da reicht ultra, verbose etc. Nicht aus
Hi,
Dass die FB die Devices länger online sieht kann ich in dem Modul auch nicht lösen, da das online Bit zum Teil noch deutlich nach Ausschalten des Gerätes auf 1 steht. Versuch mal mit dem Attribut devicetype auf other.
Habe dein Modul gerade installiert, da ich 2 iOS Geräte habe, von denen eines über die normale Fritzbox Presence Methode irgendwie nicht den korrekten Status anzeigt!
Leider spuckt das Modul beim Definieren für beide Geräte den Fehler aus, dass die Devices in der FB nicht gefunden wurden. Aber sie heißen so, haben eine feste IP etc.!
Wo kann der Fehler liegen?
define Michael_PRESENCE_FB FB_PRESENCE iphone-4S-Michael
attr Michael_PRESENCE_FB room Haus
define Marina_PRESENCE_FB FB_PRESENCE iphone-4-Marina
attr Marina_PRESENCE_FB room Haus
keine Ahnung wor der Fehler liegt. Ohne Logfile oder so ist es halt schwierig
Nutze mal bitte die angehängte Version des Moduls und setzet das attribute verbose auf 5. Dann definierst Du nochmal die Geräte und postest den relevante Logfile Teil hier. Dann können wir mal schauen
Hallo,
ich habe das Modul ausprobiert, und es funktioniert super auch wenn jemand im GastNetz eingelogged ist.
Aber das Modul ist 'blocking' der HMLAN steigt immer aus.
Schade!
Gruss, Ingolf
Wegen dem HM-LAN: das kann ich so nicht nachvollziehen, da es bei mir genauso mit hm-lan seit Monaten läuft.
Aus Erfahrung kann ich sagen, dass der hm-lan bei zu großer Rechenlast des fhem Rechners aussteigt.
Hi,
ich habe das Modul nicht im Einsatz, sondern mein FHEM (nicht auf FB) bekommt vom Linux-Router via Telnet einen Trigger, wenn sich die MAC vom Handy in das WLAN verbindet (Anwesenheit). Damit möchte ich mir das Gepinge sparen. Klappt auch gut, nur mein Problem: Wenn das Android-Handy im Tiefschlaf ist, verbindet es sich nicht mit dem WLAN, wenn es in den Bereich kommt. WLAN im Standby ist aktiv, aber durch den Tiefschlaf bekommt es nichts mit.
Hast jemand mit dem Modul FB_Presence auch solche Probleme bei Android-Geräten? Ein Ping würde das Device ja auch nicht aufwecken.
Sorry, vielleicht etwas themenfremd.
lg
aeronaut