Anwesenheit mit precence: 2 Handys per Bluetooth und WLAN

Begonnen von Mazz78, 20 Oktober 2016, 22:20:58

Vorheriges Thema - Nächstes Thema

Mazz78

Hi zusammen,

um diverse Aktoren anzusprechen, möchte ich mit dem precence-Modul die Anwesenheit von 2 Handys detektieren.
Zur "Ausfallsicherheit" jeweils per Bluetooth-MAC und WLAN-MAC.

Dafür hab ich per Google folgenden Code gefunden, der eigentlich ganz gut für mich passt.

# Bluetooth MAC-Adresse angeben:
define Handy_Nico PRESENCE local-bluetooth C0:00:05:AB:88:2B 10 60

# Dummy definieren als Zuhause-Erkennung
define Nico_Zuhause dummy

# Nico_Zuhause auf on setzen bei Anwesenheit
define Nico_Zuhause_Anwesend notify Handy_Nico:present { if (Value("Nico_Zuhause") ne "on") {\ fhem("set Nico_Zuhause on ;; setstate watchdog_Handy_Nico_Abwesend defined");;\ }}

# Nico_Zuhause auf off setzen nach 5 Minuten Abwesenheit
define watchdog_Handy_Nico_Abwesend watchdog Handy_Nico:absent 00:05 Handy_Nico:present set Nico_Zuhause off
attr watchdog_Handy_Nico_Abwesend regexp1WontReactivate 1


Nun hab ich aber statt der einen oben genannten BT-MAC, folgenden Devices:


define Handy_1_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_2_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_1_BT PRESENCE local-bluetooth 8C:xx:xx:xx:xx:xx 60
define Handy_2_BT PRESENCE local-bluetooth D8:xx:xx:xx:xx:xx 60


Ich muss zugeben, dass ich mit der Anpassung auf meine Gegebenheiten etwas überfordert bin.
Kann mir jemand "Starthilfe" geben, wie ich den oberen Code anpassen kann?

Grüße
Sven
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

Devender

Hi Sven,

Du könntest deine beiden Devices (handy1 WLAN und BT) in einer structure

Define structure_present_Nico structure HandyBT HandyWlan
zusammenfassen.
Deine Anwesenheit dann darauf steuern, dass die structure present ist.
Sprich BT oder WLan müssen an sein , dann structure = present

Statt Handy_Nico nimmt du dann z.B structure_present_Nico

Gruesse,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Otto123

Hallo Sven,

als generelle Starthilfe --> http://heinz-otto.blogspot.de/2016/01/anwesenheitserkennung.html

Da hatte ich meine Überlegungen mal aufgeschrieben. Und so habe ich es auch realisiert.

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

Hollo

Zitat von: Mazz78 am 20 Oktober 2016, 22:20:58
...
Kann mir jemand "Starthilfe" geben, wie ich den oberen Code anpassen kann?
Den Anfang hast Du ja bereits mit Deinen 2x2 Presence-Abfragen.
Diese solltest Du mit dem "neuen" Attribut absenceThreshold erweitern, dann kannst Du Dir den watchdog sparen.

Anschliessend packst Du alle 4 in eine "structure" (z.B. Bewohner) zusammen.
Wichtig sind hierbei dann die Argumente.
attr Bewohner clientstate_behavior relativeKnown
attr Bewohner clientstate_priority anwesend|present abwesend|absent|maybe.*

Bedeutet dann... sobald irgendeiner da ist, ist halt jemand da; erst wenn der letzte weg ist, ist auch wirklich keiner mehr da.  ;D

Die commandref zu "presence" und "structure" sollte Dir da weiterhelfen; sonst gucken wir noch mal nach Deinem Code.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Mazz78

WOW    :-[

Das ist jetzt echt einiges an Futter.  Das muss ich jetzt erst mal alles durchackern.

Das "structure" hab ich beim googlen auch ein paar mal gesehen, bin aber nicht wirklich schlau draus geworden. Da wusste ich aber auch noch nicht ob das für mich überhaupt tauglich ist.

Danke mal an alle für eure Vorschläge.
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

Mazz78

#5
So würde der Code im Moment aussehen...
Sieht gar nicht schlecht aus, aber ich kann`s grad nicht testen. Mir fehlt grad das Handy meiner Frau  ;D


define Handy_1_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_2_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_1_BT PRESENCE local-bluetooth 8C:xx:xx:xx:xx:xx 60
define Handy_2_BT PRESENCE local-bluetooth D8:xx:xx:xx:xx:xx 60

define structure_Bewohner structure Handy_1_IP Handy_1_BT Handy_2_IP Handy_2_BT
attr structure_Bewohner clientstate_behavior relativeKnown
attr structure_Bewohner clientstate_priority present|anwesend absent|abwesend|maybe.*
attr structure_Bewohner event-on-change-reading state

define jemand_anwesend dummy
attr jemand_anwesend eventMap present:jemand_daheim absent:niemand_daheim

define doif_structure_Bewohner DOIF ([structure_Bewohner] eq "absent")(set jemand_anwesend absent) DOELSEIF ([structure_Bewohner] eq "present")(set jemand_anwesend present) 
attr doif_structure_Bewohner wait 10


Da hab ich aber noch ein paar Fragen:

1. für was ist das |maybe.* ?
Zitatattr structure_Bewohner clientstate_priority present|anwesend absent|abwesend|maybe.*

2. der Dummy jemand_anwesend...
   - kann ich dafür nicht ein eventMap vergeben? So funktioniert`s nicht...
    attr jemand_anwesend eventMap present:jemand_daheim absent:niemand_daheim

   - brauch ich da kein... event-on-change-reading state

Grüße
Sven
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

Brice

Das wird schon wegen der fehlerhaften Structure-Definition (struct_type) nicht zufriedenstellend funktionieren.

Maybe macht nur Sinn, wenn du die Attribute absenceThreshold vergibst.
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

Otto123

Hallo Mazz78,

meine Empfehlung wäre ja: mach es doch erstmal so einfach wie möglich um das Prinzip zu verstehen, kompliziert kann es später immer noch werden. Man muss nicht alle Features verwenden und einbauen. Mit meinem verlinkten Beitrag hättest Du alles durchspielen können - ohne das Handy Deiner Frau  ;)

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

