Script ausführen / Trigger Sunset geogr. Koordinaten

In der V1 gab es die Möglichkeit ein Skript relative zu Sunset, ermittelt auf Basis geogr. Länge und Breite auszuführen.

Gibt es die Funktion in V2 noch, oder ist die gestrichen, ich finde sie nicht?

Gruss,

wupperi

Ich frage mal vorsichtig nach: War das die falsche Frage im falschen Forum, oder warum bekomme ich keine Antwort?:confused:

Hallo,

um welche Funktion geht es denn genau?

hallo wupperi, eigentlich wie du schon sagts ist es ein skript.skripte sind nicht schon automatisch in der v1,also auch nicht in der v2.wenn du es aber gefunden hast kannst du sie in der v2 einbinden.aber so genau verstehe ich deine frage auch nicht.vielleicht solltest du sie noch ein bißchen genauer stellen.

… nee - die Frage ist schon klar - wir überlegen noch wie.

MST

um welche Funktion geht es denn genau?

Hier geht’s wahrscheinlich um die Möglichkeit der 1.0, den Weekly-Timer im Timer-Wizzard auf Sunrise/Sunset zu stellen. Damit füttere ich bisher meine Tag/Nacht-Variablen.

Gruss, Andreas

Hallo wupperi,

ich nutze dieses Skriptdas im Forum vor einiger Zeit bereitgestellt wurde.

Da es mehr als Sunset/Sunrise bereitstellt wird es alle 60 Sekunden gestartet.

Läuft bei mir hervorragend und liefert.

Tag/Nacht: ja/nein
Datum und Uhrzeit in allen Teilstrings sowie komplett
Sommer-/Winterzeit
Sonnenauf- und Sonnenuntergang.

Es müssen die entsprechenden Variablen angelegt werden mit denen Du dann jeweils andere Skripte ansteuern kannst.

Läuft in V1 und V2.

@Bladerunner
Genau, es gab die Möglichkeit im Timer Wizard Skripte zu bestimmten Zeiten zu starten. Eine Option war, die Skripte relativ zu Sunset/Sunrise am Standort (Long/Lat) auszuführen.

Beispiel: Starte Skript „Gartenbeleuchtung_an.php“ jeden Tag 30 Minuten nach Sunset.

@wgreipl
Danke für den Link, ich probiere es mal aus, als nicht Programmierer (Ich designe globale Weitverkehrsnetze und programmiere aber nicht… :frowning: ) ist das mit dem Wizard aber komfortabler. Ich probiers mal aus.

Hallo,
das Skript läuft, Variablen sind angelegt, allerdings bin ich mit meinen Programmierkenntnissen schon wieder an meine (nahen) Grenzen gestossen.

Was ich möchte ist, dass meine Gartenbeleuchtung 30min (OFFSET) nach dem wirklichen SUNSET (Long/Lat) an meinem Standort ANGEHT und dann jeden abend um 23:00h ausgeht.

Das Skript von wgreipl läuft bei mir jetzt jede Minute und liefert mir mit festeingestelltem OFFSET von 30 Minuten die errechnete SUNSET Zeit (wahrer Sunset + 30 Minuten) und einen Boolschen Wert DAYLIGHT (ja/nein)

Erst dachte ich, ich könnte den Timer Wizard nutzen, und ein Skript „Garten_an.php“ immer laufen lassen, solange der Wert DAYLIGHT auf „false“ steht. Allerdings würde dann mein Skript „Garten_aus.php“ um 23.00h das Licht ausschalten, und der Timerwizard sofort wieder anschalten, da DAYLIGHT ja immer noch „FALSE“ wäre.

Dann habe ich if/else probiert:

Wenn DAYLIGHT=FALSE and $TIME(String!) <> 23:00h
LICHT an;
else
LICHT aus:

Problem hier ist, dass DAYLIGHT ja false sein kann (z.B. um 22.15h) und die Zeit ungleich 23.00h, da müsste Licht also an sein, das Skript schaltet aber aus.

Was ich bräuchte wäre so etwas:

Wenn DAYLIGHT=FALSE and TIME >16:00h and <22:59h
LICHT an;
else
LICHT aus;

Wie gesagt, TIME ist Typ String, ich weiss nicht wie ich das vernünftig auswerten kann.

@MOD, falls Off Topic bitte verschieben und kurze PN. Ich habe das in dem Forum geschrieben, weil das die direkte Folge der fehlenden Timer Wizard Funktion der V2 ist.

Hi,

habe immer noch ein kleines Problem mit dem Skript, habe zwar einen Workaround aber der ist nicht schön.

@Steiner: Wird es die Funktion Wizard SUNSET/SUNRISE wie in V2 noch geben, oder ist das von der Feature List runter?

Gruss,

wupperi

So nachdem ich es nun auch nochmal versuche auf 2.0 umzusteigen…

Schieb nach oben !! :frowning:

