Muss wieder mal was fragen.
Fhem habe ich so eingerichtet, wenn ich nach Hause komme, mein Handy abgefragt wird.
PRESENCE
handy_reimund present
wird angezeigt.
Ebenso
Anwesenheit present structure
Möchte nun, dass die Hue Lampe eingeschaltet wird, wenn ich nach Hause komme, allerdings erst ab 17 Uhr.
Ist das machbar ?
Brauche ich dazu den DOIF Befehl ?
Habe es damit versucht.
define reimundhandylicht DOIF ([handy-reimund] eq "present" and [?14-23:30] and [?Licht] ne "ON") (set Licht ON) DOELSEIF ([handy_reimund] eq "absent" and [?Licht] eq "ON")(set Licht OFF)
Geht aber leider nicht
kannst du auch hiermit machen
https://forum.fhem.de/index.php/topic,81130.0.html (https://forum.fhem.de/index.php/topic,81130.0.html)
.... ist im grunde selbsterklärend ( handy_reimund wäre das triggernde device ) , ansonsten frag einfach wenn du es probieren willst und nicht klar kommst .
geht aber , wie von dir erwähnt , auch mit doif.
gruss Byte09
Hi,
einfach von mir ein Beispiel mit DOIFdefmod di_Hzg DOIF (([05:45-09:00|8] or [07:00-22:00|7] or [16:00-22:00|8]) and [AlleAnwesend] eq "present" and [Heizung] eq "an" and [SensorR2_Weather:temperature] < 23 and [SensorAussen:temperature] < 15) ((set HzgBad,HzgFlur,HzgKu on)) DOELSE ((set HzgBad,HzgFlur,HzgKu off))
Da ist alles drin was Du brauchst, Zeit, Anwesenheit, mehrere Randbedingungen ...
Gruß Otto
Zitat von: Byte09 am 16 Dezember 2017, 14:59:05
kannst du auch hiermit machen
https://forum.fhem.de/index.php/topic,81130.0.html (https://forum.fhem.de/index.php/topic,81130.0.html)
.... ist im grunde selbsterklärend ( handy_reimund wäre das triggernde device ) , ansonsten frag einfach wenn du es probieren willst und nicht klar kommst .
geht aber , wie von dir erwähnt , auch mit doif.
gruss Byte09
Versuche gerade das Modul einzubinden. Weiss noch nicht genau wie genau. Update gemacht. Aber er erkennt das Modul Absent nicht
Zitat von: Byte09 am 16 Dezember 2017, 14:59:05
kannst du auch hiermit machen
https://forum.fhem.de/index.php/topic,81130.0.html (https://forum.fhem.de/index.php/topic,81130.0.html)
.... ist im grunde selbsterklärend ( handy_reimund wäre das triggernde device ) , ansonsten frag einfach wenn du es probieren willst und nicht klar kommst .
geht aber , wie von dir erwähnt , auch mit doif.
gruss Byte09
Hallo Byte09
Es ist denke ich nicht wirklich sinnvoll einem Anfänger ein undokumentiertes nicht über Update erhältliches Modul zu empfehlen. Ein Anfänger kann Dir bei Fehlermeldungen nicht wirklich helfen.
Habe gesehen das Du einen Thread für Dein Modul hast, warte lieber auf erfahrene User die Dir auch bei Problemen aussagekräftige Beschreibungen geben können.
Grüße
Ja ggf. Hast du damit recht ... nur kurz gefasst , da unterwegs . Gruss Byte09
Gesendet von meinem SM-G900F mit Tapatalk
Heute habe ich mir genau sowas für eine Carport-Beleuchtung gebaut und einfach zwei denkbar primitive notify verwendet:
define n_gtag_red_p notify gtag_red:present { CommandSet(undef,'cp_Licht on') unless isday('REAL') }
define n_gtag_red_a notify gtag_red:absent set cp_Licht off
- gtag_red ist ein roter G-Tag Schlüsselanhänger
- cp_Licht ist der Schaltaktor für die Beleuchtung
- "unless isday('REAL')" sorgt dafür, dass das Licht nur zwischen Sonnenuntergang und Sonnenaufgang angeschaltet wird und nicht tagsüber
Hi,
das Du ein DOIF probiert hast hat sich wohl mit meinem Beitrag überschnitten. Zeiten musst Du vollständig angeben:
define reimundhandylicht DOIF ([handy-reimund] eq "present" and [?14:00-23:30] and [?Licht] ne "ON") (set Licht ON) DOELSEIF ([handy_reimund] eq "absent" and [?Licht] eq "ON")(set Licht OFF)
Ob Deine Status von Licht wirklich ON oder on oder OFF oder off sind musst Du wissen und beachten!
Gruß Otto
Hallo Udo, ich denke das auch bei Deinem Beispiel es vielleicht besser wäre es mehr für Anfänger zu zu schneiden. Statt direkt die CommandSet Funktionen zu nehmen wäre die FHEM Funktion fhem(" ") vielleicht besser. Ein Anfänger kann nicht wissen das es sich hierbei um eine Funktion handelt welche nur einen FHEM set Befehl ausführen kann und wundert sich warum er keine 2 set Befehle durch Semikolon getrennt ausführen kann.
Hatten wir ja erst das letzte Mal bei Deinem Beispiel. Da konntest Du es noch erklären weil der User mehr Erfahrung hatte.
Grüße
Hi,
ich mache das bei mir im DoIf mit folgendem
([[myTwilight:ss_weather]-22:00] and [HolgerAnwesend:state] eq "present")(set WZ_Lampe1 on)
DOELSEIF ([22:01]) (set WZ_Lampe1 off)
Schaltet die Lampe an, wenn es dunkel ist und ich anwesend bin oder wenn ich im dunklen heim komme, aber nur in der Zeit von ss_weather und 22:00 Uhr. In jedem Fall geht die Lampe um 22:01 wieder aus
Viele Grüße vom Gent
Zitat von: CoolTux am 16 Dezember 2017, 16:04:57
Statt direkt die CommandSet Funktionen zu nehmen wäre die FHEM Funktion fhem(" ") vielleicht besser.
Damit Du ruhig schlafen kannst...
define n_gtag_red_p notify gtag_red:present { fhem('set cp_Licht on') unless isday('REAL') }
define n_gtag_red_a notify gtag_red:absent set cp_Licht off
Zitat von: betateilchen am 16 Dezember 2017, 16:58:49
Damit Du ruhig schlafen kannst...
define n_gtag_red_p notify gtag_red:present { fhem('set cp_Licht on') unless isday('REAL') }
define n_gtag_red_a notify gtag_red:absent set cp_Licht off
:)
Danke Dir. Ist lieb ;D
Wünsche einen ruhigen Adventssonntag
Grüße
Zitat von: CoolTux am 16 Dezember 2017, 17:04:48
Wünsche einen ruhigen Adventssonntag
naja, mal schauen... ich muss morgen Bahnfahren
Zitat von: betateilchen am 16 Dezember 2017, 17:05:47
naja, mal schauen... ich muss morgen Bahnfahren
Bring Zeit mit. Habe gerade gelesen das die Bahn die Geschwindigkeit drosselt wegen dem Winter. Ich schmeiß mich weg.
hi reimundko
hast du es denn mit notify oder doif in den griff bekommen ?
gruss Byte09
Hey Leute
ich wollte nun kein extra Thread aufmachen. Ich habe eine ähnliche Frage bzw Problem, und zwar habe ich nun aktuell folgendes in Benutzung
([[myTwilight:ss_weather]-23:00] and [NBT:state] eq "present" or [PBT:state] eq "present")
( set wz.licht.regal RGB ffffff)
Also wenn wir zu Hause sind, soll es nichts machen, nur, wenn wir beide eine Zeit lang nicht zu Hause waren sagen wir mindestens 15 Minuten soll es in Weiß eingeschaltet werden, wenn wir nach Hause kommen, und zwar erst bei Dämmerung ich hoffe, man versteht, was ich meine?
Caleus
Moin Otto und alle anderen;
Zitat von: Otto123 am 16 Dezember 2017, 15:04:30
Hi,
einfach von mir ein Beispiel mit DOIFdefmod di_Hzg DOIF (([05:45-09:00|8] or [07:00-22:00|7] or [16:00-22:00|8]) and [AlleAnwesend] eq "present" and [Heizung] eq "an" and [SensorR2_Weather:temperature] < 23 and [SensorAussen:temperature] < 15) ((set HzgBad,HzgFlur,HzgKu on)) DOELSE ((set HzgBad,HzgFlur,HzgKu off))
Da ist alles drin was Du brauchst, Zeit, Anwesenheit, mehrere Randbedingungen ...
Gruß Otto
Supi, so ein Beispiel. Sowas hilft mir mehr als Verweise auf Wiki o.ä. Dort hat man gewöhnlich schon gesucht und ist nicht weitergekommen. Hier hat man etwas Funktionierendes (nachdem man die Devices angepasst hat) und kann sich mit Veränderungen herantasten.
Dankeschön und ein schönes Wochenende
Hi Caleus,
oder Bedingungen muss man meist separat klammern damit es funktioniert wie gewünscht. Ich kann leider nicht richtig erkennen, was Dir fehlt. Auch ist unklar ob NBT oder PBT die gewünschte Verzögerung von 15 min schon eingebaut hat.
Ansonsten kannst Du mit dem wait Attribute arbeiten. Da findest Du in der Commandref Beispiele.
Gruß Otto
Hallo Otto
ich habe nun aufgeräumt ;)
([[myTwilight:ss_weather]-23:00] and [Anwesenheit] eq "present")
( set wz.licht.regal RGB ffffff)
und "[Anwesenheit]"
sieht so aus
ATTR presence
CFGFN
CHANGEDCNT 24152
DEF presence NBT PBT
NAME Anwesenheit
NR 1079
NTFY_ORDER 50-Anwesenheit
STATE present
TYPE structure
READINGS:
2018-10-16 17:13:30 LastDevice PBT
2018-10-16 17:13:30 LastDevice_Abs PBT
2018-10-16 17:13:30 state present
Attributes:
clientstate_behavior relative
clientstate_priority present absent
room Server
So nun meine Frage:
Ich hätte es gerne so, dass wenn man eine Zeit weg war, dass das Licht im vorgegeben Zeitraum an geht, aber auch nur dann, und nicht wenn man Zuhause ist, da soll es nichts machen.
Caleus
Hi,
kannst Du bitte ein list von dem DOIF posten? So sieht man quasi nix.
Und das was Du willst sollte einfach mit einem Event anstatt dem Status gehen, aber eigentlich sollte es auch so gehen.
Wenn Du nicht willst, dass in dem Zeitraum getriggert werden soll sondern nur von "present" dann musst Du einfach den Zeitraum in eine Abfrage ändern:
https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger
Gruß Otto
Natürlich bitte schön die List
Internals:
DEF ([[myTwilight:ss_civil]-23:00] and [Anwesenheit] eq "present")
(set wz.licht.decke RGB ffffff)
MODEL FHEM
NAME commingHome
NR 188
NTFY_ORDER 50-commingHome
STATE disabled
TYPE DOIF
READINGS:
2018-10-15 06:42:48 Device Anwesenheit
2018-10-15 06:42:45 cmd 2
2018-10-15 06:42:45 cmd_event Anwesenheit
2018-10-15 06:42:45 cmd_nr 2
2018-10-15 06:42:48 e_Anwesenheit_STATE present
2018-10-15 06:42:50 last_cmd cmd_2
2018-10-15 06:42:50 mode disabled
2018-10-15 06:42:50 state disabled
2018-10-16 00:00:01 timer_01_c01 16.10.2018 19:03:31
2018-10-15 23:00:00 timer_02_c01 16.10.2018 23:00:00
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'Anwesenheit','STATE') eq "present"
days:
devices:
0 Anwesenheit
all Anwesenheit
do:
0:
0 set wz.licht.decke RGB ffffff
1:
helper:
event present
globalinit 1
last_timer 2
sleeptimer -1
timerdev Anwesenheit
timerevent present
triggerDev Anwesenheit
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Anwesenheit
state: cmd_2
timerevents:
present
timereventsState:
state: present
triggerEvents:
present
triggerEventsState:
state: present
internals:
0 Anwesenheit:STATE
all Anwesenheit:STATE
interval:
0 -1
1 0
intervalfunc:
intervaltimer:
itimer:
all myTwilight
localtime:
0 1539709411
1 1539723600
readings:
realtime:
0 19:03:31
1 23:00:00
time:
0 [myTwilight:ss_civil]
1 23:00:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
triggertime:
1539709411:
localtime 1539709411
hash:
1539723600:
localtime 1539723600
hash:
uiState:
uiTable:
Attributes:
Caleus
Versuch mal diese Änderung ob es das macht was Du willst.
([?[myTwilight:ss_civil]-23:00] and [Anwesenheit:"present"]) (set wz.licht.decke RGB ffffff) DOELSEIF ([23:10])
Er sollte so in deinem Zeitraum einmalig triggern wenn "present" kommt und dann an dem Tag nie wieder.
Gruß Otto
Hallo Otto123
ich danke dir, ich habe es nun mal in benutzung, bin echt gespannt.
Caleus
Tja leider ist da wohl noch ein Fehler, also wir sind beide zu Hause, und es war auch keiner weg, aber leider wird trotzdem getriggert.
Caleus
Weil dein presence Gerät immer wieder Events erzeugt.
Du musst setzen:
attr Anwesenheit event-on-change-reading state
Gruß Otto
Ich würde aber nicht unbedingt Anwesenheit dafür nehmen, das ist ja ein Structure. Dann lieber gleich direkt bei den Devices das Attribut setzen welche in der structure stehen.
Hallo Cooltux
danke für dein Tipp, aber wie darf ich das verstehen bzw wie sollte ich das umsetzten? Es handelt sich hier ja um unsere Handys deren Status sich ja immer wieder mal ändert und das auch für andere Abfragen.
Caleus
Du setzt das Attribut event-on-change-reading state bei jedem Deiner PRESENCE Devices.
Ich glaube ich verstehe den hintergrund.
Es wird also nicht kontinuierlicher ins log geschrieben, sondern erst wenn Present oder Absent eintreten richtig?
Caleus
Zitat von: Caleus am 16 Oktober 2018, 19:35:23
Es handelt sich hier ja um unsere Handys deren Status sich ja immer wieder mal ändert und das auch für andere Abfragen.
Du verstehst das Prinzip falsch, es geht nicht darum wenn sich der Status ändert. Es geht darum wenn die Abfrage der Geräte immer wieder das Gleiche (also present) ergibt, soll dies zu keinem neuen Event führen. Nimm den Eventmonitor und schau Dir die Events an.
Du solltest die Presence Information auch noch glätten, present sofort und absent z.B. um 5 min verzögert. Sonst wirst Du nicht froh :D
Diese Trockenübung hier (https://heinz-otto.blogspot.com/2016/01/anwesenheitserkennung.html) ist nicht mehr ganz aktuell, aber das Prinzip gilt bei mir immer noch.
Gruß Otto
Wie Otto schon sagt, es geht nicht darum ins Log zu schreiben sondern wann wie ein Event erzeugt werden soll auf das Dein DOIF am Ende triggert (anspricht)
OK ich danke euch
also am besten unter PRESENCE absencetimeout setzen.
Caleus
Kenne ich (noch) nicht, aber wenn ich die Doku lese:
Zitatevent - A presence check by listening to FHEM events of other definitions.
...
absenceTimeout
(only in mode "event" applicable)
The timeout after receiving an "absent" event, before the state of the PRESENCE definition is switched to "absent". This can be used to verify the permanent absence by waiting a specific time frame to not receive an "present" event. If this timeout is reached with no "present" event received in the meantime, the presence state will finally be set to "absent". The timeout is given in HH:MM:SS format, where hours and minutes are optional. If this attribute is set to a valid value, the reading state and presence will be set to "maybe absent" during the absence verification.
Default Value is 0 (no absence verification)
Bist Du im event Mode?
Tja du da bin ich überfragt. Ich wüste nicht mal wo man das einstellt ?
Caleus
"eingestellt" wird das nicht, das ist eine Frage Deiner Definition / des Modus:
ZitatThe PRESENCE module provides several possibilities to check the presence of mobile phones or similar mobile devices such as tablets.
This module provides several operational modes to serve your needs. These are:
lan-ping - A presence check of a device via network ping in your LAN/WLAN.
fritzbox - A presence check by requesting the device state from the FritzBox internals (only available when running FHEM on a FritzBox!).
local-bluetooth - A presence check by searching directly for a given bluetooth device nearby.
function - A presence check by using your own perl function which returns a presence state.
shellscript - A presence check by using an self-written script or binary which returns a presence state.
event - A presence check by listening to FHEM events of other definitions.
lan-bluetooth - A presence check of a bluetooth device via LAN network by connecting to a presenced or collectord instance.
Each mode can be optionally configured with a specific check interval and a present check interval.
check-interval - The interval in seconds between each presence check. Default value: 30 seconds
present-check-interval - The interval in seconds between each presence check in case the device is present. Otherwise the normal check-interval will be used.
Define
Mode: lan-ping
define <name> PRESENCE lan-ping <ip-address> [ <check-interval> [ <present-check-interval> ] ]
Checks for a network device via PING requests and reports its presence state.
Example
define iPhone PRESENCE lan-ping 192.168.179.21
Ich habe keine Ahnung sorry.
Aber hier mal die RAW Definition
defmod PBT PRESENCE local-bluetooth 1C:23:2C:xx:xx:xx
attr PBT userattr presence presence_map structexclude
attr PBT event-on-change-reading state
attr PBT presence Anwesenheit
setstate PBT present
setstate PBT 2018-10-16 21:02:46 .absenceThresholdCounter 0
setstate PBT 2018-10-16 21:02:46 .presenceThresholdCounter 0
setstate PBT 2018-10-16 21:02:46 device_name Samsung Galaxy S7 P
setstate PBT 2018-10-13 15:21:44 model local-bluetooth
setstate PBT 2018-10-16 21:02:46 presence present
setstate PBT 2018-10-16 21:02:46 state present
und 2 Bilder im Anhang.
Caleus
Ich habe auch keine Ahnung aber
Zitatdefmod PBT PRESENCE local-bluetooth 1C:23:2C:xx:xx:xx
Du verwendest local-bluetooth und nicht event.
Zumindest verstehe ich die Doku so 8)
Mach mal so
defmod PBT PRESENCE local-bluetooth 1C:23:2C:xx:xx:xx 10 60
attr PBT absenceThreshold 24
Bei Abwesenheit prüft er alle 10s auf Anwesenheit und bei Anwesenheit alle 60s ob Du Abwesend bist.
Ausserdem wechselt er erst nach 24x10s Abwesenheit tatsächlich in den absent, vorher bist Du maybe absent
Leider klapt es bis jetzt nicht, es triggert auch wenn wir zu hause sind.
Ein list aller presence Device und des DOIF bitte.