Hallo zusammen,
mein nächster Fragenkomplex. Als Anfänger experimentiere ich mit *at und notifys damit ich mir selber ein Grundverständnis verschaffen kann. ich habe mir angewöhnt, zunächst den notify nur per define zu definieren mit den "Argumenten a und b". Wenn der notify dann angelegt ist kann ich über die webOberfläche die auslösenden Dinge über Regexp und die zu machenden Dinge über die Definition aufbauen.
Einfach Dinge schaffe ich damit schon ohne Probleme:
[
define noti_Kipp notify Terrassentuer:open.*|Terrassentuer:tilted.* set Pushover1 msg ' kipp ' 'uebung' ;; set WZ_Terrasse on-for-timer 10
attr noti_Kipp room system
/code]
Hier wird wenn die Terrassentür gekippt oder Offen ist eine Pushover-Nachricht mit den Betreff "kipp" und der Nachricht "uebung" an mein Handy gesendet und das Licht an der Terrassentür wird für 10 sec eingeschaltet. Fragt nicht nach der Sinnhaftigkeit, es dient nur der Übung. Ich sehe in der Definition zwei von den vielen Klammern, Strichen, Semikolons. Einmal der senkrechte Strich zwischen den auslösenden Ereignissen als ODER und das escapte Semikolon zwischen den "perl" Befehlen (sind das perl-Befehle?). Nicht Weiteres am Ende des zweiten Befehls. Ob dort ein obligatorisches Leerzeichen ist sehe ich nicht.
Der nächste notify soll den Bewegungsmelder auslesen mit readingsVal, dort den brightness-Wert, und soll als Wert 10 annehmen, wenn das reading nicht klappt. Diesen Wert dann auf kleiner 60 vergleichen und dann einen Unterputzschalter zum Schalten einer Deckenlampe für 20 sec einschalten.
[code]
define lichtein_Beweg notify Beweg_1:motion:.* { if (ReadingsVal('Beweg_1', 'brightness', '10') < 60) { fhem("set HM_UP_Schalt_1 on-for-timer 20")} }
Hier sehe ich nun zweimal geschweifte Klammern und runde Klammern, alle sind meiner Meinung korrekt geschlossen. aber es funktionerit nicht. Und ich habe schon mit weggelassenen Klammern versucht, Semikolons gesetzt. Aber selbst wenn ich den Bewegungsmelder in eine schwarze Kiste packe macht der Notify nichts.
Der Bewegungsmelder hat folgende Attribute:
attr Beweg_1 event-on-change-reading battery,motionCount,cover,state
attr Beweg_1 event-on-update-reading motion,brightness
(nur ein Auszug aller Attribute)
Die brightness kann in den Readings gesehen werden.
Das folgende Notify soll das $Event in der Pushnachricht schicken, wenn ich einen Taster zu Hause drücke oder die Terrassentür auf ist. Er sendet aber immer nur den Text "$event".
define ntest2 notify Schalter02:off.*|Terrassentuer:open.* set Pushover1 msg 'Terrassentuer auf' '$event' " 0 "
Was muss ich ändern?
Das folgende *at soll mir einfach um 15:30 die Helligkeit per pushover melden:
define at_Push at *15:30 {my $Hell=ReadingsVal("Beweg_1", "brightness", "11") fhem("set at_Push msg 'pushover' 'Die Helligkeit beträgt $Hell' '' 0 '' ")}\
Ihr könnt mir glauben, dass ich schon einige Fehlversuche mit Semikolon setzen/nicht setzen, fhem weglassen/hinschreiben, Zeilenumbruch am Ende ja/nein probiert habe. Vielleicht war es immer eine falsche Kombination. Den Code habe ich abgeschrieben, ich habe verstanden dass mit my $Hell einfach eine Variable definiert wird und dieser wird der Wert der Helligkeit übergeben bzw. eine 11 eingetragen, wenn das reading nicht klappt. Wie könnte ich denn die Variable selber lesen um zu prüfen, welchen Wert sie bekommen hat?
Der Eintrag im Logfile sieht so aus:
2015.08.01 15:30:00 1: PERL WARNING: Bareword found where operator expected at (eval 3922) line 1, near ") fhem"
2015.08.01 15:30:00 3: eval: {my $Hell=ReadingsVal("Beweg_1", "brightness", "11") fhem("set at_Push msg 'pushover' 'Die Helligkeit beträgt $Hell' '' 0 '' ")}
2015.08.01 15:30:00 3: at_Push: syntax error at (eval 3922) line 1, near ") fhem"
Da steht, dass irgendwas mit "Klammern" falsch ist, aber mit der Angabe "Near" kann ich nicht viel anfangen.
ich würde mich sehr freuen, wenn mir jemand etwas Licht in mein Gehirn schickt, damit ich es auch sehe, was da falsch ist. Danke.
Hallo zusammen,
mag denn niemand der Leser meine Anfängerfragen behandeln? Es ist sicher richtig, dass Anfängerfragen lästig sind. Trotzdem hilft es uns Anfängern sehr viel weiter, wenn auch vermeintlich selber durch Lesen zu lösende Fragen beantwortet werden. Jeder sieht an meinem Beitrag, dass ich mir echt mühe gegeben habe, den Sachverhalt zu beschreiben und nicht nur schreibe: Hier guckt mal, warum geht das nicht.
Danke im Voraus.
Hallo misave,
ganz ehrlich? Ganz einfach, weil keiner Lust hat den Löser für einen Fragenkomplex zu stellen, den man durch einfaches lesen und probieren selbst lösen könnte.
Das ist keine bezahlte Hotline und außerdem ist es schönes Wetter und heiß draußen.
Aber eine Sache will ich mir rauspicken:
define ntest2 notify Schalter02:off.*|Terrassentuer:open.* set Pushover1 msg 'Terrassentuer auf' '$event' " 0 "
Ich kenne und verwende Pushover nicht, aber $EVENT an einigen Stellen. Also ich nehme immer $EVENT ohne irgendwelche Hochkommas und Anführungszeichen drumherum. Und ich schreibe es $EVENT und nicht $event! Ob das so sein muss weiß ich nicht, aber ich weiß das man Groß und Kleinschreibung beachten muss und ich finde im Forum kein Beispiel mit $event.
Über "case sensitivity" kann man auch schimpfen, auch übers Wetter...
Probiere doch mal in der Befehlszeile von FHEM
set Pushover1 msg 'Terrassentuer auf' " 0 "
Was tut er da? etwas sinnvolles? Ich glaube nicht
Probiere
set Pushover1 msg 'Terrassentuer auf'
Klappt?
Dann probiere in deinem notify diese DEF
Schalter02:off.*|Terrassentuer:open.* set Pushover1 msg 'Terrassentuer auf $EVENT'
Ich denke pushover will einen msg string, also msg 'Nachricht Anfang bis Nachricht Ende'
Gruß Otto
Hallo,
Ist auch mir ein büschen viel ;).
Aber generell: Doppelte und einfache Quotes(Anführungszeichen) werden von Perl unterschiedlich interpretiert. Variabeln in einfachen Quotes werden nicht aufgelöst. Du kannst den String aber z.B. vor der Variabel vorläufig beenden und mittels Concatenation(.) die Variabel einfügen.
Bei near fehlt das Semikolon.
Gruß
Hans
DANKE!