balboa_worldwide_app 2.0.7 → 2.1.2
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/exe/bwa_mqtt_bridge +17 -0
- data/lib/bwa/client.rb +15 -5
- data/lib/bwa/message.rb +15 -41
- data/lib/bwa/messages/configuration.rb +1 -1
- data/lib/bwa/messages/configuration_request.rb +1 -1
- data/lib/bwa/messages/control_configuration.rb +2 -2
- data/lib/bwa/messages/control_configuration_request.rb +1 -1
- data/lib/bwa/messages/error.rb +18 -0
- data/lib/bwa/messages/filter_cycles.rb +1 -1
- data/lib/bwa/messages/new_client_clear_to_send.rb +18 -0
- data/lib/bwa/messages/nothing_to_send.rb +18 -0
- data/lib/bwa/messages/ready.rb +5 -1
- data/lib/bwa/messages/set_target_temperature.rb +1 -1
- data/lib/bwa/messages/set_temperature_scale.rb +1 -1
- data/lib/bwa/messages/set_time.rb +1 -1
- data/lib/bwa/messages/status.rb +25 -4
- data/lib/bwa/messages/toggle_item.rb +12 -2
- data/lib/bwa/proxy.rb +1 -1
- data/lib/bwa/server.rb +2 -2
- data/lib/bwa/version.rb +1 -1
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9b3fdfbe671f421950413e8d6d2372b4b2c1c5f2c0cf547bdb1cf581d9e2692
|
4
|
+
data.tar.gz: 0eac860bd7b7e7deec183ca7570faaff4bc7c5c604c69f71cc88851fb15e8c2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f149d04ea30080c44d68b672fbda301056a4591992558cac9f459227825fc4faa86528011d06bb39acab5e0bd55d17b66f29cb9bf8c1b02a611f03b5d22a3943
|
7
|
+
data.tar.gz: c2bb4668491f0a67ec6021001f960051565dfa7b45b9a540903e4ae7707b91891fb5bfc2f3a6f69d2d004310647956f1da0f3aed90e773468b145c40a8369dae
|
data/exe/bwa_mqtt_bridge
CHANGED
@@ -95,6 +95,7 @@ class MQTTBridge
|
|
95
95
|
property = @homie["spa"][prop.to_s.tr("_", "-")]
|
96
96
|
property.value = @bwa.public_send(prop)
|
97
97
|
end
|
98
|
+
@homie["spa"]["notification"].value = @bwa.notification || "none"
|
98
99
|
2.times do |i|
|
99
100
|
@homie["filter-cycle#{i + 1}"]["running"].value = @bwa.status.filter_cycles[i]
|
100
101
|
end
|
@@ -144,8 +145,22 @@ class MQTTBridge
|
|
144
145
|
|
145
146
|
value.to_i if value.match?(/^\d+$/)
|
146
147
|
end
|
148
|
+
allowed_items = BWA::Messages::ToggleItem::ITEMS.keys.map(&:to_s)
|
149
|
+
allow_toggles = lambda do |value|
|
150
|
+
next unless allowed_items.include?(value)
|
151
|
+
|
152
|
+
value
|
153
|
+
end
|
147
154
|
|
148
155
|
@homie.node("spa", "Hot Tub", @bwa.model) do |spa|
|
156
|
+
spa.property("command",
|
157
|
+
"Send a command to the tub",
|
158
|
+
:enum,
|
159
|
+
format: %w[normal_operation clear_notification soak],
|
160
|
+
retained: false,
|
161
|
+
non_standard_value_check: allow_toggles) do |value|
|
162
|
+
@bwa.toggle_item(value.to_sym)
|
163
|
+
end
|
149
164
|
spa.property("hold",
|
150
165
|
"Hold",
|
151
166
|
:boolean,
|
@@ -157,6 +172,8 @@ class MQTTBridge
|
|
157
172
|
@bwa.hold = value
|
158
173
|
end
|
159
174
|
spa.property("priming", "Priming", :boolean, @bwa.priming, hass: { binary_sensor: { icon: "mdi:fast-forward" } })
|
175
|
+
spa.property("notification", "Notification", :enum, @bwa.notification || "none",
|
176
|
+
format: BWA::Messages::Status::NOTIFICATIONS.values.compact + ["none"])
|
160
177
|
spa.property("heating-mode",
|
161
178
|
"Heating Mode",
|
162
179
|
:enum,
|
data/lib/bwa/client.rb
CHANGED
@@ -17,6 +17,7 @@ module BWA
|
|
17
17
|
hold?
|
18
18
|
priming
|
19
19
|
priming?
|
20
|
+
notification
|
20
21
|
heating_mode
|
21
22
|
temperature_scale
|
22
23
|
twenty_four_hour_time
|
@@ -167,13 +168,19 @@ module BWA
|
|
167
168
|
|
168
169
|
desired = 0 if desired == false
|
169
170
|
max_pump_speed = configuration.pumps[index]
|
171
|
+
|
172
|
+
# turn all pumps off with a single command
|
173
|
+
if desired == 0 && configuration.pumps.length == 1 && max_pump_speed != 1
|
174
|
+
return toggle_item(:soak)
|
175
|
+
end
|
176
|
+
|
170
177
|
desired = max_pump_speed if desired == true
|
171
178
|
desired = [desired, max_pump_speed].min
|
172
179
|
current_pump_speed = [status.pumps[index], max_pump_speed].min
|
173
180
|
times = (desired - current_pump_speed) % (max_pump_speed + 1)
|
174
|
-
times.times do
|
181
|
+
times.times do |i|
|
175
182
|
toggle_pump(index)
|
176
|
-
sleep(0.1)
|
183
|
+
sleep(0.1) unless i == times - 1
|
177
184
|
end
|
178
185
|
end
|
179
186
|
|
@@ -203,9 +210,9 @@ module BWA
|
|
203
210
|
desired = configuration.blower if desired == true
|
204
211
|
desired = [desired, configuration.blower].min
|
205
212
|
times = (desired - status.blower) % (configuration.blower + 1)
|
206
|
-
times.times do
|
213
|
+
times.times do |i|
|
207
214
|
toggle_blower
|
208
|
-
sleep(0.1)
|
215
|
+
sleep(0.1) unless i == times - 1
|
209
216
|
end
|
210
217
|
end
|
211
218
|
|
@@ -271,7 +278,10 @@ module BWA
|
|
271
278
|
else
|
272
279
|
0
|
273
280
|
end
|
274
|
-
times.times
|
281
|
+
times.times do |i|
|
282
|
+
toggle_heating_mode
|
283
|
+
sleep(0.1) unless i == times - 1
|
284
|
+
end
|
275
285
|
end
|
276
286
|
end
|
277
287
|
end
|
data/lib/bwa/message.rb
CHANGED
@@ -27,36 +27,6 @@ module BWA
|
|
27
27
|
@messages << klass
|
28
28
|
end
|
29
29
|
|
30
|
-
# Ignore (parse and throw away) messages of these types.
|
31
|
-
IGNORED_MESSAGES = [
|
32
|
-
(+"\xbf\x00").force_encoding(Encoding::ASCII_8BIT), # request for new clients
|
33
|
-
(+"\xbf\xe1").force_encoding(Encoding::ASCII_8BIT),
|
34
|
-
(+"\xbf\x07").force_encoding(Encoding::ASCII_8BIT) # nothing to send
|
35
|
-
].freeze
|
36
|
-
|
37
|
-
# Don't log messages of these types, even in DEBUG mode.
|
38
|
-
# They are very frequent and would swamp the logs.
|
39
|
-
def common_messages
|
40
|
-
@common_messages ||= begin
|
41
|
-
msgs = []
|
42
|
-
unless BWA.verbosity >= 1
|
43
|
-
msgs += [
|
44
|
-
Messages::Status::MESSAGE_TYPE,
|
45
|
-
(+"\xbf\xe1").force_encoding(Encoding::ASCII_8BIT)
|
46
|
-
]
|
47
|
-
end
|
48
|
-
unless BWA.verbosity >= 2
|
49
|
-
msgs += [
|
50
|
-
(+"\xbf\x00").force_encoding(Encoding::ASCII_8BIT),
|
51
|
-
(+"\xbf\xe1").force_encoding(Encoding::ASCII_8BIT),
|
52
|
-
Messages::Ready::MESSAGE_TYPE,
|
53
|
-
(+"\xbf\x07").force_encoding(Encoding::ASCII_8BIT)
|
54
|
-
]
|
55
|
-
end
|
56
|
-
msgs
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
30
|
def parse(data)
|
61
31
|
offset = -1
|
62
32
|
message_type = length = nil
|
@@ -92,17 +62,10 @@ module BWA
|
|
92
62
|
|
93
63
|
message_type = data.slice(offset + 3, 2)
|
94
64
|
BWA.logger.debug "discarding invalid data prior to message #{BWA.raw2str(data[0...offset])}" unless offset.zero?
|
95
|
-
unless common_messages.include?(message_type)
|
96
|
-
BWA.logger.debug " read: #{BWA.raw2str(data.slice(offset,
|
97
|
-
length + 2))}"
|
98
|
-
end
|
99
65
|
|
100
66
|
src = data[offset + 2].ord
|
101
67
|
klass = @messages.find { |k| k::MESSAGE_TYPE == message_type }
|
102
68
|
|
103
|
-
# Ignore these message types
|
104
|
-
return [nil, offset + length + 2] if IGNORED_MESSAGES.include?(message_type)
|
105
|
-
|
106
69
|
if klass
|
107
70
|
valid_length = if klass::MESSAGE_LENGTH.respond_to?(:include?)
|
108
71
|
klass::MESSAGE_LENGTH.include?(length - 5)
|
@@ -110,6 +73,8 @@ module BWA
|
|
110
73
|
length - 5 == klass::MESSAGE_LENGTH
|
111
74
|
end
|
112
75
|
unless valid_length
|
76
|
+
BWA.logger.debug " read: #{BWA.raw2str(data.slice(offset, length + 2))}"
|
77
|
+
|
113
78
|
raise InvalidMessage.new("Unrecognized data length (#{length}) for message #{klass}",
|
114
79
|
data)
|
115
80
|
end
|
@@ -124,7 +89,10 @@ module BWA
|
|
124
89
|
message.parse(data.slice(offset + 5, length - 5))
|
125
90
|
message.instance_variable_set(:@raw_data, data.slice(offset, length + 2))
|
126
91
|
message.instance_variable_set(:@src, src)
|
127
|
-
|
92
|
+
if message.log?
|
93
|
+
BWA.logger.debug " read: #{BWA.raw2str(data.slice(offset, length + 2))}"
|
94
|
+
BWA.logger.info "from spa: #{message.inspect}"
|
95
|
+
end
|
128
96
|
[message, offset + length + 2]
|
129
97
|
end
|
130
98
|
|
@@ -150,14 +118,17 @@ module BWA
|
|
150
118
|
@src = 0x0a
|
151
119
|
end
|
152
120
|
|
121
|
+
def log?
|
122
|
+
true
|
123
|
+
end
|
124
|
+
|
153
125
|
def parse(_data); end
|
154
126
|
|
155
127
|
def serialize(message = "")
|
156
128
|
length = message.length + 5
|
157
|
-
full_message =
|
158
|
-
.force_encoding(Encoding::ASCII_8BIT)
|
129
|
+
full_message = "#{length.chr}#{src.chr}#{self.class::MESSAGE_TYPE}#{message}"
|
159
130
|
checksum = CRC.checksum(full_message)
|
160
|
-
|
131
|
+
"\x7e#{full_message}#{checksum.chr}\x7e".b
|
161
132
|
end
|
162
133
|
|
163
134
|
def inspect
|
@@ -170,7 +141,10 @@ require "bwa/messages/configuration"
|
|
170
141
|
require "bwa/messages/configuration_request"
|
171
142
|
require "bwa/messages/control_configuration"
|
172
143
|
require "bwa/messages/control_configuration_request"
|
144
|
+
require "bwa/messages/error"
|
173
145
|
require "bwa/messages/filter_cycles"
|
146
|
+
require "bwa/messages/new_client_clear_to_send"
|
147
|
+
require "bwa/messages/nothing_to_send"
|
174
148
|
require "bwa/messages/ready"
|
175
149
|
require "bwa/messages/set_target_temperature"
|
176
150
|
require "bwa/messages/set_temperature_scale"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module BWA
|
4
4
|
module Messages
|
5
5
|
class ControlConfiguration < Message
|
6
|
-
MESSAGE_TYPE =
|
6
|
+
MESSAGE_TYPE = "\xbf\x24".b
|
7
7
|
MESSAGE_LENGTH = 21
|
8
8
|
|
9
9
|
attr_accessor :model, :version
|
@@ -25,7 +25,7 @@ module BWA
|
|
25
25
|
end
|
26
26
|
|
27
27
|
class ControlConfiguration2 < Message
|
28
|
-
MESSAGE_TYPE =
|
28
|
+
MESSAGE_TYPE = "\xbf\x2e".b
|
29
29
|
MESSAGE_LENGTH = 6
|
30
30
|
|
31
31
|
attr_accessor :pumps, :lights, :circulation_pump, :blower, :mister, :aux
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BWA
|
4
|
+
module Messages
|
5
|
+
class Error < Message
|
6
|
+
MESSAGE_TYPE = "\xbf\xe1".b
|
7
|
+
MESSAGE_LENGTH = 1
|
8
|
+
|
9
|
+
def log?
|
10
|
+
BWA.verbosity >= 1
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#<BWA::Messages::Error>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -7,7 +7,7 @@ module BWA
|
|
7
7
|
:cycle2_enabled, :cycle2_start_hour, :cycle2_start_minute, :cycle2_duration
|
8
8
|
alias_method :cycle2_enabled?, :cycle2_enabled
|
9
9
|
|
10
|
-
MESSAGE_TYPE =
|
10
|
+
MESSAGE_TYPE = "\xbf\x23".b
|
11
11
|
MESSAGE_LENGTH = 8
|
12
12
|
|
13
13
|
def parse(data)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BWA
|
4
|
+
module Messages
|
5
|
+
class NewClientClearToSend < Message
|
6
|
+
MESSAGE_TYPE = "\xbf\0".b
|
7
|
+
MESSAGE_LENGTH = 0
|
8
|
+
|
9
|
+
def log?
|
10
|
+
BWA.verbosity >= 2
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#<BWA::Messages::NewClientClearToSend>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BWA
|
4
|
+
module Messages
|
5
|
+
class NothingToSend < Message
|
6
|
+
MESSAGE_TYPE = "\xbf\x07".b
|
7
|
+
MESSAGE_LENGTH = 0
|
8
|
+
|
9
|
+
def log?
|
10
|
+
BWA.verbosity >= 2
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#<BWA::Messages::NothingToSend>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/bwa/messages/ready.rb
CHANGED
@@ -3,9 +3,13 @@
|
|
3
3
|
module BWA
|
4
4
|
module Messages
|
5
5
|
class Ready < Message
|
6
|
-
MESSAGE_TYPE =
|
6
|
+
MESSAGE_TYPE = "\xbf\06".b
|
7
7
|
MESSAGE_LENGTH = 0
|
8
8
|
|
9
|
+
def log?
|
10
|
+
BWA.verbosity >= 2
|
11
|
+
end
|
12
|
+
|
9
13
|
def inspect
|
10
14
|
"#<BWA::Messages::Ready>"
|
11
15
|
end
|
data/lib/bwa/messages/status.rb
CHANGED
@@ -5,6 +5,7 @@ module BWA
|
|
5
5
|
class Status < Message
|
6
6
|
attr_accessor :hold,
|
7
7
|
:priming,
|
8
|
+
:notification,
|
8
9
|
:heating_mode,
|
9
10
|
:twenty_four_hour_time,
|
10
11
|
:filter_cycles,
|
@@ -25,16 +26,24 @@ module BWA
|
|
25
26
|
alias_method :twenty_four_hour_time?, :twenty_four_hour_time
|
26
27
|
alias_method :heating?, :heating
|
27
28
|
|
28
|
-
MESSAGE_TYPE =
|
29
|
+
MESSAGE_TYPE = "\xaf\x13".b
|
29
30
|
# additional features have been added in later versions
|
30
31
|
MESSAGE_LENGTH = (24..32).freeze
|
31
32
|
|
33
|
+
NOTIFICATIONS = {
|
34
|
+
0x00 => nil,
|
35
|
+
0x0a => :ph,
|
36
|
+
0x04 => :filter,
|
37
|
+
0x09 => :sanitizer
|
38
|
+
}.freeze
|
39
|
+
|
32
40
|
def initialize
|
33
41
|
super
|
34
42
|
|
35
43
|
@src = 0xff
|
36
44
|
self.hold = false
|
37
45
|
self.priming = false
|
46
|
+
self.notification = nil
|
38
47
|
self.heating_mode = :ready
|
39
48
|
@temperature_scale = :fahrenheit
|
40
49
|
self.twenty_four_hour_time = false
|
@@ -50,18 +59,22 @@ module BWA
|
|
50
59
|
self.target_temperature = 100
|
51
60
|
end
|
52
61
|
|
62
|
+
def log?
|
63
|
+
BWA.verbosity >= 1
|
64
|
+
end
|
65
|
+
|
53
66
|
def parse(data)
|
54
67
|
flags = data[0].ord
|
55
68
|
self.hold = (flags & 0x05 != 0)
|
56
69
|
|
57
|
-
|
58
|
-
self.priming = (flags & 0x01 == 0x01)
|
70
|
+
self.priming = data[1].ord == 0x01
|
59
71
|
flags = data[5].ord
|
60
72
|
self.heating_mode = case flags & 0x03
|
61
73
|
when 0x00 then :ready
|
62
74
|
when 0x01 then :rest
|
63
75
|
when 0x02 then :ready_in_rest
|
64
76
|
end
|
77
|
+
self.notification = data[1].ord == 0x03 && NOTIFICATIONS[data[6].ord]
|
65
78
|
flags = data[9].ord
|
66
79
|
self.temperature_scale = (flags & 0x01 == 0x01) ? :celsius : :fahrenheit
|
67
80
|
self.twenty_four_hour_time = (flags & 0x02 == 0x02)
|
@@ -104,10 +117,17 @@ module BWA
|
|
104
117
|
def serialize
|
105
118
|
data = "\x00" * 24
|
106
119
|
data[0] = (hold ? 0x05 : 0x00).chr
|
107
|
-
data[1] =
|
120
|
+
data[1] = if priming
|
121
|
+
0x01
|
122
|
+
elsif notification
|
123
|
+
0x04
|
124
|
+
else
|
125
|
+
0x00
|
126
|
+
end.chr
|
108
127
|
data[5] = { ready: 0x00,
|
109
128
|
rest: 0x01,
|
110
129
|
ready_in_rest: 0x02 }[heating_mode].chr
|
130
|
+
data[6] = NOTIFICATIONS.invert[notification].chr
|
111
131
|
flags = 0
|
112
132
|
flags |= 0x01 if temperature_scale == :celsius
|
113
133
|
flags |= 0x02 if twenty_four_hour_time
|
@@ -169,6 +189,7 @@ module BWA
|
|
169
189
|
|
170
190
|
items << "hold" if hold
|
171
191
|
items << "priming" if priming
|
192
|
+
items << "notification=#{notification}" if notification
|
172
193
|
items << self.class.format_time(hour, minute, twenty_four_hour_time: twenty_four_hour_time)
|
173
194
|
items << "#{current_temperature || "--"}/#{target_temperature}°#{temperature_scale.to_s[0].upcase}"
|
174
195
|
items << "filter_cycles=#{filter_cycles.inspect}"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module BWA
|
4
4
|
module Messages
|
5
5
|
class ToggleItem < Message
|
6
|
-
MESSAGE_TYPE =
|
6
|
+
MESSAGE_TYPE = "\xbf\x11".b
|
7
7
|
MESSAGE_LENGTH = 2
|
8
8
|
ITEMS = {
|
9
9
|
normal_operation: 0x01,
|
@@ -20,6 +20,7 @@ module BWA
|
|
20
20
|
light2: 0x12,
|
21
21
|
aux1: 0x16,
|
22
22
|
aux2: 0x17,
|
23
|
+
soak: 0x1d,
|
23
24
|
hold: 0x3c,
|
24
25
|
temperature_range: 0x50,
|
25
26
|
heating_mode: 0x51
|
@@ -32,13 +33,22 @@ module BWA
|
|
32
33
|
self.item = item
|
33
34
|
end
|
34
35
|
|
36
|
+
def log?
|
37
|
+
return true if BWA.verbosity >= 2
|
38
|
+
# dunno why we receive this, but somebody is spamming the bus
|
39
|
+
# trying to toggle an item we don't know
|
40
|
+
return false if item == 0 # rubocop:disable Style/NumericPredicate could be a symbol
|
41
|
+
|
42
|
+
true
|
43
|
+
end
|
44
|
+
|
35
45
|
def parse(data)
|
36
46
|
self.item = ITEMS.invert[data[0].ord] || data[0].ord
|
37
47
|
end
|
38
48
|
|
39
49
|
def serialize
|
40
50
|
data = +"\x00\x00"
|
41
|
-
data[0] = if item.is_a?
|
51
|
+
data[0] = if item.is_a?(Integer)
|
42
52
|
item.chr
|
43
53
|
else
|
44
54
|
ITEMS[item].chr
|
data/lib/bwa/proxy.rb
CHANGED
data/lib/bwa/server.rb
CHANGED
@@ -20,9 +20,9 @@ module BWA
|
|
20
20
|
|
21
21
|
def send_message(socket, message)
|
22
22
|
length = message.length + 2
|
23
|
-
full_message =
|
23
|
+
full_message = "#{length.chr}#{message}"
|
24
24
|
checksum = CRC.checksum(full_message)
|
25
|
-
socket.send(
|
25
|
+
socket.send("\x7e#{full_message}#{checksum.chr}\x7e".b, 0)
|
26
26
|
end
|
27
27
|
|
28
28
|
def run_client(socket)
|
data/lib/bwa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: balboa_worldwide_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ccutrer-serialport
|
@@ -160,9 +160,9 @@ description:
|
|
160
160
|
email: cody@cutrer.com'
|
161
161
|
executables:
|
162
162
|
- bwa_client
|
163
|
-
- bwa_server
|
164
|
-
- bwa_proxy
|
165
163
|
- bwa_mqtt_bridge
|
164
|
+
- bwa_proxy
|
165
|
+
- bwa_server
|
166
166
|
extensions: []
|
167
167
|
extra_rdoc_files: []
|
168
168
|
files:
|
@@ -180,7 +180,10 @@ files:
|
|
180
180
|
- lib/bwa/messages/configuration_request.rb
|
181
181
|
- lib/bwa/messages/control_configuration.rb
|
182
182
|
- lib/bwa/messages/control_configuration_request.rb
|
183
|
+
- lib/bwa/messages/error.rb
|
183
184
|
- lib/bwa/messages/filter_cycles.rb
|
185
|
+
- lib/bwa/messages/new_client_clear_to_send.rb
|
186
|
+
- lib/bwa/messages/nothing_to_send.rb
|
184
187
|
- lib/bwa/messages/ready.rb
|
185
188
|
- lib/bwa/messages/set_target_temperature.rb
|
186
189
|
- lib/bwa/messages/set_temperature_scale.rb
|
@@ -210,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
213
|
- !ruby/object:Gem::Version
|
211
214
|
version: '0'
|
212
215
|
requirements: []
|
213
|
-
rubygems_version: 3.
|
216
|
+
rubygems_version: 3.3.5
|
214
217
|
signing_key:
|
215
218
|
specification_version: 4
|
216
219
|
summary: Library for communication with Balboa Water Group's WiFi module or RS-485
|