on-for-timer mit Zufallszahl

Begonnen von zebbl, 07 Juli 2017, 10:00:10

Vorheriges Thema - Nächstes Thema

zebbl

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

Otto123

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

Damian

Inzwischen geht auch:

DOIF (<Bedingung>){<Ausführungsteil in Perl>}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

nils_

funktioniert das nicht?

fhem("set Test on-for-timer $Zufallszahl ")
viele Wege in FHEM es gibt!

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

zebbl

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

Frank_Huber

Was ich mir wünschen würde:

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

:-)


Otto123

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

zebbl

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

Byte09

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

gruss Byte09