You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.4 KiB
118 lines
4.4 KiB
#!/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 |