Hallo,

also mit dem folgenden Skript sollte das eigentlich funktionieren:


<?
/***********************
 Gartenbeleuchtung schalten

 Trigger: Zyklisch jede Minute
 ***********************/

define("VarTsSunset", 12345, true);  // 12345 durch die ID der INTEGER-Var. ersetzen (siehe Text unten)
define("VarGBFlag", 12345, true); // 12345 durch die ID der BOOLEAN-Var. ersetzen (siehe Text unten)

$Offset = 30;    // Offset zu Sunset in Minuten
$OffTime = "23:00:00"; // Ausschaltzeitpunkt

// Ein- und Ausschaltzeitpunkt in Unix-Timestamp umwandeln
$ot = explode(":", $OffTime);
$ontime = GetValue(VarTsSunset) + ($Offset * 60);
$offtime = mktime((int)$ot[0], (int)$ot[1], (int)$ot[2]);

// Gartenbeleuchtung schalten
if (GetValue(VarGBFlag) == false AND time() >= $ontime AND time() <= $offtime) {
  // Einschalten
  ---> Hier Einschaltbefehl einsetzen
  SetValue(VarGBFlag, true);  // Wir haben eingeschaltet...
} elseif (GetValue(VarGBFlag) == true AND time() >= $offtime) {
  // Ausschalten
  ---> Hier Ausschaltbefehl einsetzen
  SetValue(VarGBFlag, false); // Wieder bereit machen für den nächsten Tag
}
?>

Damit das funktioniert wird eine zusätzliche BOOLEAN-Variable benötigt (als Schaltmerker) und eine zusätzliche INTEGER-Variable (für den Sonnenuntergang als Timestamp), außerdem müsste das zyklische Uhrzeitskript noch um eine weiter Variable ergänzt werden, nämlich den Sonnenuntergang als UNIX-Timestamp:

Ziemlich am Anfang des Skripts finden sich die folgenden 4 Zeilen:


$var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $day_offset));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $night_offset));

SetValueString("SUNRISE", $var_sunrise);
SetValueString("SUNSET", $var_sunset);

Diese Zeilen müssten wie folgt ergänzt werden:


 $var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $day_offset));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $night_offset));
$sunset = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90, $night_offset);

SetValueString("SUNRISE", $var_sunrise);
SetValueString("SUNSET", $var_sunset);
SetValue(VarTsSunSet, $sunset);

Und an den Anfang des Skriptes muss noch irgendwo die Konstante VarTsSunSet definiert werden:

define("VarTsSunset", 12345, true);  // 12345 durch die ID der INTEGER-Var. ersetzen (siehe Text unten)

Man da hast Du dir ja echt Mühe gegeben, super wenn das funktioniert…ich verstehe nur leider Bahnhof …
ich habe mich wieder einmal damit abgefunden, daß für mich meine V1 immernoch am besten ist.( ich persönlich finde sie einfach nur NOOB- und BENUTZERFREUNDLICHER ).

Mein Stand in V2:
Heizungsregelung geht net so
Rollläden gehen net so
Squeezebox hab ich nu endlich geschafft
Fritzbox will auch noch net

Hallo Thorsten (bruns8234)

Habe das Script von Dir mal mit V2 ausprobiert. Erhalte leider immer in der Zeile

$ot = explode(":", $OffTime);

folgende Fehlermeldung:

Parse error: parse error, unexpected T_VARIABLE in

Ich denke mal hat irgend etwas mit der V2 zu tun.

Hallo Andy,

nö hat nix mit V2 zu tun, ist einfach nur peinlich… :rolleyes:

Ergänze doch bitte mal 2 Zeilen über der Fehlerstelle in der Zeile

$OffTime = "23:00:00" // Ausschaltzeitpunkt

:eek: das fehlende Semikolon am Ende der Zeile :eek:

Die Zeile muss dann so aussehen:

$OffTime = "23:00:00"; // Ausschaltzeitpunkt

Dann klappt das auch mit dem Schalten… einfach nur peinlich… sorry…


Hab’ den Quelltext oben entsprechend korrigiert.

[OffTopic]

