Moin,
Ich versuche die Random Timer Funktion für die Anwesenheitssimulation noch etwas zufälliger zu gestalten und wollte, unter anderem, die time to switch per zufallszahl mit einer Toleranz versehen.
Diese Variante mit toleranz in der Abschaltzeit funktioniert:
*{sunset("CIVIL",0,"0","20:00")} myLamp1 *{FmtTime((time_str2num("2022-01-01T22:42:00")+(rand()-0.5)*52*60))} 600
Aber jetzt will ich eben zusätzlich noch die time to switch durch
{int(600+(rand()-0.5)*600)}
ersetzen.
Der code an sich funktioniert wenn ich ihn in die Befehlszeile eingebe, aber in die RandomTimer Funktion eingesetzt sieht das so aus
*{sunset("CIVIL",0,"0","20:00")} myLamp1 *{FmtTime((time_str2num("2022-01-01T22:42:00")+(rand()-0.5)*52*60))} {int(600+(rand()-0.5)*600)}
und gibt die Fehlermeldung "invalid timeToSwitch <{int(600+(rand()-0.5)*600)}>, use 9999"
Erlaubt die Funktion kein Perl für diesen Parameter, oder bin ich nur zu doof das richtig einzugeben?
Moin,
https://fhem.de/commandref.html#RandomTimer
Da steht nichts von Perl bei diesem Parameter. ;)
Gruß Otto
Dass es "hinten" noch zwei Variabilisierungsparameterchen gibt, hast du gesehen?
Ich werd bekloppt, wo kommt denn jetzt die Variable her >:(
Ich hab die commandref lange und detailiert gelesen, aber davon stand da nix. Ich habe immer die Commandref meiner FHEM installation aus dem Webfrontend aufgerufen (/fhem/docs/commandref.html) und da steht das nicht drin. Da ist leider auch kein Datum drin mit dem man die Version überprüfen könnte, aber da ich fhem erst vor ein paar Wochen installiert und upgedated habe ging ich leider davon aus dass die passende, aktuelle commandref verlinkt ist. Gefunden hatte ich den RandomTimer über die wiki, auch da kein Wort von dieser variablen.
Danke für den Hinweis, ich werde jetzt immer in die online commandref sehen und alle anderen Quellen ignorieren.
Evtl sollte man ins Webif auch die online version verlinken und nicht auf ein internes dokument... Dann muss man nicht immer mehrere Stellen auf dem neuesten Stand halten.
Nochmal Danke!
Bei mir steht das auch in der lokalen cref
Wie ist denn die cref bei Dir eingestellt? global: language? modular?
Ist noch nicht ewig drin, aber schon eine ganze Zeit.
Und eigentlich wird die cref auch immer neu gebaut, wenn ein update durch ist. Na jedenfalls mein "help RandomTimer" liefert das, und wenn es in der online-Fassung auch drin ist, hast du ein Problem mit deiner commandref_.*.pl.
Würde eh' empfehlen, auf modular umzustellen, vielleicht hast du das gemacht und dann die (nicht mehr aktualisierte) Langfassung aufgerufen?
Im Wiki könnte es "jemand" mal nachpflegen, aber nicht ich ;) .
Ich weiß nicht wie man auf modular umstellt, und habe das auch nicht gemacht nach der Installation. Und es ist die aktuellste version Wie stellt man denn auf Modular um, und was bewirkt das?
So steht das in meiner commandref http://192.168.178.25:8083/fhem/docs/commandref.html#RandomTimer
RandomTimer
[EN DE]
Define
define <name> RandomTimer <timespec_start> <device> <timespec_stop> <timeToSwitch>
Defines a device, that imitates the random switch functionality of a timer clock, like a FS20 ZSU. The idea to create it, came from the problem, that is was always a little bit tricky to install a timer clock before holiday: finding the manual, testing it the days before and three different timer clocks with three different manuals - a horror.
By using it in conjunction with a dummy and a disableCond, I'm able to switch the always defined timer on every weekend easily from all over the world.
Description
a RandomTimer device starts at timespec_start switching device. Every (timeToSwitch seconds +-10%) it trys to switch device on/off. The switching period stops when the next time to switch is greater than timespec_stop.
Parameter
timespec_start
The parameter timespec_start defines the start time of the timer with format: HH:MM:SS. It can be a Perlfunction as known from the at timespec.
device
The parameter device defines the fhem device that should be switched.
timespec_stop
The parameter timespec_stop defines the stop time of the timer with format: HH:MM:SS. It can be a Perlfunction as known from the timespec at.
timeToSwitch
The parameter timeToSwitch defines the time in seconds between two on/off switches.
Examples
define ZufallsTimerTisch RandomTimer *{sunset_abs()} StehlampeTisch +03:00:00 500
defines a timer that starts at sunset an ends 3 hous later. The timer trys to switch every 500 seconds(+-10%).
define ZufallsTimerTisch RandomTimer *{sunset_abs()} StehlampeTisch *{sunset_abs(3*3600)} 480
defines a timer that starts at sunset and stops after sunset + 3 hours. The timer trys to switch every 480 seconds(+-10%).
define ZufallsTimerTisch RandomTimer *{sunset_abs()} StehlampeTisch 22:30:00 300
defines a timer that starts at sunset an ends at 22:30. The timer trys to switch every 300 seconds(+-10%).
Set
set <name> execNow
This will force the RandomTimer device to immediately execute the next switch instead of waiting untill timeToSwitch has passed. Use this in case you want immediate reaction on changes of reading values factored in disableCond. As RandomTimer itself will not be notified about any event at all, you'll need an additional event handler like notify that listens to relevant events and issues the "execNow" command towards your RandomTimer device(s).
Attributes
disableCond
The default behavior of a RandomTimer is, that it works. To set the Randomtimer out of work, you can specify in the disableCond attibute a condition in perlcode that must evaluate to true. The Condition must be put into round brackets. The best way is to define a function in 99_utils.
Examples
attr ZufallsTimerZ disableCond (!isVerreist())
attr ZufallsTimerZ disableCond (Value("presenceDummy") eq "present")
forceStoptimeSameDay
When timespec_start is later then timespec_stop, it forces the timespec_stop to end on the current day instead of the next day. See forum post for use case.
keepDeviceAlive
The default behavior of a RandomTimer is, that it shuts down the device after stoptime is reached. The keepDeviceAlive attribute changes the behavior. If set, the device status is not changed when the stoptime is reached.
Examples
attr ZufallsTimerZ keepDeviceAlive
disableCondCmd
In case the disable condition becomes true while a RandomTimer is already running, by default the same action is executed as when stoptime is reached (see keepDeviceAlive attribute). Setting the disableCondCmd attribute changes this as follows: "none" will lead to no action, "offCmd" means "use off command", "onCmd" will lead to execution of the "on command". Delete the attribute to get back to default behaviour.
Examples
attr ZufallsTimerZ disableCondCmd offCmd
onCmd, offCmd
Setting the on-/offCmd changes the command sent to the device. Standard is: "set <device> on". The device can be specified by a @.
Examples
attr Timer oncmd {fhem("set @ on-for-timer 14")}
attr Timer offCmd {fhem("set @ off 16")}
attr Timer oncmd set @ on-for-timer 12
attr Timer offCmd set @ off 12
The decision to switch on or off depends on the state of the device and is evaluated by the funktion Value(<device>). Value() must evaluate one of the values "on" or "off". The behavior of devices that do not evaluate one of those values can be corrected by defining a stateFormat:
attr stateFormat EDIPlug_01 {(ReadingsVal("EDIPlug_01","state","nF") =~ m/(ON|on)/i) ? "on" : "off" }
if a devices Value() funktion does not evalute to on or off(like WLAN-Steckdose von Edimax) you get the message:
[EDIPlug] result of function Value(EDIPlug_01) must be 'on' or 'off'
readingFnAttributes
runonce
Deletes the RandomTimer device after timespec_stop is reached.
switchmode
Setting the switchmode you can influence the behavior of switching on/off. The parameter has the Format 999/999 and the default ist 800/200. The values are in "per mill". The first parameter sets the value of the probability that the device will be switched on when the device is off. The second parameter sets the value of the probability that the device will be switched off when the device is on.
Examples
attr ZufallsTimerZ switchmode 400/400
Hab ich doch geschrieben: in global stellt man das ein. attr language und attr commandref
siehe
https://fhem.de/commandref_modular_DE.html#global
Sehr merkwürdig, wenn dein FHEM aktuell ist - dann wäre ja das script commandref_join.pl nicht gelaufen.
Hast Du noch das Log vom letzten update?
grep commandref /opt/fhem/log/fhem* -A5
hatte ich überlesen, jetzt ist es auf modular umgestellt.
wenn ich deinen grep commandref /opt/fhem/log/fhem* -A5 eingebe bekomme ich die Fehlermeldung Unknown command grep, try help.
Ich habe gestern abend noch ein update gemacht bevor ich den AUszug aus der commandref gepostet habe und das steht im Log:
2021.02.17 21:22:34 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:22:36 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:36:55 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:36:57 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:36:57 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:37:00 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:37:01 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:37:05 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:37:06 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:37:18 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:30 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:43 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:44 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:46 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:47 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:48 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:49 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:50 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:51 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:52 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:53 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:54 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:56 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:57 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:57 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:38:59 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:06 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:11 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:21 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:28 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:28 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:29 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:30 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:31 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:31 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:33 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:34 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:34 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:35 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:36 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:37 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:38 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:38 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:39 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:39:49 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:04 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:05 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:07 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:10 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:11 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:16 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:18 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:22 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:23 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:24 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:26 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:40:28 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:16 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:17 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:17 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:18 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:19 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:20 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:20 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:21 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:22 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:23 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:24 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:24 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:25 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:26 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:27 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:27 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:28 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:32 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:33 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:36 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:38 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:42:46 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 50 SenderID: 04144ED0 STATUS: 30
2021.02.17 21:43:05 4: EnOcean eg_wz_Licht_Fl received PacketType: 1 RORG: F6 DATA: 70 SenderID: 04144ED0 STATUS: 30
Der Befehl ist für die System Kommandozeile :o
Für FHEM Kommandozeile sähe er so aus:
{qx(grep commandref /opt/fhem/log/fhem* -A5)}
Dein Log ist nicht vom Zeitpunkt des updates Aber Du hast verbose höher 3 eingestellt - da wird jeder Krümel geloggt
Eigentlich steht am Ende vom Update so eine Zeile:
Zitat2021.02.18 10:50:22 1: Calling /usr/bin/perl ./contrib/commandref_join.pl -noWarnings, this may take a while
Da wäre halt die Frage: steht da bei Dir noch mehr - Fehler?
Hab das grep jetzt gemacht, und die commandref ist jetzt aktuell, und viel übersichtlicher, Danke.
EIn Log vom update hab ich nicht mehr, aber es kamen keine fehlermeldungen. Beim nächsten update achte ich mal drauf.