somfy_sdn 1.0.11 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,46 +1,67 @@
1
1
  module SDN
2
2
  class Message
3
- class SetMotorLimits < Message
4
- MSG = 0x11
5
- PARAMS_LENGTH = 4
6
- TYPE = { delete: 0x00, current_position: 0x01, specified_position: 0x02, jog_ms: 0x04, jog_pulses: 0x05 }
7
- TARGET = { down: 0x00, up: 0x01 }
3
+ class SetFactoryDefault < Message
4
+ MSG = 0x1f
5
+ PARAMS_LENGTH = 1
6
+ RESET = { all_settings: 0x00, group_addresses: 0x01, limits: 0x11, rotation: 0x12, rolling_speed: 0x13, ips: 0x15, locks: 0x17 }
8
7
 
9
- attr_reader :type, :target, :value
8
+ attr_reader :reset
10
9
 
11
- def initialize(dest = nil, type = :delete, target = :up, value = nil, **kwargs)
12
- kwargs[:dest] = dest
10
+ def initialize(dest = nil, reset = :all_settings, **kwargs)
11
+ kwargs[:dest] ||= dest
13
12
  super(**kwargs)
14
- self.type = type
15
- self.target = target
16
- self.value = value
13
+ self.reset = reset
17
14
  end
18
15
 
19
16
  def parse(params)
20
17
  super
21
- self.type = TYPE.invert[to_number(params[0])]
22
- self.target = TARGET.invert[to_number(params[1])]
23
- self.value = to_number(params[2..3])
18
+ self.reset = RESET.invert[to_number(params)]
24
19
  end
25
20
 
26
- def type=(value)
27
- raise ArgumentError, "type must be one of :delete, :current_position, :specified_position, :jog_ms, :jog_pulses" unless TYPE.keys.include?(value)
28
- @type = value
21
+ def reset=(value)
22
+ raise ArgumentError, "reset must be one of :all_settings, :group_addresses, :limits, :rotation, :rolling_speed, :ips, :locks" unless RESET.keys.include?(value)
23
+ @reset = value
29
24
  end
30
25
 
31
- def target=(value)
32
- raise ArgumentError, "target must be one of :up, :down" unless TARGET.keys.include?(value)
33
- @target = value
26
+ def params
27
+ transform_param(RESET[reset])
34
28
  end
29
+ end
35
30
 
36
- def value=(value)
37
- @value = value&. & 0xffff
31
+ class SetGroupAddr < Message
32
+ MSG = 0x51
33
+ PARAMS_LENGTH = 4
34
+
35
+ attr_reader :group_index, :group_address
36
+
37
+ def initialize(dest = nil, group_index = 1, group_address = nil, **kwargs)
38
+ kwargs[:dest] ||= dest
39
+ super(**kwargs)
40
+ self.group_index = group_index
41
+ self.group_address = group_address
42
+ end
43
+
44
+ def parse(params)
45
+ super
46
+ self.group_index = to_number(params[0]) + 1
47
+ self.group_address = transform_param(params[1..3])
48
+ end
49
+
50
+ def group_index=(value)
51
+ raise ArgumentError, "group_index is out of range" unless (1..16).include?(value)
52
+ @group_index = value
53
+ end
54
+
55
+ def group_address=(value)
56
+ @group_address = value
38
57
  end
39
58
 
40
59
  def params
41
- param = value || 0
42
- param /= 10 if target == :jog_ms
43
- transform_param(TYPE[type]) + transform_param(TARGET[target]) + from_number(param, 2)
60
+ transform_param(group_index - 1) + transform_param(group_address || [0, 0, 0])
61
+ end
62
+
63
+ def class_inspect
64
+ ", group_index=#{group_index.inspect}, group_address=#{group_address ? print_address(group_address) : 'nil'}"
44
65
  end
45
66
  end
46
67
 
@@ -72,31 +93,6 @@ module SDN
72
93
  end
73
94
  end
74
95
 
