Hallo,
ich habe folgendes "gebaut".
Homestatus mit Lightscene realisiert. Scene Home,Away,Sleep vorhanden.
Anwesenheit wird mit Gtags überwacht.
Wenn Anwesenheit absent soll Homestatus away sein. Dafür habe ich:
define Homestatuskontrolle_Doif DOIF ([Anwesenheit] eq "absent") (set Homestatuskontrolle off;;set Homestatus scene away) DOELSE (set Homestatuskontrolle on;;set Homestatus scene home)
Das klappt auch alles, aber wenn ich jetzt fhem shutdown restart mache schaltet fhem immer das Doif so das erst Homestatus away und dann home geschaltet wird.
Könnt ihr mir da helfen?
Oder muss man den Homestatus anders realisieren?
Edit:
habe auf anraten DOIFtools "installiert" und nach dem wiki eintrag eingestellt. Jetzt zeigt mir DOIFTools alle DOIF an, bis auf das Homestatuskontrolle_Doif.
Edit2: nach einem shutdown restart zeigt er mir jetzt auch das Homestatuskontrolle_Doif an
Hm wenn ich jetzt shutdown restart mache taucht das Problem nicht mehr auf. Ich habe nix geändert bis auf DOIFTools zu installieren.
Keine Ahnung was los ist.
Das DOIF sieht auf den ersten Blick korrekt aus (mal abgesehen von den zwei ";;", da gehört laut Doif Syntax ein "," hin). Die Frage ist eher, warum es getriggert wird und da könnte dir das von Ellert vorgeschlagene logging helfen.
Also wenn Du hier kein Eventlog oder DOIFtoolsLog zu dem Verhalten postest, dann würde ich raten und behaupten, dass das PRESENCE Gerät bei einem Neustart den Gtag bei der ersten Abfrage "absent" meldet. Deshalb wird der erste Zweig ausgeführt und nach Erkennen des Gtag wird der DOELSE-Zweig augeführt.
Ob das stimmt kannst Du wahrscheinlich in den Logfiles erkennen.
Zur Lösung des Problems könntest Du die Abfrage auf "present" umstellen und die Befehle tauschen.
Habe jetzt die ;; durch , ersetzt. Und den Vorschlag von Ellert mit dem umstellen und tauschen versucht.
([Anwesenheit] eq "present") (set Homestatuskontrolle on,set Homestatus scene home) DOELSE (set Homestatuskontrolle off,set Homestatus scene away)
Bringt nix, aber hier nun die Log:
2017-02-12_12:55:54.761 Anwesenheit present
2017-02-12_12:55:54.798 Anwesenheit present
2017-02-12_12:56:54.676 Anwesenheit absent
2017-02-12_12:56:54.691 Homestatuskontrolle off
2017-02-12_12:56:55.038 Homestatus away
2017-02-12_12:56:55.049 Homestatuskontrolle away
2017-02-12_12:56:55.102 DOIFtoolsLog <a name="list1"><a name="listing"></a><strong>[1] +++++ Listing <a href="/fhem?detail=Homestatuskontrolle_Doif">Homestatuskontrolle_Doif</a>:cmd: 2 +++++</strong>
<b>jump to: prev <a href="#list2">next</a> Listing</b><br>DOIF-Version: 98_DOIF.pm 13391 2017-02-11 16:57:02Z Damian<br>Internals:
DEF ([<a href="/fhem?detail=Anwesenheit">Anwesenheit</a>] eq "present") (set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> on,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home) DOELSE (set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> off,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene away)
INTRIGGER 1
NAME Homestatuskontrolle_Doif
NR 997
NTFY_ORDER 50-Homestatuskontrolle_Doif
NTFY_TRIGGERTIME 2017-02-12 12:56:55
STATE cmd_2
TYPE DOIF
CHANGED:
cmd_nr: 2
cmd: 2
cmd_event: Anwesenheit
cmd_2
CHANGEDWITHSTATE:
cmd_nr: 2
cmd: 2
cmd_event: Anwesenheit
state: cmd_2
Readings:
2017-02-12 12:56:54 Device Anwesenheit
2017-02-12 12:56:55 cmd 2
2017-02-12 12:56:55 cmd_event Anwesenheit
2017-02-12 12:56:55 cmd_nr 2
2017-02-12 12:56:54 e_Anwesenheit_STATE absent
2017-02-12 12:56:55 state cmd_2
Condition:
0 InternalDoIf($hash,'Anwesenheit','STATE') eq "present"
Devices:
0 <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>
all <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>
Do:
0:
0 set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> on,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home
1:
0 set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> off,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene away
Helper:
cur_cmd_nr Trigger Anwesenheit
event absent
globalinit 1
last_timer 0
sleeptimer -1
timerdev Anwesenheit
timerevent absent
triggerDev Anwesenheit
timerevents:
absent
timereventsState:
state: absent
triggerEvents:
absent
triggerEventsState:
state: absent
Internals:
0 <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>:STATE
all <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>:STATE
Itimer:
Readings:
Regexp:
0:
All:
State:
Trigger:
Attributes:
2017-02-12_12:56:55.146 Homestatuskontrolle_Doif cmd_nr: 2
2017-02-12_12:56:55.146 Homestatuskontrolle_Doif cmd: 2
2017-02-12_12:56:55.146 Homestatuskontrolle_Doif cmd_event: Anwesenheit
2017-02-12_12:56:55.146 Homestatuskontrolle_Doif cmd_2
2017-02-12_12:56:55.180 Anwesenheit present
2017-02-12_12:56:55.194 Homestatuskontrolle on
2017-02-12_12:56:55.895 Homestatus home
2017-02-12_12:56:55.905 Homestatuskontrolle home
2017-02-12_12:56:55.959 DOIFtoolsLog <a name="list2"><a name="listing"></a><strong>[2] +++++ Listing <a href="/fhem?detail=Homestatuskontrolle_Doif">Homestatuskontrolle_Doif</a>:cmd: 1 +++++</strong>
<b>jump to: <a href="#list1">prev</a> <a href="#list3">next</a> Listing</b><br>DOIF-Version: 98_DOIF.pm 13391 2017-02-11 16:57:02Z Damian<br>Internals:
DEF ([<a href="/fhem?detail=Anwesenheit">Anwesenheit</a>] eq "present") (set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> on,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home) DOELSE (set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> off,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene away)
INTRIGGER 1
NAME Homestatuskontrolle_Doif
NR 997
NTFY_ORDER 50-Homestatuskontrolle_Doif
NTFY_TRIGGERTIME 2017-02-12 12:56:55
STATE cmd_1
TYPE DOIF
CHANGED:
cmd_nr: 1
cmd: 1
cmd_event: Anwesenheit
error: set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home: Unknown argument wlan5 or wrong parameter(s), choose one of call checkAPIs:noArg diversity guestWlan:on,off password ring tam update:noArg wlan:on,off
cmd_1
CHANGEDWITHSTATE:
cmd_nr: 1
cmd: 1
cmd_event: Anwesenheit
error: set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home: Unknown argument wlan5 or wrong parameter(s), choose one of call checkAPIs:noArg diversity guestWlan:on,off password ring tam update:noArg wlan:on,off
state: cmd_1
Readings:
2017-02-12 12:56:55 Device Anwesenheit
2017-02-12 12:56:55 cmd 1
2017-02-12 12:56:55 cmd_event Anwesenheit
2017-02-12 12:56:55 cmd_nr 1
2017-02-12 12:56:55 e_Anwesenheit_STATE present
2017-02-12 12:56:55 error set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home: Unknown argument wlan5 or wrong parameter(s), choose one of call checkAPIs:noArg diversity guestWlan:on,off password ring tam update:noArg wlan:on,off
2017-02-12 12:56:55 state cmd_1
Condition:
0 InternalDoIf($hash,'Anwesenheit','STATE') eq "present"
Devices:
0 <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>
all <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>
Do:
0:
0 set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> on,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home
1:
0 set <a href="/fhem?detail=Homestatuskontrolle">Homestatuskontrolle</a> off,set <a href="/fhem?detail=Homestatus">Homestatus</a> scene away
Helper:
cur_cmd_nr Trigger Anwesenheit
event present
globalinit 1
last_timer 0
sleeptimer -1
timerdev Anwesenheit
timerevent present
triggerDev Anwesenheit
timerevents:
present
timereventsState:
state: present
triggerEvents:
present
triggerEventsState:
state: present
Internals:
0 <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>:STATE
all <a href="/fhem?detail=Anwesenheit">Anwesenheit</a>:STATE
Itimer:
Readings:
Regexp:
0:
All:
State:
Trigger:
Attributes:
2017-02-12_12:56:55.014 Homestatuskontrolle_Doif cmd_nr: 1
2017-02-12_12:56:55.014 Homestatuskontrolle_Doif cmd: 1
2017-02-12_12:56:55.014 Homestatuskontrolle_Doif cmd_event: Anwesenheit
2017-02-12_12:56:55.014 Homestatuskontrolle_Doif error: set Homestatus scene home: Unknown argument wlan5 or wrong parameter(s), choose one of call checkAPIs:noArg diversity guestWlan:on,off password ring tam update:noArg wlan:on,off
2017-02-12_12:56:55.014 Homestatuskontrolle_Doif cmd_1
Hilft das weiter?
Zitat2017-02-12_12:55:54.761 Anwesenheit present
2017-02-12_12:55:54.798 Anwesenheit present
2017-02-12_12:56:54.676 Anwesenheit absent
2017-02-12_12:56:55.180 Anwesenheit present
Das deutet auf eine instabile Erkennung Deines Gtag hin. Du solltest zuerst versuchen die Erkennung zu verbessern. PRESENCE bietet einige Attribute dazu an oder die Empfangsbedingungen verbessern, 5 m Entfernung oder eine Geschossdecke sind schon ein ziemliches Hindernis.
Dann hast Du noch ein weiteres Problem, das aus der Fehlermeldung ersichtlich ist, hier müsstest Du den richtigen set-Befehl für das Homestatus-Gerät angeben.
Zitaterror: set <a href="/fhem?detail=Homestatus">Homestatus</a> scene home: Unknown argument wlan5 or wrong parameter(s), choose one of call checkAPIs:noArg diversity guestWlan:on,off password ring tam update:noArg wlan:on,off
Wenn Du die Fehlermeldung übersichtlicher in der richtigen Formatierung sehen möchtest, solltest Du das Logfile direkt aus DOIFtools aufrufen.
Zitat von: Ellert am 12 Februar 2017, 13:44:40
Das deutet auf eine instabile Erkennung Deines Gtag hin. Du solltest zuerst versuchen die Erkennung zu verbessern. PRESENCE bietet einige Attribute dazu an oder die Empfangsbedingungen verbessern, 5 m Entfernung oder eine Geschossdecke sind schon ein ziemliches Hindernis.
Dann hast Du noch ein weiteres Problem, das aus der Fehlermeldung ersichtlich ist, hier müsstest Du den richtigen set-Befehl für das Homestatus-Gerät angeben.Wenn Du die Fehlermeldung übersichtlicher in der richtigen Formatierung sehen möchtest, solltest Du das Logfile direkt aus DOIFtools aufrufen.
wegen der Fehlermeldung das ist mir auch aufgefallen, weiß aber nicht was der Fehler sein soll, Fritzbox set wlan5 on bzw. off gibt es.
Der Gtag liegt knapp 1m vom Raspi entfernt.....
define Gtag PRESENCE lan-bluetooth 7C:2F:80:C4:6A:11 127.0.0.1:5333 120 120
meinst Du ich sollte mit absenceThreshold und presenceThreshold arbeiten? Reicht dann da 2 als Wert?
Teste das mal mit Wert 2 aus.
Edit:
Leider ohne Erfolg schaltet trozdem Homestatus um.
Bei dem Gtag Problem kann ich wenig helfen, nur wenn PRESENCE Gerät ständig zwischen absent und present hin und her springt ist das für Dein DOIF nicht zu gebrauchen und für eine Lösung mit notify vermutlich auch nicht.
Schade...
kannst Du vielleicht bei dem anderen Problem helfen? https://forum.fhem.de/index.php/topic,66927.0.html
wenn shutdown restart gemacht wird ist der status ja present. Also startet FHEM neu und dann findet Homestatus_DOIF nach dem neustart ja present vor und schaltet. So verstehe ich das.
Also müsste man irgendwie sagen das nach Neustart keine neue Abfrage kommt. Was meint ihr?
wie ist denn dein presence device definiert? Hast du event-on-change-reading gesetzt?
nein kein event-on-change-reading gesetzt bei den gtags. was muss da denn stehen? .*?
sowas wie
attr <dev> event-on-change-reading state,presence
schadet auf jeden Fall nicht, dadurch wird nur ein Ereignis erzeugt, wenn sich der Status tatsächlich ändert. Das löst allerdings nicht dein Problem, dass der Tag gelegentlich auf "absent" springt...
Grüße,
Oli
der gtag springt nur auf absent wenn ich shutdown restart mache oder falls ich was in der fhem.cfg direkt ändere und speichere. sonst macht er das ja nicht.
naja event-on-change-reading habe ich jetzt so gesetzt. Und wie du schon sagtest Problem ist dadurch nicht gelöst...
Die direkte Bearbeitung der cfg kann unerwartete Effekte zeigen, daher wird unerfahrenen Benutzern davon abgeraten.
Wenn die Gtag-Erkennung beim rereadcfg spinnt würde ich es auf die direkte Bearbeitung der cfg zurückführen.
Aufgrund meiner Erfahrungen mit der direkten Bearbeitung der cfg, verwende ich nur den Def-Editor.
Japp gehe jetzt auch weg vom direkten bearbeiten der cfg...