Hallo,
Ich will das yowsup Modul benutzen (klappt bisher ganz gut), und nun den Responder einrichten. Leider krieg ich die Syntax von diesem Notify nicht hin:
define TomHandyResponder notify TomHandy:message.* { \
if ($EVENT eq 'message: Markisen aus' ) \
{ \
fhem "set TomHandy send Markisen sind nun eingefahren..."; \
} else { \
fhem "set TomHandy send Wie bitte?" \
} \
}
Die Fehlermeldung ist immer: "Unknown command }, try help."
Meines Verständnisses nach würden die Backslashes alles zu einer Zeile zusammenfügen ... habe bereits alles probiert -- kein Erfolg.
Irgendwelche Ideen?
Thx // Tom
Bin mir auf die Schnelle nicht sicher, aber ich glaub hinter Wie bitte?" fehlt ein Semikolon vorm Backslash
Gesendet von meinem SM-G900F mit Tapatalk
versuch es mal, indem du die Befehle in Klammern setzt...
fhem ("set ...")
Danke Euch ... geht alles leider nicht. Habe nun das Kommando reduziert auf:
define TomHandyResponder notify TomHandy:message.* { fhem "set TomHandy send Wie bitte?"; }
oder
define TomHandyResponder notify TomHandy:message.* { fhem ("set TomHandy send Wie bitte?"); }
beides liefert:"Unknown command }, try help."
Weitere Ideen?
danke & ciao // Tom
define TomHandyResponder notify TomHandy:message.* ("set TomHandy send Wie bitte?")
Ja, danke ... aber was ich brauche ist ja eine Mischung aus Perl befehlen (wie "if ($EVENT)" ...) und fhem Befehlen ...
So wie Du es schreibst wären nur fhem Befehle möglich ....
Hier wäre es wahrscheinlich mit Kanonen auf Spatzen geschossen, aber am elegantesten wäre es eine eigene Sub in 99_ zu erstellen, dort kannst Du frei in perl hantieren. Die Sub dann aufrufen...
Versuch auch mal das ? wegzulassen...
Vorsicht, dirty aus der DEF kopiert! (deswegen auch keine Backslash)
Bei mir schaut ein einfacher If so aus:if (Value($_) eq "disabled") {
fhem "attr $_ comment disabled"
} else {
fhem "attr $_ comment enabled"
}
Was fällt sofort auf? Da sind keine Semikolon, wenn nur ein einzeiliger Perl-Befehl kommt. Versuchs mal so. Vielleicht war es ein Gedankenfehler von mir vorhin...
Gesendet von meinem SM-G900F mit Tapatalk
Zitat von: tomleitner am 24 Mai 2016, 19:34:13
Leider krieg ich die Syntax von diesem Notify nicht hin:
Benutz bitte den DEF Editor auf der Notify Detailseite und trag folgendes ein per copy/paste ein (FHEM kümmert sich dann ums escapen und Zeilenumbrüche):
TomHandy:message.* {
if ($EVENT eq 'message: Markisen aus' ) {
fhem("set TomHandy send Markisen sind nun eingefahren...");
}
else {
fhem("set TomHandy send Wie bitte?");
}
}
Zwar nicht direkt eine Antwort auf die Frage aber trotzdem:
Ich habe das bei mir mit mehreren DOIF gelöst.
chatBot (vordefinierte Dialoge) für Telegram (https://forum.fhem.de/index.php/topic,51425.0.html)
Müsste den Thread zwar mal überarbeiten, aber vielleicht hilft es ja.
Grüße
igami
Wenn man mittels define über das Webinterface ein Notify mit Perlsyntax anlegen will, so ist das nicht möglich. Es gibt immer die Fehlermeldung "Unknown command }, try help."
Lösung
define TomHandyResponder notify TomHandy:message.* a b
Danach kann man in der Detailansicht des Notify auf DEF klicken und a und b löschen und den fehlenden Perlcode eintragen.
Ach und bevor jemand fragt warum a b. Man kann auch schreiben "Im Himmel ist Jahrmarkt" Auf gut Deutsch es ist egal was man da schreibt, Hauptsache keine Perlsyntax.
Ich schreibe da immer {}, da ich in 99% der Fälle mit Perl im Notify weitermache (und wenn's nur der Aufruf einer sub aus der 99_myUtils ist ;) ).
Zitat von: CoolTux am 25 Mai 2016, 08:04:19
Wenn man mittels define über das Webinterface ein Notify mit Perlsyntax anlegen will, so ist das nicht möglich. Es gibt immer die Fehlermeldung "Unknown command }, try help."
Sorry, aber das stimmt so nicht. Wenn die Perlsyntax i.O. ist, dann funktioniert das.
z.B.
define n notify xxx {fhem("set xxx on")}
define n1 notify xxx {}
Das ist nun die finale Syntax die funktioniert:
define TomHandyResponder notify TomHandy:message.* {\
if ($EVENT eq 'message: Markisen aus') {\
fhem "set TomHandy send Markisen sind nun eingefahren..."\
} elsif ($EVENT eq 'message: Gartenbrunnen aus') {\
fhem "set GartenBrunnen off";;\
fhem "set TomHandy send Gartenbrunnen ist nun aus ..."\
} else {\
fhem "set TomHandy send Wie bitte ..."\
}\
}
Man beachte die doppelten Semikolon .... Habe das nun über die DEF Maske gemacht ....
Danke Euch & Ciao // Tom
Interessant. Selbst wenn ich die 2 runden Klammern weg lasse geht es. Dann kann es einzig am Semikolon liegen bei
define TomHandyResponder notify TomHandy:message.* { fhem ("set TomHandy send Wie bitte?"); }
Wird ja auch bei einem Einzeiler nicht benötigt.
Ich ziehe also meine Behauptung zurück :-X
Wenn Du das über die DEF Maske gemacht hast, wozu dann die Backslash am Ende jeder Zeile? Das ist niocht nötig. Und die doppelten Semikolons kannst Du auch weg lassen, das sollte definitiv ohne doppelte gehen.
Er hat es über den DEF Editor eingegeben, aber das Gezeigte ist das gespeicherte Ergebnis aus der fhem.cfg.
Die fhem.cfg sollte ab dem nächsten Release binär gespeichert werden, dann gibt es diese Verwirrungen nicht mehr ;)
Mal so als Frage:
Es gibt doch auch das FHEM-Modul "IF", warum sollte man für so etwas überhaupt zu perl runtersteigen?
Oder wenn man es mag auch mit DOIF
- weil man perl lernen möchte
- weil es mächtiger ist
- aus Gewohnheit
- weil man in einer IF/DOIF freien Zone lebt ;)
Stimme den Punkten 1-3 zu ;D
.... nur manchmal sollte man "keep it simple" machen ..
Hatte es früher auch per perl, bis mir auffiel "wie mächtig" FHEM auch ohne perl schon ist. Und eben viele dieser hier besprochenen "Quota"-Probleme damit einfach und simple umgangen werden kann!