75
- class SetMotorRollingSpeed < Message
76
- MSG = 0x13
77
- PARAMS_LENGTH = 3
78
-
79
- attr_accessor :up_speed, :down_speed, :slow_speed
80
- def initialize(dest = nil, up_speed: nil, down_speed: nil, slow_speed: nil, **kwargs)
81
- kwargs[:dest] ||= dest
82
- super(**kwargs)
83
- self.up_speed = up_speed
84
- self.down_speed = down_speed
85
- self.slow_speed = slow_speed
86
- end
87
-
88
- def parse(params)
89
- super
90
- self.up_speed = to_number(params[0])
91
- self.down_speed = to_number(params[1])
92
- self.slow_speed = to_number(params[2])
93
- end
94
-
95
- def params
96
- transform_param(up_speed || 0xff) + transform_param(down_speed || 0xff) + transform_param(slow_speed || 0xff)
97
- end
98
- end
99
-
100
96
  class SetMotorIP < Message
101
97
  MSG = 0x15
102
98
  PARAMS_LENGTH = 4
@@ -141,74 +137,93 @@ module SDN
141
137
  end
142
138
  end
143
139
 
144
- class SetFactoryDefault < Message
145
- MSG = 0x1f
146
- PARAMS_LENGTH = 1
147
- RESET = { all_settings: 0x00, group_addresses: 0x01, limits: 0x11, rotation: 0x12, rolling_speed: 0x13, ips: 0x15, locks: 0x17 }
140
+ class SetMotorLimits < Message
141
+ MSG = 0x11
142
+ PARAMS_LENGTH = 4
143
+ TYPE = { delete: 0x00, current_position: 0x01, specified_position: 0x02, jog_ms: 0x04, jog_pulses: 0x05 }
144
+ TARGET = { down: 0x00, up: 0x01 }
148
145
 
149
- attr_reader :reset
146
+ attr_reader :type, :target, :value
150
147
 
151
- def initialize(dest = nil, reset = :all_settings, **kwargs)
148
+ def initialize(dest = nil, type = :delete, target = :up, value = nil, **kwargs)
152
149
  kwargs[:dest] ||= dest
153
150
  super(**kwargs)
154
- self.reset = reset
151
+ self.type = type
152
+ self.target = target
153
+ self.value = value
155
154
  end
156
155
 
157
156
  def parse(params)
158
157
  super
159
- self.reset = RESET.invert[to_number(params)]
158
+ self.type = TYPE.invert[to_number(params[0])]
159
+ self.target = TARGET.invert[to_number(params[1])]
160
+ self.value = to_number(params[2..3])
160
161
  end
161
162
 
162
- def reset=(value)
163
- raise ArgumentError, "reset must be one of :all_settings, :group_addresses, :limits, :rotation, :rolling_speed, :ips, :locks" unless RESET.keys.include?(value)
164
- @reset = value
163
+ def type=(value)
164
+ raise ArgumentError, "type must be one of :delete, :current_position, :specified_position, :jog_ms, :jog_pulses" unless TYPE.keys.include?(value)
165
+ @type = value
166
+ end
167
+
168
+ def target=(value)
169
+ raise ArgumentError, "target must be one of :up, :down" unless TARGET.keys.include?(value)
170
+ @target = value
171
+ end
172
+
173
+ def value=(value)
174
+ @value = value&. & 0xffff
165
175
  end
166
176
 
167
177
  def params
168
- transform_param(RESET[reset])
178
+ param = value || 0
179
+ param /= 10 if target == :jog_ms
180
+ transform_param(TYPE[type]) + transform_param(TARGET[target]) + from_number(param, 2)
169
181
  end
170
182
  end
171
183
 
172
- class SetGroupAddr < Message
173
- MSG = 0x51
174
- PARAMS_LENGTH = 4
175
-
176
- attr_reader :group_index, :group_address
184
+ class SetMotorRollingSpeed < Message
185
+ MSG = 0x13
186
+ PARAMS_LENGTH = 3
177
187
 
178
- def initialize(dest = nil, group_index = 0, group_address = nil, **kwargs)
188
+ attr_accessor :up_speed, :down_speed, :slow_speed
189
+ def initialize(dest = nil, up_speed: nil, down_speed: nil, slow_speed: nil, **kwargs)
179
190
  kwargs[:dest] ||= dest
180
191
  super(**kwargs)
181
- self.group_index = group_index
182
- self.group_address = group_address
192
+ self.up_speed = up_speed
193
+ self.down_speed = down_speed
194
+ self.slow_speed = slow_speed
183
195
  end
184
196
 
185
197
  def parse(params)
186
198
  super
187
- self.group_index = to_number(params[0])
188
- self.group_address = transform_param(params[1..3])
199
+ self.up_speed = to_number(params[0])
200
+ self.down_speed = to_number(params[1])
201
+ self.slow_speed = to_number(params[2])
189
202
  end
190
203
 
191
- def group_index=(value)
192
- raise ArgumentError, "group_index is out of range" unless (0...16).include?(value)
193
- @group_index = value
204
+ def params
205
+ transform_param(up_speed || 0xff) + transform_param(down_speed || 0xff) + transform_param(slow_speed || 0xff)
194
206
  end
207
+ end
195
208
 
196
- def group_address=(value)
197
- @group_address = value
198
- end
209
+ class SetNetworkLock < Message
210
+ MSG = 0x16
199
211
 
200
- def params
201
- transform_param(group_index) + transform_param(group_address || [0, 0, 0])
212
+ attr_accessor :locked, :priority
213
+
214
+ def parse(params)
215
+ self.locked = to_number(params[0]) == 1 ? true : false
216
+ self.priority = to_number(params[1])
202
217
  end
203
218
 
204
- def class_inspect
205
- ", group_index=#{group_index.inspect}, group_address=#{group_address ? print_address(group_address) : 'nil'}"
219
+ def params
220
+ transform_param(locked ? 1 : 0) + transform_param(priority)
206
221
  end
207
222
  end
208
223
 
209
224
  class SetNodeLabel < Message
210
225
  MSG = 0x55
211
- PARAMS_LENGTH = 16
226
+ MAX_LENGTH = 16
212
227
 
213
228
  attr_accessor :label
214
229
 
@@ -223,7 +238,7 @@ module SDN
223
238
  end
224
239
 
225
240
  def params
226
- from_string(label, 16)
241
+ from_string(label, self.class::MAX_LENGTH)
227
242
  end
228
243
  end
229
244
  end
data/lib/sdn/message.rb CHANGED
@@ -1,15 +1,21 @@
1
- require 'sdn/messages/helpers'
1
+ require 'sdn/message/helpers'
2
2
 
3
3
  module SDN
4
4
  class MalformedMessage < RuntimeError; end
5
5
 
6
6
  class Message
7
7
  class << self
8
- def expected_response
8
+ def inherited(klass)
9
+ return Message.inherited(klass) unless self == Message
10
+ @message_map = nil
11
+ (@subclasses ||= []) << klass
12
+ end
13
+
14
+ def expected_response?(message)
9
15
  if name =~ /::Get([A-Za-z]+)/
10
- const_get("Post#{$1}", true)
16
+ message.class.name == name.sub("::Get", "::Post")
11
17
  else
12
- Ack
18
+ message.is_a?(Ack) || message.is_a?(Nack)
13
19
  end
14
20
  end
15
21
 
@@ -19,20 +25,22 @@ module SDN
19
25
  # we loop here scanning for a valid message
20
26
  loop do
21
27
  offset += 1
28
+ # give these weird messages a chance
29
+ result = ILT2::MasterControl.parse(data)
30
+ return result if result
31
+
22
32
  return [nil, 0] if data.length - offset < 11
23
33
  msg = to_number(data[offset])
24
34
  length = to_number(data[offset + 1])
25
35
  ack_requested = length & 0x80 == 0x80
26
36
  length &= 0x7f
27
37
  # impossible message
28
- next if length < 11 || length > 32
38
+ next if length < 11 || length > 43
29
39
  # don't have enough data for what this message wants;
