Randomize an und ausschalt Uhr

Begonnen von JohanK, 26 Dezember 2012, 11:07:52

Vorheriges Thema - Nächstes Thema

JohanK

Problemstellung:
Im Urlaub werden einige Lampen und Rollo's automatisch an und aus geschaltet.
Die Zeiten sind fest oder mit sunset/sunrise verbunden.

Nachteil: mit sunset offset kan Ich Lampen anschalten abhängig vom sunset, mit eine bestimmte Distanz zwischen die verschiedene Anschaltzeiten. Ist schon in Ordnung.
Abschalten mach Ich auch in einer bestimmte Sequenz, aber diese Sequenz ist jetzt manuell festgelegt.

Ich möchte die Abschaltzeiten innerhalb eines gewissen window random machen, um zu simulieren das Ich nicht jeden Tag um 23:33 schlafen gehe, aber irgendwo zwischen 22:33 und 00:33, jeder Tag anders.
Dabei soll es natürlich so bleiben das erst im Wohnzimmer das licht aus geht, und dann im Schlafzimmer die lichte an und nachher die rollo runter. Also dieser Sequenz soll bleiben.

Denke als Loesung an eine random Zeit innerhalb -30 +30 minuten die addiert wird zu den original Schaltzeit. Schaffe das noch nicht um das in Perl um zu setzen.

Jemand das schon mal gemacht, oder ein Vorschlag?

m.f.g.

Johan




rudolfkoenig

> Schaffe das noch nicht um das in Perl um zu setzen.

Schade.  Vielleicht ist fhem/contrib/98_HOL.pm oder
fhem/contrib/fs20_holidays.sh einen kurzen Blick wert.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Johannk,
 
wenn noch nicht geschehen, erstelle zB. eine 99_myUtils (siehe hierzu in
das Wiki wie das geht) und kopiere den unteren Abschnitt dort hinein.
 
Damit kannst Du so etwas gestalten:
 
define irgendeinname at *{TimeRnd("22:33 ","23:59")}  {\
  fhem ("set lampe1 off");;\
}
 
Aber Achtung bei Übergang auf den nächsten Tag bei 00:00:00 Uhr!  
Dort gibt es ein Problem.
 
----------------- Schnipp ---------------------
 

 ######## TimeRnd Zeit Zufall von bis #############################
# Aufrufbeschreibung: TimeRnd("vzeit","bzeit")  
# vzeit = Startzeitpunkt zB. "07:00:00" oder "07:00"
# bzeit = Endzeitpunkt zB. "07:10:00" oder "07:10"
# TimeRnd = keine 24 Stunden aufaddiert
#
sub TimeRnd($$) {
  my ($h1,$m1,$s1) = split(":", shift);
  my ($h2,$m2,$s2) = split(":", shift);
  $s1 = 0 if(!$s1);
  $s2 = 0 if(!$s2);
  my $t1 = 3600*$h1+60*$m1+$s1;
  my $t2 = 3600*$h2+60*$m2+$s2;
  my $er = int(rand($t2-$t1)+$t1);
 
  return sprintf("%02d:%02d:%02d", $er/3600, ($er/60)%60, $er%60) if($s1);
  return sprintf("%02d:%02d", $er/3600, ($er/60)%60);
}
#
------------------Schnapp -------------------
 
 
LG
rahom

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

JohanK

Danke, war schon so unterwegs.
bis jetzt hatte ich das gebasteld:

sub randomizetime($)
{
  my $randomizeActive = AttrVal("global", "Away", "False");
  my ($h,$m,$s) = split(":", shift);
  if ($randomizeActive eq "True")
  {
    my $wincenter_inseconds = 3600*$h+60*$m+$s;
    my $offset = (int(rand(3600))-1800);
    my $newswitchtime = $wincenter_inseconds + $offset;
    return sprintf("%02d:%02d:%02d", $newswitchtime/3600,
($newswitchtime/60)%60, $newswitchtime%60)
  }
  else
  {
   return sprintf("%02d:%02d:%02d", $h,$m,$s)
  }

}

Und in prizip macht es eigentlich was Ich wollte. Moechte dazu eigentlich
nur ein mal pro tag ein random offset generieren, und nicht jedes mal, und
das resultat in ein dummy abspeichern und wieder benuetzen.
Deine loesung ist auch gut, bin jetzt aber neugierig wie man ein Perl
Resultat: my $offset = (int(rand(3600))-1800) in ein dummy abspeichert.
Den commandref erklaert das nicht so. {(int(rand(3600))-1800)} klappt auf
die commandzeile, aber wen ich versuch das Resultat ab zu speichern, wird
der Formul abgespeichert.
Um 24:00 hat auch mein sub ein problem :)

--Johan


2012/12/26 rahom

> Hallo Johannk,
>
> wenn noch nicht geschehen, erstelle zB. eine 99_myUtils (siehe hierzu in
> das Wiki wie das geht) und kopiere den unteren Abschnitt dort hinein.
>
> Damit kannst Du so etwas gestalten:
>
> define irgendeinname at *{TimeRnd("22:33 ","23:59")}  {\
>   fhem ("set lampe1 off");;\
> }
>
> Aber Achtung bei Übergang auf den nächsten Tag bei 00:00:00 Uhr!
> Dort gibt es ein Problem.
>
> ----------------- Schnipp ---------------------
>
>
>  ######## TimeRnd Zeit Zufall von bis #############################
> # Aufrufbeschreibung: TimeRnd("vzeit","bzeit")
> # vzeit = Startzeitpunkt zB. "07:00:00" oder "07:00"
> # bzeit = Endzeitpunkt zB. "07:10:00" oder "07:10"
> # TimeRnd = keine 24 Stunden aufaddiert
> #
> sub TimeRnd($$) {
>   my ($h1,$m1,$s1) = split(":", shift);
>   my ($h2,$m2,$s2) = split(":", shift);
>   $s1 = 0 if(!$s1);
>   $s2 = 0 if(!$s2);
>   my $t1 = 3600*$h1+60*$m1+$s1;
>   my $t2 = 3600*$h2+60*$m2+$s2;
>   my $er = int(rand($t2-$t1)+$t1);
>
>   return sprintf("%02d:%02d:%02d", $er/3600, ($er/60)%60, $er%60) if($s1);
>   return sprintf("%02d:%02d", $er/3600, ($er/60)%60);
> }
> #
> ------------------Schnapp -------------------
>
>
> LG
> rahom
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rahom

Du musst voher ein Dummy defenieren.

zB.:  
  define myOffset dummy

dann kannst du mit

  set myOffset $offset

deine Variable in ein dummy Namens "myOffset" speichern und ist somit weiterhin verfügbar.

LG
rahom

JohanK

danke, aber das gibt das gleiche, die wert von mein dummy wird "$offset"
und nicht wert die im $offset gespeichert ist.
Ubrichens steht mein code in 99_Utils und nicht in einem oneliner, macht
das den Unterschied?


--Johan


On Wed, Dec 26, 2012 at 8:03 PM, rahom wrote:

>
> Du musst voher ein Dummy defenieren.
>
> zB.:
>   define myOffset dummy
>
> dann kannst du mit
>
>   set myOffset $offset
>
> deine Variable in ein dummy Namens "myOffset" speichern und ist somit
> weiterhin verfügbar.
>
> LG
> rahom
> --
> send via http://forum.fhem.de
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

JohanK

oke funktioniert, danke!
--Johan


2012/12/26 Johan van der Kolk

> danke, aber das gibt das gleiche, die wert von mein dummy wird "$offset"
> und nicht wert die im $offset gespeichert ist.
> Ubrichens steht mein code in 99_Utils und nicht in einem oneliner, macht
> das den Unterschied?
>
>
> --Johan
>
>
> On Wed, Dec 26, 2012 at 8:03 PM, rahom wrote:
>
>>
>> Du musst voher ein Dummy defenieren.
>>
>> zB.:
>>   define myOffset dummy
>>
>> dann kannst du mit
>>
>>   set myOffset $offset
>>
>> deine Variable in ein dummy Namens "myOffset" speichern und ist somit
>> weiterhin verfügbar.
>>
>> LG
>> rahom
>> --
>> send via http://forum.fhem.de
>>
>> --
>> To unsubscribe from this group, send email to
>> fhem-users+unsubscribe@googlegroups.com
>>
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com