diff --git a/sonnenuntergang_nativ.sh b/sonnenuntergang_nativ.sh new file mode 100644 index 0000000..bb57363 --- /dev/null +++ b/sonnenuntergang_nativ.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# http://www.linux-services.org/shell/ +++ +# Quelle: http://www.anginf.de/?p=138 + +# benötigt coreutils-date, bc +# Unsere Position +posLaenge="14.79756" +posBreite="50.90391" + +# Notwendige Vorberechnungen +PATH=/opt/bin:/volume1/homes/admin/script/bin:$PATH #da liegt das Programm 'bc' + +zoneinfo=$(date +%z) # Zeitzone +T=`date +%j` # Tag im Jahr +pi="3.14159265358979323844" # pi=`echo "4*a(1)" | bc -l` +rad=$(echo "${pi}/180" | bc -l) +h=$(echo "-(5/6)*(${rad})" | bc -l) # Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion +BreiteRAD=$(echo "${posBreite}*${rad}" | bc -l) + +# Welcher Tag ist heute? +echo "Heute ist $(date +%d.%m.%y), der $(date +%j). Tag im Jahr" + +echo -n "Wir nutzen die Zeitzone $(date +%Z), dies entspricht $(date +%z) und damit " +echo "${zoneinfo:0:3}" +echo -e + +sonnendekl=`echo "0.409526325277017*s(0.0169060504029192*(${T}-80.0856919827619))" | bc -l` +sonnendeklDEG=$(echo "${sonnendekl} / ${rad}" | bc -l) + +arccosint=$(echo "(s(${h})-s(${BreiteRAD})*s(${sonnendekl}))/(c(${BreiteRAD})*c(${sonnendekl}))" | bc -l) +arccosintsign=${arccosint:0:1} # von links ab Position 0 ein Zeichen + +if [ ${arccosintsign} == "-" ]; then + usesign="+" +else + usesign="-" +fi +arc2cosint=$(echo "(${arccosint}) * (${arccosint})" | bc -l) +acoszeit=$(echo "${pi}/2 ${usesign} a(sqrt(${arc2cosint} / (1 - (${arc2cosint}) ) ) ) " | bc -l) + +zeitdiff=$(echo "12*${acoszeit}/${pi}" | bc -l) # KORREKT! + +zeitgleich=$(echo "-0.170869921174742*s(0.0336997028793971 * ${T} + 0.465419984181394) - 0.129890681040717*s(0.0178674832556871*${T} - 0.167936777524864)" | bc -l) +aufgang=$(echo "12-(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l) +untergang=$(echo "12+(${zeitdiff})-(${zeitgleich})-(${posLaenge}/15)${zoneinfo:0:3}" | bc -l) + +if [ ${aufgang:1:1} == "." ]; then + # Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne + aufgang=$(echo 0${aufgang}) +fi + + aufgangDaem=$aufgang + # Fuer unsere Breitengrade ueberfluessig, nur der Vollstaendigkeit halber: + #if [ ${untergang:1:1} == "." ]; then + # Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne + # untergang=$(echo 0${untergang}) + #fi + +# Umrechnung in Stunden (trivial) und Minuten (runden!) + #echo -n "Aufgang (hh:mm): ${aufgang:0:2}:" # Immer ein zweistelliges Ergebnis + #echo "(${aufgang} - ${aufgang:0:2}) * 60" | bc # | xargs printf "%02.0f\n" + +aufgangH=`echo "${aufgang:0:2}:"` # Immer ein zweistelliges Ergebnis +aufgangM=`echo "(${aufgang} - ${aufgang:0:2}) * 60" | bc ` # | xargs printf "%02.0f\n" + #aufgangM="$(printf '%02.0f\n' `echo "(${aufgang} - ${aufgang:0:2}) * 60" | bc `)" # geht auch +aufgangM="$(printf '%02.0f\n' "$aufgangM")" # 2stellig mit führender Null + +aufgangzeit=$aufgangH$aufgangM + echo " Aufgang (hh:mm): $aufgangzeit" + +#echo -n "Untergang (hh:mm): ${untergang:0:2}:" # Immer ein zweistelliges Ergebnis +#echo "(${untergang} - ${untergang:0:2}) * 60" | bc | xargs printf "%02.0f\n" + +untergangH=`echo "${untergang:0:2}:" ` # Immer ein zweistelliges Ergebnis +untergangM=`echo "(${untergang} - ${untergang:0:2}) * 60" | bc ` #| xargs printf "%02.0f\n" +untergangM="$(printf '%02.0f\n' "$untergangM")" + +untergangzeit=$untergangH$untergangM + echo " Untergang (hh:mm): $untergangzeit" + + # Heute ist 15.11.15, der 319. Tag im Jahr + # Wir nutzen die Zeitzone CET, dies entspricht +0100 und damit +01 + # Aufgang (hh:mm): 07:16 + # Untergang (hh:mm): 16:15 + +################################################################ +echo -e; echo "Dämmerungszeiten (pauschaler offset von 32 Minuten):"; echo -e +#dawn=$(date -d "${aufgangzeit//:/}" "+%k:%M") +dawn=$(date -d "${aufgangzeit//:/} - 32 minutes" "+%k:%M") +dusk=$(date -d "${untergangzeit//:/} + 32 minutes" "+%k:%M") +if [ ${dawn:1:1} == "." ]; then +#if [ ${dawn:1:1} = "." ]; then + # Ist ein einstelliges Ergebnis der Form x.xxxx, wir brauchen noch eine 0 vorne + dawn=$(echo 0${dawn}) + echo "DAWN-TEST: ${dawn:1:1}" + +fi + +echo " Morgendämmerung (hh:mm): $dawn" +echo " Abenddämmerung (hh:mm): $dusk" + +################################################################ +echo -e; echo "Auswertung:" +aufgangzeit2=$(date -d "${aufgangzeit//:/}" "+%k:%M") +aufgangzeit2=`echo $aufgangzeit2 | sed -e s/://g` +untergangzeit2=$(date -d "${untergangzeit//:/}" "+%k:%M") +untergangzeit2=`echo $untergangzeit2 | sed -e s/://g` +now=`date +%k%M` #:%M` + +if [ "$aufgangzeit2" -le $now ] && [ "$untergangzeit2" -ge $now ]; then + echo " L==> Es ist Tag! :-)" +else + echo " L==> Es ist Nacht! :-(" +fi + + + +exit \ No newline at end of file