blob: 8f1c13c9266ce49dcbc247b81649a950ca44b405 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
#!/bin/sh
set -u
set -e
# Your Settings
#
SWITCH_ON_CMD="touch /tmp/tv_light"
SWITCH_OFF_CMD="rm -f /tmp/tv_light"
USE_DAYLIGHT="yes"
LATITUDE="52.000000"
LONGITUDE="11.000000"
# http://search.cpan.org/~rkhill/DateTime-Event-Sunrise-0.0501/lib/DateTime/Event/Sunrise.pm#METHODS
ALTITUDE="-0.833"
#
# End of user config
# apt-get install libdatetime-event-sunrise-perl
JOB_ID_DIR="${4}/activity/$(basename ${0}).data"
JOB_ID_FILE="${JOB_ID_DIR}/jobid"
daylight(){
export LATITUDE
export LONGITUDE
export ALTITUDE
sunsetsunrise="$(perl <<'EOF' 2> /dev/null
use DateTime;
use DateTime::Event::Sunrise;
use DateTime::Format::Strptime;
my $latitude = $ENV{'LATITUDE'};
my $longitude = $ENV{'LONGITUDE'};
my $altitude = $ENV{'ALTITUDE'};
my $sunrise = DateTime::Event::Sunrise ->sunrise (longitude => $longitude, latitude => $latitude, altitude => $altitude, iteration => '1');
my $sunset = DateTime::Event::Sunrise ->sunset (longitude => $longitude, latitude => $latitude, altitude => $altitude, iteration => '1');
my $strp = DateTime::Format::Strptime->new(pattern => '%H:%M %Y-%m-%d');
my $day_set = DateTime::SpanSet->from_sets(start_set => $sunrise, end_set => $sunset);
if ($day_set->contains(DateTime->now())) {
print $strp->format_datetime($sunset->next(DateTime->now(time_zone=>'local')));
exit 1;
} else {
print $strp->format_datetime($sunrise->next(DateTime->now(time_zone=>'local')));
exit 0;
}
EOF
)"
err=$?
[ -z "${sunsetsunrise}" ] && return 2
if [ ${err} = 0 ]; then
echo "${sunsetsunrise}"
return 0
elif [ ${err} = 1 ]; then
echo "${sunsetsunrise}"
return 1
else
return 2
fi
}
delete_job(){
if [ -f "${JOB_ID_FILE}" ]; then
JOB_ID="$(cat ${JOB_ID_FILE})"
atrm ${JOB_ID} 2> /dev/null
rm -f "${JOB_ID_FILE}"
fi
}
create_job(){
JOB_ID_TMP="$(echo "rm -f "${JOB_ID_FILE}"; ${1}" | at ${2} 2>&1)"
JOB_ID="$(echo "${JOB_ID_TMP}" | tr -d '\n' | sed 's/^.*job \([0-9]*\).*$/\1/')"
mkdir -p "${JOB_ID_DIR}"
echo "${JOB_ID}" > ${JOB_ID_FILE}
}
switch_tv_light(){
if [ "${1}" = "on" ]; then
if [ "${USE_DAYLIGHT}" = "yes" ]; then
delete_job
sunsetsunrise="$(daylight)" && light=0 || light=$?
if [ "${light}" = "1" ]; then
# daylight now, shedule "light on" for later
create_job "${SWITCH_ON_CMD}" "${sunsetsunrise}"
elif [ "${light}" = "0" ]; then
eval ${SWITCH_ON_CMD}
# no daylight now, shedule "light off" for later
create_job "${SWITCH_OFF_CMD}" "${sunsetsunrise}"
else
# Some error
eval ${SWITCH_OFF_CMD}
fi
else
eval ${SWITCH_ON_CMD}
fi
else
[ "${USE_DAYLIGHT}" = "yes" ] && delete_job
eval ${SWITCH_OFF_CMD}
fi
}
case "${1}" in
startup)
delete_job
;;
started)
[ "${2}" = "true" ] && switch_tv_light on
;;
shutdown)
switch_tv_light off
;;
running)
if [ "${2}" = "true" ]; then
switch_tv_light on
else
switch_tv_light off
fi
;;
esac
exit 0
|