FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: onkel-tobi am 10 Juli 2016, 11:56:54

Titel: DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 10 Juli 2016, 11:56:54
Hi zusammen,

irgendwie stehe ich mal wieder auf dem Schlauch. Ich verwende das FritzBox Modul und würde gerne mein Handy überwachen.
Sämtliche Fritz Repeater und die Fritzbox habe ich angelegt und bekomme die netsprechenden Readings.

Nun habe ich ein Test-DOIF definiert:
([fritz.repeater:mac_12_34_56_78_AA_AA] eq ".*WLAN.*")(set HandyTobi EG)
Melde ich mein Handy an, bekomme ich im Reading angezeigt:

e_fritz.repeater_mac_28_5A_EB_C9_E2_A0  HandyTobi (WLAN, 0 / 0 Mbit/s, 44)

Aber so klappt es aktuell noch nicht. Habe auch versucht das ganze per ReadingsVal zu checken, aber auch ohne Erfolg:

define di_HandyTobi DOIF ([ReadingsVal("Fritz.repeater", "mac_28_5A_EB_C9_E2_A0")] eq ".*WLAN.*") (set HandyTobi OG)

Hat noch jemand einen Tipp für mich, was ich falsch machen könnte?

Danke & Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: P.A.Trick am 10 Juli 2016, 12:05:46
Ich habe das so gelöst:

([Fritzbox:?mac_9C_35_EB_9D_7F_91])
(
set Handy_Patrick present, msginfo Patricks Handy ist verbunden!
)
DOELSE
(
set Handy_Patrick absent, msginfo Patricks Handy ist nicht verbunden!
)
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 10 Juli 2016, 19:38:34
Hi,

danke. Keine schlechte Idee, aber wenn man mehrere Fritz Geräte hat, erscheint das MAC Reading in jedem.
Da ich gerne auch wissen würde, mit welchem Repeater/Fritzbox ich verbunden bin, bringt mich das so nicht weiter :(

Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: Ellert am 10 Juli 2016, 20:08:55
Dann könntest Du mit einer anderen Form der Eventabfrage im DOIF arbeiten

["Fritzbox1|Fritzbox2|Fritzbox3:mac_9C_35_EB_9D_7F_91"]

$DEVICE liefert Dir den Gerätenamen.

Siehe http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 21 Juli 2016, 07:36:33
Hallo zusammen,

dass mit derr Anwesenheitserkennung per Etage habe ich folgendermaßen gelöst:

define di_HandySandra DOIF ([fritz.repeater:"mac_xxxx:.*WLAN.*"]) (set HandySandra EG) DOELSEIF ([FritzBox:"mac_xxxx:.*WLAN.*"]) (set HandySandra OG) DOELSEIF ([RepeaterSchlafi:"mac_xxxx:.*WLAN.*"]) (set HandySandra DG) DOELSE (set HandySandra abwesend)

Das funktioniert einwandfrei. Dann habe ich doif aufstehen und schlafen definiert.

Hier würde ich ganz gerne nur die Tür ab/auf zu schließen, wenn sie es nicht schon  ist ;)

Allerdings scheine ich da einen Denkfehler im DOIF zu haben? attr repeatsame hat auch nicht wirklich geholfen...


define di_aufstehen DOIF ([06:00-09:00] and ([eg_fl_door] ne "unlocked.*") and (([HandyTobi] eq "OG") or ([HandySandra] eq "OG"))) (set eg_fl_door unlock)
define di_schlafen DOIF ([20:00-03:00] and ([eg_fl_door] ne "locked.*") and (([HandyTobi] eq "DG") or ([HandySandra] eq "DG"))) (set eg_fl_door lock)


Danke & Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: Ellert am 21 Juli 2016, 16:00:55
Zuviele runde Klammern, nur die Roten sind notwendig. Zusätzlich würde ich das 2. DOIF in einen DOELSEIF-Zweig setzen.

Zitat([06:00-09:00] and ([eg_fl_door] ne "unlocked.*") and (([HandyTobi] eq "OG") or ([HandySandra] eq "OG")))

Dadurch wird das Problem wohl nicht gelöst, es wird aber übersichtlicher.

Mit einem Listing des DOIF, gäbe es etwas mehr Informationen zur Fehlereingrenzung.

Wie verhält sich das DOIF genau? Was löst wann aus? Welche Eventhäufigkeit haben die Telefone?