Lass den Kopf nicht hängen!
Du und wgreipl habt mir Hoffnung gegeben, dass ich nicht alleine bin, mit all den Problemen der Migration und nun ich muss sagen… nach drei Tagen intensiver Einarbeitung in V2 (meist von 10:00 - 02:00, mit 3-4 Töpfen Glühwein :smiley: und unzähligen Zigaretten ) bin ich überzeugt vom neuen Konzept. Ich habe jetzt so ziemlich alle Scripts angepasst und es scheint wieder zu funktionieren.
Der WAF ist zwar derzeit nicht so berauschend, aber die Zeit der Migration konnte ich nichts destotrotz nicht besser wählen… die Kinder sind noch mit ihren Weihnachtsgeschenken beschäftigt und das verhilft mir zur Ruhe und Konzentration. Ich hatte anfangs ca. 2 Tage für den Umstieg veranschlagt, nun sind vier daraus geworden, aber ich bin zufrieden und harre, was da jetzt noch wird aus der V2. Das Bug-System von paresy ist jedenfalls nicht schlecht und er ist sehr bemüht Fehler zu beheben und Fragestellungen nachzukommen. Ist ´ne heisse Zeit so zwischen den Jahren, denn ich habe das Gefühl, dass mehrere User die „ruhige“ Zeit nutzen, um sich mit der V2 auseinander zu setzen. Ich jedenfalls bin jetzt so weit, da das Wichtigste läuft, nur noch auf V2 zu setzen. Der Weg zurück ist durch fehlende Updates jedenfalls nicht zu befürworten.

Wie schrieb doch wgreipl:

ich habe den Umstieg nicht bedauert, mittlerweile nach 2 Wochen Arbeit läuft alles so wie ich es wollte, eigentlich sogar besser.

Kann ich aus heutiger Sicht bestätigen!

@bruns8234

Schöner Satz :smiley: …gefällt mir;) …könnte von mir sein:)
[/OffTopic]

Hi Thorsten

Muss Dir nicht peinlich sein, habe ja selber Tomaten auf den Augen gehabt und hätte es selber sehen müssen.

Auf jeden Fall funzt es jetzt.

Hallo Thorsten (bruns8234)

Soweit funktioniert Dein Script mit V2. Licht schaltet schön artig eine halbe Stunde nach Sonnenuntergang ein und um 23:00 Uhr wieder aus.

Leider habe ich aber den Effekt das es um 0:00 Uhr einfach wieder angeht und an bleibt. Was ist verkehrt ?

Hier noch der Code:


<?

 //Start writing your scripts between the brackets
 
define("VarTsSunset", 33047 /*[.Scripts\Sunset Offset\VarTsSunset]*/ , true);
define("VarGBFlag", 24841 /*[.Scripts\Sunset Offset\VarGBFlag]*/ , true);

$Offset = 30;    // Offset zu Sunset in Minuten
$OffTime = "23:00:00"; // Ausschaltzeitpunkt

// Ein- und Ausschaltzeitpunkt in Unix-Timestamp umwandeln
$ot = explode(":", $OffTime);
$ontime = GetValue(VarTsSunset) + ($Offset * 60);
$offtime = mktime((int)$ot[0], (int)$ot[1], (int)$ot[2]);

// Gartenbeleuchtung schalten
if (GetValue(VarGBFlag) == false AND time() >= $ontime AND time() <= $offtime) {
  // Einschalten
  //---> Hier Einschaltbefehl einsetzen
  ENO_SwitchMode(43418 /*[Outdoor Area\Entry Light 1]*/,true);
  ENO_SwitchMode(18993 /*[Outdoor Area\Entry Light 2]*/,true);

  SetValue(VarGBFlag, true);  // Wir haben eingeschaltet...
} elseif (GetValue(VarGBFlag) == true AND time() >= $offtime) {
  // Ausschalten
  //---> Hier Ausschaltbefehl einsetzen
  ENO_SwitchMode(43418 /*[Outdoor Area\Entry Light 1]*/,false);
  ENO_SwitchMode(18993 /*[Outdoor Area\Entry Light 2]*/,false);

  SetValue(VarGBFlag, false); // Wieder bereit machen für den nächsten Tag
}
 
 // Sonnenauf.- u. Untergang berechnen
$longitude = 55.255941;
$latitude = 25.054695;

$var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90));
$sunset = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90);

SetValueString(31961 /*[.Scripts\Sunset Offset\SUNRISE]*/ , $var_sunrise);
SetValueString(22749 /*[.Scripts\Sunset Offset\SUNSET]*/ , $var_sunset);
SetValue(VarTsSunSet, $sunset);
?>

Hallo Andy,

setz doch bitte das nächste mal den Code entsprechend in die Tags.

Möge bitte ein Mod ändern, Danke.

Es ist einfacher zulesen :slight_smile:

Hi Andy,

ich plage mich auch gerade mit ähnlichen Gedanken herum … ich habe ebenfalls vor so einen Zeitvergleich zu benutzen.
Von der Logik her könnte das doch auch mit dem Datum zusammenhängen, oder?
0.00 ist größer als die Einschaltzeit und kleiner als die Ausschaltzeit … und auch alles danach, wenn man es Tagesübergreifend betrachtet. Theoretisch müßte man das Datum mit vergleichen oder wird das durch die Funktion mktime schon erledigt? Denn vorgegeben wird ja nur die Zeit

$offtime = mktime((int)$ot[0], (int)$ot[1], (int)$ot[2]);

Wenn die Zeile mit dem aktuellen Datum ergänzt wird, würde sich dann etwas ändern??

Gruß
Jens