INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Sonnendaten abgreifen für Software
27.01.2020, 08:01
Beitrag #1
Sonnendaten abgreifen für Software
Moin,

ich möchte mir gerne eine kleine Software erstellen, die mir bei Sonnenauf bzw. - untergang einen bestimmten Code an mein Bussystem sendet.

Den Code zu senden ist kein Thema, nur ich benötige die Zeit, wann die Sonne aufgeht bzw. untergeht.
Es gibt diverse Seiten die die Daten zur Verfügung stellen, nur ich möchte ungern dafür Geld zahlen Rolleyes
Auf dieser Seite erhalte ich einen Link mit den Daten, dies ist eher leider nur ein Plugin:
https://www.torsten-hoffmann.de/apis/sun...nk_de.html

Hat jemand eine Idee, wo man gut an diese Daten kommen kann? Als Offline-Tabelle wäre es auch nicht verkehrt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2020, 08:40
Beitrag #2
RE: Sonnendaten abgreifen für Software
Hi,

kennst Du diese Seite?

https://lexikon.astronomie.info/zeitgleichung/
https://lexikon.astronomie.info/java/sunmoon/

Da gibt es auch C# Code, ob Dir das hilft weiß ich nicht, aber damit ginge es auch offline.

Gruß André
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2020, 20:59 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2020 21:04 von uk1408.)
Beitrag #3
RE: Sonnendaten abgreifen für Software
Hallo,

irgendwo in den Tiefen dieses (oder des anderen) Forums habe ich was gefunden und ein bisschen für mich angepasst.

Code:
void Sunrise(int year, int month, int day, float Breite, float Laenge)
{
  double JD2000 = 2451545.0;
  double JD;

  JD = JulianischesDatum(year, month, day, 12, 0, 0);

  double T = (JD - JD2000) / 36525.0;
  double DK;
  double h = -50.0 / 60.0 * RAD;
  double B = Breite * RAD;                                               // Breite 48.9279
  double GeographischeLaenge = Laenge;                                   // 9.4263;

  //double Zeitzone = 0; //Weltzeit
  //double Zeitzone = 1; //Winterzeit
  //double Zeitzone = 2;   //Sommerzeit

  double Zeitgleichung = BerechneZeitgleichung(DK, T);
  double Minuten = Zeitgleichung * 60.0;
  double Zeitdifferenz = 12.0 * acos((sin(h) - sin(B) * sin(DK)) / (cos(B) * cos(DK))) / pi;
  double AufgangOrtszeit = 12.0 - Zeitdifferenz - Zeitgleichung;
  double UntergangOrtszeit = 12.0 + Zeitdifferenz - Zeitgleichung;
  double AufgangWeltzeit = AufgangOrtszeit - GeographischeLaenge / 15.0;
  double UntergangWeltzeit = UntergangOrtszeit - GeographischeLaenge / 15.0;

  double Aufgang = AufgangWeltzeit + Zeitzone;                           // In Stunden
  if (Aufgang < 0.0) Aufgang += 24.0;
  else if (Aufgang >= 24.0) Aufgang -= 24.0;

  double Untergang = UntergangWeltzeit + Zeitzone;
  if (Untergang < 0.0) Untergang += 24.0;
  else if (Untergang >= 24.0) Untergang -= 24.0;

  int AufgangMinuten   = int(60.0 * (Aufgang - (int)Aufgang) + 0.5);
  int AufgangStunden   = (int)Aufgang;
  if (AufgangMinuten >= 60.0) {
    AufgangMinuten -= 60.0;
    AufgangStunden++;
  }
  else if (AufgangMinuten < 0.0) {
    AufgangMinuten += 60.0; AufgangStunden--;
    if (AufgangStunden < 0.0) AufgangStunden += 24.0;
  }

  int UntergangMinuten = int(60.0 * (Untergang - (int)Untergang) + 0.5);
  int UntergangStunden = (int)Untergang;
  if (UntergangMinuten >= 60.0) {
    UntergangMinuten -= 60.0;
    UntergangStunden++;
  }
  else if (UntergangMinuten < 0) {
    UntergangMinuten += 60.0; UntergangStunden--;
    if (UntergangStunden < 0.0) UntergangStunden += 24.0;
  }

  Serial.print("Aufgang   ");
  Serial.print(AufgangStunden);
  Serial.print(":");
  if (AufgangMinuten < 10.0) Serial.print("0");
  Serial.print(AufgangMinuten);
  Serial.println();
  Serial.print("Untergang ");
  Serial.print(UntergangStunden);
  Serial.print(":");
  if (UntergangMinuten < 10.0) Serial.print("0");
  Serial.println(UntergangMinuten);
}

//********************************************
double JulianischesDatum (int Jahr, int Monat, int Tag,
                          int Stunde, int Minuten, double Sekunden)
// Gregorianischer Kalender
{
  int   Gregor;
  if (Monat <= 2)
  {
    Monat = Monat + 12;
    Jahr = Jahr - 1;
  }
  Gregor = (Jahr / 400) - (Jahr / 100) + (Jahr / 4);                     // Gregorianischer Kalender
  return 2400000.5 + 365.0 * Jahr - 679004.0 + Gregor
         + int(30.6001 * (Monat + 1)) + Tag + Stunde / 24.0
         + Minuten / 1440.0 + Sekunden / 86400.0;
}

