Resident Modul steuern wenn Dummy device den Zustand ändert

Begonnen von kuhmelker, 12 April 2018, 11:00:11

Vorheriges Thema - Nächstes Thema

kuhmelker

Ich habe ein dummy device DoorStatus angelegt in welches ich zwei Readings schreibe: "DoorClosed" und "DoorOpened" Die Readings beinhalten jeweils den Namen der Person (Vorname Nachname) welche die Türe öffnet bzw. schliesst.

Nun möchte ich, dass jedesmal wenn jemand die Türe öffnet sein rr_User den Status "home" bekommt bzw. beim Schliessen der Türe den Status "away".

Ich habe dazu folgendes DOIF erstellt:

define DoorANDResident DOIF ([WEBDoorClosed:"Vorname1 Nachname1"]) (set rr_user1 absent) DOELSEIF ([WEBDoorClosed:"Vorname2 Nachname2"]) (set rr_user2 absent) DOELSEIF ([WEBDoorOpened:"Vorname 1 Nachname1"]) (set rr_user1 home) DOELSEIF ([WEBDoorOpened:"Vorname2 Nachname2"]) (set rr_user2 home) DOELSE ""

leider passiert hier gar nichts.

wenn ich das DOIF ändere:

define DoorANDResident DOIF (["DoorStatus:WEBDoorClosed" eq "Vorname1 Nachname1"]) (set rr_user1 absent) DOELSEIF (["DoorStatus:WEBDoorClosed" eq "Vorname2 Nachname2"]) (set rr_user2 absent) DOELSEIF (["DoorStatus:WEBDoorOpened" eq "Vorname1 Nachname1"]) (set rr_user1 home) DOELSEIF (["DoorStatus:WEBDoorOpened" eq "Vorname2 Nachname2"]) (set rr_user2 home)  DOELSE ""

dann springt es zwar an, nimmt aber immer nur den ersten user.

Was mache ich falsch, bzw. wie würde man so etwas richtig definieren?

Per

Richtig beurteilen kann ich das nicht, weil ich z.B. nicht weiss, ob es ein Kopierfehler ist oder du wirklich mit den falschen Anführungsstrichen arbeitest.
Als zweites würde ich dir Code-Tags (der #-Button im Menü) empfehlen, da kann man den Code besser lesen.
Drittens hat das zweite Beispiel eine völlig falsche Syntax, da solltest du nochmal in die CommandRef schauen.
Und wenn du im zweiten Beispiel nach DoorStatus:WEBDoorOpened suchst, warum im ersten nur nach WEBDoorOpened? So viel Zeit damit gespart?

kuhmelker

Danke für den Hinweis. Ich habe die Anführungszeichen korrigiert, leider mit dem selben Ergebnis:

(["DoorStatus:WEBDoorClosed:" eq "Vorname1 Nachname1"]) (set rr_User1 absent) DOELSEIF (["DoorStatus:WEBDoorClosed:" eq "Vorname2 Nachname2"]) (set rr_User2 absent) DOELSEIF (["DoorStatus:WEBDoorOpened:" eq "Vorname1 Nachname1"]) (set rr_User1 home) DOELSEIF (["DoorStatus:WEBDoorOpened:" eq "Vorname12 Nachname2"]) (set rr_User2 home) DOELSE ""

führt zu cmd_5 als Resultat. Die Command Referenz habe ich gelesen, verstehe aber immer noch nicht wo ich den Fehler mache.

CoolTux

Nimm Mal bitte als erstes das DOELSE samt Anhang weg.
Und dann Gib Mal bitte ein list vom DOIF und wenigstens ein list eines Devices auf das getriggert wird.
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

kuhmelker

Danke für den Tip, habe ich gerade geändert:

define DoorANDResident DOIF (["DoorStatus:WEBDoorClosed:" eq "Vorname1 Nachname"]) (set rr_User1 absent) DOELSE ""

Damit bekomme ich jetzt ein cmd_2

Hier der list DoorStatus:

Internals:
   NAME       DoorStatus
   NR         371
   STATE      locked
   TYPE       dummy
   READINGS:
     2018-04-20 10:31:52   WEBDoorClosed   Vorname1 Nachname1
     2018-04-19 13:49:41   WEBDoorOpened   Vorname1 Nachname1
     2018-04-20 10:31:52   state           locked
Attributes:
   devStateIcon locked:status_locked unlocked:status_open
   room       Frontdoor

CoolTux

Bitte die list Ausgaben in Codetags. Also bitte noch mal vom dummy ein list vernünftig und ganz wichtig ein list vom DOIF.
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

CBSnake

hi,

wie oben schon erwähnt:

(["DoorStatus:WEBDoorClosed:" eq "Vorname1 Nachname"])

ist falsch.

Es müsste so aussehen, zumindest was die ] und den : betrifft

