Windows Batch-Datei sunset sunrise

Für allgemeine Software
Benutzeravatar
joachimF
Offline
Beiträge: 109
Registriert: 17 Dez 2020, 12:28
Wohnort: Carcès
Danksagung erhalten: 1 mal
Kontaktdaten:

Windows Batch-Datei sunset sunrise

#1

Beitrag von joachimF »

Hallo,

wie kann ich mit einer Windows Batch-Datei den Sonnenauf- und Sonnenuntergang berechnen?
Viele Grüße aus der Provence, Joachim

https://puttkammer.de
wk893b
Offline
Beiträge: 134
Registriert: 23 Jan 2022, 09:13
Danksagung erhalten: 10 mal

Re: Windows Batch-Datei sunset sunrise

#2

Beitrag von wk893b »

Hallo Joachim,

also, ob man das grad so berechnen kann, weiß ich nicht.

Ich habe für meinen Standort eine PHP-Datei mit einem array, das für jeden Tag des Jahres genau den aktuellen Wert enthält.
Will ich also Sonnenaufgang und -untergang in einem extra Script mit anzeigen, so verknüpfe ich beide.
Das schöne dabei ist, dass die Daten des Standortes für jedes weitere Jahr jeweils Gültigkeit besitzen.
Anders verhält es sich mit Mondaufgang und -untergang.
Hier ändern sich die Zeiten immer wieder.

Die Daten im Format csv habe ich von einer Internetadresse, die müsste ich allerdings bei Interesse noch raussuchen.
Viele Grüße

wk893b


https://bh.wetter-alarm.de/
Wetter Kalkriese
Offline
Beiträge: 3
Registriert: 16 Jul 2023, 19:53

Re: Windows Batch-Datei sunset sunrise

#3

Beitrag von Wetter Kalkriese »

Hallo,

das vermute ich auch, batch kann eigentlich nicht wirklich mit Kommazahlen rechnen und so wie es im www steht, wohl nur (umständlich) mit in Verbindung von VBS.
Dann kannst Du es evtl. auch per Powershell versuchen, da findest Du auch Beispiele im Internet:

https://social.technet.microsoft.com/Fo ... powershell

Viele Grüße
Norbert
Viele Grüße Norbert

https://www.wetterstation-kalkriese.de/ ... ktuell.php

Davis Vantage Pro2 Plus
WSWin (akt. Version) (direktes Auslesen Davis-DataLogger und Import berechneter Messwerte per ws_merge)
Windows 10 Pro
Benutzeravatar
Gyvate
Offline
Beiträge: 2527
Registriert: 10 Aug 2021, 23:41
Wohnort: Saarbrücken
Hat sich bedankt: 12 mal
Danksagung erhalten: 383 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#4

Beitrag von Gyvate »

Zum physikalisch/mathematischen Hintergrund empfehle ich z.B.
https://www.biancahoegel.de/astronomie/ ... astro.html
oder
https://www.biancahoegel.de/zeit/sonnenaufgang.html
vielleicht auch eine in der Programmiersprache Delphi geschriebene Routine (s.u.)
daraus gehen in jedem Fall die nötigen Berechnungen hervor
ob das in einem "einfachen" Windows-Skript realisierbar ist, ist eine andere Frage - möchte ich bezweifeln

möglicherweise als PowerShell Skript (--> https://germanpowershell.com/mathematische-funktionen/)
PowerShell nutzt die .NET [Math] Methoden (hiess früher Prozeduren/Funktionen, halt (Unter-)Programme),
die alle nötigen trigonometrischen Funktionen beinhalten

Programmieren solltest Du dazu allerdings schon (etwas) können 8-)

ein VB/VBA Programm kann das auch (Excel "Makro"), siehe https://www.astroexcel.de/vbexcel.htm

****************************************
unit SunShineUnit;
{ Funktion zur Berechnung von Sonnenaufgang und Sonnenuntergang }
{ Parameter }
{ Input: Lat = Latitude = Länge in Grad }
{ Lon = Longitude = Breite in Grad }
{ Date = Datum }
{ Output: SunRise = Sonnenaufgangszeit }
{ SunSet = Sonnenuntergangszeit }
{ dt = Maximal mögliche Sonnenscheinzeit }