Thyraz

Anstatt structure kann man auch Residents + Roommates verwenden und deren Status über die Events von Bluetooth und Wlan Erkennung entsprechend steuern.

Ich verwende das um Geofency und BT Erkennung zu mixen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Hollo

Zitat von: Mazz78 am 22 Oktober 2016, 00:27:52
So würde der Code im Moment aussehen...
Sieht gar nicht schlecht aus, ...
Doch, denn Du probierst wild aus, anstatt die Tipps umzusetzen.

Wozu plötzlich nen zusätzlichen Dummy und Doif?
Hast Du mal die commandref zu presence und structure gelesen?
Dazu brauchst Du dann nur noch ein notify auf die structure und fertig.

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Mazz78

Hallo zusammen,

zuerst einmal möchte ich erwähnen, dass ich als Anfänger und ProgrammierNull für jede erdenkliche Hilfe dankbar bin und auch durchaus gerne bereit bin mir Dinge zu erarbeiten. Deshalb hab ich mich auch für Fhem entschieden.
Aber wie gesagt bin ich eben kein Programmierer, und gutgemeinte Hilfen die euch logisch erscheinen, sind für einen Anfänger eben oft nicht so ersichtlich. Und "mach doch einfach", ist eben oft nicht einfach.

Zitat
Doch, denn Du probierst wild aus, anstatt die Tipps umzusetzen.

Wozu plötzlich nen zusätzlichen Dummy und Doif?
Hast Du mal die commandref zu presence und structure gelesen?
Dazu brauchst Du dann nur noch ein notify auf die structure und fertig.

Ja richtig, ich probiere mit meinen Möglichkeiten das Beste daraus zu machen. Und das Beispiel von Otto (DANKE an dieser Stelle) enthällt nunmal ein DOIF und ein Dummy.
Und ja, ich habe die commandref gelesen.
Ein notify hatte ich schon in der Eröffnung genannt, aber wenn ich gewusst hätte wie ich es auf mich anpasse hätte ich es schon umgesetzt.

