webrelay_scheduler 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/webrelay CHANGED
@@ -5,18 +5,18 @@ require "escort"
5
5
 
6
6
  Escort::App.create do |app|
7
7
  app.version WebrelayScheduler::VERSION
8
- app.description "A tool to power on/off a list of webrelays.\n"+
9
- "This tool is usually called by a task scheduler, such as cron or Windows Task Scheduler.\n"+
10
- "By default, the tool will not power down webrelays if the current day or following day is a public holiday\n"
8
+ app.description "A tool to power on/off devices connected to ControlByWeb webrelays. "+
9
+ "This tool is usually called by a task scheduler, such as cron or Windows Task Scheduler."
11
10
 
12
11
  app.options do |opts|
13
12
  opts.opt :ip, "The ip address of the relay to control. This argument can be used multiple times to control more than one relay at a time, eg. '... --ip 10.0.0.1 --ip 10.0.0.2'", :short => '-i', :long => '--ip', :type => :string, :multi => true
14
13
  opts.opt :power, "Sets the power on the relays. Accepts either ON or OFF", :short => '-p', :long => '--power', :type => :string, :default => "ON"
15
14
  opts.opt :delay, "The delay between sending commands to each relay", :short => '-d', :long => '--delay', :type => :integer, :default => 5
16
15
  opts.opt :timeout, "The maximum timeout (in seconds) when sending a command to a relay", :short => '-t', :long => '--timeout', :type => :integer, :default => 5
17
- opts.opt :skip_powerdown_on_holidays, "Prevents the system from switching off the relay during holidays. If the current day is a holiday in the current locale, then commands to power off relays will be skipped.", :short => :none, :long => '--skip-powerdown-on-holidays', :type => :flag, :default => true
16
+ opts.opt :skip_if_today_is_holiday, "Do not run the action if today is a holiday in the current locale", :short => :none, :long => '--skip-if-today-is-holiday', :type => :flag, :default => false
17
+ opts.opt :skip_if_tomorrow_is_holiday, "Do not run the action if tomorrow is a holiday in the current locale", :short => :none, :long => '--skip-if-tomorrow-is-holiday', :type => :flag, :default => false
18
18
  opts.opt :locale_code, "The country/locale code to use when determining if today's date is currently a holiday", :short => '-l', :long => '--locale-code', :type => :string, :default => "au_nsw"
19
- opts.opt :relay_name, "The name of the relay to switch. This will be 'relay' for single channel relays, or 'relay1', 'relay2', ... , 'relay<N>' for multi-channel relays", :short => '-n', :long => '--relay-name', :type => :string, :default => "relay"
19
+ opts.opt :relay_identifier, "The identifier of the relay on each webrelay. This will be 'relay' for single channel relays, or 'relay1', 'relay2', ... , 'relay<N>' for multi-channel relays", :short => '-r', :long => '--relay-identifier', :type => :string, :default => "relay"
20
20
  end
21
21
 
22
22
  app.action do |options, arguments|
@@ -1,48 +1,53 @@
1
1
  require "escort"
2
2
  require "holidays"
3
-
4
3
  module WebrelayScheduler
5
4
  class Command < ::Escort::ActionCommand::Base
6
5
  def execute
7
6
  o = command_options
8
-
9
7
  relays = o[:ip].collect{ |ip| Relay.new(ip, o[:timeout]) }
10
- delay = o[:delay]
11
8
 
12
- if o[:power] == "ON"
13
- switch_on(relays,o[:relay_name],delay)
9
+ Holidays.load_all
10
+ if o[:skip_if_today_is_holiday] and Date.today.holiday?(o[:locale_code])
11
+ Escort::Logger.output.warn "Action was skipped for today's holiday: #{holiday_names(Date.today,o[:locale_code])}"
12
+ elsif o[:skip_if_tomorrow_is_holiday] and (Date.today+1).holiday?(o[:locale_code])
13
+ Escort::Logger.output.warn "Action was skipped for tomorrow's holiday: #{holiday_names(Date.today+1,o[:locale_code])}"
14
+ elsif o[:power] == "ON"
15
+ switch_on(relays,o[:relay_identifier],o[:delay])
14
16
  elsif o[:power] == "OFF"
15
- unless o[:skip_powerdown_on_holidays] and is_holiday?(o[:locale_code])
16
- switch_off(relays,o[:relay_name],delay)
17
- end
17
+ switch_off(relays,o[:relay_identifier],o[:delay])
18
18
  end
19
19
  end
20
20
 
21
- # Returns true if either today or tomorrow is a holiday in the specified locale
22
- def is_holiday?(locale_code)
23
- today = Date.today
24
- tomorrow = today + 1
25
- Holidays.load_all
26
- today.holiday?(locale_code.to_sym) or tomorrow.holiday?(locale_code.to_sym)
21
+ def holiday_names(date, locale_code)
22
+ date.holidays(locale_code).collect{|h|h[:name]}.join(",")
27
23
  end
28
24
 
