FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: zebbl am 07 Juli 2017, 10:00:10

Titel: on-for-timer mit Zufallszahl
Beitrag von: zebbl am 07 Juli 2017, 10:00:10
Hallo zusammen,

ich versuche seit ein paar Tagen eine Anwesenheitssimmulation für den anstehenden Urlaub zu basteln. Ich will, dass diverse Lampen in einem zufälligen Zeitfenster für eine zufällige Zeit eingeschalten werden.
Soweit bin ich schon:

define di_Test DOIF (([Urlaubsmodus] eq "on") and ([19:00]+int(rand(1800)))){\
   my $Zufallszahl=int(rand(600));;\
   fhem('set Test on-for-timer ".$Zufallszahl."');;}\


Allerdings zeigt mir fhem die Fehlermeldung "on-for-timer requires a number as argument" an.

Wenn ich on; sleep; off verwende kommt die gleiche Meldung.

Hat jemand ne Idee, wo der Fehler sich versteckt? Bin für jede Hilfe dankbar...
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Otto123 am 07 Juli 2017, 10:03:13
Hi,

als erstes fällt  mir auf: Allegmeiner Syntax von DOIF missachtet
-> define bla DOIF (<Bedingung>)(<Ausführungsteil>)

Aus meiner Sicht fehlen bei Dir die ()

Gruß Otto
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Damian am 07 Juli 2017, 10:33:36
Inzwischen geht auch:

DOIF (<Bedingung>){<Ausführungsteil in Perl>}
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: nils_ am 07 Juli 2017, 10:42:18
funktioniert das nicht?

fhem("set Test on-for-timer $Zufallszahl ")
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Damian am 07 Juli 2017, 12:17:02
Zitat von: nils_ am 07 Juli 2017, 10:42:18
funktioniert das nicht?

fhem("set Test on-for-timer $Zufallszahl ")

Das wird genauso funktionieren, aber wozu der Umweg über Perl, es reicht schon:

define di_Test DOIF (([Urlaubsmodus] eq "on") and ([19:00]+int(rand(1800))))
(set Test on-for-timer {(int(rand(600)))})


Der Nachteil bei all diesen Lösungen ist allerdings, dass nach 19:00 ggf. mehrfach geschaltet wird (mit do always), wenn z. B. rand von gestern 0 war und heute 660. (um 19:00 und um 19:11 Uhr)

Besser ist es rand in wait einzubauen und das Attribut timerWithWait setzen.

Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: zebbl am 07 Juli 2017, 13:03:30
Danke für die vielen Antworten...

Es funktioniert jetzt erstmal grundsätzlich mit:
define di_Test DOIF (([Urlaubsmodus] eq "on") and ([19:00]+int(rand(1800))))
(set Test on-for-timer {(int(rand(600)))})


Was mir aber nach mehreren Tests aufgefallen ist, ist dass der Timer immer bei 19:00 startet. Also ohne die zufällige Verzögerung...
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Frank_Huber am 07 Juli 2017, 13:08:09
Was ich mir wünschen würde:

in FHEM ein Urlaubsmodul.
im DEF dann Devices mit Zeitbereichen definieren und die Urlaubsperiode.
*träum*

:-)

Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Otto123 am 07 Juli 2017, 13:14:28
ZitatAnwendungsbeispiele:

Lampe wird nach Sonnenuntergang zwischen 900 und 1500 (900+600) Sekunden zufällig zeitverzögert eingeschaltet. Ausgeschaltet wird die Lampe nach 23:00 Uhr um bis zu 600 Sekunden zufällig verzögert:

define di_light DOIF ([({sunset()}+900+int(rand(600)))])
(set lamp on)
DOELSEIF ([([23:00]+int(rand(600)))])
(set lamp off)
Also müssen da nochmal eckige Klammern drum herum -->[([19:00]+int(rand(1800)))]

Gruß Otto
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: zebbl am 07 Juli 2017, 13:18:07
Super... Hab das mit dem wait grad kappiert  :o

So funktionierts optimal...

define di_Test DOIF (([Urlaubsmodus] eq "on") and [19:00]) (set Test on-for-timer {(int(rand(1800)))})
attr di_Test room Anwesenheitssimmulation
attr di_Test timerWithWait 1
attr di_Test wait rand(600)


Danke nochmal...
Titel: Antw:on-for-timer mit Zufallszahl
Beitrag von: Byte09 am 07 Juli 2017, 14:35:21
Zitat von: zebbl am 07 Juli 2017, 13:18:07
Super... Hab das mit dem wait grad kappiert  :o

So funktionierts optimal...

define di_Test DOIF (([Urlaubsmodus] eq "on") and [19:00]) (set Test on-for-timer {(int(rand(1800)))})
attr di_Test room Anwesenheitssimmulation
attr di_Test timerWithWait 1
attr di_Test wait rand(600)


Danke nochmal...

Hi,

was spricht denn hier im grossen und ganzen gegen das Hilfsmodul RandomTimer? Bringt doch fast alles benötigte mit , oder verstehe ich etwas falsch ?

https://wiki.fhem.de/wiki/RandomTimer (https://wiki.fhem.de/wiki/RandomTimer)

gruss Byte09