Die Oder-Verknüpfung könnte das Problem sein, vielleicht auch ein fehlendes Attribut.
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 21 Juli 2016, 20:01:09
Hier das list:
Internals:
   CFGFN      FHEM/anwesenheit_neu.cfg
   DEF        ([06:00-09:00] and ([eg_fl_door] ne "unlocked.*") and (([HandyTobi] eq "OG") or ([HandySandra] eq "OG"))) (set eg_fl_door unlock)
   NAME       di_aufstehen
   NR         718
   NTFY_ORDER 50-di_aufstehen
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-07-21 19:16:57   Device          HandySandra
     2016-07-21 06:00:08   cmd             2
     2016-07-21 06:00:08   cmd_event       eg_fl_door
     2016-07-21 06:00:08   cmd_nr          2
     2016-07-21 19:16:57   e_HandySandra_STATE abwesend
     2016-07-21 07:56:55   e_HandyTobi_STATE abwesend
     2016-07-21 19:12:38   e_eg_fl_door_STATE unlocked (uncertain)
     2016-07-21 06:00:08   state           cmd_2
     2016-07-21 09:00:00   timer_1_c1      22.07.2016 06:00:00
     2016-07-21 09:00:00   timer_2_c1      22.07.2016 09:00:00
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and (InternalDoIf($hash,'eg_fl_door','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) ne "unlocked.*") and ((InternalDoIf($hash,'HandyTobi','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "OG") or (InternalDoIf($hash,'HandySandra','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "OG"))
   Days:
   Devices:
     0           eg_fl_door HandyTobi HandySandra
     all         eg_fl_door HandyTobi HandySandra
   Do:
     0:
       0          set eg_fl_door unlock
     1:
   Helper:
     event      abwesend
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   HandySandra
     timerevent abwesend
     triggerDev HandySandra
     timerevents:
       abwesend
     timereventsState:
       state: abwesend
     triggerEvents:
       abwesend
     triggerEventsState:
       state: abwesend
   Internals:
     0           eg_fl_door:STATE HandyTobi:STATE HandySandra:STATE
     all         eg_fl_door:STATE HandyTobi:STATE HandySandra:STATE
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1469160000
     1          1469170800
   Readings:
   Realtime:
     0          06:00:00
     1          09:00:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          06:00:00
     1          09:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Trigger:
   Triggertime:
     1469160000:
       localtime  1469160000
       Hash:
     1469170800:
       localtime  1469170800
       Hash:
Attributes:
   repeatsame 0


Das doif di_aufstehen soll die Tür aufschließen, sofern sie nicht schon auf ist und sich eines der Beiden Handys auf meiner Fritzbox im OG anmeldet. Das zwigt mir letzendlich, dass meine Frau/ich mich aus dem Schlafzimmer (DG) langsam nach unten begebe ;)

Das FritzBox Modul müsste alle 5 Minuten abfragen und aktualisiert den Status der Handy dummies.

Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: CoolTux am 21 Juli 2016, 20:11:15
Das funktioniert so nicht. Eine Abfrage muß immer Eindeutig sein. Mit Wildcards kann man da nicht arbeiten.
Ich gehe mal davon aus das Deine Urhzeit der Trigger ist und alles andere nur abgefragt werden soll.
Wenn Dein STATE eindeutig ist kannst Du es so machen

([06:00-09:00] and (([?HandyTobi] eq "OG") or ([?HandySandra] eq "OG"))) (set eg_fl_door:FILTER=STATE!=unlocked unlock)
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 21 Juli 2016, 20:30:16
Hi,

genau das habe ich gerade auch gemerkt.
Ich kann das .* weglassen, dann geht es.
Das dumme ist, dass es auch den state locked (uncertain), sowie unlocked (uncertain) gibt und ich dachte ich könnte beides so abfackeln...

Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: CoolTux am 21 Juli 2016, 20:55:55
Gibt es denn ein Reading welches eindeutig locked oder unlocked hergibt?
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: onkel-tobi am 21 Juli 2016, 22:51:58
Hi,

CoolTux danke für deinen Hinweis.
Es gibt ein reading lock, dass eindeutig zu sein scheint.
Allerdings komme och micht "?HandyTobi" nicht zum Erfolg. Normalerweise sollten hier nur Statusänderungen getrackt werden, oder?
Mache ich es ohne "?" scheint es erstmal zu funktionieren.

Mal morgen früh / heute Nacht abwarten.

Gruß,
Tobi
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: CoolTux am 22 Juli 2016, 00:12:58
Nein nicht ganz. Das ? bedeutet das lediglich eine Bedingungsabfrage geschieht, nicht jedoch ein getriggert wird. Dein Trigger bleibt einzig die Zeit. Zwischen 6 und 9 Uhr wird immer wieder geschaut ob die restlichen Bedingungen stimmen und wenn ja wird ausgelöst.
Titel: Antw:DOIF für Anwesenheitserkennung
Beitrag von: Ellert am 22 Juli 2016, 10:26:26
Zitat von: onkel-tobi am 21 Juli 2016, 20:30:16
Hi,

genau das habe ich gerade auch gemerkt.
Ich kann das .* weglassen, dann geht es.
Das dumme ist, dass es auch den state locked (uncertain), sowie unlocked (uncertain) gibt und ich dachte ich könnte beides so abfackeln...

Gruß,
Tobi

Du könntest statt eg_fl_door] ne "unlocked.*"] so versuchen[?eg_fl_door] !~ "unlocked". Mit ? damit es nicht, versehendlich öffnet nach dem Du abgeschlossen hast aber noch nicht abwesend bist.

Statt auf Readings zu triggern würde ich Events nutzen und repeatsame weglassen
["HandyTobi:OG"] or ["HandySandra:OG"]

Und die Zeit nicht triggern lassen, sonst wird die Tür um 6 Uhr entriegelt, auch wenn ihr noch schlaft.