Interface

Uses SysUtils, Math;

Procedure SunShine(Lat,Lon:Double;Date:TDateTime;Var
SunRise,SunSet,dt:TDateTime);

Implementation

{ ArcTan von X/Y in rad von 0 bis 2*pi }
Function ATan2(Y,X:Double):Double;
Var at:Double;
Begin
If X <> 0.0 Then Begin
at := ArcTan(Y/X);
End Else Begin
If Y > 0.0 Then Begin
at := Pi / 2;
End Else Begin
at := Pi * 3 / 2;
End;
End;
If X < 0.0 Then at := at + Pi;
If at < 0.0 Then at := at + pi * 2;
Result := at;
End;

{ Float Modulus }
Function RMod(X,Y:Double):Double;
Begin
Result := X - Int(X/Y) * Y;
End;

Procedure SunShine(Lat,Lon:Double;Date:TDateTime;Var
SunRise,SunSet,dt:TDateTime);
Var h,l,m,ra,tr,ts,cd,cl,cLat,sd,sl,sLAt:Double;
N:Integer; yy,mm,dd:Word;
Begin
{ Tag des Jahres }
DecodeDate(Date,yy,mm,dd);
N := Trunc(EncodeDate(yy,mm,dd)) - Trunc(EncodeDate(yy,1,1)) + 1;

{ Sonnenaufgang }
sLat := Sin(DegToRad(LAT));
cLat := Cos(DegToRad(LAT));
tr := N + (6.0 - Lon / 15.0) / 24.0;
m := 0.9856 * tr - 3.289;
l := RMod(m + 1.916 * Sin(DegToRad(m)) + 0.020 * Sin(DegToRad(2.0 *
m)) + 282.634,360.0);
sl := Sin(DegToRad(l));
cl := Cos(DegToRad(l));
ra := 180 / pi * ATan2(0.91746 * sl,cl) / 15.0;
sd := 0.39782 * sl;
cd := SQRT(1.0 - SQR(sd));
h := (360.0 - 180 / pi * ArcCos((-0.01454 - sd * sLat) / (cd *
cLat))) / 15.0;
tr := RMod(H + ra - 0.065710 * tr - 6.622 - Lon / 15.0,24.0);
SunRise := Trunc(Date) + tr / 24;

{ Sonnenuntergang }
ts := N + (18.0 - Lon / 15.0) / 24.0;
m := 0.9856 * ts - 3.289;
l := RMod(m + 1.916 * Sin(DegToRad(m)) + 0.020 * Sin(DegToRad(2.0 *
m)) + 282.634,360.0);
sl := Sin(DegToRad(l));
cl := Cos(DegToRad(l));
ra := 180 / pi * ATan2(0.91746 * sl,cl) / 15.0;
sd := 0.39782 * sl;
cd := Sqrt(1.0 - Sqr(sd));
h := (180 / pi * ArcCos((-0.01454 - sd * sLat) / (cd * cLat))) /
15.0;
ts := RMod(h + ra - 0.065710 * ts - 6.622 - Lon / 15.0 +
24.0,24.0);
If ts < 0.0 Then ts := ts + 24.0;
SunSet := Trunc(Date) + ts / 24;

{ Mögliche Sonnenstunden }
dt := (SunSet - SunRise) * 24;
End;

end.
Ecowitt WS2320E,HP2553,HP3501,GW2001,GW1100, GW1000,WH2650,WN1910,WN1980, Meteobridge RPi4B-2GB/(16)32GB SLC 3165, Weewx 4.5.1/4.10.2, CumulusMX 3.28.4 b3282, Barani MeteoShield Pro, MetSpecRad02, Personal Weather Tablet(PWT) - http://meshka.eu
Benutzeravatar
joachimF
Offline
Beiträge: 109
Registriert: 17 Dez 2020, 12:28
Wohnort: Carcès
Danksagung erhalten: 1 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#5