30
40
  # it could be garbage on the line so keep scanning
31
41
  next if length > data.length - offset
32
42
 
33
- message_class = constants.find { |c| (const_get(c, false).const_get(:MSG, false) rescue nil) == msg }
34
- message_class = const_get(message_class, false) if message_class
35
- message_class ||= UnknownMessage
43
+ message_class = message_map[msg] || UnknownMessage
36
44
 
37
45
  calculated_sum = checksum(data.slice(offset, length - 2))
38
46
  read_sum = data.slice(offset + length - 2, 2)
@@ -41,34 +49,41 @@ module SDN
41
49
  break
42
50
  end
43
51
 
44
- puts "discarding invalid data prior to message #{data[0...offset].map { |b| '%02x' % b }.join(' ')}" unless offset == 0
45
- puts "read #{data.slice(offset, length).map { |b| '%02x' % b }.join(' ')}"
46
-
47
- reserved = to_number(data[offset + 2])
52
+ node_type = node_type_from_number(to_number(data[offset + 2]))
48
53
  src = transform_param(data.slice(offset + 3, 3))
49
54
  dest = transform_param(data.slice(offset + 6, 3))
50
55
  begin
51
- result = message_class.new(reserved: reserved, ack_requested: ack_requested, src: src, dest: dest)
56
+ result = message_class.new(node_type: node_type, ack_requested: ack_requested, src: src, dest: dest)
52
57
  result.parse(data.slice(offset + 9, length - 11))
53
58
  result.msg = msg if message_class == UnknownMessage
54
59
  rescue ArgumentError => e
55
- puts "discarding illegal message #{e}"
60
+ SDN.logger.warn "discarding illegal message of type #{message_class.name}: #{e}"
56
61
  result = nil
57
62
  end
58
63
  [result, offset + length]
59
64
  end
65
+
66
+ private
67
+
68
+ def message_map
69
+ @message_map ||=
70
+ @subclasses.inject({}) do |memo, klass|
71
+ next memo unless klass.constants(false).include?(:MSG)
72
+ memo[klass.const_get(:MSG, false)] = klass
73
+ memo
74
+ end
75
+ end
60
76
  end
61
77
 
62
78
  include Helpers
63
79
  singleton_class.include Helpers
64
80
 
65
- attr_reader :reserved, :ack_requested, :src, :dest
66
- attr_writer :ack_requested
81
+ attr_accessor :node_type, :ack_requested, :src, :dest
67
82
 
68
- def initialize(reserved: nil, ack_requested: false, src: nil, dest: nil)
69
- @reserved = reserved || 0x02 # message sent to Sonesse 30
83
+ def initialize(node_type: nil, ack_requested: false, src: nil, dest: nil)
84
+ @node_type = node_type || 0
70
85
  @ack_requested = ack_requested
71
- if src.nil? && is_group_address?(dest)
86
+ if src.nil? && !dest.nil? && is_group_address?(dest)
72
87
  src = dest
73
88
  dest = nil
74
89
  end
@@ -81,7 +96,7 @@ module SDN
81
96
  end
82
97
 
83
98
  def serialize
84
- result = transform_param(reserved) + transform_param(src) + transform_param(dest) + params
99
+ result = transform_param(node_type_to_number(node_type)) + transform_param(src) + transform_param(dest) + params
85
100
  length = result.length + 4
86
101
  length |= 0x80 if ack_requested
87
102
  result = transform_param(self.class.const_get(:MSG)) + transform_param(length) + result
@@ -94,11 +109,11 @@ module SDN
94
109
  end
95
110
 
96
111
  def inspect
97
- "#<%s @reserved=%02xh, @ack_requested=%s, @src=%s, @dest=%s%s>" % [self.class.name, reserved, ack_requested, print_address(src), print_address(dest), class_inspect]
112
+ "#<%s @node_type=%s, @ack_requested=%s, @src=%s, @dest=%s%s>" % [self.class.name, node_type_to_string(node_type), ack_requested, print_address(src), print_address(dest), class_inspect]
98
113
  end
99
114
 
