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