Beitrag von joachimF »

Gyvate hat geschrieben: 16 Jul 2023, 20:09 ob das in einem "einfachen" Windows-Skript realisierbar ist, ist eine andere Frage - möchte ich bezweifeln
Du hast dir viel Mühe gemacht, aber das ist mir zu kompliziert, weil es mir nicht um mathematische Genaugkeit geht.

PowerShell und VA kenne ich nur vom Namen ;) . Vertrauter sind mir Linux Bash-Scripte und php.
--
Mit WsWin ->Zeitsteuerung Sonne schalte ich die WebCam-Software ein und aus.

Schmiert mir Windows ab (z.B. Stromausfall) und rebootet, wird durch Autostart sowohl WsWin als auch die WebCam-Software neu gestartet.

Passiert DAS innerhalb der Sonnenauf- und untergangszeit ist es OK.
Nur außerhalb dieses Zeitfensters startet auch die WebCam und liefert dann auch Nachtbilder, die ich nicht will.

Ich stelle mir eine Lösung vor, die so aus sieht, daß nur WsWin und ein Script im Autostartordner liegen.
Das Script fragt ab, ob die aktuelle Zeit innerhalb des Sonnenauf- und untergangfenster liegt und falls JA wird die WebCam gestartet.
Ich werde dieses mit php versuchen zu lösen, weil es eine einfache date_sunrise(time() Funktion gibt.
Viele Grüße aus der Provence, Joachim

https://puttkammer.de
Benutzeravatar
Gyvate
Offline
Beiträge: 2527
Registriert: 10 Aug 2021, 23:41
Wohnort: Saarbrücken
Hat sich bedankt: 12 mal
Danksagung erhalten: 383 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#6

Beitrag von Gyvate »

das mit der Kamera hab ich so gelöst, dass ich das in der Kamera so einstelle - und alle 1-2 Monate das Zeitfenster dort anpasse - dann liefert die Kamera kein neues Bild mehr und es wird nur das letzte angezeigt, bis am nächsten Morgen das Zeitfenster wieder erreicht ist. Meine "WebCams" sind Überwachungskameras, bei denen man u.a. pro Wochentag das Zeitfenster für die Erstellung von Videoclips bzw. Schnappschüssen einstellen kann.
So ist das Ganze auf der WebCam-Seite unabhängig von Server Up- oder Down-Time.

Übrigens hat die Funktion, die Dein php Skript da aufruft, bestimmt +/- die Formeln, die auch im Delphi-Programm zu sehen sind, im Bauch ... 8-) - aber wenn's bereits was Fertiges gibt, braucht man sich auch keine weitere Mühe zu machen.

Ganz nebenbei sind Windows und PowerShell Skripte auch nicht sonderlich verschieden von Linux-Skripten oder php Skripten. Es sind halt, grob gesagt, Programmiersprachen, die man in dem Umfang beherrschen sollte, in dem man sie einsetzen will. Und VB(A,S) ist schon eine sehr mächtige Programmiersprache, wie auch Python (das nicht nur in der Linux-Welt existiert)
Ecowitt WS2320E,HP2553,HP3501,GW2001,GW1100, GW1000,WH2650,WN1910,WN1980, Meteobridge RPi4B-2GB/(16)32GB SLC 3165, Weewx 4.5.1/4.10.2, CumulusMX 3.28.4 b3282, Barani MeteoShield Pro, MetSpecRad02, Personal Weather Tablet(PWT) - http://meshka.eu
Benutzeravatar
joachimF
Offline
Beiträge: 109
Registriert: 17 Dez 2020, 12:28
Wohnort: Carcès
Danksagung erhalten: 1 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#7

Beitrag von joachimF »

Gyvate hat geschrieben: 17 Jul 2023, 12:41 das mit der Kamera hab ich so gelöst, dass ich das in der Kamera so einstelle - und alle 1-2 Monate das Zeitfenster dort anpasse -
werde ich mal nachschauen, ob das auch bei mir geht, denn dein Ansatz ist auch gut
Viele Grüße aus der Provence, Joachim

