[gelöst] DOIF und mailcheck-Problem

Begonnen von Elektrofreak, 12 August 2016, 07:56:08

Vorheriges Thema - Nächstes Thema

Elektrofreak

Hallo,

ich möchte gerne einen Teil von Fhem per eingehende Mails steuern. Nun habe ich dafür das Modul mailcheck verwendet und ein DOIF angelegt, welches in etwa so aussieht:

define di_mailcheck DOIF ([mailcheck:From] eq "vorname.nachname@domain.com" and [mailcheck:Subject] eq "set dummy on") \
  (\
    set dummy on          \
  )\


Leider mag er wohl anscheinend das [at]-Symbol nicht, wie er mir im Error-Reading anzeigt:

Zitatperl error in condition: ReadingValDoIf($hash,'mailcheck','From','','',AttrVal($hash->{NAME},'notexist',undef)) eq "vorname.nachname@domain.com" and ReadingValDoIf($hash,'mailcheck','Subject','','',AttrVal($hash->{NAME},'notexist',undef)) eq "set dummy on": Global symbol "@domain" requires explicit package name at (eval 775) line 1.

Wie kann ich das @-Zeichen als ganz normales Symbol behandeln lassen?

PS: Im Forum konnte ich zu den Begriffen DOIF und mailcheck bis jetzt nichts finden  :'(

Vielen Dank im Voraus!

automatisierer

Probier mal das @ durch einen . zu ersetzen.

Ellert

... und das Attribut "do" auf "always" setzen, sonst schaltet das DOIF ggf. nur einmal.

Elektrofreak

Guten Morgen,

vielen Dank erst mal für die schnelle Antwort. Ich habe das "@" durch einen "." ersetzt. Es tritt jetzt kein Fehler mehr auf, allerdings wird die Bedingung nicht erkannt.

Entweder habe ich noch einen Fehler im DOIF oder er erkennt den Punkt nicht als "any character" an...

Wo liegt bei mir der Fehler...  ???

automatisierer

der 1. Fehler liegt darin, dass du uns kein list vom Device in codetags postest.

Ellert

Zitat von: Elektrofreak am 12 August 2016, 09:25:03
Guten Morgen,

vielen Dank erst mal für die schnelle Antwort. Ich habe das "@" durch einen "." ersetzt. Es tritt jetzt kein Fehler mehr auf, allerdings wird die Bedingung nicht erkannt.

Entweder habe ich noch einen Fehler im DOIF oder er erkennt den Punkt nicht als "any character" an...

Wo liegt bei mir der Fehler...  ???

Wenn Du "vorname.nachname@domain.com" verwendest, werden wegen der "" Perl-Variablen im String aufgelöst, daher die Fehlermeldung, Perl sucht nach dem Array @domain.

Wenn Du statt "@" einen "." benutzt, dann bedeutet es Punkt, der String ist keine Regex.

Du könntest versuchen statt "vorname.nachname@domain.com" einfache Anführungszeichen benutzen 'vorname.nachname@domain.com'

Damian

Zitat von: Elektrofreak am 12 August 2016, 09:25:03
Guten Morgen,

vielen Dank erst mal für die schnelle Antwort. Ich habe das "@" durch einen "." ersetzt. Es tritt jetzt kein Fehler mehr auf, allerdings wird die Bedingung nicht erkannt.

Entweder habe ich noch einen Fehler im DOIF oder er erkennt den Punkt nicht als "any character" an...

Wo liegt bei mir der Fehler...  ???

Die Bedingung in DOIF ist im wesentlich Perl. Perl erwertet in Anführungszeichen bei @ ein Array, damit das nicht passiert, musst du deinen String in einfache Anführungszeichen setzen:

... [mailcheck:From] eq 'vorname.nachname@domain.com' ...

Punkt als beliebiges Zeichen funktioniert nicht bei eq-Vergleichen, sondern nur in Verbindung mit Regex z. B. über =~ Vergleich.

Gruß

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

Elektrofreak

Hallo,

vielen Dank für eure Antworten. Ich muss sagen, ihr seid echt eine super Community! Sehr hilfreiche Antworten und das wirklich sehr schnell!

Die Lösung ist der Austausch der doppelten " Anführungszeichen durch einfache ' Anführungszeichen.

Jetzt wüsste ich nur noch gerne, wo ich die Informationen zu den verschiedenen Eigenschaften der Anführungszeichen finde  :D. Vielleicht finde ich das ja noch selber  ;)

Damian

Zitat von: Elektrofreak am 12 August 2016, 10:38:17
Hallo,

vielen Dank für eure Antworten. Ich muss sagen, ihr seid echt eine super Community! Sehr hilfreiche Antworten und das wirklich sehr schnell!

Die Lösung ist der Austausch der doppelten " Anführungszeichen durch einfache ' Anführungszeichen.

Jetzt wüsste ich nur noch gerne, wo ich die Informationen zu den verschiedenen Eigenschaften der Anführungszeichen finde  :D. Vielleicht finde ich das ja noch selber  ;)

Ist bei speziellen Fragen nicht immer ganz einfach, da das Modul eine Mischung aus spezieller (von mir ausgedachter) DOIF-Syntax und Perl-Syntax ist.

zuerst in  Commandref zu DOIF suchen,
danach (insb. bei logischen Angaben in der Bedingung) in der Perldokumentation suchen, da die Bedingung vom Perlinterpreter ausgewertet wird.

Gruß

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