FHEM Forum

FHEM => Automatisierung => Thema gestartet von: justme1968 am 17 Januar 2013, 18:39:51

Titel: sunset problem/bug
Beitrag von: justme1968 am 17 Januar 2013, 18:39:51
guten abend,

mir ist die letzten tage aufgefallen das mein rollo nicht immer automatisch runter gefahren ist. eben bin ich zufällig drauf gekommen woran es liegt. ich denke es ist ein problem mit der sunset() funktion. genauer mit dieser  version sunset("REAL",0,"18:00","21:00") wie sie z.b. auch in der Dokumentation in einem at verwendet wird: define RolladenRunter at *{sunset("REAL",0,"18:00","21:00")} trigger doRolladenDown wenn dieses define nach sonnenuntergang aber vor 18:00 uhr ausgeführt wird (wie es z.b. bei einem neustart passiert) wird der zeitpunkt auf den nächsten tag gelegt obwohl der ereignis heute noch stattfinden sollte. die entscheidung das ereigniss auf den nächsten tag zu legen sollte immer relativ zum tatsächlichen trigger zeitpunkt (der eben gegenüber dem tatsächlichen sonnenuntergang durch min und max verschoben sein kann) erfolgen.

gruss
  andre
Titel: Aw: sunset problem/bug
Beitrag von: rudolfkoenig am 18 Januar 2013, 09:14:57
Ist mir bekannt, siehe Link (http://forum.fhem.de/index.php?topic=9975.msg55646#msg55646)

Ich meine, dass das Problem nur den ersten Start betrifft, nachfolgende Aktionen muessten ausgefuehrt werden.
Titel: Aw: sunset problem/bug
Beitrag von: justme1968 am 18 Januar 2013, 09:29:48
hallo,

ja. es ist zwar 'nur' der erste start aber das starten passiert zur zeit recht häufig da ich noch auf der gleichen kiste entwickle. und das auch noch genau zu der fraglichen zeit.

gruss
  andre
Titel: Aw: sunset problem/bug
Beitrag von: rudolfkoenig am 18 Januar 2013, 09:34:13
Wenn es stoert, dann sollte man fixen.
Der Patch wuerde mich auch interessieren.
Titel: Aw: sunset problem/bug
Beitrag von: justme1968 am 18 Januar 2013, 10:14:18
gut. dann hör ich auf nur zu meckern und sende dir heute abend den patch. ich denke ich weiß schon was es ist kann es aber erst dann testen.

gruss
  andre

ps: das 99_sunrise_el modul läßt sich leider nicht per reload neu laden. von perl weiss ich zu wenig um zu sagen warum.
Titel: Aw: sunset problem/bug
Beitrag von: justme1968 am 18 Januar 2013, 18:20:12
bitte sehr...
@@ -94,6 +94,9 @@
     return 1;
   }
 
+  $sst = hms2h($min) if(defined($min) && (hms2h($min) > $sst));
+  $sst = hms2h($max) if(defined($max) && (hms2h($max) < $sst));
+
   my $diff = 0;
   if($data{AT_RECOMPUTE} ||                     # compute it for tommorow
      int(($nh-$sst)*3600) >= 0) {               # if called a subsec earlier
@@ -104,10 +107,10 @@
 
     ($rt,$st) = _sr_alt($altit,$needrise,$needset, $lt[5]+1900,$lt[4]+1,$lt[3], $ngmtoff);
     $sst = ($rise ? $rt : $st) + ($seconds/3600);
-  }
 
-  $sst = hms2h($min) if(defined($min) && (hms2h($min) > $sst));
-  $sst = hms2h($max) if(defined($max) && (hms2h($max) < $sst));
+    $sst = hms2h($min) if(defined($min) && (hms2h($min) > $sst));
+    $sst = hms2h($max) if(defined($max) && (hms2h($max) < $sst));
+  }
 
   $sst += $diff if($isrel);
   $sst -= $nh if($isrel == 1);


vielleicht könnte man dem at im state noch ein heute/morgen/... spendieren dann muss man nicht die triggertime umrechnen um zu sehen wann der termin genau ist. da ich aber nicht weiss ob der state irgendwo genutzt wird und kompatibel bleiben muss gibt es den patch hierfür nicht.

oder zusätzlich ein ein in 'x stunden' attribut.

gruss
  andre
Titel: Aw: sunset problem/bug
Beitrag von: rudolfkoenig am 19 Januar 2013, 10:37:15
Hab den Patch ganz kurz getestet und eingecheckt.
In 90_at.pm habe ich einen zusaetzlichen TRIGGERTIME_FMT hinzugefuegt, um TRIGGERTIME auch menschenlesbar zu haben.
Titel: Aw: sunset problem/bug
Beitrag von: justme1968 am 19 Januar 2013, 17:35:21
danke!

  andre
Titel: Aw: sunset problem/bug
Beitrag von: justme1968 am 28 Januar 2013, 18:06:10
eigentlich wäre es schön einen solchen aufruf mit min und max auch für die verschiedenen twilight zeitpunkte zu haben. vielleicht könnte man etwas in dieser art sub
Twilight($$$$) {
  my ($twilight, $reading, $min, $max) = @_;
   
  my $t = hms2h(ReadingsVal($twilight,$reading,0));
   
  $t = hms2h($min) if(defined($min) && (hms2h($min) > $t));
  $t = hms2h($max) if(defined($max) && (hms2h($max) < $t));
   
  return h2hms_fmt($t);
}
dort auch noch mit einbauen.

gruss
  adnre