https://puttkammer.de
Benutzeravatar
Tex
Offline
Beiträge: 386
Registriert: 07 Dez 2020, 18:32
Wohnort: Woldegk
Hat sich bedankt: 19 mal
Danksagung erhalten: 67 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#8

Beitrag von Tex »

Das kannst du sehr elegant mit WSWIN lösen:
Dieses Script am Ende der custom.txt einfügen. Den exakten Pfad zum Programm eingeben, Parameter ist nicht zwingend nötig - kann gelöscht werden. Der evtl. Haken dabei: WSWIN startet das Programm permanent in der fraglichen Zeit. Mal ausprobieren, ob dein Programm dann tatsächlich mehrfach gestartet wird, oder nur 1x.

%unit_off%
%ws_setmem[1]=%ws_timetoval[%ws_sunrise%]%%
%ws_setmem[2]=%ws_timetoval[%ws_time%]%%
%ws_setmem[3]=%ws_compare[1]=%ws_getmem[2]%~%ws_getmem[1]%~1~0%%
%ws_setmem[4]=%ws_timetoval[%ws_sunset%]%%
%ws_setmem[5]=%ws_compare[5]=%ws_getmem[4]%~%ws_getmem[2]%~1~0%%
%ws_setmem[6]=%ws_calc[+]=%ws_getmem[3]%~%ws_getmem[5]%~0%%
%wswin_runprogram=%ws_compare[3]=%ws_getmem[6]%~2~1~0%^C:\Pfad\Dateiname^Parameter%
%unit_on%
Zuletzt geändert von Tex am 17 Jul 2023, 17:14, insgesamt 1-mal geändert.
Benutzeravatar
joachimF
Offline
Beiträge: 109
Registriert: 17 Dez 2020, 12:28
Wohnort: Carcès
Danksagung erhalten: 1 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#9

Beitrag von joachimF »

Tex hat geschrieben: 17 Jul 2023, 15:27 Das kannst du sehr elegant mit WSWIN lösen:
wäre es dir möglich, die einzelnen Zeilen kurz zu kommentieren,
denn so ganz blind möchte ich dein Script nicht übernehmen.
Viele Grüße aus der Provence, Joachim

https://puttkammer.de
Benutzeravatar
Tex
Offline
Beiträge: 386
Registriert: 07 Dez 2020, 18:32
Wohnort: Woldegk
Hat sich bedankt: 19 mal
Danksagung erhalten: 67 mal
Kontaktdaten:

Re: Windows Batch-Datei sunset sunrise

#10

Beitrag von Tex »

%unit_off% / Einheiten ausschalten, sonst kann wswin nicht berechnen
%ws_setmem[1]=%ws_timetoval[%ws_sunrise%]%% / sunrise umrechnen in Dezimalzeit
%ws_setmem[2]=%ws_timetoval[%ws_time%]%% / akt. Zeit umrechnen in Dezimalzeit
%ws_setmem[3]=%ws_compare[1]=%ws_getmem[2]%~%ws_getmem[1]%~1~0%% / vergleichen ob akt. Zeit >sunrise, dann 1 sonst 0 speichern
%ws_setmem[4]=%ws_timetoval[%ws_sunset%]%% / sunset umrechen in Dezimalzeit
%ws_setmem[5]=%ws_compare[5]=%ws_getmem[4]%~%ws_getmem[2]%~1~0%% vergleich ob sunset kleiner akt Zeit, dann 1 sonst 0
%ws_setmem[6]=%ws_calc[+]=%ws_getmem[3]%~%ws_getmem[5]%~0%% / sm3 und sm5 addieren
%wswin_runprogram=%ws_compare[3]=%ws_getmem[6]%~2~1~0%^C:\Pfad\Dateiname^Parameter% / wenn gm6 = 2 dann 1 sonst 0. Wenn in der Variablen %wswin_runprogram= 1 als Ergebnis kommt, wird das Programm ausgelöst bzw. gestartet
%unit_on%
Antworten