DOIF für Anwesenheitserkennung

Begonnen von onkel-tobi, 10 Juli 2016, 11:56:54

Vorheriges Thema - Nächstes Thema

onkel-tobi

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

P.A.Trick

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!
)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

onkel-tobi

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

Ellert

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


onkel-tobi

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

Ellert

#5
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.

onkel-tobi

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

CoolTux

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)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

onkel-tobi

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

CoolTux

Gibt es denn ein Reading welches eindeutig locked oder unlocked hergibt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

onkel-tobi

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert

#12
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.