Zufallszeit die x-te

Begonnen von FHEMAN, 28 Oktober 2017, 21:25:07

Vorheriges Thema - Nächstes Thema

FHEMAN

Moin zusammen,

ich brauchte ab und zu eine zufällige Uhrzeit in X Minuten oder in einem bestimmten Range. Und das im Kontext einer Funktion oder eines Defines. Also ganz banal ohne separates Zufallszeitdevice oder ähnliches:


############################################################################################
# Returns a randomized Timestamp (HH:MM:SS) from now or (optional) between two Timestamps in the future
# For a Timestamp in the next 20 Minutes use randomTime("00:20:00")
# For a Timestamp between 19.30 and 20:45 use randomTime("19:30","20:45")
# (Using of seconds is optional)
#
sub randomTime($;$) {
my ($time1, $time2) = @_;
my ($seconds, $minutes, $hours, $day, $month, $year) = localtime(time);
my $timenow = time();
if ($time2) {
my $trenner = (($time1 =~ m/\./) && ($time2 =~ m/\./)) ? "." : ":";
my ($hvon, $mvon, $svon) = split($trenner, $time1);
my $vontime = mktime($svon, $mvon, $hvon, $day, $month, $year);
my $vontimediff = $vontime - $timenow;
my ($hbis, $mbis, $sbis) = split($trenner, $time2);
my $bistime =  mktime($sbis, $mbis, $hbis, $day, $month, $year);
if ($bistime < $vontime) {
# in diesem Fall haben wir wohl eine Uhrzeit nach 0 Uhr, d.h. am naechsten Tag
$bistime = mktime($sbis, $mbis, $hbis, $day+1, $month, $year);
}
my $bistimediff =  $bistime - $timenow;
my $randtime = rand($bistimediff - $vontimediff)+1;
return FmtTime($vontime + $randtime);
} else {
my $trenner = ($time1 =~ m/\./) ? "." : ":";
my ($hbis, $mbis, $sbis) = split($trenner, $time1);
my $bistime =  mktime($seconds+$sbis, $minutes+$mbis, $hours+$hbis, $day, $month, $year);
my $bistimediff =  $bistime - $timenow;
my $randtime = rand($bistimediff)+1;
return FmtTime($timenow + $randtime);
}
}


Viel Spaß denen, die es brauchen!

Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB