„sonnenuntergang_nativ.sh“ hinzufügen
This commit is contained in:
parent
b14bee795e
commit
6adf5434cd
1 changed files with 118 additions and 0 deletions
118
sonnenuntergang_nativ.sh
Normal file
118
sonnenuntergang_nativ.sh
Normal file
|
@ -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
|
Loading…
Reference in a new issue