FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: golmic am 14 Januar 2016, 11:37:46

Titel: DOIF und DebianMail
Beitrag von: golmic am 14 Januar 2016, 11:37:46
Hallo!
Komme nicht so richtig weiter.
Ich will mit DOIF der Versand einer  Mail anstossen, der Code sieht so aus:

define MS_Badzimmerfenster DOIF ([OG_BAD_Fenster:state] eq "open" and [06:00-22:00] ) (\
({DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen'.$NAME.' : '.$EVTPART1)})\
\
)

Wenn das Ereignis zutrifft erscheint im Reading Error  folgende Meldung:
Zitat
{DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen'.$NAME.' : '.$EVTPART1)}: Global symbol "$NAME" requires explicit package name at (eval 1136) line 1. Global symbol "$EVTPART1" requires explicit package name at (eval 1136) line 1.

Habt ihr eine Idee was falsch ist?
Schonmal Danke für jeden Hinweis :)
Titel: Antw:DOIF und DebianMail
Beitrag von: turo am 14 Januar 2016, 12:35:31
Ich versuche es mal (nachdem ich gerade in der Anleitung zu DOIF geschmökert habe):
DOIF ist kein notify und $NAME und $EVTPART1 sind für die Aktionen dort nicht verfügbar.

Das wäre auch schwierig: Das DOIF wird ja auch um 06:00 getriggert, wenn das Fenster dann schon auf war (bibber!). Dann gibt es zu diesem Zeitpunkt gar kein Event, mit dem $NAME und $EVTPART1 gesetzt werden könnten.

Stefan
Titel: Antw:DOIF und DebianMail
Beitrag von: newby am 14 Januar 2016, 12:52:14
Hi,
versuch es mal so.

{DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen [OG_BAD_Fenster:state] ')}


oder setze mal für $NAME  $DEVICE ein.
Titel: Antw:DOIF und DebianMail
Beitrag von: Ellert am 14 Januar 2016, 16:39:09
Zitatoder setze mal für $NAME  $DEVICE ein.
Es gibt eine funktionierende Testversion des DOIF damit kannst Du $EVENT und $DEVICE nutzen: http://forum.fhem.de/index.php/topic,46327.0.html (http://forum.fhem.de/index.php/topic,46327.0.html) Mit der normalen Version des DOIF könntest Du das Reading "Device" des DOIF nutzen [MS_Badzimmerfenster:Device].
Titel: Antw:DOIF und DebianMail
Beitrag von: golmic am 14 Januar 2016, 21:16:59
Hallo!
Zuerst mal danke an Euch alle  :) .

Auf den  Vorschlag von turo habe ich mal "and [06:00-22:00] " entfernt  leider ohne Erfolg.

Habe mal newby's Vorschlag ausprobiert -
define MS_Badzimmerfenster DOIF ([OG_BAD_Fenster:state] eq "open" and [06:00-22:00] ( \
{DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen [OG_BAD_Fenster:state] ');;}

)

der klappt schon mal.

Ellerts Vorschlag  werde ich morgen ausprobieren und euch berichten.

Gruß
GO
Titel: Antw:DOIF und DebianMail
Beitrag von: turo am 14 Januar 2016, 23:02:58
Ich habe auch nur geschrieben, warum es mit $NAME und $EVTPART1 nicht gehen kann - das war zugegebenermaßen nicht konstruktiv ;-)

Aber da in dem konkreten Beispiel ja [OG_BAD_Fenster:state] eq "open" der Auslöser ist, könntest Du genauso schreiben:

define MS_Badzimmerfenster DOIF ([OG_BAD_Fenster:state] eq "open" and [06:00-22:00]) ( \
{DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen open');;}
)


Die Frage ist jetzt, was Du genau machen willst: Wenn Du nur genau ein Fenster hast und dann eine Mail ausgelöst werden soll, wenn das zwischen 6 und 22 Uhr geöffnet wird, dann sind wir jetzt fertig (vielleicht noch ein hübscherer Text für die Mail).

Wenn Du aber den Code noch für andere Fenster benutzen willst und nicht jedesmal den Text der Mail in der Definition ändern willst (oder eleganterweise eine gemeinsame Regel für alle betroffenen Fenster haben willst), dann ist noch Arbeit nötig. Z.B. das neue DOIF Modul, auf das Eilert verwiesen hat. Oder ein notify statt des DOIF (die Zeitabfrage kann man ja auch in den Perlcode einbauen). Also wie hättest Du es gerne?

Und eine Frage noch: Was soll passieren, wenn um 6 Uhr das Fenster schon offen ist? Mail oder keine Mail?

Stefan
Titel: Antw:DOIF und DebianMail
Beitrag von: Ellert am 15 Januar 2016, 09:54:24
Nur mal so als Hinweis:  [OG_BAD_Fenster:state] kannst Du kürzer schreiben  [OG_BAD_Fenster].
Titel: Antw:DOIF und DebianMail
Beitrag von: Damian am 15 Januar 2016, 10:12:12
Zitat von: Ellert am 15 Januar 2016, 09:54:24
Nur mal so als Hinweis:  [OG_BAD_Fenster:state] kannst Du kürzer schreiben  [OG_BAD_Fenster].
... und die unnötigen Semikolons weglassen
Titel: Antw:DOIF und DebianMail
Beitrag von: golmic am 15 Januar 2016, 13:53:54
Hallo!
@Turo: Derzeit habe ich nur ein Fenster.  Das Zeitfenster ist derzeit noch nicht fest definiert, soll später aber die Überwachung auf eine bestimmte Uhrzeit einschränken, d.h. außerhalb dieser Zeiten darf das Fenster aufstehen.  Steht es um 6:00 auf soll dies gemeldet werden. Ansonsten habe ich derzeit keine weiteren Anforderungen.

@Ellerr/Damian: Wenn ich nach euren Vorschlag  "[OG_BAD_Fenster]." in der DOIF Abfrage schreibe "([OG_BAD_Fenster.state] eq "open" ...)" kommt folgende Fehlermeldung :

  MS_Badzimmerfenster: perl error in condition: InternalDoIf('OG_BAD_Fenster','STATE',''). eq "open" and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") : syntax error at (eval 32391) line 1, near ". eq"


Was ist da falsch, bei DebianMail klappt " [OG_BAD_Fenster]." und die Semikolons sind auch weg  ;)
THX.
Titel: Antw:DOIF und DebianMail
Beitrag von: Ellert am 15 Januar 2016, 14:01:22
ZitatWas ist da falsch, bei DebianMail klappt " [OG_BAD_Fenster]." und die Semikolons sind auch weg
Der Punkt hinter der Klammer ist ein Satzzeichen und gehört nicht ins DOIF.
Titel: Antw:DOIF und DebianMail
Beitrag von: golmic am 15 Januar 2016, 14:45:43
Bongo. So klappt es jetzt.
define MS_Badzimmerfenster DOIF ([OG_BAD_Fenster] eq "open" and [06:00-22:00] ) (
{DebianMail('mail@gmx.de','Bad Fenster offen','Fenster offen. State:[OG_BAD_Fenster]. ')}
)


Vielen Dank an Euch alle.  :)