wink_scheduler 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Dockerfile +8 -0
- data/Rakefile +3 -0
- data/bin/wink_scheduler +5 -0
- data/conf/schedule.yaml.sample +3 -6
- data/lib/wink_scheduler/schedule.rb +23 -14
- data/lib/wink_scheduler/version.rb +1 -1
- data/wink_scheduler.gemspec +2 -0
- metadata +38 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c4c103d9560e9ab6289aebb057cece51f4bd069
|
4
|
+
data.tar.gz: e0c716000fcf8b322943729abf78e3d15c9c39a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87e299fc57d4d491b5fd276ca735df98c9485bf2e3402b773c222d2e5eef93e7a02ca00798f8f41322e764d203fbc7be89bde378b25b409a34133437627e8534
|
7
|
+
data.tar.gz: 2b3659bf153bab01ef4dd33483a9b0802ca694fb6a27be8e3cfc1745dd49e2f542affbb9750f9bb4a6b718dc4befa4e974b2bddd72af874741b00c48cbc25144
|
data/Dockerfile
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
FROM ruby:2.1
|
2
|
+
MAINTAINER Joe Lanford <joe.lanford@gmail.com>
|
3
|
+
WORKDIR /wink_scheduler
|
4
|
+
RUN git clone https://github.com/joelanford/wink_scheduler.git /wink_scheduler && \
|
5
|
+
git checkout v0.0.4 && \
|
6
|
+
bundle install
|
7
|
+
|
8
|
+
CMD ["bundle", "exec", "bin/wink_scheduler", "/wink_scheduler/conf/schedule.yaml"]
|
data/Rakefile
CHANGED
data/bin/wink_scheduler
CHANGED
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
require 'wink_scheduler'
|
4
4
|
|
5
|
+
$stdout.sync = true
|
6
|
+
$stderr.sync = true
|
7
|
+
|
5
8
|
if ARGV[0]
|
6
9
|
begin
|
7
10
|
conf = YAML.load_file(ARGV[0])
|
@@ -13,6 +16,8 @@ if ARGV[0]
|
|
13
16
|
rescue => e2
|
14
17
|
$stderr.puts "ERROR -- #{e2.message}"
|
15
18
|
exit 1
|
19
|
+
rescue SystemExit, Interrupt
|
20
|
+
exit 1
|
16
21
|
end
|
17
22
|
else
|
18
23
|
$stderr.puts "ERROR: must provide configuration file"
|
data/conf/schedule.yaml.sample
CHANGED
@@ -10,34 +10,31 @@ schedules:
|
|
10
10
|
method: :on
|
11
11
|
time: :sunset
|
12
12
|
window: 2
|
13
|
-
location:
|
13
|
+
location: New York, NY
|
14
14
|
- device: Lamp
|
15
15
|
days: :daily
|
16
16
|
method: :off
|
17
17
|
time: 12:00 AM
|
18
18
|
window: 10
|
19
|
-
location: 12765838
|
20
19
|
- device: Family Room
|
21
20
|
days: :daily
|
22
21
|
method: :on
|
23
22
|
time: :sunset
|
24
23
|
window: 10
|
25
|
-
location:
|
24
|
+
location: New York, NY
|
26
25
|
- device: Family Room
|
27
26
|
days: :daily
|
28
27
|
method: :off
|
29
28
|
time: 12:00 AM
|
30
29
|
window: 10
|
31
|
-
location: 12765838
|
32
30
|
- group: My Group
|
33
31
|
days: :daily
|
34
32
|
method: :on
|
35
33
|
time: :sunrise
|
36
34
|
window: 10
|
37
|
-
location:
|
35
|
+
location: New York, NY
|
38
36
|
- device: My Group
|
39
37
|
days: :daily
|
40
38
|
method: :off
|
41
39
|
time: 8:00 AM
|
42
40
|
window: 10
|
43
|
-
location: 12765838
|
@@ -1,11 +1,14 @@
|
|
1
1
|
require 'winker'
|
2
2
|
require 'weather-api'
|
3
|
+
require 'httparty'
|
3
4
|
require 'yaml'
|
4
5
|
require 'time'
|
6
|
+
require 'rufus-scheduler'
|
5
7
|
|
6
8
|
module WinkScheduler
|
7
9
|
class Schedule
|
8
10
|
def initialize(opts, devices, groups)
|
11
|
+
@scheduler = Rufus::Scheduler.new
|
9
12
|
if opts["device"]
|
10
13
|
@object = devices.select { |d| next if d == nil; d.name == opts["device"] }[0]
|
11
14
|
raise "device \"#{opts["device"]}\" not found" unless @object
|
@@ -47,7 +50,7 @@ module WinkScheduler
|
|
47
50
|
|
48
51
|
if (@time == :sunrise || @time == :sunset)
|
49
52
|
if opts["location"]
|
50
|
-
@
|
53
|
+
@woeid = get_woeid(opts["location"])
|
51
54
|
else
|
52
55
|
raise "Schedule must define 'location' option if time used is sunrise or sunset"
|
53
56
|
end
|
@@ -56,7 +59,7 @@ module WinkScheduler
|
|
56
59
|
|
57
60
|
def run
|
58
61
|
while true
|
59
|
-
|
62
|
+
execute
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|
@@ -78,31 +81,37 @@ module WinkScheduler
|
|
78
81
|
end
|
79
82
|
end
|
80
83
|
|
81
|
-
def
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
def get_woeid(location)
|
85
|
+
HTTParty.get("http://where.yahooapis.com/v1/places.q('#{location}')?appid=dj0yJmk9V3pRYU83TjVYRVlNJmQ9WVdrOWEwVTNTM0oxTkdjbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD05NQ--").parsed_response["places"]["place"]["woeid"]
|
86
|
+
end
|
87
|
+
|
88
|
+
def execute
|
89
|
+
next_time = get_next_time
|
85
90
|
puts "Scheduled \"#{@method}\" on #{@type} \"#{@object.name}\" at #{next_time}."
|
86
|
-
|
87
|
-
|
91
|
+
@scheduler.at next_time do
|
92
|
+
@object.send(@method)
|
88
93
|
end
|
89
|
-
@
|
94
|
+
@scheduler.join
|
90
95
|
puts "Executed \"#{@method}\" on #{@type} \"#{@object.name}\" at #{next_time}."
|
91
96
|
end
|
92
97
|
|
93
98
|
def get_next_time
|
99
|
+
now = Time.now
|
94
100
|
time = case @time
|
95
101
|
when :sunset
|
96
|
-
Weather.lookup(@
|
102
|
+
Weather.lookup(@woeid).astronomy.sunset
|
97
103
|
when :sunrise
|
98
|
-
Weather.lookup(@
|
104
|
+
Weather.lookup(@woeid).astronomy.sunrise
|
99
105
|
else
|
100
106
|
Time.parse(@time)
|
101
107
|
end
|
102
108
|
time += @offset
|
103
|
-
|
104
|
-
|
105
|
-
|
109
|
+
randomness = @window ? rand(@window*60) - @window*60/2 : 0
|
110
|
+
adj_time = time + randomness
|
111
|
+
while adj_time < now || !@days.include?(adj_time.wday)
|
112
|
+
adj_time += 86400
|
113
|
+
end
|
114
|
+
return adj_time
|
106
115
|
end
|
107
116
|
end
|
108
117
|
end
|
data/wink_scheduler.gemspec
CHANGED
@@ -20,6 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "weather-api", "~> 1.2"
|
22
22
|
spec.add_dependency "winker", "~> 0.0", ">= 0.0.15"
|
23
|
+
spec.add_dependency "httparty", "~> 0.13", ">= 0.13.7"
|
24
|
+
spec.add_dependency "rufus-scheduler", "~> 3.2"
|
23
25
|
|
24
26
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wink_scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Lanford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: weather-api
|
@@ -44,6 +44,40 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.0.15
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: httparty
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.13'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.13.7
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0.13'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.13.7
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rufus-scheduler
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3.2'
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '3.2'
|
47
81
|
- !ruby/object:Gem::Dependency
|
48
82
|
name: bundler
|
49
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,6 +116,7 @@ extensions: []
|
|
82
116
|
extra_rdoc_files: []
|
83
117
|
files:
|
84
118
|
- ".gitignore"
|
119
|
+
- Dockerfile
|
85
120
|
- Gemfile
|
86
121
|
- LICENSE.txt
|
87
122
|
- README.md
|
@@ -113,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
148
|
version: '0'
|
114
149
|
requirements: []
|
115
150
|
rubyforge_project:
|
116
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.4.8
|
117
152
|
signing_key:
|
118
153
|
specification_version: 4
|
119
154
|
summary: Schedule actions for Wink devices.
|