trigger_switch_d 0.1.0 → 0.1.1

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.
data/README.rdoc CHANGED
@@ -9,8 +9,8 @@ See link:License.txt
9
9
 
10
10
  Mac OSX
11
11
  USB dongle (such as tellstick from http://www.telldus.se)
12
- ruby-ftd2xx gem (git://github.com/pfspontus/ruby-ftd2xx)
13
- ftd2xx USB drivers (available at http://ftdichip.com)
12
+ ruby-serialport (http://ruby-serialport.rubyforge.org/)
13
+ VCP USB drivers (available at http://ftdichip.com)
14
14
 
15
15
  ==Description
16
16
  Scheduled (tsd) is run as a daemon without any need for user interaction.
data/bin/teach CHANGED
@@ -34,11 +34,14 @@
34
34
 
35
35
  $LOAD_PATH.push File.join(File.dirname(__FILE__),".." ,"lib" )
36
36
  require 'tellstick'
37
+ require 'trigger_switch_d'
37
38
 
38
39
  #code to run tellstick app
39
- output = Tellstick::TellstickIO.new
40
- stick = Tellstick::create(output,ARGV[2])
40
+ File.open(TriggerSwitchD::ConfigFactory::ENV_PATH,"r") do |config_file|
41
+ TriggerSwitchD::ConfigFactory.new(config_file)
42
+ end
43
+ stick = Tellstick::create(TriggerSwitchD::Config.output,ARGV[2])
41
44
  stick.teach(ARGV[0],ARGV[1])
42
- output.close
45
+ TriggerSwitchD::Config.output.close
43
46
 
44
47
 
data/bin/tsd CHANGED
@@ -61,7 +61,7 @@ require 'tellstick'
61
61
  require 'trigger_switch_d'
62
62
 
63
63
  if $0 == __FILE__
64
- file = File.open("config/config.rb","r")
64
+ file = File.open(TriggerSwitchD::ConfigFactory::ENV_PATH,"r")
65
65
  app = TriggerSwitchD::Application.new(file)
66
66
  file.close
67
67
  app.start
data/bin/turn_off CHANGED
@@ -31,12 +31,15 @@
31
31
 
32
32
  $LOAD_PATH.push File.join(File.dirname(__FILE__),".." ,"lib" )
33
33
  require 'tellstick'
34
+ require 'trigger_switch_d'
34
35
 
35
36
  #code to run tellstick app
36
- output = Tellstick::TellstickIO.new
37
- stick = Tellstick::create(output,ARGV[2])
37
+ File.open(TriggerSwitchD::ConfigFactory::ENV_PATH,"r") do |config_file|
38
+ TriggerSwitchD::ConfigFactory.new(config_file)
39
+ end
40
+ stick = Tellstick::create(TriggerSwitchD::Config.output,ARGV[2])
38
41
  stick.turn_off(ARGV[0],ARGV[1])
39
- output.close
42
+ TriggerSwitchD::Config.output.close
40
43
 
41
44
 
42
45
 
data/bin/turn_on CHANGED
@@ -31,9 +31,12 @@
31
31
 
32
32
  $LOAD_PATH.push File.join(File.dirname(__FILE__),".." ,"lib" )
33
33
  require 'tellstick'
34
+ require 'trigger_switch_d'
34
35
 
35
36
  #code to run tellstick app
36
- output = Tellstick::TellstickIO.new
37
- stick = Tellstick::create(output,ARGV[2])
37
+ File.open(TriggerSwitchD::ConfigFactory::ENV_PATH,"r") do |config_file|
38
+ TriggerSwitchD::ConfigFactory.new(config_file)
39
+ end
40
+ stick = Tellstick::create(TriggerSwitchD::Config.output,ARGV[2])
38
41
  stick.turn_on(ARGV[0],ARGV[1])
39
- output.close
42
+ TriggerSwitchD::Config.output.close
data/lib/tellstick.rb CHANGED
@@ -16,5 +16,4 @@
16
16
 
17
17
 
18
18
  require "tellstick/tellstick"
19
- require "tellstick/tellstick_io"
20
-
19
+ require "tellstick/proxy_io"
@@ -0,0 +1,58 @@
1
+ # TriggerSwitchD, executes commands to activate/deactive remote switches.
2
+ # (c) Copyright 2010 Pontus Strömdahl, AdhocSkill.
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ module Tellstick
18
+
19
+ class ProxyIO #:nodoc:all
20
+ public
21
+ def initialize(klass,*args)
22
+ @init_args = args
23
+ @class_to_proxy = klass
24
+ @tio = nil
25
+ open
26
+ end
27
+ def open
28
+ return unless @tio == nil
29
+ if (@init_args.empty?)
30
+ @tio = @class_to_proxy.new
31
+ else
32
+ @tio = @class_to_proxy.new(@init_args[0],@init_args[1])
33
+ @init_args[2].call(@tio)
34
+ end
35
+ if @tio.methods.include?("connected?")
36
+ def self.connected?
37
+ open
38
+ @tio.connected?
39
+ end
40
+ end
41
+ return if @tio.private_methods.include?("open")
42
+ @tio.open
43
+ end
44
+ def close
45
+ @tio.close unless @tio == nil
46
+ @tio = nil
47
+ end
48
+ def puts(input)
49
+ open
50
+ @tio.puts(input)
51
+ end
52
+ def gets
53
+ open
54
+ @tio.gets
55
+ end
56
+ end
57
+ end
58
+
@@ -16,6 +16,7 @@
16
16
 
17
17
 
18
18
  $LOAD_PATH.push File.join(File.dirname(__FILE__),"trigger_switch_d")
19
+ require "rubygems"
19
20
  require "config"
20
21
  require "daylight"
21
22
  require "action"
@@ -13,10 +13,11 @@
13
13
  #
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
-
16
+ require "serialport"
17
17
 
18
18
  module TriggerSwitchD
19
19
  module ConfigFactory
20
+ ENV_PATH = "config/environment.rb"
20
21
 
21
22
  #Creates the Config class from the config/config.rb file
22
23
  #See samples/config.rb for more documentation
@@ -25,6 +26,7 @@ module TriggerSwitchD
25
26
  attributes = env.map do |attribute|
26
27
  attribute.scan(/Config.([\w_]+) =/).flatten[0]
27
28
  end
29
+ attributes.compact!
28
30
  cls = <<-EOS
29
31
  class Config
30
32
  #{attributes.map {|name| "def self.#{name}=(value); #{append_filenames(name)}; end"}.join("\n")}
@@ -62,8 +64,10 @@ module TriggerSwitchD
62
64
  end
63
65
 
64
66
  def self.set_type(name)
65
- types = {"log_object" => "{:spec => StringIO.new, :development => STDOUT, :file => File.open(\"#log_path}\",\"a+\")}",
66
- "output" => "{:spec => StringIO.new, :development => STDOUT, :tellstick => Tellstick::TellstickIO.new}"}
67
+ types = {"log_object" => "{:spec => StringIO.new, :development => STDOUT,
68
+ :file => File.open(\"#log_path}\",\"a+\")}",
69
+ "output" => "Hash.new(STDOUT).merge({:spec => StringIO.new, :development => STDOUT,
70
+ :vcp => Tellstick::ProxyIO.new(SerialPort,Config.vcp_port,4800,Proc.new { |sp| sp.puts(\"~^M~AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M\"); sp.puts(\"S+\"); sp.gets })})"}
67
71
  return "@#{name}=value" unless types.keys.include? name
68
72
  "@#{name}=#{types[name]}[value]".gsub("log_path","{log_path")
69
73
  end
@@ -18,14 +18,17 @@
18
18
  require File.join(File.dirname(__FILE__),"..","spec_helper")
19
19
 
20
20
  module Tellstick
21
- describe TellstickIO do
22
- it "writes commands to usb dongle" do
23
- dongle = TellstickIO.new
24
- dongle.puts("S+")
25
- dongle.gets.should include("+S")
26
- dongle.puts("T+")
27
- dongle.gets.should include("+T")
28
- dongle.close
29
- end
21
+ describe ProxyIO do
22
+ it "should respond to puts, gets when there is no TellstickIO instance" do
23
+ dongle = StringIO.new
24
+ dongle.stub!(:new).and_return(dongle)
25
+ dongle.stub!(:gets).and_return("bla")
26
+ dongle.stub!(:close)
27
+ proxy = ProxyIO.new(StringIO)
28
+ proxy.close
29
+ Proc.new { proxy.puts "bla" }.should_not raise_error(NoMethodError)
30
+ proxy.close
31
+ Proc.new { proxy.gets }.should_not raise_error(NoMethodError)
32
+ end
30
33
  end
31
34
  end
@@ -22,12 +22,15 @@ module TriggerSwitchD
22
22
 
23
23
  describe "Application" do
24
24
  before(:each) do
25
+ mock_sp = StringIO.new
26
+ SerialPort.stub!(:new).and_return(mock_sp)
25
27
  @file = StringIO.new
26
28
  @file.puts <<-EOS
27
29
  Config.geo_position = {:north => 54.57525, :west => -12.94125}
28
30
  Config.log_path = "log"
29
31
  Config.db_path = "db"
30
32
  Config.dsl_path = "config"
33
+ Config.vcp_port = "/dev/tty.usbserial-xxxxxxxx"
31
34
  #Config.log_object = :file
32
35
  Config.log_object = :spec
33
36
  Config.output = :spec
@@ -20,12 +20,18 @@ require File.join(File.dirname(__FILE__),"..","spec_helper")
20
20
  module TriggerSwitchD
21
21
  describe "Config" do
22
22
  before(:each) do
23
+ @sio = mock("SerialPort")
24
+ @sio.stub!(:open)
25
+ @sio.stub!(:puts)
26
+ @sio.stub!(:gets)
27
+ SerialPort.stub!(:new).and_return(@sio)
23
28
  file = StringIO.new
24
29
  file.puts <<-EOS
25
30
  Config.geo_position = {:north => 54.57525, :west => -12.94125}
26
31
  Config.log_path = "log"
27
32
  Config.db_path = "db"
28
33
  Config.dsl_path = "config"
34
+ Config.vcp_port = "/dev/tty.usbserial-xxxxxxxx"
29
35
  Config.unix_socket_path = "/tmp"
30
36
  Config.log_object = :spec
31
37
  Config.output = :spec
@@ -67,7 +73,10 @@ module TriggerSwitchD
67
73
  Config.output = :development
68
74
  Config.output.should be_kind_of(IO)
69
75
  Config.output = :tellstick
70
- Config.output.should be_kind_of(Tellstick::TellstickIO)
76
+ Config.output.should == STDOUT
77
+ SerialPort.should_receive(:new).and_return(@sio)
78
+ Config.output = :vcp
79
+ Config.output.should be_kind_of(Tellstick::ProxyIO)
71
80
  end
72
81
 
73
82
  it "should respond to environment" do
@@ -90,5 +99,56 @@ EOS
90
99
  :at_location => {:north => 54.57525, :west => -12.94125}}
91
100
 
92
101
  end
102
+
103
+ it "should handle empty line in config file" do
104
+ file = StringIO.new
105
+ file.puts <<-EOS
106
+ # TriggerSwitchD, executes commands to activate/deactive remote switches.
107
+ # (c) Copyright 2010 Pontus Strömdahl, AdhocSkill.
108
+ #
109
+ # This program is free software: you can redistribute it and/or modify
110
+ # it under the terms of the GNU General Public License as published by
111
+ # the Free Software Foundation, either version 3 of the License, or
112
+ # (at your option) any later version.
113
+ #
114
+ # This program is distributed in the hope that it will be useful,
115
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
116
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
117
+ # GNU General Public License for more details.
118
+ #
119
+ # You should have received a copy of the GNU General Public License
120
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
121
+
122
+
123
+ #longitude and latitude for Malmö, Sweden. decimal form
124
+ Config.geo_position = {:north => 54.57525, :west => -12.94125}
125
+
126
+ #Paths: base for files tsd.log, devices, scheduled_actions and lookup.dsl (leave alone if uncertain)
127
+ Config.log_path = "log"
128
+ Config.db_path = "db"
129
+ Config.dsl_path = "config"
130
+
131
+ #Log: can be one of :file, :development or :spec (:spec is for the rspecs, ie don't use)
132
+ # when log_object is set to :file, the log is written to tsd.log (log_path + /tsd.log)
133
+ # when log_object is set to :development the log is written to STDOUT, useful for debugging
134
+ # Config.log_object = :file
135
+ Config.log_object = :development
136
+ # Config.log_object = :spec
137
+
138
+ #Output: can be one of :development, :tellstick or :spec (:spec is for the rspecs, ie don't use)
139
+ # when output is set to :development output is written to STDOUT, useful for debugging
140
+ # when output is set to :tellstick output is sent to the usb port that has a tellstick
141
+ # (see www.teldus.se for more information)
142
+ # Config.output = :tellstick
143
+ Config.output = :development
144
+ # Config.output = :spec
145
+
146
+ #Unix socket: (leave alone if uncertain)
147
+ Config.unix_socket_path = "/tmp"
148
+
149
+ EOS
150
+ file.seek(0)
151
+ Proc.new { ConfigFactory.new(file) }.should_not raise_error
152
+ end
93
153
  end
94
154
  end
@@ -18,7 +18,7 @@
18
18
  require 'rubygems'
19
19
  SPEC = Gem::Specification.new do |s|
20
20
  s.name = "trigger_switch_d"
21
- s.version = "0.1.0"
21
+ s.version = "0.1.1"
22
22
  s.author = "Pontus Strömdahl"
23
23
  s.email = "pontus.stromdahl@adhocskill.com"
24
24
  s.homepage = "http://www.adhocskill.com/"
@@ -39,5 +39,5 @@ SPEC = Gem::Specification.new do |s|
39
39
  s.require_path = "lib"
40
40
  s.has_rdoc = true
41
41
  s.extra_rdoc_files = ["README.rdoc"]
42
- s.add_dependency("ruby-ftd2xx", ">= 0.0.1")
42
+ s.add_dependency("serialport", ">= 0.8.0")
43
43
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Pontus Str\xC3\xB6mdahl"
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-24 00:00:00 +01:00
17
+ date: 2010-03-29 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: ruby-ftd2xx
21
+ name: serialport
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  requirements:
@@ -26,9 +26,9 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
28
  - 0
29
+ - 8
29
30
  - 0
30
- - 1
31
- version: 0.0.1
31
+ version: 0.8.0
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
34
  description: " Schedule remote triggered switches and dimmers to activate/deactivate the lights in your home.\n\n Type your schedule in plain text and have an USB connected tellstick send the appropriate commands,\n\n according to your schedule.\n"
@@ -116,8 +116,8 @@ files:
116
116
  - lib/tellstick/protocol/protocol_loader.rb
117
117
  - lib/tellstick/protocol/rising_sun.rb
118
118
  - lib/tellstick/protocol/waveman.rb
119
+ - lib/tellstick/proxy_io.rb
119
120
  - lib/tellstick/tellstick.rb
120
- - lib/tellstick/tellstick_io.rb
121
121
  - lib/tellstick.rb
122
122
  - lib/trigger_switch_d/action.rb
123
123
  - lib/trigger_switch_d/application.rb
@@ -133,7 +133,7 @@ files:
133
133
  - spec/tellstick/protocol/proove_spec.rb
134
134
  - spec/tellstick/protocol/rising_sun_spec.rb
135
135
  - spec/tellstick/protocol/waveman_spec.rb
136
- - spec/tellstick/tellstick_io_spec.rb
136
+ - spec/tellstick/proxy_io_spec.rb
137
137
  - spec/tellstick/tellstick_spec.rb
138
138
  - spec/trigger_switch_d/application_spec.rb
139
139
  - spec/trigger_switch_d/config_spec.rb
@@ -1,80 +0,0 @@
1
- # TriggerSwitchD, executes commands to activate/deactive remote switches.
2
- # (c) Copyright 2010 Pontus Strömdahl, AdhocSkill.
3
- #
4
- # This program is free software: you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation, either version 3 of the License, or
7
- # (at your option) any later version.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
-
17
-
18
- require "rubygems"
19
- require "ftd2xx"
20
- require "pp"
21
-
22
- module Tellstick
23
-
24
- #IO stream associated with the tellstick
25
- class TellstickIO
26
- def initialize
27
- open
28
- end
29
-
30
- #writes input string to tellstick
31
- def puts(input)
32
- input.scan(/.{1,8}/).each do |str|
33
- Ftd2xx.write(@handle,str)
34
- end
35
- end
36
-
37
- #reads string from tellstick
38
- def gets
39
- reply = ""
40
- bytes_read = 1
41
- c = " "
42
- while (bytes_read != 0) and (c != "\n")
43
- c = " "
44
- bytes_read = Ftd2xx.read(@handle,c)
45
- reply << c
46
- end
47
- reply
48
- end
49
-
50
- #close tellstick stream
51
- def close
52
- Ftd2xx.ft_close(@handle)
53
- @handle = nil
54
- end
55
-
56
- #opens tellstick stream
57
- def open
58
- Ftd2xx.ft_set_vidpid(0x1781,0x0c30)
59
- device_index = Ftd2xx.create_device_info_list - 1
60
- @handle = Ftd2xx.open(device_index)
61
- Ftd2xx.ft_set_baud_rate(@handle,4800)
62
- Ftd2xx.ft_set_timeouts(@handle,5000,0)
63
- if @handle == nil
64
- def puts(input);end
65
- def gets;end
66
- end
67
- end
68
-
69
- #true if connected
70
- def connected?
71
- close
72
- open
73
- puts("S+")
74
- answer = gets
75
- close
76
- open
77
- answer == "+S\r\n"
78
- end
79
- end
80
- end