sunset_abs <> aktuelle Zeit

Begonnen von Det20, 21 Juni 2018, 20:27:57

Vorheriges Thema - Nächstes Thema

Det20

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.

babbeldoo

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]

Beta-User

Ins unreine: in dem at dann prüfen, ob noch Tag ist (isday()). Wenn ja: neue sunset-Definition, wenn nein: direkt fahren.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Det20

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() }"); };


Otto123

#4
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

babbeldoo

...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;