[geloest] Syntax Probleme...

Begonnen von seb, 30 März 2014, 20:41:28

Vorheriges Thema - Nächstes Thema

seb

Hallo,

wer kann mir bei einem Syntax-fuuuu helfen?

Ich hatte ein notify definiert, dass bei Verletzung der Aussenhuelle WENN Alarm-Status "scharf" ist, eine Mail schreibt, die Jalousien hochfaehrt etc..

Habe beim oeffnen der Haustuer festgestellt, dass die Jalousien auch hochgingen wenn Alarm-Status *nicht* "scharf" ist - also wahrscheinlich falsche Klammersetzung in der IF-Bedingung.

Nun habe ich es so verfukkelt, dass es gar nicht mehr geht. Zwar habe ich die Originalconfig noch, bringt mir aber nichts, da die ja auch nicht richtig war. Ich habe also ein Syntax Problem und bekomme es einfach nicht hin...
Die Jalousien sollen nur einen Befehl erhalten, wenn der Status anders als "on", also hochgefahren, ist, um Funklast zu sparen.

Fehler
2014.03.30 20:32:51 3: act_on_Aussentuer return value: syntax error at (eval 15799) line 3, near ""set ALARM_STATUS ALARM ; set ALARM_Melder on ; 
IF (Value("Jalousien"


Definition
Aussenhuelle.*:offen { if (Value("ANLAGE_STATUS") eq "scharf" || Value("ANLAGE_STATUS") eq "scharf_intern")
{ fhem("set ALARM_STATUS ALARM ; set ALARM_Melder on ; 
IF (Value("Jalousien")  !~ m/on/) set Jalousien on ; ") }
{DebianMail('seb@bla.blub', 'HIER IST HAUS, EINBRUCHALARM!!!', 'HILFE ICH WERDE UEBERFALLEN!!!
Ich stelle fest:

Objekt: '.$NAME.'
Zustand: '.$EVENT.'

obwohl der Alarm aktiviert ist!!!
Hilfaaaaaeeee!'); }
}


(erstellt in der Weboberfläche, damir damals auf mein Erstpost nahegelegt wurde, nicht in der Config rumzufukkeln...)

Vielen Dank!

Damian

Probier mal:

[/code]
Aussenhuelle.*:offen IF ([ANLAGE_STATUS] eq "scharf" or [ANLAGE_STATUS] eq "scharf_intern")
( set ALARM_STATUS ALARM, set ALARM_Melder on, set Jalousien:FILTER=STATE!=on on,
   {DebianMail("seb@bla.blub", "HIER IST HAUS, EINBRUCHALARM!!!", "HILFE ICH WERDE UEBERFALLEN!!! Objekt: $NAME Zustand: $EVENT")}
)


Bei weiteren Fragen einfach hier mal schauen: http://fhem.de/commandref_DE.html#IF

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

seb

Hallo Damian,

vielen Dank fuer deine schnelle Antwort.
Ich kann mir den Mix aus perl und fhem also sparen und es, wie von dir beschrieben, komplett in fhem loesen.

So, wie es dein Vorschlag beinhaltet haette ich es auf der commandref aber nie abgeleitet, ich hatte das Kapitel schon gelesen.

Jedenfalls funktioniert dein Vorschlag zu 95%, die Mail sendet er nun nicht mehr, er scheint mit dem @ nicht klar zu kommen

2014.03.30 21:46:00 3: act_on_Aussentuer return value: Global symbol "@xxx" requires explicit package name at (eval 15969) line 1.


Klappt auch nicht mit doppeltem @@, was ja aber an der Stelle so wie ich es verstanden habe auch keinen Sinn machen wuerde.

Damian

Zitat von: seb am 30 März 2014, 21:52:26

So, wie es dein Vorschlag beinhaltet haette ich es auf der commandref aber nie abgeleitet, ich hatte das Kapitel schon gelesen.

Es ist erklärt wie man einen Status eines Devices abfragt mit Beispielen, wie man mehrere Befehle mit Komma trennt mit Beispielen, selbst die FILTER-Option des set-Befehls (hat nichts mit IF zu tun) ist im Beispiel drin und auch die Verwendung eines Perl-Aufrufs am Beispiel einer Mail in Kombination mit einem FHEM-Befehl ist im letzten Beispiel drin.

ZitatJedenfalls funktioniert dein Vorschlag zu 95%, die Mail sendet er nun nicht mehr, er scheint mit dem @ nicht klar zu kommen

2014.03.30 21:46:00 3: act_on_Aussentuer return value: Global symbol "@xxx" requires explicit package name at (eval 15969) line 1.


Klappt auch nicht mit doppeltem @@, was ja aber an der Stelle so wie ich es verstanden habe auch keinen Sinn machen wuerde.

Die @-Problematik hat etwas mit notify und Perl zu tun und weniger mit IF.

Du kannst aber zum Maskieren von @ (einmal für notify und einmal für Perl)  in deinem Befehl folgendes eingeben: "seb\@@bla.blub"

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

seb

Zitatselbst die FILTER-Option des set-Befehls (hat nichts mit IF zu tun) ist im Beispiel drin

right, haette ich besser gucken sollen :/

Vielen Dank nochmal, so funktioniert es nun:

{DebianMail("seb\@bla.blub", "HIER IST HAUS, EINBRUCHALARM!!!", "HILFE ICH WERDE UEBERFALLEN!!! Objekt: $NAME Zustand: $EVENT")}