FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Tobbi am 07 Februar 2016, 21:52:42

Titel: Mehrere set-Befehle in 2 at's
Beitrag von: Tobbi am 07 Februar 2016, 21:52:42
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
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: Otto123 am 07 Februar 2016, 23:44:55
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
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: rudolfkoenig am 08 Februar 2016, 08:07:56
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");;\
  }\
}\
}
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: Tobbi am 08 Februar 2016, 09:48:03
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
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: AndyMu am 20 Oktober 2017, 06:31:47
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!
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: rudolfkoenig am 20 Oktober 2017, 09:11:35
- 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.
Titel: Antw:Mehrere set-Befehle in 2 at's
Beitrag von: AndyMu am 20 Oktober 2017, 17:28:43
Danke, dann kapier ich das auch mal endlich... mit einem ";" hat es funktioniert. ???
Hatte es mit "," dann ";;" und zuletzt ";;;;" probiert... das einfache ";" nicht. :o