Mondphase

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
Benutzeravatar
hanan
Beiträge: 222
Registriert: 15.12.2012, 16:00
Danksagung erhalten: 1 Mal

Mondphase

Beitrag von hanan » 25.05.2017, 15:07

Hallo zusammen
Ich habe mir mal das Skript von Dako viewtopic.php?f=31&t=22783 für die der Mondphasenberechnung angeschaut und irgendwie stimmt da mit der Berechnung etwas nicht.

Gemäss diesem Link ist heute Neumond https://www.timeanddate.de/mond/phasen/ ... /allschwil, also 0% Mondphase, doch das Skript berechnet bei mir 99% Mondphase und abnehmender Mond. Das mit dem abnehmendem Mond kann ich ja noch verstehen, da der Neumond erst um 21:44 Uhr ist, aber die Mondphase müsste doch bei Vollmond bei 100% stehen.

Somit müsste die Mondphase nochmals neu gerechnet werden, da 0% = Neumond, 1% = zunehmender Neumond, 51% = zunehmender Halbmond, 100% = Vollmond, 99% = abnehmender Vollmond, 49% = abnehmender Halbmond ist.

Das mit dem Mondstand habe ich hingebracht, da ich neu auf 200% rechne und die Texte für z3 angepasst habe. Aber wie kann ich jetzt im Skript ab 101%-200% retour rechnen das es 99%-0% ergibt um die Mondphase in % richtig darzustellen?

Code: Alles auswählen

!Script zur Mondphasenberechnung von Dako
!---------------------------------------------------
!Hinweise:
!Die Berechnung erfolgt mit dem durchschnittlichen synodischen Mondmonat, weshalb keine
!Stundengenaue Berechnung erfolgen kann
!---------------------------------------------------
!Systemvariablen:
!naechster_Vollmond (Zeichenkette): naechster Vollmond
!Mondstand (Zeichenkette): Mondphase in % (Neumond = 0%)
!Mondphase (Zeichenkette): Mondphase in Textform
!---------------------------------------------------
!Variablen definieren
real a_1 = 1.0*(system.Date("%F %X").ToTime().ToInteger()); !aktueller UNIX-Timestamp (1374688453)
real a_2 = 1106652740.0;!referenz vollmond
real a_3 = 2551443.0;!synodischer mondmonat
real a_4 = 1105362167.0;!referenz neumond

!Aktuelle Mondphase
real x2 = ((a_1-a_4)/a_3);
integer x3 = x2.ToInteger();
real x4 = (x2-x3)*200;
integer x5 = x4.ToInteger();

string z3 = "Fehler!";

if(x5 <= 199){z3 = "Neumond";}
if(x5 <= 151){z3 = "abnehmender Halbmond";}
if(x5 <= 101){z3 = "abnehmender Vollmond";}
if(x5 <= 99){z3 = "Vollmond";}
if(x5 <= 51){z3 = "zunehmender Halbmond";}
if(x5 <= 1){z3 = "Neumond";}

