Hallo zusammen,
ich habe mich zwar schon fleißig mit den Anfängerbeiträgen beschäftig aber ich komme bei folgendem Vorhaben einfach nicht weiter.
Zweck: Ich möchte über Zufallszahlen einige Geräte(Lichter) schalten.
Dazu habe ich folgendes geschrieben
define AtLichtAbwesendAbendsWochenendeAus at *23:00:00 {\
if (Value("DummyAbwesend") eq "on") {\
if ($wday == 5 | $wday == 6) {\
my $ZufallszahlWochenendeAus1 = int(rand(15) +1 );;\
my $UhrWochenendeAus1 = "23:".$ZufallszahlWochenendeAus1.":".$ZufallszahlWochenendeAus1;;\
fhem("define AtLichtAbwesendAbendsWochenendeAus_Zufall at ".$UhrWochenendeAus1." { fhem('set SchaltaktorWohnzimmerLichtStehlampe off') fhem('set SchaltaktorWohnzimmerLedStrip off') fhem('set RgbLedWohnzimmer RGB 000000')}");;\
}\
}\
}
Mein Problem liegt im innenliegenden at.
Dieses wird zur gewünschten,zufälligen Zeit erstellt und ausgeführt. Die set-Befehle jedoch nicht.
Das komische ist, es wird nichts dazu in eine Logdatei geschrieben.
Nehme ich zwei der drei set-Befehle komplett raus, läuft alles.
Ich habe es mit einfachen ; mit ;; und mit Umbrüchen probiert.
Alles in ein fhem('.... ') zu packen bringt leider auch nichts.
Über einen Tipp würde ich mich sehr freuen.
Vielen Dank
Gruß Tobias
Hallo Tobias,
Und hast Du das (http://fhem.de/commandref_DE.html#perl)versucht?
ZitatUm FHEM-Kommandos in den PERL-Ausdrücken zu verwenden, benutzen Sie bitte die Funktion fhem(), mit einem Textargument. Dieser Text wird als FHEM-Kommando interpretiert.
Beispiel
{ fhem "set light on" }
define n1 notify piri:on { fhem "set light on" }
Da stehen " und nicht '
Gruß Otto
ZitatIch habe es mit einfachen ; mit ;; und mit Umbrüchen probiert.
Befehle in einem at muessen mit ;; getrennt werden.
Falls dieser at in einem weiteren at oder notify definiert wird, dann muessen diese ;; verdoppelt werden, als ;;;;
Kein ; ist keine Loesung, Perl mag das nicht, ich wuerde auf notify/trigger ausweichen. Weiterhin muss in der at Definition Minute/Sekunde mit zwei Ziffern geschrieben werden.
define wohnzimmerLichtAus notify wohnzimmerLichtAus set SchaltaktorWohnzimmerLichtStehlampe,SchaltaktorWohnzimmerLedStrip off;;set RgbLedWohnzimmer RGB 000000
define AtLichtAbwesendAbendsWochenendeAus at *23:00 {\
if (Value("DummyAbwesend") eq "on") {\
if ($wday == 5 || $wday == 6) {\
my $UhrWochenendeAus1 = sprintf("23:%02d:%02d",int(rand(15)+1), int(rand(15)+1) ) ;;\
fhem("define AtLichtAbwesendAbendsWochenendeAus_Zufall at $UhrWochenendeAus1 trigger wohnzimmerLichtAus");;\
}\
}\
}
Danke für die Antworten.
@Otto123: Die " Zeichen ergaben leider den gleichen Effekt, nämlich gar keinen.
@rudolfkoenig: Ich habe es testweise mit den ;;;; probiert.
Das scheint geklappt zu haben aber es wird dadurch extrem unübersichtlich.
Habe nun deine Lösung mit dem notify genutzt.
Gruß Tobias
Muss mich hier mal kurz mit anhängen, denn ich habe mal wieder Probleme im Verständnis des Syntax.
Ich habe im at zwei set-Befehle, die einfach nicht so laufen wie ich mir das vorstelle.
Internals:
CFGFN
COMMAND set HomeStatus_Marc:FILTER=STATE=KurzWeg LangWeg;;set HomeStatus_Eltern:FILTER=STATE=KurzWeg LangWeg
DEF *05:00:00 set HomeStatus_Marc:FILTER=STATE=KurzWeg LangWeg;;set HomeStatus_Eltern:FILTER=STATE=KurzWeg LangWeg
NAME CheckUrlaub
NR 634
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 05:00:00
TIMESPEC 05:00:00
TRIGGERTIME 1508554800
TRIGGERTIME_FMT 2017-10-21 05:00:00
TYPE at
READINGS:
2017-10-20 06:28:21 state Next: 05:00:00
Attributes:
Wenn der Filter des ersten set zieht, wird HomeStatus_Marc auf "LangWeg;;set HomeStatus_Eltern:FILTER=STATE=KurzWeg LangWeg" gesetzt.
Es wird nicht erkannt, dass mit ";;" eigentlich ein neuer set-Befehl folgt.
Aber oben steht doch, dass in einem at der Trenner ";;" ist... bin verwirrt.
Danke!
- Man muss Kommandos mit ;; trennen, sonst werden sie direkt ausgfuehrt:
- "define a at +00:01 set b 1; set c 2" -> fuehrt set c 2 sofort aus, set b 1 erst in einer Minute
- "define a at +00:01 set b 1;; set c 2" -> fuehrt beide Befehle in einer Minute aus
Wenn man diesen at in FHEMWEB direkt editiert (auf DEF klickt), dann kann (bzw. muss) man sich das ;; sparen, weil es klar ist, dass es sich nur um diesen einen at geht: FHEMWEB ersetzt automatisch ; durch ;;
Genauso ist die Eingabe von \ im DEF-Fenster nicht notwendig.
Danke, dann kapier ich das auch mal endlich... mit einem ";" hat es funktioniert. ???
Hatte es mit "," dann ";;" und zuletzt ";;;;" probiert... das einfache ";" nicht. :o