FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tho-Gra am 28 März 2016, 21:59:42

Titel: at Befehl in Notify verpacken - Anfänger
Beitrag von: Tho-Gra am 28 März 2016, 21:59:42
Hallo alle zusammen,

Ich komme einfach nicht auf die Lösung meines Problemes.
Ich hoffe ihr könnt mir helfen.

Folgender Code funktioniert ohne Probleme :

define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}

Führe ich diese Codezeile einfach so aus, funktioniert mein Vorhaben.

Verpacke ich das nun in ein Notify, funktioniert es nicht.

define nFL.Tuer_Keymatic notify FL.Tuer:closed {fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}

Dies funktioniert leider nicht :(...

Hier die Fehlermeldung aus der Log.
Zitat2016.03.28 21:39:19 1: PERL WARNING: Bareword found where operator expected at (eval 27514) line 1, near ""define at_nFL_Keymatic at +00:00:10  { if (Value("FL"
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: String found where operator expected at (eval 27514) line 1, near "Tuer") eq ""
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: Bareword found where operator expected at (eval 27514) line 1, near "") eq "closed"
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: String found where operator expected at (eval 27514) line 1, near "closed" && Value(""
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: Bareword found where operator expected at (eval 27514) line 1, near "" && Value("FL"
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: String found where operator expected at (eval 27514) line 1, near "Keymatic") ne ""
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: Bareword found where operator expected at (eval 27514) line 1, near "") ne "locked"
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: String found where operator expected at (eval 27514) line 1, near "locked") { fhem(""
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 1: PERL WARNING: Bareword found where operator expected at (eval 27514) line 1, near "") { fhem("set"
2016.03.28 21:39:19 3: eval: my $EVENT='closed';my $TYPE='CUL_HM';my $EVTPART0='closed';my $NAME='FL.Tuer';my $SELF='nFL.Tuer_Keymatic';{fhem("define at_nFL_Keymatic at +00:00:10  { if (Value("FL.Tuer") eq "closed" && Value("FL.Keymatic") ne "locked") { fhem("set FL.Keymatic lock") }}")}
2016.03.28 21:39:19 3: nFL.Tuer_Keymatic return value: syntax error at (eval 27514) line 1, near ""define at_nFL_Keymatic at +00:00:10  { if (Value("FL"

Es wäre schön, wenn mir wer helfen könnte.

Danke und Grüße

Tho-Gra
Titel: Antw:at Befehl in Notify verpacken - Anfänger
Beitrag von: viegener am 29 März 2016, 01:42:49
In Deiner Definition gibt es auf jeden Fall mal ein Problem mit den Anführungsstrichen. Denn in der at definition befinden sich mehrere Texte in Anführungsstrichen und dann setzt Du im Notify nochmal das ganze in Anführungsstriche. Allerdings funktioniert das nicht wie Klammern, sondern sobald das 2. " kommt ist der entsprechende Text zu Ende.

In den Befehlen verwendest mehrfach die perl-Ebene also z.B. fhem("..."). Das ist aber vielfach gar nicht nötig.

Du könntest also in der Definition des notifies den ganzen Teil mit dem umgebenden fhem("...") einfach weglassen, denn es handelt sich ja um ein einfaches fhem statement. Ich habe das aber jetzt nicht im Detail überprüft.



Titel: Antw:at Befehl in Notify verpacken - Anfänger
Beitrag von: Rince am 29 März 2016, 12:04:12
Du willst deine Haustür verriegeln wenn sie für 10 Minuten geschlossen ist?

Schau mal dieses DOIF an:

Internals:
   DEF        ([fl_KEY_Haustuer] ne "locked"
and [fl_TK_Haustuer] eq "closed")
(say Ich schließe die Haustüre wieder zu)
(set fl_KEY_Haustuer lock)

Attributes:
   wait       3000,10


fl_KEY_Haustuer die Keymatik
fl_TK_Haustuer ein Tür/Fensterkontakt (allerdings von Max)

say ist ein CMDALIAS, das wird bei dir erst mal nicht gehen

Wait ist wichtig:
Nach 3000 Sekunden kommt die Sprachansage, dass die Tür verriegelt wird, 10 Sekunden später wird sie verriegelt. War wichtig für den WAF, weil meine Frau immer erschrak wenn auf einmal ohne Vorwarnung die Keymatik losratterte. Jetzt wird sie vorgewarnt => perfekt