(["DoorStatus:WEBDoorClosed"] eq "Vorname1 Nachname")

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

CoolTux

Und das geht so. Ist das dann reagieren auf Event? Ich glaube das ist falsch, oder?

Wenn man es einfach haben will dann vielleicht erstmal so testen


([DoorStatus:WEBDoorClosed] eq "Vorname1 Nachname")
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

kuhmelker

O.K. Das sieht schon mal vielversprechender aus:

Der Vorschlag von @CBSnake gibt einen cmd_2 aus (genau gleich wie mein vorheriges setting) aber die Idee von @CoolTux gibt jetzt ein cmd_1. Leider wird der Status von User1 aber noch nicht geändert.

list vom DOIF:

Internals:
   CFGFN     
   DEF        ([DoorStatus:WEBDoorClosed] eq "Vorname1 Nachname1") (set rr_User1 absent) DOELSE ""
   MODEL      FHEM
   NAME       DoorANDResident
   NR         1051
   NTFY_ORDER 50-DoorANDResident
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-04-20 10:56:10   Device          DoorStatus
     2018-04-20 10:56:10   cmd             1
     2018-04-20 10:56:10   cmd_event       DoorStatus
     2018-04-20 10:56:10   cmd_nr          1
     2018-04-20 10:56:10   e_DoorStatus_WEBDoorClosed Vorname1 Nachname1
     2018-04-20 10:55:33   mode            enabled
     2018-04-20 10:56:10   state           cmd_1
   Regex:
   condition:
     0          ReadingValDoIf($hash,'DoorStatus','WEBDoorClosed') eq "Vorname1 Nachname1"
   devices:
     0           DoorStatus
     all         DoorStatus
   do:
     0:
       0          set rr_User1 absent
     1:
       0         
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      WEBDoorClosed: Vorname1 Nachname1
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   DoorStatus
     timerevent WEBDoorClosed: Vorname1 Nachname1
     triggerDev DoorStatus
     timerevents:
       WEBDoorClosed: Vorname1 Nachname1
       locked
     timereventsState:
       WEBDoorClosed: Vorname1 Nachname1
       locked
     triggerEvents:
       WEBDoorClosed: Vorname1 Nachname1
       locked
     triggerEventsState:
       WEBDoorClosed: Vorname1 Nachname1
       locked
   internals:
   itimer:
   readings:
     0           DoorStatus:WEBDoorClosed
     all         DoorStatus:WEBDoorClosed
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Residents


und der list vom DoorStatus:

Internals:
   NAME       DoorStatus
   NR         371
   STATE      locked
   TYPE       dummy
   READINGS:
     2018-04-20 10:56:10   WEBDoorClosed   Vorname1 Nachname1
     2018-04-19 13:49:41   WEBDoorOpened   Vorname1 Nachname1
     2018-04-20 10:56:10   state           locked
Attributes:
   devStateIcon locked:status_locked unlocked:status_open
   room       Frontdoor

CoolTux

Ok ich ahnte es. Du solltest das DOELSE plus "" löschen.


define DoorANDResident DOIF ([DoorStatus:WEBDoorClosed] eq "Vorname1 Nachname1") (set rr_user1 absent) DOELSEIF ([DoorStatus:WEBDoorClosed] eq "Vorname2 Nachname2") (set rr_user2 absent) DOELSEIF ([DoorStatus:WEBDoorOpened] eq "Vorname1 Nachname1") (set rr_user1 home) DOELSEIF ([DoorStatus:WEBDoorOpened] eq "Vorname2 Nachname2") (set rr_user2 home)


So sollte er wenigstens erstmal korrekt schalten. Das ganze kann man mit Variablen von DOIF sicherlich noch viel kürzer schreiben. Aber so fit bin ich in DOIF nicht.
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

