Das Skript ermittelt anhand der eingetragenen Geoposition die Sonnenauf- und untergangszeit, um z.B. dadurch Ereignisse steuern zu können
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

#!/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