Mehrere set-Befehle in 2 at's

Begonnen von Tobbi, 07 Februar 2016, 21:52:42

Vorheriges Thema - Nächstes Thema

Tobbi

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

Otto123

Hallo Tobias,

Und hast Du das 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

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");;\
  }\
}\
}

Tobbi

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

AndyMu

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!

rudolfkoenig

- 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.

AndyMu

Danke, dann kapier ich das auch mal endlich... mit einem ";" hat es funktioniert. ???
Hatte es mit "," dann ";;" und zuletzt ";;;;" probiert... das einfache ";" nicht. :o