FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mg64 am 23 April 2016, 19:35:07

Titel: (Gelöst) zu doof für doif?
Beitrag von: mg64 am 23 April 2016, 19:35:07
Hallo,
ich beiße mir jetzt seit geraumer Zeit die Zähne an fhem aus - mit mehr oder, aktuell weniger Erfolg.

Absicht ist: wenn ein Fensterkontakt "open" sendet und mein Handy "absent" erkannt wird, soll die bot message rausgehen.
Problem ist die "Verallgemeinerung auf alle Fenster und die Verknüpfung mit der Presence...

Wahrscheinlich nur ein Syntaxfehler, aber ich hab jetzt gefühlt 98 Varianten probiert und komme nicht weiter.

Vielleicht hat jemand einen Lösungsvorschlag für mich, DANKE im voraus  ;)

define di_window_open DOIF ([Window|Fenster] eq "Open" and [Meik_Handy] eq "absent") (set fhem_mg64_bot message di Balkontuer oder Fenster offen)

PS: Die ganzen Proficodings die man im Forum findet möchte ich nicht nutzen - meine Hoffnung war DOIF so zu verstehen, daß ich möglichst viele Problemstellungen damit "erschlagen" kann.
Titel: Antw:zu doof für doif?
Beitrag von: Papaloewe am 23 April 2016, 19:42:13
ZitatDie ganzen Proficodings die man im Forum findet möchte ich nicht nutzen - meine Hoffnung war DOIF so zu verstehen, daß ich möglichst viele Problemstellungen damit "erschlagen" kann.

Das kannst du auch mit Hilfe von DOIF, nur nicht aufgeben.
Meistens liegt es nur an Kleinigkeiten.

Schau mal nach, ob der Status von denen Fesntern wirklich "Open" ist und nicht "open".

Viel Erfolg!

Gruß
Thomas
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 23 April 2016, 19:50:19
Danke für die schnelle Antwort,
ich hab beides schon probiert - ohne Erfolg.
Aktuell zeigt DOIF folgenden Fehlerstatus:

timer_1_c1 error: Wrong timespec Window: either HH:MM:SS or {perlcode}

interpretiert die gerade Klammer wohl als Zeitangabe...
Titel: Antw:zu doof für doif?
Beitrag von: Morgennebel am 23 April 2016, 20:00:55
Dein Window|Fenster wird von DOIF als wochentags wiederholung erkannt, nicht als oder.

Versuche ([Fenster] eq "open" or [Window] eq "open")

Ciao, MN
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 23 April 2016, 20:07:40
Hallo, hab Fenster komplett rausbekommen, immer noch die Fehlermeldung...
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 23 April 2016, 20:08:54
Zitat[Window|Fenster]
Die mehrfache Angabe von Devicces/Readings ist in dieser Form nicht erlaubt, s. http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

also entweder (([Window] eq "Open" or [Fenster] eq "Open") and [Meik_Handy] eq "absent") (set ..) oder, wie hier beschrieben: http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

statt [Window|Fenster] eq "Open" dies ["Window|Fenster:Open"]
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 23 April 2016, 20:16:42
ZitatHallo, hab Fenster komplett rausbekommen, immer noch die Fehlermeldung...

Poste mal die Listings der Geräte di_window_open, Window, Fenster
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 23 April 2016, 20:30:57
Werd ich ausprobieren, in deinem Code ist auf jeden Fall eine runde Klammer mehr als bei mir. Danke erst mal. Melde morgen, ob es funktioniert hat.

Gesendet von meinem YOGA Tablet 2-830L mit Tapatalk

Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 13:52:01
Mojn Mojn,
danke noch mal für die Hilfestellungen gestern.
Ich hab mal noch ein bißchen experimentiert und bin jetzt soweit gekommen:

funktioniert jetzt:
define di_window_open DOIF (([EG_Buero_Fenster:Window] eq "Open") and [Meik_Handy] eq "present") (set fhem_mg64_bot message Buero Fenster offen)

Die Ursache warum "Window" nicht ausgewertet wurde, war: ich hatte zuvor mit Notify rumexperimentiert.
Weil die Meldungen in 2 Minutenabständen wiedeholt wurden hab ich:

attr EG_Buero_Fenster event-on-change-reading state

konfiguriert = Meldung nur noch bei Wechsel von "state" auf "open" + keine readings mehr.

