if-elsif-else Abfrage für eine Anwesenheitserkennung

Begonnen von TheChris1310, 09 Januar 2017, 00:57:31

Vorheriges Thema - Nächstes Thema

TheChris1310

Hallo Forum,

ich möchte eine Anwesenheitserkennung erstellen. Im ersten Schritt sollen 2 Personen (Martina, Chris) "überwacht" werden und auch nur 2 Zustände (home, away).

Folgendes habe ich mir überlegt:

Jeder hat einen Dummy der den Status anzeigt (home, away). wird durch einen iTrack getriggert. Der Trigger klappt bei Chris über das PRESENCE Modul super. Martina emoliere ich "set Martina_status home|away".

Jeder hat 2 Notify's einer für present und einer für absent. (n_Martina|Chris_status_present|absent)
Es gibt einem weiteren Dummy Familie_status. ebenfalls mit 2 Notify's (n_Familie_status_present|absent).

Das habe ich deswegen, weil je nach dem, wer nach Hause kommt, verschiedene Aktionen ausgeführt werden sollen.

Hier meine Konfig dazu:

define iTrack_blue PRESENCE lan-bluetooth xx:xx:xx:xx:xx:19 192.xxx.xxx.xxx:5111
attr iTrack_blue alias Chris iTrack

define n_Chris_status_present notify iTrack_blue:present set Chris_status home
define n_Chris_status_absent notify iTrack_blue:absent set Chris_status away

define Chris_status dummy
attr Chris_status alias Wo ist Christian?
attr Chris_status group Anwesenheit
attr Chris_status room 0 Wohnung

define Martina_status dummy
attr Martina_status alias Wo ist Martina?
attr Martina_status group Anwesenheit
attr Martina_status room 0 Wohnung

define Familie_status dummy
attr Familie_status alias Ist jemand zu Hause?
attr Familie_status group Anwesenheit
attr Familie_status room 0 Wohnung

define n_Familie_status_present notify (Chris_status|Martina_status) ep "home" set Familie_status home
attr n_Familie_status_present disable 0

define n_Familie_status_absent notify if (Value("Chris_status") ep "away")\
{\
    fhem "set Familie_status away"\
}\
else\
{\
    fhem "set Familie_status home"\
}


Interessant ist natürlich der Teil der n_Familie_status_absent|present. Hier habe ich schon viel verschiede Syntax ausprobiert. Aber egal wie ich es schreibe, wenn ich eine if-Abfrage mache, wird diese nicht ausgeführt. An andere Stelle funktionieren aber if-Abfragen. z.B. hier:
*23:30:00 { if (Value("TV_status") eq "off" ) { fhem("set Essen_Master off") }}

Auch scheint die Schreibweise egal zu sein. Ihr seht ja schon an den paar Zeilen das ich schon einige Syntaxvarianten ausprobiert habe.

In den Logs finde ich nicht wirklich etwas brauchbares.
Folgendes Scenario: alle sind "away" und Chris kommt nach Hause (dazu änder ich nur die MAC des iTrack):
Die defines sind in diesen Scenario wie oben aufgeführt.

Die Situation:
Ist jemand zu Hause? = away
Wo ist Christian? = away
Wo ist Martina? = away

