Problem Doif Homestatus Lightscene GTAG

Begonnen von rizo, 12 Februar 2017, 10:30:28

Vorheriges Thema - Nächstes Thema

rizo

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

rizo

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.

KernSani

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.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ellert

#3
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.

rizo

#4
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?

Ellert

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.

rizo

#6
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.

Ellert

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.

rizo


rizo

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?

KernSani

wie ist denn dein presence device definiert? Hast du event-on-change-reading gesetzt?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rizo

nein kein event-on-change-reading gesetzt bei den gtags. was muss da denn stehen? .*?

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rizo

#13
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...

Ellert

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.