Hallo zusammen,
ich teste nun schon einige Tage die FHEM App mit der geofency funktion. Anwesenheit und verlassen des Home wird mir auch super angezeigt. Nun möchte ich aber gerne eine Nachricht per Telegram wenn ich bei einer bestimmten ID (Name der Standortes) einchecke. Dazu habe ich mir folgendes DOIF angelegt:
Internals:
DEF ([Daniel:location] = Wadersloh )(set Telegram msg Wadersloh)
NAME Geofency1
NR 317
NTFY_ORDER 50-Geofency1
STATE initialize
TYPE DOIF
READINGS:
2018-01-15 17:27:39 Device Daniel
2018-01-15 17:27:39 e_Daniel_location home
2018-01-15 17:27:39 error condition c01: Can't modify non-lvalue subroutine call of &main::ReadingValDoIf in scalar assignment at (eval 21834) line 1, at EOF
Bareword "Wadersloh" not allowed while "strict subs" in use at (eval 21834) line 1.
2018-01-14 17:49:23 mode enabled
2018-01-14 17:49:23 state initialize
Regex:
condition:
0 ReadingValDoIf($hash,'Daniel','location') = Wadersloh
devices:
0 Daniel
all Daniel
do:
0:
0 set Telegram msg Wadersloh
1:
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 0
sleeptimer -1
itimer:
readings:
0 Daniel:location
all Daniel:location
uiState:
uiTable:
Attributes:
alias Daniel Standort Wadersloh
do always
room Anwesenheit,zzz J4Fun und Test
aber iergendwie will er mir nicht den Standort als Nachricht schicken, Die Ankunft wird mir per Nachricht aus der App mitgeteilt und im reading vom roommate wird mir auch die ID angezeigt die geofency in der app übergeben soll, diese steht unter dem state "location".
ein anderes doif in verbindung mit "home" funktioniert super:
Internals:
DEF ([?22:15 - 22:45|12345] and [Daniel] eq "zuhause")(set Garagentor_433MHz on)
NAME Geofence_1
NR 311
NTFY_ORDER 50-Geofence_1
STATE initialize
TYPE DOIF
READINGS:
2018-01-15 17:27:39 Device Daniel
2018-01-15 17:27:39 e_Daniel_STATE zuhause
2018-01-11 15:21:00 mode enabled
2018-01-11 15:21:00 state initialize
2018-01-15 17:31:29 timer_01_c01 15.01.2018 22:15:00|12345
2018-01-15 17:31:29 timer_02_c01 15.01.2018 22:45:00|12345
Regex:
condition:
0 DOIF_time($hash,0,1,$wday,$hms,"12345") and InternalDoIf($hash,'Daniel','STATE') eq "zuhause"
days:
0 12345
1 12345
devices:
0 Daniel
all Daniel
do:
0:
0 set Garagentor_433MHz on
1:
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 2
sleeptimer -1
internals:
0 Daniel:STATE
all Daniel:STATE
interval:
0 -1
1 0
itimer:
localtime:
0 1516050900
1 1516052700
realtime:
0 22:15:00
1 22:45:00
time:
0 22:15:00
1 22:45:00
timeCond:
0 0
1 0
timer:
0 0
1 0
triggertime:
1516050900:
localtime 1516050900
hash:
1516052700:
localtime 1516052700
hash:
uiState:
uiTable:
Attributes:
alias Geofency Spätschicht Garage auf
do always
room Zubehör
habe das zweite doif mal beim state "zuhause" durch das state "Wadersloh" ersetzt aber das will auch nicht funktionieren.
= != eq
Wenn ich die def dem entsprechend abändern bekomme ich einen syntax error
Internals:
DEF ([Daniel:location] = != eq Wadersloh )(set Telegram msg Wadersloh)
NAME Geofency1
NR 317
NTFY_ORDER 50-Geofency1
STATE initialize
TYPE DOIF
READINGS:
2018-01-15 18:40:19 Device Daniel
2018-01-15 18:40:19 e_Daniel_location home
2018-01-15 18:40:19 error condition c01: syntax error, line 1, near "= !="
2018-01-15 18:39:40 mode enabled
2018-01-15 18:39:40 state initialize
Regex:
condition:
0 ReadingValDoIf($hash,'Daniel','location') = != eq Wadersloh
devices:
0 Daniel
all Daniel
do:
0:
0 set Telegram msg Wadersloh
1:
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 0
sleeptimer -1
itimer:
readings:
0 Daniel:location
all Daniel:location
uiState:
uiTable:
Attributes:
alias Daniel Standort Wadersloh
do always
room zzz J4Fun und Test
er wollte wohl auf den Unterschied zwischen "=" und "eq" hinweisen. eq vergleicht strings, = vergleicht nummerische inhalte. daher:
([Daniel:location] eq "Wadersloh" )(set Telegram msg Wadersloh)
Ich schreibe es mal aus :)
"=" ist nicht gleich "eq"
Soll heißen in der einen Bedingung arbeitest du richtig mit eq und in der anderen mit =. Wobei das = hier falsch ist und eq heißen müsste. Und Wandersloh muss in "". Insgesamt Empfehle ich dir dich mit der Perl Syntax vertraut zu machen, du wirst diese immer wieder für FHEM brauchen.
Genau diese DOIF def hatte ich zuerst, aber er reagiert nicht darauf. In den readings wird mir unter id Wadersloh angezeigt. Genau das übergebe ich mit der Id Bezeichnung aus Geofency am Handy. Hab ich da einen Denkfehler?
Internals:
DEF ([Daniel:location] eq "Wadersloh" )(set Telegram msg Wadersloh)
NAME Geofency1
NR 317
NTFY_ORDER 50-Geofency1
STATE initialized
TYPE DOIF
READINGS:
2018-01-15 23:11:02 cmd 0
2018-01-15 23:11:02 mode enabled
2018-01-15 23:11:02 state initialized
Regex:
condition:
0 ReadingValDoIf($hash,'Daniel','location') eq "Wadersloh"
devices:
0 Daniel
all Daniel
do:
0:
0 set Telegram msg Wadersloh
1:
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 0
sleeptimer -1
itimer:
readings:
0 Daniel:location
all Daniel:location
uiState:
uiTable:
Attributes:
alias Daniel Standort Wadersloh
do always
room zzz J4Fun und Test
In deinem List ist a kein Fehler zu sehen und bei hat das Modul nicht ausgelöst. Ein List des Geofancy, wenn du an dem Ort bist wäre noch hilfreich.
Hallo Amenophis86,
hier das List vom geofancy bei Ankunft an dem Ort mit der ID Wadersloh:
Internals:
DEF geo
NAME geofancy
NR 290
ROOMMATES Anita,Daniel,Locative
STATE id:Wadersloh trig:1 date:1516108268 lat:51.73825590000001 long:8.2506241 dev:"device id" devAlias=Daniel
TYPE GEOFANCY
READINGS:
2018-01-16 14:11:08 lastDevice Daniel
2018-01-16 14:11:08 lastDeviceUUID "device id"
2018-01-16 14:11:08 state id:Wadersloh trig:1 date:1516108268 lat:51.73825590000001 long:8.2506241 dev:"device id" devAlias=Daniel
fhem:
infix geo
helper:
device_aliases:
"device id" Daniel
"device id" Locative_App
device_names:
Daniel "device id"
Locative_App "device id"
Attributes:
devAlias "device id":Daniel "device id":Locative_App
group Anwesenheit
room Anwesenheit
Ich kann alle eventmaps der roomate´s trigger über die DOIF Funktion, z.B. home, absent, away usw. Aber mit der Übergebenen ID in diesem Fall Wadersloh kann ich nichts triggern. Ich habe das gefühl das er nicht die ID verarbeitet die bei der location übergeben wird sondern nur die states also home usw. vielleicht muss ich in dem DOIF ja auf das reading location oder id eingehen aber wie frage ich das ab?
Ich habe die device id´s mal raus genommen nicht wundern das in der list "device id" steht.
das List ist vom Geafancy Device.
Du willst aber auf ein Reading deines Rommmate Device triggern.
Also brauchen wir ein List von dem Roommate Device, nicht von Geofancy
Edit:
von dem DOIF auch nochmal, nachdem der gewünschte Standort erreicht worden ist. Alos das DOIF getriggert wurde / werden sollte
Edit:
Ich sage mal, dass DOIF ist soweit korrekt. Habs mal eben nachgebastelt. Also liegt der Fehler mit großer Wahrscheinlichkeit wo anders. Liefer mal die Lists dann sehen wir weiter...
Ok, hier die Lists:
list vom Roommate Daniel
Internals:
.eventMapCmd zuhause:noArg abwesend:noArg verreist:noArg bettfertig:noArg schläft:noArg aufgestanden:noArg
AUTOGONE 1516240517
CHANGED
DEF rgr_Residents
DURATIONTIMER 1516115840.03074
NAME Daniel
NOTIFYDEV global,
NR 293
NTFY_ORDER 50-Daniel
READY 1
RESIDENTGROUPS rgr_Residents
STATE abwesend
TYPE ROOMMATE
READINGS:
2018-01-16 16:16:20 durTimerAbsence 01:21:03
2018-01-16 16:16:20 durTimerAbsence_cr 81
2018-01-16 14:55:17 durTimerPresence 00:00:00
2018-01-16 14:55:17 durTimerPresence_cr 0
2018-01-08 14:45:15 durTimerSleep 00:00:00
2018-01-08 14:45:15 durTimerSleep_cr 0
2018-01-16 06:25:21 lastArrival 2018-01-16 06:25:21
2018-01-16 14:55:17 lastDeparture 2018-01-16 14:55:17
2018-01-16 06:25:21 lastDurAbsence 06:27:34
2018-01-16 06:25:21 lastDurAbsence_cr 388
2018-01-16 14:55:17 lastDurPresence 08:29:56
2018-01-16 14:55:17 lastDurPresence_cr 510
2018-01-16 16:16:29 lastLocation Wadersloh
2018-01-16 16:16:29 lastLocationAddr -
2018-01-16 16:16:29 lastLocationLat 51.73825590000001
2018-01-16 16:16:29 lastLocationLong 8.2506241
2018-01-16 14:55:17 lastMood calm
2018-01-16 14:55:17 lastState home
2018-01-16 16:16:29 location Wadersloh
2018-01-16 16:16:29 locationAddr -
2018-01-16 16:16:29 locationLat 51.73825590000001
2018-01-16 16:16:29 locationLong 8.2506241
2018-01-16 16:16:29 locationPresence present
2018-01-16 14:55:17 mood -
2018-01-08 14:55:51 nextWakeup OFF
2018-01-16 14:55:17 presence absent
2018-01-16 14:55:17 state absent
2018-01-08 14:45:15 wayhome 0
TIMER:
Daniel_AutoGone:
HASH Daniel
MODIFIER AutoGone
NAME Daniel_AutoGone
Daniel_DurationTimer:
HASH Daniel
MODIFIER DurationTimer
NAME Daniel_DurationTimer
Attributes:
alias Daniel FHEM
comment Auto-created by rgr_Residents
devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
event-on-change-reading state,wayhome</a>
eventMap home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
fp_Erdgeschoss 104,372,1,Daniel FHEM,
group Anwesenheit
icon people_sensor
room Anwesenheit
rr_geofenceUUIDs "device id"
rr_lang DE
rr_locations Wadersloh Lippstadt
rr_realname group
sortby 1
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
list vom DOIF für Daniel
Internals:
DEF ([Daniel] eq "Wadersloh" )(set Telegram msg Wadersloh)
NAME Geofency4
NR 317
NTFY_ORDER 50-Geofency4
STATE ???
TYPE DOIF
READINGS:
Regex:
condition:
0 InternalDoIf($hash,'Daniel','STATE') eq "Wadersloh"
devices:
0 Daniel
all Daniel
do:
0:
0 set Telegram msg Wadersloh
1:
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 0
sleeptimer -1
internals:
0 Daniel:STATE
all Daniel:STATE
itimer:
readings:
uiState:
uiTable:
Attributes:
alias Daniel Standort Wadersloh
do always
room Anwesenheit
Da ist dein Problem:
event-on-change-reading state,wayhome
Kein Event, kein Trigger
Was würde passieren wenn ich das attr event on change Reading lösche?
Nicht mehr was hier https://fhem.de/commandref_DE.html#readingFnAttributes bei event-on-change-reading steht.
So lesen bildet, hab dann mal in der command ref nachgelesen und bei Event on change reading location eingefügt. Das werde ich dann nachher mal testen.
Wenn's funktioniert, bitte noch das Subject des ersten Posts editieren und [Gelöst] davor schreiben.
Danke!
So funktioniert jetzt mit dem Zusatz location bei Event on change reading, allerdings musste ich bei meinem DOIF in der dev mit [Daniel:location] auf den Bezug hinweisen ohne ging es nicht. Danke an alle die unterstützt haben 8)