Zitat
2017.01.09 00:31:46 4: Connection closed for FHEMWEB:192.168.1.106:65325: EOF
2017.01.09 00:31:46 4: FHEMWEB:192.168.1.106:65326 POST /fhem?detail=iTrack_blue&detail=iTrack_blue&val.modifyiTrack_blue=lan-bluetooth+04%3AA3%3A16%3AA0%3A43%3A18+192.168.1.11%3A5111&cmd.modifyiTrack_blue=modify+iTrack_blue; BUFLEN:0
2017.01.09 00:31:46 5: Cmd: >modify iTrack_blue lan-bluetooth 04:A3:16:A0:43:18 192.168.1.11:5111<
2017.01.09 00:31:46 3: Opening iTrack_blue device 192.168.1.11:5111
2017.01.09 00:31:46 3: iTrack_blue device opened
2017.01.09 00:31:46 5: SW: 30343a41333a31363a41303a34333a31387c33300a
2017.01.09 00:31:46 5: Triggering global (1 changes)
2017.01.09 00:31:46 5: Notify loop for global MODIFIED iTrack_blue
2017.01.09 00:31:47 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:31:47 5: PRESENCE (iTrack_blue) - received data: command accepted
2017.01.09 00:31:47 5: Triggering iTrack_blue (1 changes)
2017.01.09 00:31:47 5: Notify loop for iTrack_blue command_accepted: yes
2017.01.09 00:31:47 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:31:47 4: FHEMWEB:192.168.1.106:65326 GET /fhem?detail=iTrack_blue; BUFLEN:0
2017.01.09 00:31:48 4: name: /fhem?detail=iTrack_blue / RL:2882 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:31:48 4: FHEMWEB:192.168.1.106:65326 GET /fhem?cmd={ReadingsVal(%22iTrack_blue%22,%22statusRequest%22,%22%22)}&XHR=1; BUFLEN:0
2017.01.09 00:31:48 5: Cmd: >{ReadingsVal("iTrack_blue","statusRequest","")}<
2017.01.09 00:31:48 4: name: /fhem?cmd={ReadingsVal(%22iTrack_blue%22,%22statusRequest%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:31:48 4: Connection accepted from FHEMWEB:192.168.1.106:65330
2017.01.09 00:31:48 4: FHEMWEB:192.168.1.106:65330 GET /fhem?cmd={AttrVal(%22iTrack_blue%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2017.01.09 00:31:48 5: Cmd: >{AttrVal("iTrack_blue","room","")}<
2017.01.09 00:31:48 4: name: /fhem?cmd={AttrVal(%22iTrack_blue%22,%22room%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:31:48 4: Connection accepted from FHEMWEB:192.168.1.106:65331
2017.01.09 00:31:48 4: FHEMWEB:192.168.1.106:65331 GET /fhem?XHR=1&inform=type=status;filter=iTrack_blue;since=1483918306;fmt=JSON&timestamp=1483918314228; BUFLEN:0
2017.01.09 00:31:48 5: PRESENCE (iTrack_blue) - received data: present;iTrack;Wohnung
2017.01.09 00:31:48 5: Triggering iTrack_blue (4 changes)
2017.01.09 00:31:48 5: Notify loop for iTrack_blue present
2017.01.09 00:31:49 5: Triggering n_Chris_status_present
2017.01.09 00:31:49 4: n_Chris_status_present exec set Chris_status home
2017.01.09 00:31:49 5: Cmd: >set Chris_status home<
2017.01.09 00:31:49 4: dummy set Chris_status home
2017.01.09 00:31:49 5: Triggering Chris_status (1 changes)
2017.01.09 00:31:49 5: Notify loop for Chris_status home
2017.01.09 00:31:49 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:31:49 5: rg_battery: not on any display, ignoring notify

Das Resultat:
Ist jemand zu Hause? = away
Wo ist Christian? = home
Wo ist Martina? = away


Folgendes Scenario: Martina ist "away", Chris "home" Famile_status "home" (Es ist ja jemand da - Staus manuell gesetzt). Jetzt verlässt Chris das Haus (dazu änder ich nur die MAC des iTrack):
Die defines sind in diesen Scenario wie oben aufgeführt.
Zitat
2017.01.09 00:39:29 4: Connection closed for FHEMWEB:192.168.1.106:65330: EOF
2017.01.09 00:39:29 4: Connection accepted from FHEMWEB:192.168.1.106:65392
2017.01.09 00:39:29 4: FHEMWEB:192.168.1.106:65392 POST /fhem&room=0+Wohnung&cmd=set+Familie_status+home; BUFLEN:0
2017.01.09 00:39:29 5: Cmd: >set Familie_status home<
2017.01.09 00:39:29 4: dummy set Familie_status home
2017.01.09 00:39:29 5: Triggering Familie_status (1 changes)
2017.01.09 00:39:29 5: Notify loop for Familie_status home
2017.01.09 00:39:29 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:39:29 4: FHEMWEB:192.168.1.106:65392 GET /fhem?room=0%20Wohnung; BUFLEN:0
2017.01.09 00:39:29 4: name: /fhem?room=0%20Wohnung / RL:3842 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:39:30 4: FHEMWEB:192.168.1.106:65392 GET /fhem?XHR=1&inform=type=status;filter=room=0%20Wohnung;since=1483918768;fmt=JSON&timestamp=1483918775694; BUFLEN:0
2017.01.09 00:39:45 4: Connection closed for FHEMWEB:192.168.1.106:65326: EOF
2017.01.09 00:39:45 4: Connection accepted from FHEMWEB:192.168.1.106:65396
2017.01.09 00:39:45 4: FHEMWEB:192.168.1.106:65396 POST /fhem?detail=iTrack_blue&detail=iTrack_blue&val.modifyiTrack_blue=lan-bluetooth+04%3AA3%3A16%3AA0%3A43%3A19+192.168.1.11%3A5111&cmd.modifyiTrack_blue=modify+iTrack_blue; BUFLEN:0
2017.01.09 00:39:45 5: Cmd: >modify iTrack_blue lan-bluetooth 04:A3:16:A0:43:19 192.168.1.11:5111<
2017.01.09 00:39:45 3: Opening iTrack_blue device 192.168.1.11:5111
2017.01.09 00:39:45 3: iTrack_blue device opened
2017.01.09 00:39:45 5: SW: 30343a41333a31363a41303a34333a31397c33300a
2017.01.09 00:39:45 5: Triggering global (1 changes)
2017.01.09 00:39:45 5: Notify loop for global MODIFIED iTrack_blue
2017.01.09 00:39:45 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:39:45 5: PRESENCE (iTrack_blue) - received data: command accepted
2017.01.09 00:39:45 5: Triggering iTrack_blue (1 changes)
2017.01.09 00:39:45 5: Notify loop for iTrack_blue command_accepted: yes
2017.01.09 00:39:45 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:39:45 4: FHEMWEB:192.168.1.106:65396 GET /fhem?detail=iTrack_blue; BUFLEN:0
2017.01.09 00:39:46 4: name: /fhem?detail=iTrack_blue / RL:2881 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/style.css; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: Connection accepted from FHEMWEB:192.168.1.106:65398
2017.01.09 00:39:46 4: Connection accepted from FHEMWEB:192.168.1.106:65399
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/jquery-ui.min.css; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/jquery-ui.min.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/ios7Common.css; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 GET /fhem/pgm2/jquery.min.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/fhemweb_colorpicker.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/fhemweb.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/fhemweb_readingsGroup.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 GET /fhem/pgm2/dashboard_ios7.css; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/fhemweb_readingsHistory.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/fhemweb_fbcalllist.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 GET /fhem/pgm2/fhemweb_sortable.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/svg.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/fhemweb_knob.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem/pgm2/dashboard.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/pgm2/fhemweb_uzsu.js; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem/images/default/icoEverything.png; BUFLEN:0
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 => 304 Not Modified
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65398 GET /fhem?cmd={ReadingsVal(%22iTrack_blue%22,%22statusRequest%22,%22%22)}&XHR=1; BUFLEN:0
2017.01.09 00:39:46 5: Cmd: >{ReadingsVal("iTrack_blue","statusRequest","")}<
2017.01.09 00:39:46 4: name: /fhem?cmd={ReadingsVal(%22iTrack_blue%22,%22statusRequest%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65399 GET /fhem?cmd={AttrVal(%22iTrack_blue%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2017.01.09 00:39:46 5: Cmd: >{AttrVal("iTrack_blue","room","")}<
2017.01.09 00:39:46 4: name: /fhem?cmd={AttrVal(%22iTrack_blue%22,%22room%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2017.01.09 00:39:46 4: FHEMWEB:192.168.1.106:65396 GET /fhem?XHR=1&inform=type=status;filter=iTrack_blue;since=1483918785;fmt=JSON&timestamp=1483918792366; BUFLEN:0
2017.01.09 00:39:47 5: PRESENCE (iTrack_blue) - received data: absence
2017.01.09 00:39:47 5: Triggering iTrack_blue (2 changes)
2017.01.09 00:39:47 5: Notify loop for iTrack_blue absent
2017.01.09 00:39:47 5: Triggering n_Chris_status_absent
2017.01.09 00:39:47 4: n_Chris_status_absent exec set Chris_status away
2017.01.09 00:39:47 5: Cmd: >set Chris_status away<
2017.01.09 00:39:47 4: dummy set Chris_status away
2017.01.09 00:39:47 5: Triggering Chris_status (1 changes)
2017.01.09 00:39:47 5: Notify loop for Chris_status away
2017.01.09 00:39:47 5: rg_battery: not on any display, ignoring notify
2017.01.09 00:39:47 5: rg_battery: not on any display, ignoring notify

Das Resultat:
Ist jemand zu Hause? = home
Wo ist Christian? = away
Wo ist Martina? = away


Mein ziel ist es vor erst Mal, das ich diesen Notify ausführen:

if (Value("Chris_status") eq "home" || Value("Martina_status") eq "home")
{
    fhem("set Familie_status home")
}
elsif (Value("Martina_status") eq "home" && Value("Chris_status") ep "home")
{
    fhem("set Familie_status home")
}
else
{
    fhem("set Familie_status away")
}

Er soll erweiterbar sein auf beliebig viele Personen. Aber dazu muss es erstmal ausgeführt werden :-(

So, es ist schon spät. Ich hoffe das reicht für eine erste Fehler analyse.

Gute Nacht, Chris

Meine Hard und Software:
Zitat
Fhem info:
  Release  : 5.7
  OS       : linux
  Arch     : arm-linux-gnueabihf-thread-multi-64int
  Perl     : v5.14.2
  uniqueID : 259a6d69d6586993973f3775d42548ea
  upTime   : 02:43:34

Defined modules:
  CUL            : 1
  CUL_MAX        : 1
  Dashboard      : 1
  FHEMWEB        : 3
  FileLog        : 13
  LightScene     : 2
  MAX            : 5
  PRESENCE       : 2
  SVG            : 12
  at             : 6
  autocreate     : 1
  dummy          : 11
  eventTypes     : 1
  logProxy       : 1
  notify         : 14
  pilight        : 2
  pilight_ctrl   : 1
  pilight_switch : 6
  pilight_temp   : 6
  readingsGroup  : 2
  speedtest      : 1
  structure      : 6
  telnet         : 1

Transmitting this information during an update: no
You can change this via the global attribute sendStatistics

Raspberry Pi B
WLAN

32 Gb SD
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  3.5G   11G  26% /
devtmpfs        214M     0  214M   0% /dev
tmpfs            44M  304K   44M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            87M     0   87M   0% /run/shm
/dev/mmcblk0p1   56M   20M   37M  36% /boot

Pilight, MAX_CUL, Lan-Presence, 5x MAX! Thermostat+, 6x 433Mhz elro Steckdosen, 1x 3-Fach Kaku-Switch

DeeSPe

Vielleicht gibst Du dem RESIDENTS Modul eine Chance, denn das ist für Bewohner Gedacht!
In Zusammenspiel mit meinem neuen Modul sollten Dir dann so gut wie alle Möglichkeiten gegeben sein.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TheChris1310

Zitat von: DeeSPe am 09 Januar 2017, 01:05:04
Vielleicht gibst Du dem RESIDENTS Modul eine Chance, denn das ist für Bewohner Gedacht!
In Zusammenspiel mit meinem neuen Modul sollten Dir dann so gut wie alle Möglichkeiten gegeben sein.

Gruß
Dan

Guten Morgen Dan,

Sau gut, dem gebe ich gerne eine Change.
Das löst aber erst Mal nicht mein aktuelles Problem. Ich würde gerne verstehen was hier falsch läuft. Hast du eine Idee?

Gruß Chris

PsychoD

Moin Chris,

Wenig Zeit gerade aber schau mal hier, in einem der Schritte hatte ich früher mal ein ähnliches notify aufgebaut. Vielleicht hilft es ja:

https://forum.fhem.de/index.php/topic,42770.0.html

Mittlerweile würde ich allesdings eher zu doif raten, das ist mir oft nachvollziehbarer... Ich stelle nach und nach alle notifys darauf um.

Vg
Psy

CoolTux


fhem("set Familie_status home")


Am Ende fehlen die Semikolons.  ;


define n_Familie_status_absent notify if (Value("Chris_status") ep "away")\


Hier hast Du ep statt eq geschrieben
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

Wuehler

Um den Ort des Syntaxfehlers zu finden hilft es, beim notify das Attribut verbose auf 5 zu setzen. Dann wird bei Ausführung des notify im Log angezeigt wo es einen Fehler geben könnte.
Alternativ auch mal mit der myUtils beschäftigen und den Code dahin auslagern. Dann sieht man beim reload der my Utils (reload 99_myUtils.pm) wo man sich vertippt hat  ;) Bei einem fehlenden Semikolon wird der Fehler oft erst in der nächsten Zeile angezeigt und viele weitere Zeilen sind anscheinend auch fehlerhaft. Also am besten immer von oben nach unten abarbeiten.