FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Ronny_5578 am 06 Januar 2019, 11:23:59

Titel: Befehle nach at gehen nicht alle
Beitrag von: Ronny_5578 am 06 Januar 2019, 11:23:59
Moin moin,

also bei mir geht "on-for-timer x" nicht, warum auch immer (S20 mit ESPEasy) :-[
Also möchte ich folgendes machen:

define Zeitschaltuhr_Zirkulationspumpe at *07:00:00 {\
fhem("define Pumpe_an at +*{4}00:15 set PUMP1 on;;sleep 300;;set PUMP1 off")\
}


Die Pumpe geht an, aber nicht nach 300s wieder aus.
Wenn ich sie über WEB abschalte, dann wird sie wieder nach 15min eingeschalten.

Folgendes funktioniert bei mir prima:
define n_mySwitch1 notify mySwitch1:on {\
if(Value("Status_Pumpe") eq "off") {\
fhem("set ESPEasy_sonoff_1_PUMP on;;sleep 5;;set ESPEasy_sonoff_1_PUMP off") \
}\
}


Was mach ich wieder mal falsch?!?!
Titel: Antw:Befehle nach at gehen nicht alle
Beitrag von: Otto123 am 06 Januar 2019, 11:29:34
Moin,

Du hast die Doku  (https://commandref.fhem.de/#command)nicht beachtet :)
ZitatFor every further indirection you need to double the semicolons:, e.g. to switch on every day 2 devices at 7:00 for 10 minutes you have to write:
define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off

Allerdings kannst Du Dir eigentliich den Umweg über Perl sparen:
define Zeitschaltuhr_Zirkulationspumpe at *07:00:00 define Pumpe_an at +*{4}00:15 set PUMP1 on;;;;sleep 300;;;;set PUMP1 off

Gruß Otto
Titel: Antw:Befehle nach at gehen nicht alle
Beitrag von: Ronny_5578 am 06 Januar 2019, 11:37:12
Moin, moin,

vielen Dank für die Lösung, es geht nun.

Aber wo steht sowas?
Ich habe https://wiki.fhem.de/wiki/At und  https://wiki.fhem.de/wiki/Zeitschaltuhr gelesen.
Dann habe ich festgestellt, dass bei mir on-for-timer nicht geht.
Titel: Antw:Befehle nach at gehen nicht alle
Beitrag von: Otto123 am 06 Januar 2019, 11:39:02
Du musst nur auf den link in meinem Post klicken  :D
Hat  ja nichts mit at zu tun, sondern mit der Verschachtelung von FHEM Befehlen. Deswegen steht es in der Doku ziemlich am Anfang -> bei Befehle :)
Titel: Antw:Befehle nach at gehen nicht alle
Beitrag von: Zrrronggg! am 06 Januar 2019, 16:49:56
https://wiki.fhem.de/wiki/Escapen_in_Perlbefehlen


Und du benutzt Perl, da eine Konstruktion wie diese:

define ... {  ... fhem("...") }

bedeutet:

Sage FHEM ("define ..."),
   das es PERL sagen soll ("{ ... }"),
      das es FHEM sagen soll (fhem("..."))

Da in perl aber gar nichts machst, kein perl-if oder so, ist das natürlich ein überflüssiger Umweg. Daher Otto123s Einwand dass du das nicht brauchst und dann fällst du auch nicht auf das Escapen rein.

Diese Variante, alles mit

define blubber {\
   fhem("...")\
        fhem("...")\
        fhem("...")\

   }

darzustellen, ist Cargocult Programming. Irgendjemand hat das mal als Beispiel irgendwo so gemacht und jetzt hat diese Notation eine gewisse Verbreitung gefunden.

Das hat keine Funktion sondern wechselt nur ohne Grund bei jedem Befehl zwischen Fhem und Perl und wieder Fhem hin und her. Funktioniert, aber übersichtlicher oder schneller ist das nicht. Vielen ist das gar nicht bewusst, dass sie damit ohne Not Perl aufrufen.
Und wehe man schreibt das Sleep an die falsche Stelle, dann steht Fhem für die Sleep-Time.

Beachte, dass es mir nicht um die strukturierte Darstellung geht, (obwohl ich das bei einfachen Dingen auch für Overkill halte), sondern die Perlebene zu benutzen, obwohl in Perl nichts gemacht wird ausser die Kontrolle gleich wieder an Fhem zurückzugeben.