Autor Thema: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt  (Gelesen 6038 mal)

Offline m2th3o

  • Full Member
  • ***
  • Beiträge: 131
Hallo,

eigentlich habe ich sunset/sunreise gut am laufen und habe kürzlich dann eine Skript-Funktion geschrieben, welche mir - abhängig vom Wochentag - eine unterschiedliche Zeit für das Rolladen hochfahren sendet. Die Funktion sieht folgender Maßen aus:


######## UpTimeRolladen Zeit zum Hochfahren der Rolladen###################
# Aufrufbeschreibung: UpTimeRolladen($)
# $ := Wochenende ($we)
# return: Zeitwert

sub UpTimeRolladen($)
{
  my ($wochenende) = @_;
  if ($wochenende)
  {
    return sprintf(sunrise(0,"09:00","09:15"));
  }
  else
  {
    return sprintf(sunrise(0,"07:00","07:30"));
  }
}

In fhem rufe ich so auf:

define SunRise at *{UpTimeRolladen($we)} set OG_Rollladen auf

Irgendwie wird dieses define jetzt aber immer erst um einen Tag zeitversetzt ausgeführt, wodurch ich die Wochenendschaltung für Sonntags und Montags und nicht für Samstags und Sonntags habe.

Kann ich irgendwie beeinflussen, dass die SunRise-Funktion korrekt berechnet wird? Oder muss ich selbst fuschen, indem ich auf Freitag und Samstag abfrage und dann die Zeit ändere?

Gruß,
Markus



Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20782
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #1 am: 01 August 2013, 09:35:43 »
Grund: beim Definition bzw Ausfuehren von at wird deine Routine fuer die Zeitberechnung aufgerufen, um den naechsten Termin zu berechnen. Das ist in deinem Fall normalerweise ein Tag vor der Ausfuehrung es sei denn fhem wird frueh neu gestartet).

Ich wuerde 2x at definieren, und die Pruefung auf Wochenende in die Ausfuehrung verlagern.

Offline m2th3o

  • Full Member
  • ***
  • Beiträge: 131
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #2 am: 03 September 2013, 08:55:45 »
Hallo,

wenngleich meine Anfrage schon etwas zurückliegt: Problem habe ich verstanden, Lösung noch nicht ganz ;) Wie würde das mit 2 at's aussehen?

Vielen Dank & Gruß,
Markus

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20782
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #3 am: 03 September 2013, 09:00:29 »
define r_wd at *07:00 { if(!$we) { fhem("set OG_Rollladen auf") } }
define r_we at *09:00 { if($we) { fhem("set OG_Rollladen auf") } }

Offline m2th3o

  • Full Member
  • ***
  • Beiträge: 131
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #4 am: 04 September 2013, 22:18:17 »
Hmm okay danke... so könnte ich das machen, wenngleich ich dann auf jeden Fall fixe Zeiten habe. Für diesen Fall egal, aber bei anderen Anwendungen schade.

Kann man nicht eine Neuberechnung der "at"s auf 00:01 jeden Tages legen? Dann ist die $we-Var schon korrekt.

Gruß,
Markus

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16025
  • s/fhem\.cfg/configDB/g
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #5 am: 04 September 2013, 22:58:37 »
Zitat von: m2th3o schrieb am Mi, 04 September 2013 22:18
Kann man nicht eine Neuberechnung der "at"s auf 00:01 jeden Tages legen?


nichts leichter als das...

attr <atName> alignTime 00:01
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg Stammtisch am 20.09.2019

Offline m2th3o

  • Full Member
  • ***
  • Beiträge: 131
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #6 am: 05 September 2013, 13:47:13 »
Hmm. Das wirft mir leider die Fehlermeldung, dass es nur für "relative ats" geht. Meins ist ja mit at *{..} absolut, wenn auch variabel. Ich glaube, dass ich einfach meine Berechnungsfunktion anpasse und auf Fr und Sa abfrage, um die Zeitversetzung rauszubekommen.

Danke allerseits...

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16025
  • s/fhem\.cfg/configDB/g
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #7 am: 05 September 2013, 14:12:08 »
Zitat von: m2th3o schrieb am Do, 05 September 2013 13:47
dass es nur für "relative ats" geht.


Dann machs doch relative :)

define bla at +*24:00 delete SunRise;; define SunRise at {UpTimeRolladen($we)} set OG_Rollladen auf
attr bla alignTime 00:01


Damit wird ein at "bla" erzeugt, das nächste Nacht um 00:01 Uhr ein at namens "SunRise" generiert, das genau einmal ausgeführt wird.
Und in der nächsten Nacht passiert das gleiche wieder.
Und so weiter...