//********************************************
double InPi(double x)
{
  int n = (int)(x / pi2);
  x = x - n * pi2;
  if (x < 0) x += pi2;
  return x;
}

//********************************************
double eps(double T) // Neigung der Erdachse
{
  return RAD * (23.43929111 + (-46.8150 * T - 0.00059 * T * T + 0.001813 * T * T * T) / 3600.0);
}

//********************************************
double BerechneZeitgleichung(double &DK, double T)
{

  double RA_Mittel = 18.71506921
                     + 2400.0513369 * T + (2.5862e-5 - 1.72e-9 * T) * T * T;

  double M  = InPi(pi2 * (0.993133 + 99.997361 * T));
  double L  = InPi(pi2 * (  0.7859453 + M / pi2
                            + (6893.0 * sin(M) + 72.0 * sin(2.0 * M) + 6191.2 * T) / 1296.0e3));
  double e = eps(T);
  double RA = atan(tan(L) * cos(e));
  if (RA < 0.0) RA += pi;
  if (L > pi) RA += pi;

  RA = 24.0 * RA / pi2;

  DK = asin(sin(e) * sin(L));

  // Damit 0<=RA_Mittel<24
  RA_Mittel = 24.0 * InPi(pi2 * RA_Mittel / 24.0) / pi2;

  double dRA = RA_Mittel - RA;
  if (dRA < -12.0) dRA += 24.0;
  if (dRA > 12.0) dRA -= 24.0;

  dRA = dRA * 1.0027379;

  return dRA ;
}

Im Setup noch ein paar Variablen definiert

float geoBreite = 48.9279, geoLaenge = 9.4263;

double pi2 = 6.283185307179586476925286766559; // Für Sonnen Auf- und Untergang
double pi = 3.1415926535897932384626433832795;
double RAD = 0.017453292519943295769236907684886;

und aufrufen
Sunrise(year(), month(), day(), geoBreite, geoLaenge);

Ergebnis ist in UntergangStunden, UntergangMinuten, AufgangStunden, AufgangMinuten. Ich hoffe ich habe nichts vergessen....

Viele Grüße

Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2020, 21:11
Beitrag #4
RE: Sonnendaten abgreifen für Software
Die double-Variablen machen aber nur auf größeren Prozessoren (> 8 Bit) Sinn.
Auf den 8-Bittern wird double zu float.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2020, 23:03
Beitrag #5
RE: Sonnendaten abgreifen für Software
(27.01.2020 21:11)Tommy56 schrieb:  Die double-Variablen machen aber nur auf größeren Prozessoren (> 8 Bit) Sinn.
Auf den 8-Bittern wird double zu float.

Gruß Tommy

Ich habe das schlicht und einfach übernommen und mich gefreut dass es mein Licht jetzt angeht wenn es dunkel wird. Wenn ich statt double alles als float definiere ändert sich das Ergebnis um 1 Minute....
Mein Ehrgeiz ist nicht alles bis zum letzten auszuquetschen, mir reicht es wenn es stabil funktioniert. Mein erster Rechner hatte 48 kB, da musste man noch sparen, aber heute?
Trotzdem Danke für den Hinweis.....

Viele Grüße

Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2020, 23:05
Beitrag #6
RE: Sonnendaten abgreifen für Software
Das siehst Du richtig. Ich wollte nur auf den Unterschied hinweisen.

Wir sind also beieinander.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2020, 15:00 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2020 15:28 von hYtas.)
Beitrag #7
RE: Sonnendaten abgreifen für Software
Im falschen Forum gepostet... :/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2020, 15:02
Beitrag #8
RE: Sonnendaten abgreifen für Software
Was soll dieser Code mit dem Arduino zu tun haben?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ramps 1.4 Roboter basierend auf der AR2 Software von Annin Robots Arduino DMX Master 3 347 13.08.2020 09:44
Letzter Beitrag: Arduino DMX Master
  Drehgeber wie Iduino SE055 - Software- oder Hardware-Problem? Arduinero 12 2.145 24.01.2019 13:55
Letzter Beitrag: Bitklopfer
Music MIDI Software optimieren solarmusic 6 1.388 22.11.2018 18:20
Letzter Beitrag: Tommy56
  Serielle Daten Windigipet 2018 Software, Arduino Mega 2560 verarbeiten/melden Christian_Moba-Arduino 11 3.862 15.09.2018 09:43
Letzter Beitrag: MicroBahner
  Arduino Software auf rohen 328 mit AVR ISP MK2? janoslon421 8 2.583 07.06.2018 17:47
Letzter Beitrag: Mathias
  Programmieren, welche Software ist möglich W-P-Grimma 5 2.847 03.04.2018 16:33
Letzter Beitrag: Tommy56
  Arduino Software ohne Bibliotheken-Manager bertl68 3 2.166 02.01.2018 18:36
Letzter Beitrag: Tommy56
  Arduino Software Serial - Delay notwendig? Zipfel1 18 6.027 02.01.2018 11:59
Letzter Beitrag: Tommy56
  Probleme mit der Software Thor Wallhall 8 3.624 31.12.2017 11:34
Letzter Beitrag: Tommy56
  I2C Master Slave/Software Master Slave? Treeshort 11 3.748 02.10.2017 12:48
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste