FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Det20 am 21 Juni 2018, 20:27:57

Titel: sunset_abs <> aktuelle Zeit
Beitrag von: Det20 am 21 Juni 2018, 20:27:57
Hallo zusammen,

sorry, mir ist kein besserer Betreff eingefallen. Also, ich stehe etwas wie der Ochse vor dem Tor. SUNSET ist mir manchmal zu ungenau. Ich fange daher bei meiner PV ab, sobald 0 kW geliefert werden. Dann erstelle ich einen DEFMOD +30 Minuten, der die Jalousien runterfährt. Kommt wieder Strom, dann wird der DEFMOD gelöscht.

Nun ja, das funktioniert. Aber ich hätte es gerne noch ein wenig genauer. In den Sommermonaten passt das nicht 100%. Ich hätte es gerne so, dass die Jalousien in 30 Minuten runterfahren, AUSSER der Sonnenuntergang ist, ermittelt mit SUNSET_ABS, > 30 Minuten, also später. In dem Fall würde ich gerne die SUNSET_ABS Zeit nehmen. Aber natürlich nur, wenn SUNSET nicht einen Wert für morgen liefert.


sub Sun0Watt()
{
  fhem("defmod jalousien_runter at +00:30 { Jalousien_FruehAbends() }");
  fhem("defmod jalousien_runter2 at +00:32 { Jalousien_FruehAbends() }");
}


Hat jemand einen Geistesblitz? Ich kann ja nicht einfach SUNSET nehmen, es kann ja sein dass PV ein wenig später meldet und das Ereignis damit erst +23 Std eintritt.
Titel: Antw:sunset_abs <> aktuelle Zeit
Beitrag von: babbeldoo am 22 Juni 2018, 14:21:36
Hi, nur mal so als schnelle Idee...

- ein notify auf die 0 kW Deiner PV
- sunset_abs - aktuelle Zeit = [Zeit bis zum Sonnenuntergang] zbzs
- wenn zbzs > 30 Minuten, dann [fahre Jalousien runter zu sunset_abs] ansonsten [fahre Jalousien runter jetzt plus 30 Min]
Titel: Antw:sunset_abs <> aktuelle Zeit
Beitrag von: Beta-User am 22 Juni 2018, 14:54:52
Ins unreine: in dem at dann prüfen, ob noch Tag ist (isday()). Wenn ja: neue sunset-Definition, wenn nein: direkt fahren.
Titel: Antw:sunset_abs <> aktuelle Zeit
Beitrag von: Det20 am 22 Juni 2018, 16:42:42
Eine Idee war zu prüfen, ob sunset > now ist. Problem ist, dass ich ja noch die 30 Minuten dazuaddieren muss. Die Runterfahrzeit muss bei sunset_abs also höher sein als now+30 Minuten. Wie aber addiere ich 30 Minuten dazu?


  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  my ($sunset_h,$sunset_m,$sunset_s) = split(":",sunset_abs(0));
 
  if(sunset_abs(0) gt $now) { fhem("defmod jalousien_runter at $sunset_h:$sunset_m:00 { Jalousien_FruehAbends() }"); }
  else { fhem("defmod jalousien_runter at +00:30 { Jalousien_FruehAbends() }"); };

Titel: Antw:sunset_abs <> aktuelle Zeit
Beitrag von: Otto123 am 22 Juni 2018, 16:48:04
Hi,

das kann doch die Funktion selbst!?
ZitatAll functions take up to three arguments:
The first specifies an offset (in seconds), which will be added to the event.

Also lass einfach sunset_abs rechnen.  ;) oder hab ich es falsch verstanden?
{sunset_abs(1800)}

Gruß Otto
Titel: Antw:sunset_abs <> aktuelle Zeit
Beitrag von: babbeldoo am 23 Juni 2018, 16:14:38
...entweder wie Otto schrieb, sunset_abs() mit Offset (+/-) oder selber rechnen (wie und was auch immer). Mal so als Beispiel:
my $sunrise = sunrise_abs("REAL",60);
my @timenow = split(/ /,TimeNow());
my $tsSunrise = $timenow[0]." ".$sunrise;
my $sunriseSince = (time_str2num(TimeNow()) - time_str2num($tsSunrise))/60;