sunset problem/bug

Begonnen von justme1968, 17 Januar 2013, 18:39:51

Vorheriges Thema - Nächstes Thema

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Ist mir bekannt, siehe Link

Ich meine, dass das Problem nur den ersten Start betrifft, nachfolgende Aktionen muessten ausgefuehrt werden.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Wenn es stoert, dann sollte man fixen.
Der Patch wuerde mich auch interessieren.

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

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.

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968