Damit komme ich soweit klar, daß ich für jedes Fenster jetzt ein eigenes Notify mit der passenden Benachrichtigung konfigurieren kann,
hat ja auch den Charme, daß ich sehe welches Fenster offen steht  ;)

Unklar ist mir aber immer noch warum die Angabe ["indow"] nicht wie beschrieben als Platzhalter funktioniert...

Schönes Rest-Wochenende an alle
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 16:34:34
ZitatUnklar ist mir aber immer noch warum die Angabe ["indow"] nicht wie beschrieben als Platzhalter funktioniert...

Was konkret meinst Du damit? Wo ist das beschrieben? Wie sieht Deine Definition aus?
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 16:39:48
Ich zitiere mal aus Caommand Referenz für DOIF:

"Beispiele für Regex-Angaben:

["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten "

dementsprechend hatte ich gedacht:

define di_window_open DOIF ((["indow"] eq "Open") and [Meik_Handy] eq "present") (set

müßte für alle Devices die indow enthalten während Meik_Handy present die Meldung anstossen...
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 16:41:13
ich glaub ich hab´s jetzt...

indow  ist eigentlich das Reading, nicht das Device?

korrekt?
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 16:49:57
Ja, also [":indow"] müsste klappen. Du könntest auch $DEVICE und  $EVENT in der Nachricht nutzen, um das auslösende Gerät anzuzeigen
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 16:54:10
der : nach den Anführungszeichen trennt und verweist darauf, daß indow im Reading enthalten sein muß - korrekt?

Wo müßte ich dann $DEVICE oder $EVENT angeben?
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 16:59:22
Zitatder : nach den Anführungszeichen trennt und verweist darauf, daß indow im Reading enthalten sein muß - korrekt?
Ja.
ZitatWo müßte ich dann $DEVICE oder $EVENT angeben?
Im set- Befehl, etwa so: set message "Das $DEVICE ist $EVENT"
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 17:10:28
hab mal folgendes getestet:

define di_window_open_EG_Buero DOIF (([":indow] eq "Open") and [Meik_Handy] eq "present") (set fhem_mg64_bot message $DEVICE ist $EVENT)

keine Meldung
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 17:13:52
Wo ist das rechte Anführungszeichen?
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 17:19:51
berechtigter Einwand  ;D jetzt hab ich auch:

matched_event_c1_1 +
e_Meik_Handy_STATE present
aber keine Meldung
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 17:24:52
Git es Fehlermeldungen im Log?
Poste mal ein Listing des DOIF mit list <DOIFname>
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 17:29:29
Internals:
   DEF        (([":indow"] eq "Open") and [Meik_Handy] eq "present") (set fhem_mg64_bot message $DEVICE ist $EVENT)
   NAME       di_window_open_EG_Buero
   NR         122
   NTFY_ORDER 50-di_window_open_EG_Buero
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-04-24 17:26:26   Device          OG_Sabrina_Balkontuer
     2016-04-24 15:21:37   cmd_event       EG_Buero_Fenster
     2016-04-24 15:21:37   cmd_nr          2
     2016-04-24 17:00:02   e_EG_Buero_Fenster_Window Closed
     2016-04-24 15:13:50   e_Meik_Handy_STATE present
     2016-04-24 17:26:26   matched_event_c1_1 Window: Closed
     2016-04-24 15:21:37   state           cmd_2
     2016-04-24 17:07:18   timer_1_c1      error: Wrong timespec ":indow: either HH:MM:SS or {perlcode}
   Condition:
     0          (EventDoIf('',$hash,'indow',0) eq "Open") and InternalDoIf($hash,'Meik_Handy','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present"
   Devices:
     0           Meik_Handy
     all         Meik_Handy
   Do:
     0:
       0          set fhem_mg64_bot message $DEVICE ist $EVENT
     1:
   Helper:
     event      Window: Closed
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   OG_Sabrina_Balkontuer
     timerevent Window: Closed
     triggerDev OG_Sabrina_Balkontuer
     timerevents:
       Window: Closed
       Reliability: ok
       Battery: ok
       Closed
     triggerEvents:
       Window: Closed
       Reliability: ok
       Battery: ok
       Closed
   Internals:
     0           Meik_Handy:STATE
     all         Meik_Handy:STATE
   Itimer:
   Readings:
   Regexp:
     0:
       0          :indow
     All:
       0          :indow
   State:
   Trigger:
Attributes:
   room       DOIF,Zentral


sieht für mich wirr aus, sorry

Trotzdem vielen Dank für Deine Geduld
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 17:36:58
([":indow"] eq "Open") ist falsch, da Du auf Events triggerst, ein Event ist nur wahr oder falsch, also [":indow: Open"]
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 18:01:51
hat 1x funktioniert: "EG_Buero_Fenster ist Window: Open"

Jetzt sehe ich in den Readings auch den Presence Status nicht mehr...
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 18:07:00
Schau mal hier: http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

ZitatJetzt sehe ich in den Readings auch den Presence Status nicht mehr...
Hat sich wohl noch nicht wieder gemeldet ;)
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 18:21:59
das Handy wird "present" angezeigt taucht aber im doif nicht mehr auf,
das Fenster wurde geschlossen und wieder geöffnet - die Readings und Statusänderungen hab ich im Event Monitor beobachtet,
für mein Verständnis müßte jetzt ja auch eine Meldung "EG_Buero_Fenster ist Window: Closed" kommen.
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 18:57:39
poste ein Listing des DOIF
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 19:06:44
Ich will dir ja nicht den ganzen Sonntag versauen  ;)

ich hab jetzt mal folgendes Coding probiert:
define di_window_open_EG_Buero DOIF (([":indow: Open"]) and [Meik_Handy] eq "present") (set fhem_mg64_bot message $DEVICE ist $EVENT)
attr di_window_open_EG_Buero do always


= funktioniert soweit, daß jetzt verschiedene Fenster gemeldet haben - halt bei jeder Statusabfrage

ein DOELSE am Ende hat nicht funktioniert
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 19:23:08
ggf. das Triggern für [Meik_Handy] eq "present" ausschalten, sonst gibt es auch eine Meldung für die Statusaktualisierung des Telefons.

[?Meik_Handy] eq "present"

http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger

und ggf. bei den Fenstern das Attribut event-on-change-reading setzen.
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 19:27:40
fürs Handy kommen keine Meldungen, aber jedes offene Fenster halt alle 3 Minuten... nervt schon ein bißchen  ;)
Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 19:28:51
Wegen der Überschneidung, hier noch mal:


und ggf. bei den Fenstern das Attribut event-on-change-reading setzen.
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 19:32:04
wenn ich das richtig verstanden habe muß ich die readings die triggern sollen kommagetrennt hinzufügen - korrekt?
Titel: Antw:zu doof für doif?
Beitrag von: Damian am 24 April 2016, 19:39:12
Zitat von: mg64 am 24 April 2016, 19:06:44
Ich will dir ja nicht den ganzen Sonntag versauen  ;)

ich hab jetzt mal folgendes Coding probiert:
define di_window_open_EG_Buero DOIF (([":indow: Open"]) and [Meik_Handy] eq "present") (set fhem_mg64_bot message $DEVICE ist $EVENT)
attr di_window_open_EG_Buero do always


= funktioniert soweit, daß jetzt verschiedene Fenster gemeldet haben - halt bei jeder Statusabfrage

ein DOELSE am Ende hat nicht funktioniert

Es ist wichtig zu wissen, das Eventabfragen ohne Device-Spezifikation keinen DOELSE-Fall produzieren, denn sonst würde jedes andere Event in FHEM sofort den ELSE-Fall ausführen.

Das bedeutet umgekehrt, dass ein ELSE-Fall nur bei Eventabfragen der Form [<Device>:"<regex>"] existieren kann.

Gruß

Damian

Titel: Antw:zu doof für doif?
Beitrag von: Ellert am 24 April 2016, 19:44:33
Ja, das ist richtig.

Alternativ kannst Du auch, einen weiteren Bedingungszweig einfügen, dann ohne do always:

([":indow: Open"] and [Meik_Handy] eq "present") (set fhem_mg64_bot message $DEVICE ist $EVENT)
DOELSEIF ([":indow: Closed"])


Du bekommst dann eine Meldung beim ersten geöffneten Fenster und beim Schliessen eines Fensters, für ein noch geöffnetes Fenster (bei Statusaktualisierung), bis alle Fenster geschlossen sind
Titel: Antw:zu doof für doif?
Beitrag von: mg64 am 24 April 2016, 19:46:33

VIELEN VIELEN DANK

für die Hilfe und den Sonntags-Workshop

Viel gelernt, Sch..ßwetter genutzt und jetzt scheint es so zu funktionieren wie geplant...

Aktuell hab ich noch ein paar LOVF, werd ich mal beobachten,
falls alles läuft schließ ich das Thema morgen mit gelöst ab.