Hauptmenü

DOIF und DebianMail

Begonnen von golmic, 14 Januar 2016, 11:37:46

Vorheriges Thema - Nächstes Thema

golmic

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 :)

turo

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
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

newby

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

Ellert

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 Mit der normalen Version des DOIF könntest Du das Reading "Device" des DOIF nutzen [MS_Badzimmerfenster:Device].

golmic

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

turo

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
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

Ellert

Nur mal so als Hinweis:  [OG_BAD_Fenster:state] kannst Du kürzer schreiben  [OG_BAD_Fenster].

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

golmic

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.

Ellert

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.

golmic

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.  :)