100
115
  def class_inspect
101
- ivars = instance_variables - [:@reserved, :@ack_requested, :@src, :@dest]
116
+ ivars = instance_variables - [:@node_type, :@ack_requested, :@src, :@dest, :@params]
102
117
  return if ivars.empty?
103
118
  ivars.map { |iv| ", #{iv}=#{instance_variable_get(iv).inspect}" }.join
104
119
  end
@@ -121,19 +136,36 @@ module SDN
121
136
  class Nack < Message
122
137
  MSG = 0x6f
123
138
  PARAMS_LENGTH = 1
124
- VALUES = { data_error: 0x01, unknown_message: 0x10, node_is_locked: 0x20, wrong_position: 0x21, limits_not_set: 0x22, ip_not_set: 0x23, out_of_range: 0x24, busy: 0xff }
139
+ VALUES = { data_error: 0x01,
140
+ unknown_message: 0x10,
141
+ node_is_locked: 0x20,
142
+ wrong_position: 0x21,
143
+ limits_not_set: 0x22,
144
+ ip_not_set: 0x23,
145
+ out_of_range: 0x24,
146
+ busy: 0xff }
147
+ # 17 limits not set?
148
+ # 37 not implemented? (get motor rolling speed)
149
+ # 39 at limit? blocked?
150
+
125
151
 
126
152
  # presumed
127
153
  attr_accessor :error_code
128
154
 
155
+ def initialize(dest = nil, error_code = nil, **kwargs)
156
+ kwargs[:dest] ||= dest
157
+ super(**kwargs)
158
+ self.error_code = error_code
159
+ end
160
+
129
161
  def parse(params)
130
162
  super
131
163
  error_code = to_number(params[0])
132
- self.error_code = VALUES[error_code] || error_code
164
+ self.error_code = VALUES.invert[error_code] || error_code
133
165
  end
134
166
  end
135
167
 
136
- class Ack < Message
168
+ class Ack < SimpleRequest
137
169
  MSG = 0x7f
138
170
  PARAMS_LENGTH = 0
139
171
  end
@@ -142,10 +174,25 @@ module SDN
142
174
  class UnknownMessage < Message
143
175
  attr_accessor :msg, :params
144
176
 
177
+ def initialize(params = [], **kwargs)
178
+ super(**kwargs)
179
+ self.params = params
180
+ end
181
+
145
182
  alias parse params=
146
183
 
184
+ def serialize
185
+ # prevent serializing something we don't know
186
+ raise NotImplementedError unless params
187
+ super
188
+ end
189
+
147
190
  def class_inspect
148
- result = ", @msg=%02xh" % msg
191
+ result = if self.class == UnknownMessage
192
+ result = ", @msg=%02xh" % msg
193
+ else
194
+ super || ""
195
+ end
149
196
  return result if params.empty?
150
197
 
151
198
  result << ", @params=#{params.map { |b| "%02x" % b }.join(' ')}"
@@ -154,7 +201,11 @@ module SDN
154
201
  end
155
202
  end
156
203
 
157
- require 'sdn/messages/control'
158
- require 'sdn/messages/get'
159
- require 'sdn/messages/post'
160
- require 'sdn/messages/set'
204
+ require 'sdn/message/control'
205
+ require 'sdn/message/get'
206
+ require 'sdn/message/post'
207
+ require 'sdn/message/set'
208
+ require 'sdn/message/ilt2/get'
209
+ require 'sdn/message/ilt2/master_control'
210
+ require 'sdn/message/ilt2/post'
211
+ require 'sdn/message/ilt2/set'
data/lib/sdn/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SDN
2
- VERSION = '1.0.11'
2
+ VERSION = '2.1.1'
3
3
  end
data/lib/sdn.rb CHANGED
@@ -1,6 +1,21 @@
1
+ require 'logger'
2
+
3
+ require 'sdn/client'
1
4
  require 'sdn/message'
2
- require 'sdn/mqtt_bridge'
3
5
 
4
6
  module SDN
5
7
  BROADCAST_ADDRESS = [0xff, 0xff, 0xff]