nils_

funktioniert denn der Befehl
set rr_user1 absent
in der fhem-kommandozeile ??

ansonsten bitte ein list rr_user1 (evtl. auch mal im Eventmonitor gucken und hier anhängen.... bitte alles in code-tags !!!!)
viele Wege in FHEM es gibt!

kuhmelker

Hallo CoolTux

Ich habe das mal auf eine Person geändert. Das DOIF läuft, gibt allerdings immer cmd_1 aus und macht keinen Update im Resident Modul:

define DoorANDResident DOIF ([DoorStatus:WEBDoorClosed] eq "Vorname1 Nachname1") (set rr_User1 absent) DOELSEIF ([DoorStatus:WEBDoorOpened] eq "Vorname1 Nachname1") (set rr_User1 home)

Das Weglassen von DOELSE hat nichts gebracht.

@nils_ set rr_user1 absent funktioniert einwandfrei

list rr_user1:

Internals:
   DEF        rgr_Test
   DURATIONTIMER 1524219444.66684
   NAME       rr_User1
   NOTIFYDEV  global,
   NR         302
   NTFY_ORDER 50-rr_User1
   READY      1
   RESIDENTGROUPS rgr_Test
   STATE      home
   TYPE       ROOMMATE
   READINGS:
     2018-04-20 12:04:08   durTimerAbsence 00:00:00
     2018-04-20 12:04:08   durTimerAbsence_cr 0
     2018-04-20 12:16:24   durTimerPresence 00:12:16
     2018-04-20 12:16:08   durTimerPresence_cr 12
     2018-01-10 09:28:14   durTimerSleep   00:00:00
     2018-01-10 09:28:14   durTimerSleep_cr 0
     2018-04-20 12:04:08   lastArrival     2018-04-20 12:04:08
     2018-04-20 10:56:10   lastDeparture   2018-04-20 10:56:10
     2018-04-20 12:04:08   lastDurAbsence  01:07:58
     2018-04-20 12:04:08   lastDurAbsence_cr 68
     2018-04-20 10:56:10   lastDurPresence 194:01:56
     2018-04-20 10:56:10   lastDurPresence_cr 11642
     2018-04-20 10:56:10   lastLocation    Home
     2018-04-06 12:49:26   lastLocationAddr -
     2018-04-06 12:49:26   lastLocationLat XX.XXXX
     2018-04-06 12:49:26   lastLocationLong X.XXXXXXX
     2018-04-20 12:16:24   lastMood        sleepy
     2018-04-20 12:16:24   lastState       gotosleep
     2018-04-20 12:04:08   location        Home
     2018-04-06 12:49:26   locationAddr    -
     2018-04-06 12:49:26   locationLat     XX.XXXXX
     2018-04-06 12:49:26   locationLong    X.XXXXXXX
     2018-04-06 12:49:26   locationPresence present
     2018-04-20 12:16:24   mood            calm
     2018-04-20 12:04:08   presence        present
     2018-04-20 12:16:24   state           home
     2018-01-10 09:35:00   wayhome         0
   TIMER:
     rr_TomAndroid_DurationTimer:
       HASH       rr_User1
       MODIFIER   DurationTimer
       NAME       rr_User1_DurationTimer
Attributes:
   alias      User1-Mobile1
   comment    Auto-created by rgr_Test
   devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
   event-on-change-reading state,wayhome
   genericDeviceType switch
   group      07-User1-Mobile1
   homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent
   icon       people_sensor
   room       Residents
   rr_realname group
   sortby     1
   webCmd     state


CoolTux

Ok ich verstehe. Das macht auch Sinn da die erste Abfrage in der Tat immer passt.
Wenn das DOIF aus welchen Grund auch immer ausgelöst wird, passt ja DoorStatus:WEBDoorClosed] eq "Vorname1 Nachname1" immer, ausser der andere hat sie vorher geschlossen. Das ist also schon mal mist.
Muss es denn unbedingt DOIF sein?
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

kuhmelker

Nein, ich häng überhaupt nicht an dem DOIF, dachte aber, dass es einfacher wäre als unzählige NOTIFY's zu schreiben. Oder hast Du an etwas Anderes gedacht?

CoolTux

Gib mir mal ein paar Stunden. Ich kuck es mir mal an.
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