Hallo, eigentlich eine simple Sache, aber ich hab wohl Tomaten auf den Augen.
Das hier funktioniert:
([geofancy] =~ "id:614477FB-AB5E-4ACD-BDFB-C0E52957F9E6 trig:1")(set HUEDevice3 off) DOELSEIF ([geofancy] =~ "id:614477FB-AB5E-4ACD-BDFB-C0E52957F9E6 trig:0")(set HUEDevice3 rgb 45FF89 : pct 50 : on)
Das hier auch:
([pr_carsten_phone] eq "present")(set HUEDevice3 off) DOELSEIF ([pr_carsten_phone] eq "absent")(set HUEDevice3 rgb 45FF89 : pct 50 : on)
Eine Kombination aus beidem bekomme ich nicht zum laufen?
([pr_carsten_phone] eq "present" or [geofancy] =~ "id:614477FB-AB5E-4ACD-BDFB-C0E52957F9E6 trig:1")(set HUEDevice3 off) DOELSEIF ([pr_carsten_phone] eq "absent" or [geofancy] =~ "id:614477FB-AB5E-4ACD-BDFB-C0E52957F9E6 trig:0")(set HUEDevice3 rgb 45FF89 : pct 50 : on)
Hallo Tyraldur und willkommen im Forum,
folgender Hinweis. Bitte nutze für Codezeilen die Codetags (#-Symbol bei den Smilies)
Zu deiner Frage. Ich sehe auf den ersten Blick keinen Fehler. Daher die Frage, ob die beiden auch sich in verschiedenen Zuständen befinden? Geschätzt würde ich sagen, dass pr_carsten_phone present ist, wenn geofancy deinen angegeben Wert annimmt. Kann das sein? Dann würde das DOIF natürlich nicht Triggern.
Hilfreich ist auch immer ein List der beteiligten Device um eventuelle Fehler zu sehen.
Edit:
Rechtschreibung
Zum ausschalten würde ich mit und verknüpfen.
Mit dem Handy online, daher kurz gefasst...
Moin Amenophis86,
danke für deine Unterstützung.
pr_carsten_phone ist ein PRESENCE Device welches mein Telefon WLAN connect prüft.
geofancy ist GEOFANCY und die ID von meinem Zuhause.
Da beides nicht 100% zuverlässig ist, wollte ich sie kombinieren. Also mach was wenn entweder pr_carsten_phone=present oder geofancy mit der ID und trig 1.
Quasi was als erstes eintritt?
ja, schon klar. Da bei deinem geposteten Code nix auffällig ist, muss der Hund wo anders begraben liegen. Daher bitte ein list von dem DOIF posten, in # Code Tags.
Joa aber dann klappt ja auch dein DOIF schätze ich mal. Und zwar soll es nur dann schalten, wenn es nicht zuverlässig gemeldet wird. Jetzt ist die Frage, ist dieser Zustand mal eingetreten, seit du das DOIF erstellt hast. Ist er bisher nämlich nicht eingetreten, dann muss das DOIF ja auch nicht schalten.
Der Zustand ist simuliert eingetreten.
setreading pr_carsten_phone state absent
Oder mit der GeofancyApp auf dem Handy den Webhook geschickt.
Hier das list. Der Befehl war mir neu, danke dafür.
Internals:
DEF ([pr_carsten_phone] =~ "present" or [geofancy] =~ "id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:1")(set HUEDevice3 off) DOELSEIF ([pr_carsten_phone] =~ "absent" or [geofancy] =~ "id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:0")(set HUEDevice3 rgb 45FF89 : pct 50 : on)
NAME di_carsten_presence
NR 40
NTFY_ORDER 50-di_carsten_presence
STATE cmd_1
TYPE DOIF
READINGS:
2017-12-07 07:36:38 Device pr_carsten_phone
2017-12-07 07:33:37 cmd 1
2017-12-07 07:33:37 cmd_event geofancy
2017-12-07 07:33:37 cmd_nr 1
2017-12-07 07:33:46 e_geofancy_STATE id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:1 date:1512628426 lat:50.17453494020754 long:8.735587634154349 dev:8F6F145E-803B-4BA2-A6BE-05167CE2F91F devAlias=-
2017-12-07 07:36:38 e_pr_carsten_phone_STATE present
2017-12-07 07:33:37 state cmd_1
condition:
0 InternalDoIf($hash,'pr_carsten_phone','STATE') =~ "present" or InternalDoIf($hash,'geofancy','STATE') =~ "id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:1"
1 InternalDoIf($hash,'pr_carsten_phone','STATE') =~ "absent" or InternalDoIf($hash,'geofancy','STATE') =~ "id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:0"
devices:
0 pr_carsten_phone geofancy
1 pr_carsten_phone geofancy
all pr_carsten_phone geofancy
do:
0:
0 set HUEDevice3 off
1:
0 set HUEDevice3 rgb 45FF89 : pct 50 : on
helper:
event present,presence: present
globalinit 1
last_timer 0
sleeptimer -1
timerdev pr_carsten_phone
timerevent present,presence: present
triggerDev pr_carsten_phone
timerevents:
present
presence: present
timereventsState:
state: present
presence: present
triggerEvents:
present
presence: present
triggerEventsState:
state: present
presence: present
internals:
0 pr_carsten_phone:STATE geofancy:STATE
1 pr_carsten_phone:STATE geofancy:STATE
all pr_carsten_phone:STATE geofancy:STATE
itimer:
readings:
regexp:
0:
all:
state:
STATE:
trigger:
Attributes:
Ach ich seh grade, in dem list verwende ich bei pr_carsten_phone =~ anstatt eq wie im Einganspost. Ich teste mich halt durch alle mir erdenklichen Szenarien. Eine funktionierende habe ich aber noch nicht gefunden.
Das DOIF sieht gut aus und wenn die Bedingungen einzeln funktioniert haben, sehe ich keinen Grund, warum sie nicht auch 'or-Verknüpft' funktionierenn sollten.
Ich gehe daher mal davon aus, das die auslösenden Events ausbleiben. Also presence und geofancy nicht funktionieren.
EDIT:
du hast kein do always gesetzt, daher wird der gleiche Zustand nicht noch einmal ausgelöst, macht ja prinzipiell auch keinen Sinn - nur das du da nicht beim Testen drüber stolperst.
Zitat von: automatisierer am 07 Dezember 2017, 08:14:46
Ich gehe daher mal davon aus, das die auslösenden Events ausbleiben. Also presence und geofancy nicht funktionieren.
EDIT:
du hast kein do always gesetzt, daher wird der gleiche Zustand nicht noch einmal ausgelöst, macht ja prinzipiell auch keinen Sinn - nur das du da nicht beim Testen drüber stolperst.
Ob do always gesetzt ist oder nicht macht keinen Unterschied.
Wie schon geschrieben, ich setze das Event entweder mit setreading oder aus der Geofancy App heraus und im Event Monitor kann ich die Ereignisse sehen:
2017-12-07 08:22:09 PRESENCE pr_carsten_phone absent
2017-12-07 08:26:15 GEOFANCY geofancy id:614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig:0 date:1512631575 lat:50.17453494020754 long:8.735587634154349 dev:8F6F145E-803B-4BA2-A6BE-05167CE2F91F devAlias=-
zum ausschalten oder:
nehmen wir an: Bedingung 1 ist wahr und Bedingung 2 falsch.
Damit wären BEIDE DOIF Zweige wahr...
Für mein Anwesenheitsdoif habe ich:
Frau ODER Ich zuhause --> AN
Frau UND Ich nicht zuhause --> AUS
Du willst ja nicht auf Abwesend schalten wenn Du im WLAN bist aber Geofancy sagt du bist weg...
Daher der Tip die Abwesenheitsprüfung mit Oder zu machen.
ZitatDu willst ja nicht auf Abwesend schalten wenn Du im WLAN bist aber Geofancy sagt du bist weg...
Ich denke das soll es doch, da Geofancy sich nicht 100%ig zuverlässig meldet. In dem Fall sagt Geofancy "present" und Presence "absent"
Aber dadurch kann cmd_2 nie wahr werden. DOIF wird getriggert und die Bedingungen geprüft, eine der Bedingungen von cmd_1 ist wahr und fertig...
Du solltest das DOIF auf "Eventauswertung umstellen" dann löst jedes einzelne Event das entsprechende cmd aus.
([pr_carsten_phone:"present"] or [geofancy:"id.614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig.1"])(set HUEDevice3 off)
DOELSEIF
([pr_carsten_phone:"absent"] or [geofancy:"id.614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig.0"])(set HUEDevice3 rgb 45FF89 : pct 50 : on)
Naja,
Geofancy: present / presence: absent --> beide CMDs sind wahr
Geofancy: absent / presence: present --> beide CMDs sind wahr
Geofancy: present / presence: present --> nur CMD_1
Geofancy: absent / presence: absent --> nur CMD_2
Gerade der Fall dass nur eines davon unwahr sein muss für CMD_2 sorgt hier für den Genickbruch.
Das kann so nicht funktionieren.
Ja, ihr habt recht. DOIF ist immer wahr und cmd1 wird bei do always auch immer ausgeführt. Da ist er mein Denkfehler.
Ich probier das mal mit der Eventauswertung, wobei mir der Unterschied noch nicht ganz klar ist.... aber ich les erstmal die Doku dazu.
Vielen Dank Euch allen.
Soviel Doku gab es nicht zu lesen und die Logik ist mir klar geworden. Es wird nur das einzelne Event ausgewertet und nicht der Status beider Devices.
Nun macht es was es soll. Super, vielen Dank nochmal.
postest Du noch deinen Ergebis-Code?
Damit es für eventuelle andere suchende findbar ist.
Bei Eventauswertung ist eine Bedingung immer nur im Moment des auftretens des Events wahr, wie bei notify.
Bei Readingauswertung wird das DOIF beim auftreten eines Events nur getriggert und dann werden die Readings geprüft ob wahr/falsch. Da immer von "links nach rechts" geprüft wird und nur so weit geprüft wird bis ein DOIF Zweig wahr ist, bleibt das DOIF in deinem Fall immer bei cmd1 hängen, so lange eine der darin enthaltenen Bedinungen wahr ist.
EDIT:
da is er schon fertig und ich tippe mir mal wieder die Finger wund... 8)
Zitat von: Frank_Huber am 07 Dezember 2017, 11:04:05
postest Du noch deinen Ergebis-Code?
Damit es für eventuelle andere suchende findbar ist.
Ich hab quasi das Beispiel von automatisierer vorhin 1:1 kopiert, hat direkt gemacht was es soll.
([pr_carsten_phone:"present"] or [geofancy:"id.614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig.1"])(set HUEDevice3 off)
DOELSEIF
([pr_carsten_phone:"absent"] or [geofancy:"id.614477FB-AB5E-47CD-BDBB-C0E52957F9E6 trig.0"])(set HUEDevice3 rgb 45FF89 : pct 50 : on)
Wenn ich absent bin, schalte ich halt noch die Kaffeemaschine aus usw.
EDIT:
Das Beispiel war von automatisierer