Hallo,
ich habe 2 notifies mit fast gleichem Inhalt:
define n_Kueche_ndr2 notify
Sonos_Kueche:ButtonEvent:.(UD) {fhem("set Sonos_Kueche speak 40 de Es ist jetzt $hour Uhr $min")}
das andere notify unterscheidet sich nur durch den raumnamen "Terrasse".
Terrasse funktioniert, Bei Kueche sehe ich im logfile den Fehler
2016.12.01 10:15:20 3: n_Kueche_ndr2 return value: Unknown command {fhem("set, try help.
Habe etliche Syntax-Varianten durchprobiert und komme nicht weiter.
Danke und Gruß,
Kurt
fehlendes Leerzeichen zwischen zwischen fhem und (
....
Zitat von: kumue am 01 Dezember 2016, 10:44:55
fehlendes Leerzeichen zwischen zwischen fhem und (
....
Verwende ich immer so ohne Probleme.
Zitat von: Kurt77 am 01 Dezember 2016, 10:39:16
ich habe 2 notifies mit fast gleichem Inhalt:
Ein list von beiden wäre hilfreich
ich behaupte die abschließenden Anführungszeichen fehlen(oder doch eine der Klammern ?).
Aber ein list würde uns das raten ersparen.
Grüße Markus
Noch eine Theorie: Könnten es "falsche" Anführungszeichen sein?
Hintergrund es gibt da leider Zeichen, die ganz ähnlich aussehen, aber aus perl-Sicht mitnichten einen String begrenzen:
"
Ja, auf jeden Fall würden die vollständigen Device definitionen (in code tags einschliessen) per copy&paste (also nicht abgeschrieben) helfen.
Da würd ich mich mal einklinken... Ich habe gelegentlich auch Probleme, dass bei einem beginnenden Perl-Block (also { ) der nachfolgende Befehl nicht erkannt wird. Logik habe ich dort leider noch keine erkannt, wenns das nächste mal passiert, poste ich es hier...
Grüße
Stephan (der mal auf die Lösung gespannt ist)
Ich kenne das problem bisher nur, wenn ich bei der Definition des Devices etwas falsch angegeben habe (Klammerung / Anführungszeichen). Bei mir ausserdem beliebt ist der Fehler einfache Semikolon zu verwenden...
@abc2006: Sagst Du derselbe define geht manchmal durch und manchmal nicht? also zum Beispiel unverändert in cfg, aber nach dem Neustart geht es nicht mehr?
Oder sagst Du manchmal gibt es dabei Fehler, ohne dass die Ursache klar ist, obwohl möglicherweise wirklich ein Fehler in der Definition steckt?
Ich denke in beiden Fällen wäre es gut, die Beispiele hier hereinzubringen, damit man entweder einen Fehler in FHEM fixen könnte oder alternativ Muster von Fehlbedienungen erkennen kann (und vielleicht auch besser dokumentieren)
Man beugt den meisten solcher Fehler vor, in dem man die Config nicht direkt editiert, sondern das DEF mit Code-Editor verwendet.
ich mache es immer so:
1. In der Kommandozeile von FHEMWEB
define <name> notify <pattern> {}
2. über den DEF Editor meinen Code reinschreiben
Alternativ bei ähnlichen Sachen den FHEM Befehl copy verwenden und dann anpassen.
Zitat von: marvin78 am 01 Dezember 2016, 12:34:09
Man beugt den meisten solcher Fehler vor, in dem man die Config nicht direkt editiert, sondern das DEF mit Code-Editor verwendet.
Danke für diese Erkenntnis, ohne das Wissen, ob das wirklich der Fall ist.
Ich für meinen teil editiere nur noch in der DEF... Aber wenn man dann den Inhalt der DEF hier postet, kommen Kommentare a la " das kann gar nicht funktionieren, da fehlt ja ... ;-)
@viegener:
Oftmals habe ich diese Probleme, wenn ich direkt in der Kommandozeile ein {...} Konstrukt teste, ob es das tut, was ich will. Gerade kann ich das nicht reproduzieren, aber ich schau zuhause mal danach.
Seltener kommt das auch in Notifies oder (ich mache in letzter Zeit viel mit DOIF) vor.
Ich versuchs heute abend zu reproduzieren!
Danke und Grüße
Stephan
Zitat von: abc2006 am 01 Dezember 2016, 12:59:49
Danke für diese Erkenntnis, ohne das Wissen, ob das wirklich der Fall ist.
Ich für meinen teil editiere nur noch in der DEF... Aber wenn man dann den Inhalt der DEF hier postet, kommen Kommentare a la " das kann gar nicht funktionieren, da fehlt ja ... ;-)
Nicht von Leuten, die dir wirklich helfen können. ;) Am besten posten man aber ohnehin immer ein list vom Device denn da ist alles drin, was man benötigt um zu helfen!
Zitat von: marvin78 am 01 Dezember 2016, 13:01:40
Nicht von Leuten, die dir wirklich helfen können. ;) Am besten posten man aber ohnehin immer ein list vom Device denn da ist alles drin, was man benötigt um zu helfen!
Alles klar, Gute Idee, werde ich in Zukunft beherzigen!
Grüße
Stephan
Nur, damit ich mich nicht *nicht* melde: der erste, bei dem es aber an der eckigen Klammer zuviel (also an mir) lag :-[
Internals:
DEF ([RE_TEMP_FlurOG:temperature] or [D_TsollFlur] or [RE_TEMP_Schlafzimmer:temperature] or [D_TsollSchlafzimmer])
( {
if ([[RE_TEMP_FlurOG:temperature]] < [D_TsollFlur]){
fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 100"
} elsif ([[RE_TEMP_Schlafzimmer:temperature] < [D_TsollSchlafzimmer]]-1 ){
fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 50"
} else {
fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 15"
}
})
NAME DF_HZG_Flur_Buero
NR 614
NTFY_ORDER 50-DF_HZG_Flur_Buero
STATE heizen
TYPE DOIF
Readings:
2016-12-01 21:02:18 Device RE_TEMP_FlurOG
2016-11-29 18:19:20 cmd 1
2016-11-29 18:19:20 cmd_event RE_TEMP_Schlafzimmer
2016-11-29 18:19:20 cmd_nr 1
2016-12-01 21:02:18 e_RE_TEMP_FlurOG_temperature 21.75
2016-12-01 13:15:16 e_RE_TEMP_Schlafzimmer_temperature 19.75
2016-11-29 18:19:20 error { if ([[RE_TEMP_FlurOG:temperature]] < 21){ fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 100" } elsif ([[RE_TEMP_Schlafzimmer:temperature] < [D_TsollSchlafzimmer]]-1 ){ fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 50" } else { fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 15" } }: syntax error at (eval 5139431) line 1, near "RE_TEMP_FlurOG:"
2016-11-29 18:19:20 state heizen
Condition:
0 ReadingValDoIf($hash,'RE_TEMP_FlurOG','temperature','','',AttrVal($hash->{NAME},'notexist',undef)) or InternalDoIf($hash,'D_TsollFlur','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) or ReadingValDoIf($hash,'RE_TEMP_Schlafzimmer','temperature','','',AttrVal($hash->{NAME},'notexist',undef)) or InternalDoIf($hash,'D_TsollSchlafzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef))
Devices:
0 RE_TEMP_FlurOG D_TsollFlur RE_TEMP_Schlafzimmer D_TsollSchlafzimmer
all RE_TEMP_FlurOG D_TsollFlur RE_TEMP_Schlafzimmer D_TsollSchlafzimmer
Do:
0:
0 { if ([[RE_TEMP_FlurOG:temperature]] < [D_TsollFlur]){ fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 100" } elsif ([[RE_TEMP_Schlafzimmer:temperature] < [D_TsollSchlafzimmer]]-1 ){ fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 50" } else { fhem "set KNX20.O08_Aktor_PWM_BueroFlur value 15" } }
Helper:
event temperature: 21.75
globalinit 1
last_timer 0
sleeptimer -1
timerdev RE_TEMP_FlurOG
timerevent temperature: 21.75
triggerDev RE_TEMP_FlurOG
timerevents:
temperature: 21.75
timereventsState:
temperature: 21.75
triggerEvents:
temperature: 21.75
triggerEventsState:
temperature: 21.75
Internals:
0 D_TsollFlur:STATE D_TsollSchlafzimmer:STATE
all D_TsollFlur:STATE D_TsollSchlafzimmer:STATE
Itimer:
Readings:
0 RE_TEMP_FlurOG:temperature RE_TEMP_Schlafzimmer:temperature
all RE_TEMP_FlurOG:temperature RE_TEMP_Schlafzimmer:temperature
Regexp:
0:
All:
State:
Trigger:
Attributes:
group ERR_FlurBuero
room Heizung_ERR,_doif
userattr Heizkreise Heizkreise_map structexclude
dafür hab ich hier was:
{ Kalenderende("$EVENT"); }
funktioniert im notify einwandfrei:
Internals:
DEF CAL_Schichtplan_Stephan:end:.*googlecom.* { Kalenderende("$EVENT"); }
NAME N_CalEnde
NOTIFYDEV CAL_Schichtplan_Stephan
NR 657
NTFY_ORDER 50-N_CalEnde
REGEXP CAL_Schichtplan_Stephan:end:.*googlecom.*
STATE 2016-12-01 15:00:00
TYPE notify
Readings:
2016-11-18 14:54:07 state active
Attributes:
room Kalender,_notify
wenn ichs aber oben in der Leiste eingebe:
Unknown command {, try help.
Unknown command }, try help.
Warum? und ja, ich weiss, dass die Variable $EVENT leer ist, wenn ich es oben in der Leiste eingebe, aber da die Funktion bisher nur den Inhalt vergleicht und ausgibt, würde es funktionieren können...
Grüße
Stephan
Das hat nichts mit $EVENT zu tun, sondern bei FHEM-Kommandos müssen die Semikolons doppelt geschrieben werden, damit klar ist, dass sie zu dem perl-Ausdruck gehören, sonst trennen Sie Kommandos:
http://fhem.de/commandref_DE.html#command (http://fhem.de/commandref_DE.html#command)
Aber ich gebe zu, einiges davon muss man sich einfach merken und das meinte ich damit, dass ich mit den Semikolons machmal durcheinander komme
Hm.. Da steh ich jetzt auf dem Schlauch.. an welcher Stelle ist da ein FHEM-Kommando?
btw: ohne das Semikolon gehts, also
{ Kalenderende("$EVENT") }
edit:
Mit zwei Semikolon gehts auch, meintest du das?
{ Kalenderende("$EVENT");; }
Aber ja, ich tu mich zb da auch sehr schwer.. warum braucht man in der Kommandozeile entweder keins oder zwei, und im DEF-Editor genau eines?
Grüße
Stephan
Zitat von: abc2006 am 02 Dezember 2016, 01:08:45
Aber ja, ich tu mich zb da auch sehr schwer.. warum braucht man in der Kommandozeile entweder keins oder zwei, und im DEF-Editor genau eines?
Vor schließenden geschweifenten Klammern sind Semikola nicht nötig aber möglich.
Warum 2 nötig sind hat viegener bereits geschrieben.
Der DEF-Editor kümmert sich selbst um das Verdoppel/Escaping der Semikola und auch um den Backslash am Zeilenende bei einem Zeilenumbruch.
Ich umschiffe das Problem (dass man es immer wieder vergisst) einfach, in dem ich "leere" Devices anlege und dann nur noch den DEF Editor verwende
define NAME notify NAME2 {}
in die Kommandozeile. Nach Enter gelangt man automatisch in der Detailansicht und dann DEF verwenden. Das wurde hier aber auch schon beschrieben.
Zitat von: abc2006 am 02 Dezember 2016, 01:08:45
Hm.. Da steh ich jetzt auf dem Schlauch.. an welcher Stelle ist da ein FHEM-Kommando?
Dazu hatte ich den Link angefügt ;)
Es gibt 3 Arten von Kommandos (oder Befehlstypen):
"fhem" Befehle (werden in diesem Dokument beschrieben), SHELL-Befehle (diese müssen von doppelten Anführungszeichen "" eingeschlossen werden) und PERL-Ausdrücken (von geschwungenen Klammern {} eingeschlossen).
Den Link hab ich gelesen.. aber offensichtlich den Text nicht richtig interpretiert.
Also wird der Befehl
{ Kalenderende("$EVENT"); }
aufgetrennt in
a) { Kalenderende("$EVENT");
b) }
und dann kennt fhem die Kommandos natürlich nicht mehr, weil die schließende bzw. öffnende Klammer fehlt?
Zitat von: abc2006 am 02 Dezember 2016, 22:27:26
Den Link hab ich gelesen.. aber offensichtlich den Text nicht richtig interpretiert.
Also wird der Befehl
{ Kalenderende("$EVENT"); }
aufgetrennt in
a) { Kalenderende("$EVENT");
b) }
und dann kennt fhem die Kommandos natürlich nicht mehr, weil die schließende bzw. öffnende Klammer fehlt?
Genau, denn damit ist weder der 1. noch der 2. Teil ein perl ausdruck weil die zugehörige andere Klammer fehlt
...gibts schon was neues zu den notify's ? ::) :D
Ich würde sagen, wir warten auf die Antwort auf diesen Post:
Zitat von: igami am 01 Dezember 2016, 10:48:00
Ein list von beiden wäre hilfreich
Grüße
Stephan
PS: Danke, jetzt hab sogar ich es kapiert :-)