dom.GetObject("Mondstand").State(x5.ToString(0)#" %");!Ausgabe als Prozentzahl
dom.GetObject("Mondphase").State(z3);!Ausgabe als Text

!Naechster Vollmond am:
while(a_2 <= a_1){a_2 = a_2 + a_3;}
real x1 =  a_2.ToTime();
string y1 = x1.Format("%d.%m.%Y");
dom.GetObject("naechster_Vollmond").State(y1);

Kann mir hier jemand einen Tipp geben?

Grüsse aus der Schweiz
Zuletzt geändert von hanan am 09.12.2018, 10:29, insgesamt 1-mal geändert.
Liebe Grüsse aus der Schweiz
Andy
_________________________________________________________________________________________________
Raspberrymatic auf NUC unter Proxmox mit RPI-RF-MOD Funkmodul und Antenne Aurel GP868, ca. 19x BidCos-RF und ca. 46x HmIP-RF, ioBroker auf NUC unter Proxmox, 4x Wiffi 3.0, Pulsecounter, Weatherman-Edition

Benutzeravatar
hanan
Beiträge: 222
Registriert: 15.12.2012, 16:00
Danksagung erhalten: 1 Mal

Re: Mondphase

Beitrag von hanan » 26.05.2017, 08:43

Hallo zusammen
Ich habe es so gelöst:
Die Mondphase geht bis 200%.
Ist die Mondphase über 100% wird die %-Zahl negativ, welches den abnehmenden Mond in % anzeigt.

Somit ist 1% bis 99% zuhnemender Mond und -99% bis -1% abnehmender Mond.

Code: Alles auswählen

!Script zur Mondphasenberechnung von Dako
!Erweiterung Zunehmend oder Abnehmend von hanan 
!---------------------------------------------------
!Hinweise:
!Die Berechnung erfolgt mit dem durchschnittlichen synodischen Mondmonat, weshalb keine
!Stundengenaue Berechnung erfolgen kann
!---------------------------------------------------
!Systemvariablen:
!naechster_Vollmond (Zeichenkette): naechster Vollmond
!Mondstand (Zeichenkette): Mondphase in % (Neumond = 0%)
!Mondphase (Zeichenkette): Mondphase in Textform
!---------------------------------------------------
!Variablen definieren
real a_1 = 1.0*(system.Date("%F %X").ToTime().ToInteger()); !aktueller UNIX-Timestamp (1374688453)
real a_2 = 1106652740.0;!referenz vollmond
real a_3 = 2551443.0;!synodischer mondmonat
real a_4 = 1105362167.0;!referenz neumond

!Aktuelle Mondphase
real x2 = ((a_1-a_4)/a_3);
integer x3 = x2.ToInteger();
real x4 = (x2-x3)*200;
integer x5 = x4.ToInteger();

string z3 = "Fehler!";

if(x5 <=200){real x6 = x5-200;}
if(x5 <=100){real x6 = x5;}

if(x5 <= 200){z3 = "Neumond";}
if(x5 <= 199){z3 = "abnehmender Halbmond";}
if(x5 <= 150){z3 = "abnehmender Vollmond";}
if(x5 <= 101){z3 = "Vollmond";}
if(x5 <= 99){z3 = "zunehmender Halbmond";}
if(x5 <= 50){z3 = "zunehmender Neumond";}
if(x5 <= 1){z3 = "Neumond";}

dom.GetObject("Mondstand").State(x6.ToString(0)#" %");!Ausgabe als Prozentzahl
dom.GetObject("Mondphase").State(z3);!Ausgabe als Text

!Naechster Vollmond am:
while(a_2 <= a_1){a_2 = a_2 + a_3;}
real x1 =  a_2.ToTime();
string y1 = x1.Format("%d.%m.%Y");
dom.GetObject("naechster_Vollmond").State(y1);
Grüsse aus der Schweiz
Zuletzt geändert von hanan am 09.12.2018, 10:31, insgesamt 1-mal geändert.
Liebe Grüsse aus der Schweiz
Andy
_________________________________________________________________________________________________
Raspberrymatic auf NUC unter Proxmox mit RPI-RF-MOD Funkmodul und Antenne Aurel GP868, ca. 19x BidCos-RF und ca. 46x HmIP-RF, ioBroker auf NUC unter Proxmox, 4x Wiffi 3.0, Pulsecounter, Weatherman-Edition

Slice
Beiträge: 1192
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 135 Mal
Danksagung erhalten: 82 Mal

Re: Mondphase

Beitrag von Slice » 26.10.2018, 14:24

hanan hat geschrieben:
26.05.2017, 08:43
Hallo zusammen
Ich habe es so gelöst:
Die Mondphase geht bis 200%.
Ist die Mondphase über 100% wird die %-Zahl negativ, welches den abnehmenden Mond in % anzeigt.

Somit ist 1% bis 99% zuhnemender Mond und -99% bis -1% abnehmender Mond.

Grüsse aus der Schweiz
Hallo zusammen,

ich habe das Script schon länger bei mir auch im Einsatz und nun musste ich feststellen das seit geraumer Zeit der "aktueller_Mondstand: -18%" immer gleich berechnet wird. Der Wert ändert sich einfach nicht.. Der Rest läuft noch!
Hat jemand eine Idee was hier nicht mehr funktioniert?
Ich verwende die CCU2 FW 2.35.16 mit der Community Rega.

Danke und Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.73.9 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Mondphase

Beitrag von alchy » 26.10.2018, 19:52

-85 Wirft das Script gerade aus.
Vielleicht ein Systemvariablenfehler?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Slice
Beiträge: 1192
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 135 Mal
Danksagung erhalten: 82 Mal

Re: Mondphase

Beitrag von Slice » 27.10.2018, 17:01

Hallo alchy,

hab den Fehler bei mir gefunden, Mondphase war bei mir eine Zahl und muss wohl eine Zeichenkette sein.
Das Script hat aber bei mir mit Zahl eigentlich immer funktioniert, habs nun geändert und es geht wieder.

Danke und Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.73.9 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

ChrisFrae
Beiträge: 2
Registriert: 30.10.2018, 21:42

Re: Mondphase

Beitrag von ChrisFrae » 30.10.2018, 22:00

Hi zusammen,

ich bin neu hier, also bitte habt etwas Nachsicht :-)
Schonmal vielen Dank an Hanan für den Skript!
Hat mir schon ein mal sehr geholfen.
Wie auch Doka, wollte ich mein Aquarium mit Mondlicht versehen.

Jetzt habe ich den Skript oben in meine CCU2 eingebaut (den alten gelöscht, der hatte nicht sehr zuverlässig funktioniert) und alles wird super berechnet!

Jetzt möchte ich aber für die Steuerung alles noch etwas "vereinfachen" und meinem momentanen System etwas anpassen. Nutze zur Zeit das Sera LED Moonlight Kit.
Dort wird die Helligkeit des "Mondes" mit dem Tag des Mond-Kalenders berechnet.
Tag 1 - 100% (Vollmond)
Tag 2 - 96%
Tag 3 - 92%

Tag 15 - 0% (Neumond)
Tag 16 - 8%

Tag 29 - 98%
und dann wieder von vorne.

Jetzt sitze ich vor dem Skript und verstehe die Berechnung nur halb.
Meine Idee war es jetzt, mittels des letzten Vollmondes, den Tag zu Berechnen.
Aber entweder denke ich zu kompliziert, oder ich habe irgendwo nen Logikfehler drin..

Kann mir jemand von Euch auf die Sprünge helfen?
Habe leider noch nicht so viel Erfahrung..

Vielen Dank im Voraus.

Gruß
CHristoph

Benutzeravatar
hanan
Beiträge: 222
Registriert: 15.12.2012, 16:00
Danksagung erhalten: 1 Mal

Re: Mondphase

Beitrag von hanan » 09.12.2018, 12:31

Hallo ChrisFrae
Versuche mal dieses Mondphasen-Skript und berichte...

Du musst zusätzlich noch die Systemvariable "Mondtag" als Typ "Zeichenkette" anlegen.

Code: Alles auswählen

!Testversion V2.1
!Script zur Mondphasenberechnung von Dako V1.1
!Erweiterung Mondphase zu- oder abnehmend von hanan V2.0
!Erweiterung Mondtag für Sera LED Moonlight Kit V2.1
!---------------------------------------------------
!Hinweise:
!Die Berechnung erfolgt mit dem durchschnittlichen synodischen Mondmonat, weshalb keine
!Stundengenaue Berechnung erfolgen kann
!---------------------------------------------------
!Systemvariablen:
!naechster_Vollmond (Zeichenkette): naechster Vollmond
!Mondstand (Zeichenkette): Mondphase in % (Neumond = 0%)
!Mondphase (Zeichenkette): Mondphase in Textform
!Mondtag (Zeichenkette): Mond-Kalender in Textform
!---------------------------------------------------
!Variablen definieren
real a_1 = 1.0*(system.Date("%F %X").ToTime().ToInteger()); !aktueller UNIX-Timestamp (1374688453)
real a_2 = 1106652740.0;!referenz vollmond
real a_3 = 2551443.0;!synodischer mondmonat
real a_4 = 1105362167.0;!referenz neumond

!Aktuelle Mondphase
real x2 = ((a_1-a_4)/a_3);
integer x3 = x2.ToInteger();
real x4 = (x2-x3)*200;
integer x5 = x4.ToInteger();

string z3 = "Fehler!";
string z4 = "Fehler!";

if(x5 <=200){real x6 = x5-200;}
if(x5 <=100){real x6 = x5;}

if(x5 <= 205){z3 = "Neumond";}
if(x5 <= 195){z3 = "abnehmender Halbmond";}
if(x5 <= 150){z3 = "abnehmender Vollmond";}
if(x5 <= 105){z3 = "Vollmond";}
if(x5 <= 95){z3 = "zunehmender Halbmond";}
if(x5 <= 50){z3 = "zunehmender Neumond";}
if(x5 <= 5){z3 = "Neumond";}

if(x5 <= 198) {z4 = "Tag 14";}
if(x5 <= 191) {z4 = "Tag 13";}
if(x5 <= 184) {z4 = "Tag 12";}
if(x5 <= 177) {z4 = "Tag 11";}
if(x5 <= 170) {z4 = "Tag 10";}
if(x5 <= 163) {z4 = "Tag 9";}
if(x5 <= 156) {z4 = "Tag 8";}
if(x5 <= 149) {z4 = "Tag 7";}
if(x5 <= 142) {z4 = "Tag 6";}
if(x5 <= 135) {z4 = "Tag 5";}
if(x5 <= 128) {z4 = "Tag 4";}
if(x5 <= 121) {z4 = "Tag 3";}
if(x5 <= 114) {z4 = "Tag 2";}
if(x5 <= 107) {z4 = "Tag 1";}
if(x5 <= 100) {z4 = "Tag 29";}
if(x5 <= 93) {z4 = "Tag 28";}
if(x5 <= 86) {z4 = "Tag 27";}
if(x5 <= 79) {z4 = "Tag 26";}
if(x5 <= 72) {z4 = "Tag 25";}
if(x5 <= 65) {z4 = "Tag 24";}
if(x5 <= 58) {z4 = "Tag 23";}
if(x5 <= 51) {z4 = "Tag 22";}
if(x5 <= 46) {z4 = "Tag 21";}
if(x5 <= 39) {z4 = "Tag 20";}
if(x5 <= 32) {z4 = "Tag 18";}
if(x5 <= 25) {z4 = "Tag 18";}
if(x5 <= 18) {z4 = "Tag 17";}
if(x5 <= 11) {z4 = "Tag 16";}
if(x5 <= 4) {z4 = "Tag 15";}   

dom.GetObject("Mondstand").State(x6.ToString(0)#" %");!Ausgabe als Prozentzahl
dom.GetObject("Mondphase").State(z3);!Ausgabe als Text
dom.GetObject("Mondtag").State(z4);!Ausgabe als Text

!Naechster Vollmond am:
while(a_2 <= a_1){a_2 = a_2 + a_3;}
real x1 =  a_2.ToTime();
string y1 = x1.Format("%d.%m.%Y");
dom.GetObject("naechster_Vollmond").State(y1);
Liebe Grüsse aus der Schweiz
Andy
_________________________________________________________________________________________________
Raspberrymatic auf NUC unter Proxmox mit RPI-RF-MOD Funkmodul und Antenne Aurel GP868, ca. 19x BidCos-RF und ca. 46x HmIP-RF, ioBroker auf NUC unter Proxmox, 4x Wiffi 3.0, Pulsecounter, Weatherman-Edition

ChrisFrae
Beiträge: 2
Registriert: 30.10.2018, 21:42

Re: Mondphase

Beitrag von ChrisFrae » 11.12.2018, 21:16

Servus Andy,

vielen Dank für Deinen Script.
Ich hatte den Eintrag hier schon fast vergessen :-)

Habe bereits eine andere Lösung gefunden, welche aber schonbar nicht so genau und bei weitem nicht so professionell wie Deine ist,
Ich hatte es so gelöst:

Code: Alles auswählen

!Script zur Berechnung des Tages des Mondkalenders
!---------------------------------------------------
!Get all required variables
var readMoonCalDate = dom.GetObject("Tag im Mondkalender").Value(); !aktueller Mondtag
var readNextFullmoon = dom.GetObject("naechster_Vollmond").Value(); !Datum des nächsten Vollmondes
var currentDate = system.Date("%d.%m.%Y"); !Systemzeit
!---------------------------------------------------
!If Current date is not equal Fullmoon date, then increase Moon Calendar Date +1,
!else Moon Calendar Date = 1
!---------------------------------------------------
if (readNextFullmoon <> currentDate) 
{
var newMoonCalDate = readMoonCalDate +1;
} 
 else {
var newMoonCalDate = 1;
dom.GetObject("letzter_Vollmond").State(currentDate)
}
!---------------------------------------------------
dom.GetObject("Tag im Mondkalender").State(newMoonCalDate); 
Bei meinem Script wird heute Tag 19 angezeigt, während bei Dir Tag 18 ist,
Ich vermute mal, das ich da einen Fehler bei mir drin habe?

Mein Script nimmt den selben 'naechster Vollmond" wie du berechnest und zählt immer einen Tag nach oben, bis aktuelles Datum = nächster Vollmond. Dann ist der Mondtag 1.
Also prinzipiell richtig, oder habe ich da einen Denkfehler drin?

Nutze Deinen Script nun auch. Ist doch professioneller wie meiner ;-)

Benutzeravatar
hanan
Beiträge: 222
Registriert: 15.12.2012, 16:00
Danksagung erhalten: 1 Mal

Re: Mondphase

Beitrag von hanan » 12.12.2018, 16:36

Hallo ChrisFrae
Das kann schon sein, da der Mondtag ja nicht nach Datum sondern nach % berechnet und daher kann der Tag auch noch am selben Tag ändern. Ich habe dieses nur mal so schnell "zusammengeklickt", mal abwarten und schauen wie es passt.
Liebe Grüsse aus der Schweiz
Andy
_________________________________________________________________________________________________
Raspberrymatic auf NUC unter Proxmox mit RPI-RF-MOD Funkmodul und Antenne Aurel GP868, ca. 19x BidCos-RF und ca. 46x HmIP-RF, ioBroker auf NUC unter Proxmox, 4x Wiffi 3.0, Pulsecounter, Weatherman-Edition

mrscotty
Beiträge: 4
Registriert: 10.09.2018, 20:03

Re: Mondphase

Beitrag von mrscotty » 10.12.2019, 17:49

Hallo
Danke für die Tipps ..
Bin leider blutiger Anfänger ...,
würde das als Ergänzung zum script von hanan für den nächsten Neumond so passen ?

Code: Alles auswählen

!Naechster Neumond am:
while(a_4 <= a_1){a_4 = a_4 + a_3;}
real x2 =  a_4.ToTime();
string y2 = x2.Format("%d.%m.%Y");
dom.GetObject("nächster Neumond").State(y2);

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“