somfy_sdn 1.0.10 → 1.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sdn/message.rb +8 -0
- data/lib/sdn/mqtt_bridge.rb +23 -8
- data/lib/sdn/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef81905b4b164a5e09d771e07b286f09df6d40cd259b8253c2a0ef1f01f649e4
|
4
|
+
data.tar.gz: 4d6f3ad72d6b2e8f06c530a8657d684f4f0b12c9d54eb13e998841b18a8e37dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bf05e27c1e7c50e6893198950d7ab91099807c9d8ad139629e89fe3fc97d6f46c87e93400e1083ecba7c64ec3638a302523804fd921125414aa62f3632e5edb
|
7
|
+
data.tar.gz: 3300c346eeb666d82c686c0e5dec4fb830fa96adabdd7dbc45f3d4cd8e609c13f2796d1ae0b6cd2b2186bcf1ae3251d180e17dd33d578ccfa29eba3f86870e4a
|
data/lib/sdn/message.rb
CHANGED
data/lib/sdn/mqtt_bridge.rb
CHANGED
@@ -79,7 +79,8 @@ module SDN
|
|
79
79
|
:ip15percent,
|
80
80
|
:ip16pulses,
|
81
81
|
:ip16percent,
|
82
|
-
:groups
|
82
|
+
:groups,
|
83
|
+
:last_action) do
|
83
84
|
def initialize(*)
|
84
85
|
members.each { |k| self[k] = :nil }
|
85
86
|
@groups = [].fill(nil, 0, 16)
|
@@ -158,12 +159,13 @@ module SDN
|
|
158
159
|
'baud' => 4800,
|
159
160
|
'parity' => Net::Telnet::RFC2217::ODD)
|
160
161
|
else
|
161
|
-
require 'serialport'
|
162
|
-
@sdn = SerialPort.
|
162
|
+
require 'ccutrer-serialport'
|
163
|
+
@sdn = CCutrer::SerialPort.new(port, baud: 4800, parity: :odd)
|
163
164
|
end
|
164
165
|
|
165
166
|
read_thread = Thread.new do
|
166
167
|
buffer = ""
|
168
|
+
|
167
169
|
loop do
|
168
170
|
begin
|
169
171
|
message, bytes_read = SDN::Message.parse(buffer.bytes)
|
@@ -173,7 +175,7 @@ module SDN
|
|
173
175
|
begin
|
174
176
|
buffer.concat(@sdn.read_nonblock(64 * 1024))
|
175
177
|
next
|
176
|
-
rescue IO::WaitReadable
|
178
|
+
rescue IO::WaitReadable, EOFError
|
177
179
|
wait = buffer.empty? ? nil : WAIT_TIME
|
178
180
|
if @sdn.wait_readable(wait).nil?
|
179
181
|
# timed out; just discard everything
|
@@ -214,7 +216,12 @@ module SDN
|
|
214
216
|
group.publish(:positionpercent, position)
|
215
217
|
end
|
216
218
|
when SDN::Message::PostMotorStatus
|
217
|
-
if message.state == :running || motor.state == :running
|
219
|
+
if message.state == :running || motor.state == :running ||
|
220
|
+
# if it's explicitly stopped, but we didn't ask it to, it's probably
|
221
|
+
# changing directions so keep querying
|
222
|
+
(message.state == :stopped &&
|
223
|
+
message.last_action_cause == :explicit_command &&
|
224
|
+
!(motor.last_action == SDN::Message::Stop || motor.last_action.nil?))
|
218
225
|
follow_ups << SDN::Message::GetMotorStatus.new(message.src)
|
219
226
|
end
|
220
227
|
# this will do one more position request after it stopped
|
@@ -245,8 +252,11 @@ module SDN
|
|
245
252
|
end
|
246
253
|
|
247
254
|
@mutex.synchronize do
|
248
|
-
|
249
|
-
|
255
|
+
correct_response = @response_pending && message.src == @prior_message&.message&.dest && message.is_a?(@prior_message&.message&.class&.expected_response)
|
256
|
+
signal = correct_response || !follow_ups.empty?
|
257
|
+
puts "correct response #{correct_response}"
|
258
|
+
puts "pending: #{@response_pending} #{@broadcast_pending}"
|
259
|
+
@response_pending = @broadcast_pending if correct_response
|
250
260
|
follow_ups.each do |follow_up|
|
251
261
|
@queues[1].push(MessageAndRetries.new(follow_up, 5, 1)) unless @queues[1].any? { |mr| mr.message == follow_up }
|
252
262
|
end
|
@@ -321,7 +331,7 @@ module SDN
|
|
321
331
|
puts "(and waiting for response)" if @response_pending
|
322
332
|
serialized = message.serialize
|
323
333
|
@sdn.write(serialized)
|
324
|
-
@sdn.flush
|
334
|
+
@sdn.flush if @sdn.respond_to?(:flush)
|
325
335
|
puts "wrote #{serialized.unpack("C*").map { |b| '%02x' % b }.join(' ')}"
|
326
336
|
end
|
327
337
|
rescue => e
|
@@ -421,6 +431,11 @@ module SDN
|
|
421
431
|
end
|
422
432
|
nil
|
423
433
|
end
|
434
|
+
|
435
|
+
if motor
|
436
|
+
motor.last_action = message.class if [Message::MoveTo, Message::Move, Message::Wink, Message::Stop].include?(message.class)
|
437
|
+
end
|
438
|
+
|
424
439
|
if message
|
425
440
|
message.ack_requested = true if message.class.name !~ /^SDN::Message::Get/
|
426
441
|
@mutex.synchronize do
|
data/lib/sdn/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: somfy_sdn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.11
|
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-
|
11
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mqtt
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.0.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: serialport
|
42
|
+
name: ccutrer-serialport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.0.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.0.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: byebug
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '13.0'
|
83
|
-
description:
|
83
|
+
description:
|
84
84
|
email: cody@cutrer.com'
|
85
85
|
executables:
|
86
86
|
- sdn_mqtt_bridge
|
@@ -105,7 +105,7 @@ homepage: https://github.com/ccutrer/somfy_sdn
|
|
105
105
|
licenses:
|
106
106
|
- MIT
|
107
107
|
metadata: {}
|
108
|
-
post_install_message:
|
108
|
+
post_install_message:
|
109
109
|
rdoc_options: []
|
110
110
|
require_paths:
|
111
111
|
- lib
|
@@ -120,8 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
|
-
rubygems_version: 3.
|
124
|
-
signing_key:
|
123
|
+
rubygems_version: 3.1.2
|
124
|
+
signing_key:
|
125
125
|
specification_version: 4
|
126
126
|
summary: Library for communication with Somfy SDN RS-485 motorized shades
|
127
127
|
test_files: []
|