29
- def switch_on(relays,relay_name,delay); send_to_each(relays,relay_name,:on,delay); end
30
- def switch_off(relays,relay_name,delay); send_to_each(relays,relay_name,:off,delay); end
25
+ def switch_on(relays,relay_identifier,delay)
26
+ send_to_each(relays) do |relay|
27
+ relay.close relay_identifier
28
+ sleep delay
29
+ end
30
+ end
31
+
32
+ def switch_off(relays,relay_identifier,delay)
33
+ send_to_each(relays) do |relay|
34
+ relay.open relay_identifier
35
+ sleep delay
36
+ end
37
+ end
31
38
 
32
39
  # Safely executes a method on each relay
33
- def send_to_each(relays,relay_name,method,delay=0)
40
+ def send_to_each(relays, &block)
34
41
  relays.each do |relay|
35
42
  begin
36
- result = relay.send method, relay_name
37
- if result
38
- Escort::Logger.output.info "#{relay.to_s} - OK"
43
+ if yield(relay)
44
+ Escort::Logger.output.info "#{relay.ip_address} - OK"
39
45
  else
40
- Escort::Logger.output.error "#{relay.to_s} - FAILED"
46
+ Escort::Logger.output.error "#{relay.ip_address} - FAILED"
41
47
  end
42
48
  rescue Exception => e
43
- Escort::Logger.output.error "#{relay.to_s} - FAILED (#{e.message})"
49
+ Escort::Logger.output.error "#{relay.ip_address} - FAILED (#{e.message})"
44
50
  end
45
- sleep delay
46
51
  end
47
52
  end
48
53
  end
@@ -10,27 +10,25 @@ module WebrelayScheduler
10
10
  @client.receive_timeout = timeout * 1000
11
11
  end
12
12
 
13
- def set(relay_name, value)
14
- url = "http://#{ip_address}/state.xml?#{relay_name}State=#{value}"
13
+ # Sets the specified relay to a value
14
+ # Returns true if successful, or false if the value was not changed correctly
15
+ def set(relay_identifier, value)
16
+ url = "http://#{ip_address}/state.xml?#{relay_identifier}State=#{value}"
15
17
  response = @client.get url
16
18
  parsed_response = Crack::XML.parse response.body
17
19
 
18
- parsed_response["datavalues"]["#{relay_name}state"] == value
20
+ # Check the response shows to see if the value successfully changed
21
+ parsed_response["datavalues"]["#{relay_identifier}state"] == value.to_s
19
22
  end
20
23
 
21
- # Turns the relay on
22
- def on(relay_name="relay")
23
- set relay_name, "0"
24
+ # Close the relay
25
+ def close(relay_identifier="relay")
26
+ set relay_identifier, "0"
24
27
  end
25
28
 
26
- # Turns the relay off
27
- def off(relay_name="relay")
28
- set relay_name, "1"
29
+ # Opens the relay
30
+ def open(relay_identifier="relay")
31
+ set relay_identifier, "1"
29
32
  end
30
-
31
- def to_s
32
- "Relay #{ip_address}"
33
- end
34
-
35
33
  end
36
34
  end
@@ -1,3 +1,3 @@
1
1
  module WebrelayScheduler
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = WebrelayScheduler::VERSION
9
9
  spec.authors = ["Ian Yamey","Jobin Varughese"]
10
10
  spec.email = ["ian.yamey@parkassist.com"]
11
- spec.description = %q{This gem is used to control the power on webrelays}
12
- spec.summary = %q{}
13
- spec.homepage = "http://www.parkassist.com"
11
+ spec.description = %q{Set the relay state of ControlByWeb webrelays}
12
+ spec.summary = %q{This gem is used to control (open/close) relays. It is used to schedule the shutdown / powerup of hardware devices using Cron, Windows Task Manager or any other automated scheduler.}
13
+ spec.homepage = "https://github.com/parkassist/webrelay_tool"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webrelay_scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-23 00:00:00.000000000 Z
13
+ date: 2013-05-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: holidays
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ! '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description: This gem is used to control the power on webrelays
111
+ description: Set the relay state of ControlByWeb webrelays
112
112
  email:
113
113
  - ian.yamey@parkassist.com
114
114
  executables:
@@ -127,7 +127,7 @@ files:
127
127
  - lib/webrelay_scheduler/relay.rb
128
128
  - lib/webrelay_scheduler/version.rb
129
129
  - webrelay_scheduler.gemspec
130
- homepage: http://www.parkassist.com
130
+ homepage: https://github.com/parkassist/webrelay_tool
131
131
  licenses:
132
132
  - MIT
133
133
  post_install_message:
@@ -142,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  segments:
144
144
  - 0
145
- hash: 1380791654289873620
145
+ hash: -1726181485213364509
146
146
  required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  none: false
148
148
  requirements:
@@ -151,11 +151,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  version: '0'
152
152
  segments:
153
153
  - 0
154
- hash: 1380791654289873620
154
+ hash: -1726181485213364509
155
155
  requirements: []
156
156
  rubyforge_project:
157
157
  rubygems_version: 1.8.23
158
158
  signing_key:
159
159
  specification_version: 3
160
- summary: ''
160
+ summary: This gem is used to control (open/close) relays. It is used to schedule the
161
+ shutdown / powerup of hardware devices using Cron, Windows Task Manager or any other
162
+ automated scheduler.
161
163
  test_files: []