balboa_worldwide_app 1.1.2 → 1.2.4
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/bin/bwa_mqtt_bridge +11 -4
- data/lib/bwa/client.rb +4 -4
- data/lib/bwa/message.rb +20 -5
- data/lib/bwa/messages/status.rb +5 -4
- data/lib/bwa/version.rb +1 -1
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c8aedb1449973af5ee03ee3927e31e6c5edaa76305ff556ab48eaccc94fc7bf
|
4
|
+
data.tar.gz: e43450ff21fe2bfabf8514642b7ce98576a32b60aa3b06a8364c5e8fd8d3ed1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af663ca63be3bd5f2a80da01d038e9853bdb7781972a2da443ad22cf89f2915f5dd3feeab030a4be8e62682aa8c472a6610537583c8d48674ff68fce5527db31
|
7
|
+
data.tar.gz: aa3fbecd9f50d93097852eaf13124c671a488afc2001ec12ec4500c46349db6be6f7b81631f44dccdc9f68e3ff0157e090018b8a615fe28662eb18bdcdb26285
|
data/bin/bwa_mqtt_bridge
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'mqtt'
|
4
|
+
require 'sd_notify'
|
4
5
|
|
5
6
|
require 'bwa/client'
|
6
7
|
require 'bwa/discovery'
|
@@ -17,6 +18,9 @@ class MQTTBridge
|
|
17
18
|
|
18
19
|
publish_basic_attributes
|
19
20
|
|
21
|
+
# Tell systemd we've started up OK. Ignored if systemd not in use.
|
22
|
+
SdNotify.ready
|
23
|
+
|
20
24
|
bwa_thread = Thread.new do
|
21
25
|
loop do
|
22
26
|
begin
|
@@ -88,6 +92,9 @@ class MQTTBridge
|
|
88
92
|
(0..1).each do |i|
|
89
93
|
publish_attribute("spa/aux#{i + 1}", message.lights[i]) if @bwa.last_control_configuration2&.aux&.[](i)
|
90
94
|
end
|
95
|
+
|
96
|
+
# Tell systemd we are still alive and kicking. Ignored if systemd not in use.
|
97
|
+
SdNotify.watchdog
|
91
98
|
end
|
92
99
|
end
|
93
100
|
end
|
@@ -126,7 +133,7 @@ class MQTTBridge
|
|
126
133
|
next @bwa.toggle_blower if value == 'toggle'
|
127
134
|
@bwa.set_blower(value.to_i)
|
128
135
|
when "spa/settemperature/set"
|
129
|
-
@bwa.set_temperature(value.
|
136
|
+
@bwa.set_temperature(value.to_f)
|
130
137
|
end
|
131
138
|
end
|
132
139
|
end
|
@@ -147,7 +154,7 @@ class MQTTBridge
|
|
147
154
|
end
|
148
155
|
|
149
156
|
def publish_basic_attributes
|
150
|
-
publish("$homie", "
|
157
|
+
publish("$homie", "4.0.0")
|
151
158
|
publish("$name", "BWA Spa")
|
152
159
|
publish("$state", "init")
|
153
160
|
publish("$nodes", "spa")
|
@@ -186,10 +193,10 @@ class MQTTBridge
|
|
186
193
|
subscribe("spa/temperaturerange/set")
|
187
194
|
|
188
195
|
publish("spa/currenttemperature/$name", "Current temperature")
|
189
|
-
publish("spa/currenttemperature/$datatype", "
|
196
|
+
publish("spa/currenttemperature/$datatype", "float")
|
190
197
|
|
191
198
|
publish("spa/settemperature/$name", "Set Temperature")
|
192
|
-
publish("spa/settemperature/$datatype", "
|
199
|
+
publish("spa/settemperature/$datatype", "float")
|
193
200
|
publish("spa/settemperature/$settable", "true")
|
194
201
|
subscribe("spa/settemperature/set")
|
195
202
|
|
data/lib/bwa/client.rb
CHANGED
@@ -14,8 +14,8 @@ module BWA
|
|
14
14
|
@io = Net::Telnet::RFC2217.new("Host" => uri.host, "Port" => uri.port || 23, "baud" => 115200)
|
15
15
|
@queue = []
|
16
16
|
else
|
17
|
-
require '
|
18
|
-
@io =
|
17
|
+
require 'ccutrer-serialport'
|
18
|
+
@io = CCutrer::SerialPort.new(uri.path, baud: 115200)
|
19
19
|
@queue = []
|
20
20
|
end
|
21
21
|
@buffer = ""
|
@@ -30,7 +30,7 @@ module BWA
|
|
30
30
|
method = @io.respond_to?(:readpartial) ? :readpartial : :read
|
31
31
|
unless message
|
32
32
|
begin
|
33
|
-
@buffer.concat(@io.
|
33
|
+
@buffer.concat(@io.__send__(method, 64 * 1024))
|
34
34
|
rescue EOFError
|
35
35
|
@io.wait_readable
|
36
36
|
retry
|
@@ -145,7 +145,7 @@ module BWA
|
|
145
145
|
# low range is 50-80 for F, 10-26 for C (by 0.5)
|
146
146
|
def set_temperature(desired)
|
147
147
|
desired *= 2 if last_status && last_status.temperature_scale == :celsius || desired < 50
|
148
|
-
send_message("\x0a\xbf\x20#{desired.chr}")
|
148
|
+
send_message("\x0a\xbf\x20#{desired.round.chr}")
|
149
149
|
end
|
150
150
|
|
151
151
|
def set_time(hour, minute, twenty_four_hour_time = false)
|
data/lib/bwa/message.rb
CHANGED
@@ -27,18 +27,28 @@ module BWA
|
|
27
27
|
offset += 1
|
28
28
|
return nil if data.length - offset < 5
|
29
29
|
|
30
|
+
# Keep scanning until message start char
|
30
31
|
next unless data[offset] == '~'
|
32
|
+
|
33
|
+
# Read length (safe since we have at least 5 chars)
|
31
34
|
length = data[offset + 1].ord
|
32
|
-
|
33
|
-
|
35
|
+
|
36
|
+
# No message is this short or this long; keep scanning
|
37
|
+
next if length < 5 or length >= '~'.ord
|
34
38
|
|
35
39
|
# don't have enough data for what this message wants;
|
36
|
-
#
|
37
|
-
|
40
|
+
# return and hope for more (yes this might cause a
|
41
|
+
# delay, but the protocol is very chatty so it won't
|
42
|
+
# be long)
|
43
|
+
return nil if length + 2 > data.length - offset
|
38
44
|
|
45
|
+
# Not properly terminated; keep scanning
|
39
46
|
next unless data[offset + length + 1] == '~'
|
40
47
|
|
48
|
+
# Not a valid checksum; keep scanning
|
41
49
|
next unless CRC.checksum(data.slice(offset + 1, length - 1)) == data[offset + length].ord
|
50
|
+
|
51
|
+
# Got a valid message!
|
42
52
|
break
|
43
53
|
end
|
44
54
|
|
@@ -56,7 +66,12 @@ module BWA
|
|
56
66
|
"\xbf\x07".force_encoding(Encoding::ASCII_8BIT)].include?(message_type)
|
57
67
|
|
58
68
|
if klass
|
59
|
-
|
69
|
+
valid_length = if klass::MESSAGE_LENGTH.respond_to?(:include?)
|
70
|
+
klass::MESSAGE_LENGTH.include?(length - 5)
|
71
|
+
else
|
72
|
+
length - 5 == klass::MESSAGE_LENGTH
|
73
|
+
end
|
74
|
+
raise InvalidMessage.new("Unrecognized data length (#{length}) for message #{klass}", data) unless valid_length
|
60
75
|
else
|
61
76
|
klass = Unrecognized
|
62
77
|
end
|
data/lib/bwa/messages/status.rb
CHANGED
@@ -18,7 +18,8 @@ module BWA
|
|
18
18
|
:current_temperature, :set_temperature
|
19
19
|
|
20
20
|
MESSAGE_TYPE = "\xaf\x13".force_encoding(Encoding::ASCII_8BIT)
|
21
|
-
|
21
|
+
# additional features have been added in later versions
|
22
|
+
MESSAGE_LENGTH = 24..32
|
22
23
|
|
23
24
|
def initialize
|
24
25
|
@src = 0xff
|
@@ -80,8 +81,8 @@ module BWA
|
|
80
81
|
self.current_temperature = nil if self.current_temperature == 0xff
|
81
82
|
self.set_temperature = data[20].ord
|
82
83
|
if temperature_scale == :celsius
|
83
|
-
self.current_temperature /= 2.0
|
84
|
-
self.set_temperature /= 2.0
|
84
|
+
self.current_temperature /= 2.0 if self.current_temperature
|
85
|
+
self.set_temperature /= 2.0 if self.set_temperature
|
85
86
|
end
|
86
87
|
end
|
87
88
|
|
@@ -171,4 +172,4 @@ module BWA
|
|
171
172
|
end
|
172
173
|
end
|
173
174
|
end
|
174
|
-
end
|
175
|
+
end
|
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: 1.
|
4
|
+
version: 1.2.4
|
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:
|
11
|
+
date: 2021-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: digest-crc
|
@@ -53,19 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.0.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: ccutrer-serialport
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 1.0.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 1.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sd_notify
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: byebug
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,7 +108,7 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '13.0'
|
97
|
-
description:
|
111
|
+
description:
|
98
112
|
email: cody@cutrer.com'
|
99
113
|
executables:
|
100
114
|
- bwa_mqtt_bridge
|
@@ -128,7 +142,7 @@ homepage: https://github.com/ccutrer/bwa
|
|
128
142
|
licenses:
|
129
143
|
- MIT
|
130
144
|
metadata: {}
|
131
|
-
post_install_message:
|
145
|
+
post_install_message:
|
132
146
|
rdoc_options: []
|
133
147
|
require_paths:
|
134
148
|
- lib
|
@@ -144,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
158
|
version: '0'
|
145
159
|
requirements: []
|
146
160
|
rubygems_version: 3.1.2
|
147
|
-
signing_key:
|
161
|
+
signing_key:
|
148
162
|
specification_version: 4
|
149
163
|
summary: Library for communication with Balboa Water Group's WiFi module or RS-485
|
150
164
|
test_files: []
|