---
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg Stammtisch am 20.09.2019

Offline m2th3o

  • Full Member
  • ***
  • Beiträge: 131
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #8 am: 06 September 2013, 18:49:03 »
Puhh.. Hallo betateilchen,

wir kommen der Sache näher. Ich habe aber deinen code noch nicht so ganz verstanden.

define bla at +*24:00 delete SunRise;; define SunRise at {UpTimeRolladen($we)} set OG_Rollladen auf
attr bla alignTime 00:01


heißt, dass alle 24h SunRise gelöscht und neu angelegt wird.

Was macht denn dann das alignTime noch?

würde nicht reichen:

define RmSunRise at *00:01 delete Sunrise;; define SunRise at {UpTimeRolladen($we)} set OG_Rollladen auf

Vielen Dank & Gruß,
Markus

P.S.: Im MOment könnte ich es wg Wochenende gut testen ;)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16025
  • s/fhem\.cfg/configDB/g
Aw: Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #9 am: 06 September 2013, 19:57:10 »
Zitat von: m2th3o schrieb am Fr, 06 September 2013 18:49
heißt, dass alle 24h SunRise gelöscht und neu angelegt wird.


nur, falls es - aus welchen Gründen auch immer - zu diesem Zeitpunkt noch definiert sein sollte.

Zitat von: m2th3o schrieb am Fr, 06 September 2013 18:49
würde nicht reichen:


Ja. Aber nach dem ganzen Krampf, den Du hier betreibst, war ich nicht davon ausgegangen, dass Du mit solch einer einfachen Lösung zufrieden sein könntest.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg Stammtisch am 20.09.2019

picard74

  • Gast
Antw:Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #10 am: 15 Mai 2014, 13:01:46 »
Hallo!

Ich habe nun ein ähnliches Thema, wo ich aktuell wirklich nicht durch sehe!
Ich steuere meine Rollos ebenfalls per Sunrise und möchte nun in diesem Zusammenhang eine Lösung nutzen, die es mir ermöglicht, am WE das Zeit Fenster anders zu setzen als an den Werktagen!
Bei mir sieht es aktuell wie folgt aus:

define OG_Bad_Rollo_runter_ASTRO at *{sunset(0,"16:00","22:00")} set OG_Bad_Rollo off
define OG_Bad_Rollo_hoch_ASTRO at *{sunrise(0,"06:00","09:30")} set OG_Bad_Rollo on

Nun möchte ich aber noch, dass Sonnabend und Sonntag das Rollo zu einer anderen zeit hoch fährt. Kann mir da einer helfen! Vielen Dank

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16025
  • s/fhem\.cfg/configDB/g
Antw:Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #11 am: 15 Mai 2014, 13:48:42 »
Ja, die Suchfunktion zum Beispiel.

Es gibt in fhem eine Variable $we mit der Du abfragen kannst, ob Wochenende ist oder nicht.
Damit kannst Du in Deinen at Definitionen einfach eine if() Abfrage einbauen und entsprechend reagieren.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg Stammtisch am 20.09.2019

Offline Jens_B

  • Full Member
  • ***
  • Beiträge: 379
Antw:Berechnung von Sunrise / Sunset um einen Tag zeitversetzt
« Antwort #12 am: 15 Mai 2014, 16:15:25 »
define OG_Bad_Rollo_runter_ASTRO_wt at *{sunset(0,"16:00","22:00")} {if (!$we) {fhem ("set OG_Bad_Rollo off"}}
könnte zum Beispiel den Rollladen nur an Wochentagen runterfahren.

define OG_Bad_Rollo_runter_ASTRO_we at *{sunset(0,"17:00","21:00")} {if ($we) {fhem ("set OG_Bad_Rollo off"}}
das hier würde dann an Wochenenden ein anderes "Zeitfenster" nehmen. Allerdings schätze ich, das die Rollladen dadurch das das at ja über sunset genommen wird, trotzdem den großen Teil des Jahres zur selben Zeit runtergehen. Man kann Sunset ja auch einen offset vorgeben (in deinem Fall ist das "0") zum Beispiel am Wochenende +1800 (das wären 30 Minuten nach Sonnenuntergang).


Such mal hier im Forum nach  "Rollladen Zeitsteuerung".
Ich bin sicher da wirst Du fündig.

Gruß
Jens
« Letzte Änderung: 15 Mai 2014, 16:23:08 von Jens_B »
RaspberryPi 3 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Pilight
Fritz!Box 7590

 

decade-submarginal