@ Otto
Abgesehen davon, dass ich statt den Dummys Dev11/12 die 2x2 Precence hab, ist das doch dein Code, oder?   :-[
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA

Otto123

Hi,
Du hast vielleicht Teile meines Codes verwendet, aber das ist noch nicht mal die Idee die bei mir dahinter steckt.

Zum 1.: maybe.* kommt bei mir nicht vor.
Zum 2. mein Grundansatz war: Die Geräte einer Person erstmal mit Dummys simulieren, die restliche Struktur aber schon komplett aufbauen! Du beginnst mit der presence des Handys Deiner Frau die nicht da ist  :o

Mein im Artikel abgebildeter Code behandelt erstmal eine Person, Du machst daraus gleich alle Bewohner.

Ok, offenbar habe ich es doch nicht allgemeinverständlich beschrieben  :'(
Ich gebe zu, ich habe eine Weile gebraucht eh ich zu diesem Konstrukt gekommen bin, aber es funktioniert und lässt sich zuverlässig skalieren.

Die Kernbeschreibung zu meinem Code ist die hier, besser als in meinem Artikel fällt es mir auch jetzt nicht ein.
ZitatErkennung von Personen
Die Person selbst wird durch einen dummy device erzeugt. Diese zusätzliche Geräteinstanz ist nötig um einen gewisse Toleranz bei Abwesenheit zu erzeugen (Neustart Gerät, mal kurz im Keller oder vorm Haus usw.) D.h. die Gerätegruppe (structure) wird abgefragt und entsprechend ein dummy gesetzt. Wird die structure als present erkannt, ist jemand gekommen und der Status des dummy wird sofort gesetzt. Wird die structure als absent erkannt, wird eine gewisse Zeit gewartet. Sollte die structure nicht zurück auf present gesetzt werden, wird der Status auf absent gesetzt. Typischerweise nimmt man dafür eine watchdog Funktion. Diese lässt sich ziemlich einfach mit einem DOIF realisieren.

Alle Bewohner des Hauses werden dann einfach noch in einer Structur zusammengefasst.
Vielleicht wird es so klarer?
Dev1 -> (Dev Structur) -> Person1 (Dummy+watchdog) -> alle Bewohner (Structur)
Dev2 -> |                                                                         |
                                                                                       |
Dev3 -> (Dev Structur) -> Person2 (Dummy+watchdog) -> |
Dev4 -> |
                                 
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

Hollo

Zitat von: Mazz78 am 22 Oktober 2016, 23:54:57
...
Ja richtig, ich probiere mit meinen Möglichkeiten das Beste daraus zu machen. Und das Beispiel von Otto (DANKE an dieser Stelle) enthällt nunmal ein DOIF und ein Dummy.
Und ja, ich habe die commandref gelesen...
Das sollte auch keine Meckerei sein, sondern nochmal der Hinweis klein anzufangen.
Du bekommst hier oft mehrere Lösungswege als Hilfe angeboten.
Guck Dir die an und entscheide, was für Dich am ehesten verständlich ist.
Alle Wege gleichzeitig zu probieren, führt meist eher zu Frustration als zum Erfolg.

Ich bin auch kein Programmierer und habe bei FHEM ganz simpel angefangen und dann die Funktionen Stück für Stück erweitert und/oder verbessert, wenn mir was auffiel. Manche Fehler oder Konstrukte habe ich anfangs (oder auch bis heute) gar nicht verstanden und dann sieht man "den Wald vor Bäumen nicht".

Du hast 2 Presence-Abfragen pro Handy.
Kontrolliere also zunächst (im Webinterface), ob diese nach Deinen Vorstellungen korrekt funktionieren.
Danach packst Du diese 4 zusammen in die structure und guckst, ob die richtig funktioniert.
Wenn das alles passt, fehlt Dir nur noch (per notify oder DOIF) das was gemacht werden soll, wenn jemand nach Hause kommt bzw. der letzte das Haus verlässt.

Poste doch mal Deinen aktuellen Stand und wo es hakt bzw. wo Du noch Verständnisprobleme hast.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Mazz78

#13
Hallo zusammen,

da ich auch immer froh bin zu erfahren, wie sich ein Problemfall schlussendlich gelöst hat, hier mein aktueller Code (der sich noch bewähren muss).

Das Beispiel von Otto mit dem DOIF konnte ich persönlich am besten nachvollziehen.

Ich hatte einige Tage das Problem, dass der Presence-state des Handy_1_IP zwar richtig erkannt wurde, aber das structure war davon recht unbeeindruckt und hat das ignoriert.
Sprich Handy_1_BT, Handy_2_IP und Handy_2_BT hatten den state absent, dann wechselte das structure auch auf absent obwohl Handy_1_IP noch present war.
Ich habe lange herum probiert und irgendwann die Handys im structure getauscht, was dann zum Erfolg geführt hat. Fragt mich nicht warum  ???

vorher:

define structure_Bewohner structure Bewohner Handy_1_IP Handy_1_BT Handy_2_IP Handy_2_BT

nachher:

define structure_Bewohner structure Bewohner Handy_2_IP Handy_2_BT Handy_1_IP Handy_1_BT


Achja... und wer von euch -so wie ich- vielleicht mal beim Ausprobieren vor dem Bildschirm sitzt und die States seiner Presences beobachtet und sich dabei denkt: "So eine Sch... das kann doch nicht sein", dem hilft vielleicht ein gelegentliches "F5"  ;D


define Handy_1_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_2_IP PRESENCE lan-ping 192.xxx.xxx.xx 60
define Handy_1_BT PRESENCE local-bluetooth 8C:xx:xx:xx:xx:xx 60
define Handy_2_BT PRESENCE local-bluetooth D8:xx:xx:xx:xx:xx 60

define structure_Bewohner structure Bewohner Handy_1_IP Handy_1_BT Handy_2_IP Handy_2_BT
attr structure_Bewohner clientstate_behavior relative
attr structure_Bewohner clientstate_priority present|1 absent|0
attr structure_Bewohner event-on-change-reading state
attr structure_Bewohner room Anwesenheit

define doif_structure_Bewohner DOIF ([structure_Bewohner] eq "absent")(set jemand_anwesend absent) DOELSEIF ([structure_Bewohner] eq "present")(set jemand_anwesend present)
attr doif_structure_Bewohner room Anwesenheit
attr doif_structure_Bewohner wait 10

define jemand_anwesend dummy
attr jemand_anwesend devStateIcon absent:status_away_2 present:status_available
attr jemand_anwesend room Anwesenheit


Grüße
Sven
RaPi 4 / Buster / FHEM 6
CUL868 / JeeLink868
Banana M1 (Bananian) + ser2net + Stiebel Eltron LWZ403
FIRMATA -> Gartenbewässerung /-licht
ALEXA