balboa_worldwide_app 1.2.1 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 537f4b0048b2f972b06f90fc404fc9589845cc7550e5305a19e0bab892e647e4
4
- data.tar.gz: 79fd85b3e8e95b6fade48c8135c170a52956b60d69199a84a31bed4ccd6f7c61
3
+ metadata.gz: c54bf4de74bdb4e53dce087127534357ec05b1b0b69921f6d7c6956a566ca844
4
+ data.tar.gz: 17a7574e1134c7976505777567fd90209ebb5dc85fd358f132cb4088329a1e07
5
5
  SHA512:
6
- metadata.gz: f9517634786bc75db423f2a2b4e2941535fc31deb0dd38f610c94f613ce4d00eafeadcc43c517fd5f475fc62392d00ba42b57f8b0abaad9d18289e4bf65fa1a7
7
- data.tar.gz: 7d4388cdeefa5477402594681fad8fee169ca02dc6449edec60cd827f80e81d9aba53251202217c6e8c20feca8e0ab29b20b4703d04641259a9eddeb47fc3d1c
6
+ metadata.gz: 0d9feac37083c472fb2609a337cd55d7e9415230f0c3192a76b161278fadf6e51659f54559b3596957c03a486359c3b2d0e5bc78f130685dba07865eac31144a
7
+ data.tar.gz: 7e10ebe03a3ac43ecbad06ea3783bbbf517ad2cde7c78f6e0bbed333399a873b6549a0db80990e15fd2b94b74c898190b626f71c49db8c84f3cdf4e25643707a
data/bin/bwa_mqtt_bridge CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'mqtt'
4
+ require 'sd_notify'
5
+ require 'set'
4
6
 
5
7
  require 'bwa/client'
6
8
  require 'bwa/discovery'
@@ -17,6 +19,9 @@ class MQTTBridge
17
19
 
18
20
  publish_basic_attributes
19
21
 
22
+ # Tell systemd we've started up OK. Ignored if systemd not in use.
23
+ SdNotify.ready
24
+
20
25
  bwa_thread = Thread.new do
21
26
  loop do
22
27
  begin
@@ -88,6 +93,9 @@ class MQTTBridge
88
93
  (0..1).each do |i|
89
94
  publish_attribute("spa/aux#{i + 1}", message.lights[i]) if @bwa.last_control_configuration2&.aux&.[](i)
90
95
  end
96
+
97
+ # Tell systemd we are still alive and kicking. Ignored if systemd not in use.
98
+ SdNotify.watchdog
91
99
  end
92
100
  end
93
101
  end
@@ -126,7 +134,7 @@ class MQTTBridge
126
134
  next @bwa.toggle_blower if value == 'toggle'
127
135
  @bwa.set_blower(value.to_i)
128
136
  when "spa/settemperature/set"
129
- @bwa.set_temperature(value.to_i)
137
+ @bwa.set_temperature(value.to_f)
130
138
  end
131
139
  end
132
140
  end
@@ -147,7 +155,7 @@ class MQTTBridge
147
155
  end
148
156
 
149
157
  def publish_basic_attributes
150
- publish("$homie", "v4.0.0")
158
+ publish("$homie", "4.0.0")
151
159
  publish("$name", "BWA Spa")
152
160
  publish("$state", "init")
153
161
  publish("$nodes", "spa")
@@ -186,10 +194,10 @@ class MQTTBridge
186
194
  subscribe("spa/temperaturerange/set")
187
195
 
188
196
  publish("spa/currenttemperature/$name", "Current temperature")
189
- publish("spa/currenttemperature/$datatype", "integer")
197
+ publish("spa/currenttemperature/$datatype", "float")
190
198
 
191
199
  publish("spa/settemperature/$name", "Set Temperature")
192
- publish("spa/settemperature/$datatype", "integer")
200
+ publish("spa/settemperature/$datatype", "float")
193
201
  publish("spa/settemperature/$settable", "true")
194
202
  subscribe("spa/settemperature/set")
195
203
 
data/lib/bwa/client.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'uri'
2
+
1
3
  require 'bwa/message'
2
4
 
3
5
  module BWA
@@ -145,7 +147,7 @@ module BWA
145
147
  # low range is 50-80 for F, 10-26 for C (by 0.5)
146
148
  def set_temperature(desired)
147
149
  desired *= 2 if last_status && last_status.temperature_scale == :celsius || desired < 50
148
- send_message("\x0a\xbf\x20#{desired.chr}")
150
+ send_message("\x0a\xbf\x20#{desired.round.chr}")
149
151
  end
150
152
 
151
153
  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
- # impossible message
33
- next if length < 5
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
- # it could be garbage on the line so keep scanning
37
- next if length + 2 > data.length - offset
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
 
@@ -81,8 +81,8 @@ module BWA
81
81
  self.current_temperature = nil if self.current_temperature == 0xff
82
82
  self.set_temperature = data[20].ord
83
83
  if temperature_scale == :celsius
84
- self.current_temperature /= 2.0
85
- 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
86
86
  end
87
87
  end
88
88
 
data/lib/bwa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module BWA
2
- VERSION = '1.2.1'
2
+ VERSION = '1.2.5'
3
3
  end
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.2.1
4
+ version: 1.2.5
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: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: digest-crc
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
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
@@ -143,8 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
157
  - !ruby/object:Gem::Version
144
158
  version: '0'
145
159
  requirements: []
146
- rubygems_version: 3.1.4
147
- signing_key:
160
+ rubygems_version: 3.1.2
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: []