8
+
9
+ class << self
10
+ def logger
11
+ @logger ||= begin
12
+ Logger.new(STDOUT, :info).tap do |logger|
13
+ logger.datetime_format = '%Y-%m-%d %H:%M:%S.%L'
14
+ logger.formatter = proc do |severity, datetime, progname, msg|
15
+ "#{datetime.strftime(logger.datetime_format)} [#{Process.pid}/#{Thread.current.object_id}] #{severity}: #{msg}\n"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
6
21
  end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: somfy_sdn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-25 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: mqtt
14
+ name: mqtt-ccutrer
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.0
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.0
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ccutrer-serialport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: curses
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: net-telnet-rfc2217
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 0.0.3
61
+ version: '1.0'
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 0.0.3
68
+ version: '1.0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: ccutrer-serialport
70
+ name: thor
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: 1.0.0
75
+ version: '1.1'
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: 1.0.0
82
+ version: '1.1'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: byebug
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -80,32 +108,41 @@ dependencies:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
110
  version: '13.0'
83
- description:
111
+ description:
84
112
  email: cody@cutrer.com'
85
113
  executables:
86
- - sdn_mqtt_bridge
114
+ - somfy_sdn
87
115
  extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
- - bin/sdn_mqtt_bridge
118
+ - bin/somfy_sdn
91
119
  - lib/sdn.rb
120
+ - lib/sdn/cli/mqtt.rb
121
+ - lib/sdn/cli/mqtt/group.rb
122
+ - lib/sdn/cli/mqtt/motor.rb
123
+ - lib/sdn/cli/mqtt/read.rb
124
+ - lib/sdn/cli/mqtt/subscriptions.rb
125
+ - lib/sdn/cli/mqtt/write.rb
126
+ - lib/sdn/cli/provisioner.rb
127
+ - lib/sdn/cli/simulator.rb
128
+ - lib/sdn/client.rb
92
129
  - lib/sdn/message.rb
93
- - lib/sdn/messages/control.rb
94
- - lib/sdn/messages/get.rb
95
- - lib/sdn/messages/helpers.rb
96
- - lib/sdn/messages/ilt2/get.rb
97
- - lib/sdn/messages/ilt2/post.rb
98
- - lib/sdn/messages/ilt2/set.rb
99
- - lib/sdn/messages/post.rb
100
- - lib/sdn/messages/set.rb
101
- - lib/sdn/mqtt_bridge.rb
130
+ - lib/sdn/message/control.rb
131
+ - lib/sdn/message/get.rb
132
+ - lib/sdn/message/helpers.rb
133
+ - lib/sdn/message/ilt2/get.rb
134
+ - lib/sdn/message/ilt2/master_control.rb
135
+ - lib/sdn/message/ilt2/post.rb
136
+ - lib/sdn/message/ilt2/set.rb
137
+ - lib/sdn/message/post.rb
138
+ - lib/sdn/message/set.rb
102
139
  - lib/sdn/version.rb
103
140
  - lib/somfy_sdn.rb
104
141
  homepage: https://github.com/ccutrer/somfy_sdn
105
142
  licenses:
106
143
  - MIT
107
144
  metadata: {}
108
- post_install_message:
145
+ post_install_message:
109
146
  rdoc_options: []
110
147
  require_paths:
111
148
  - lib
@@ -121,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
158
  version: '0'
122
159
  requirements: []
123
160
  rubygems_version: 3.1.2
124
- signing_key:
161
+ signing_key:
125
162
  specification_version: 4
126
163
  summary: Library for communication with Somfy SDN RS-485 motorized shades
127
164
  test_files: []
data/bin/sdn_mqtt_bridge DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'somfy_sdn'
4
-
5
- SDN::MQTTBridge.new(ARGV[0], ARGV[1])
@@ -1,9 +0,0 @@
1
- module SDN
2
- class Message
3
- module ILT2
4
- class GetMotorPosition < SimpleRequest
5
- MSG = 0x44
6
- end
7
- end
8
- end
9
- end