balboa_worldwide_app 1.2.5 → 2.0.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.
@@ -1,8 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class Configuration < Message
4
- MESSAGE_TYPE = "\xbf\x94".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x94").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 25
8
+
9
+ def inspect
10
+ "#<BWA::Messages::Configuration>"
11
+ end
6
12
  end
7
13
  end
8
14
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ConfigurationRequest < Message
4
- MESSAGE_TYPE = "\xbf\x04".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x04").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 0
6
8
 
7
9
  def inspect
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ControlConfiguration < Message
4
- MESSAGE_TYPE = "\xbf\x24".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x24").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 21
6
8
 
7
9
  attr_accessor :model, :version
8
10
 
9
11
  def initialize
10
- @model = ''
12
+ super
13
+ @model = ""
11
14
  @version = 0
12
15
  end
13
16
 
@@ -22,15 +25,17 @@ module BWA
22
25
  end
23
26
 
24
27
  class ControlConfiguration2 < Message
25
- MESSAGE_TYPE = "\xbf\x2e".force_encoding(Encoding::ASCII_8BIT)
28
+ MESSAGE_TYPE = (+"\xbf\x2e").force_encoding(Encoding::ASCII_8BIT)
26
29
  MESSAGE_LENGTH = 6
27
30
 
28
- attr_accessor :pumps, :lights, :circ_pump, :blower, :mister, :aux
31
+ attr_accessor :pumps, :lights, :circulation_pump, :blower, :mister, :aux
29
32
 
30
33
  def initialize
34
+ super
35
+
31
36
  self.pumps = Array.new(6, 0)
32
37
  self.lights = Array.new(2, false)
33
- self.circ_pump = false
38
+ self.circulation_pump = false
34
39
  self.blower = 0
35
40
  self.mister = false
36
41
  self.aux = Array.new(2, false)
@@ -50,7 +55,7 @@ module BWA
50
55
  lights[1] = ((flags >> 6) & 0x03 != 0)
51
56
  flags = data[3].ord
52
57
  self.blower = flags & 0x03
53
- self.circ_pump = ((flags >> 6) & 0x03 != 0)
58
+ self.circulation_pump = ((flags >> 6) & 0x03 != 0)
54
59
  flags = data[4].ord
55
60
  self.mister = (flags & 0x30 != 0)
56
61
  aux[0] = (flags & 0x01 != 0)
@@ -58,17 +63,16 @@ module BWA
58
63
  end
59
64
 
60
65
  def inspect
61
- result = "#<BWA::Messages::ControlConfiguration2 "
62
66
  items = []
63
67
 
64
68
  items << "pumps=#{pumps.inspect}"
65
69
  items << "lights=#{lights.inspect}"
66
- items << "circ_pump" if circ_pump
70
+ items << "circulation_pump" if circulation_pump
67
71
  items << "blower=#{blower}" if blower != 0
68
72
  items << "mister" if mister
69
73
  items << "aux=#{aux.inspect}"
70
74
 
71
- result << items.join(' ') << ">"
75
+ "#<BWA::Messages::ControlConfiguration2 #{items.join(" ")}>"
72
76
  end
73
77
  end
74
78
  end
@@ -1,20 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ControlConfigurationRequest < Message
4
- MESSAGE_TYPE = "\xbf\x22".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x22").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 3
6
8
 
7
9
  attr_accessor :type
8
10
 
9
11
  def initialize(type = 1)
12
+ super()
10
13
  self.type = type
11
14
  end
12
15
 
13
16
  def parse(data)
14
- self.type = data == "\x02\x00\x00" ? 1 : 2
17
+ self.type = case data
18
+ when "\x02\x00\x00" then 1
19
+ when "\x00\x00\x01" then 2
20
+ when "\x01\x00\x00" then 3
21
+ else 0
22
+ end
15
23
  end
16
24
 
25
+ def serialize
26
+ data = case type
27
+ when 1 then "\x02\x00\x00"
28
+ when 2 then "\x00\x00\x01"
29
+ when 3 then "\x01\x00\x00"
30
+ else "\x00\x00\x00"
31
+ end
32
+ super(data)
33
+ end
17
34
 
35
+ def inspect
36
+ "#<BWA::Messages::ControlConfigurationRequest #{type}>"
37
+ end
18
38
  end
19
39
  end
20
40
  end
@@ -1,39 +1,67 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class FilterCycles < Message
4
- attr_reader :filter1_hour, :filter1_minute, :filter1_duration_hours, :filter1_duration_minutes,
5
- :filter2_enabled,
6
- :filter2_hour, :filter2_minute, :filter2_duration_hours, :filter2_duration_minutes
6
+ attr_accessor :cycle1_start_hour, :cycle1_start_minute, :cycle1_duration,
7
+ :cycle2_enabled, :cycle2_start_hour, :cycle2_start_minute, :cycle2_duration
8
+ alias_method :cycle2_enabled?, :cycle2_enabled
7
9
 
8
- MESSAGE_TYPE = "\xbf\x23".force_encoding(Encoding::ASCII_8BIT)
10
+ MESSAGE_TYPE = (+"\xbf\x23").force_encoding(Encoding::ASCII_8BIT)
9
11
  MESSAGE_LENGTH = 8
10
12
 
11
13
  def parse(data)
12
- @filter1_hour = data[0].ord
13
- @filter1_minute = data[1].ord
14
- @filter1_duration_hours = data[2].ord
15
- @filter1_duration_minutes = data[3].ord
16
-
17
- f2_hour = data[4].ord
18
- @filter2_enabled = !!(f2_hour & 0x80 == 0x80)
19
- @filter2_hour = f2_hour & 0x7f
20
- @filter2_minute = data[5].ord
21
- @filter2_duration_hours = data[6].ord
22
- @filter2_duration_minutes = data[7].ord
14
+ self.cycle1_start_hour = data[0].ord
15
+ self.cycle1_start_minute = data[1].ord
16
+ hours = data[2].ord
17
+ minutes = data[3].ord
18
+ self.cycle1_duration = (hours * 60) + minutes
19
+
20
+ c2_hour = data[4].ord
21
+ self.cycle2_enabled = !!(c2_hour & 0x80 == 0x80)
22
+ self.cycle2_start_hour = c2_hour & 0x7f
23
+ self.cycle2_start_minute = data[5].ord
24
+ hours = data[6].ord
25
+ minutes = data[7].ord
26
+ self.cycle2_duration = (hours * 60) + minutes
27
+ end
28
+
29
+ def serialize
30
+ data = cycle1_start_hour.chr
31
+ data += cycle1_start_minute.chr
32
+ data += (cycle1_duration / 60).chr
33
+ data += (cycle1_duration % 60).chr
34
+
35
+ # The cycle2 start hour is merged with the cycle2 enable.
36
+ # The high order bit of the byte is a flag to indicate this so we have
37
+ # to do a bit of different processing to set that.
38
+ # Get the filter 2 start hour
39
+ start_hour = cycle2_start_hour
40
+
41
+ # Check to see if we want filter 2 enabled (either because it changed or from the current configuration)
42
+ start_hour |= 0x80 if cycle2_enabled
43
+
44
+ data += start_hour.chr
45
+
46
+ data += cycle2_start_minute.chr
47
+ data += (cycle2_duration / 60).chr
48
+ data += (cycle2_duration % 60).chr
49
+
50
+ super(data)
23
51
  end
24
52
 
25
53
  def inspect
26
- result = "#<BWA::Messages::FilterCycles "
54
+ result = +"#<BWA::Messages::FilterCycles "
27
55
 
28
- result << "filter1 "
29
- result << self.class.format_duration(filter1_duration_hours, filter1_duration_minutes)
56
+ result << "cycle1 "
57
+ result << self.class.format_duration(cycle1_duration)
30
58
  result << "@"
31
- result << self.class.format_time(filter1_hour, filter1_minute)
59
+ result << self.class.format_time(cycle1_start_hour, cycle1_start_minute)
32
60
 
33
- result << " filter2(#{@filter2_enabled ? 'enabled' : 'disabled'}) "
34
- result << self.class.format_duration(filter2_duration_hours, filter2_duration_minutes)
61
+ result << " cycle2(#{@cycle2_enabled ? "enabled" : "disabled"}) "
62
+ result << self.class.format_duration(cycle2_duration)
35
63
  result << "@"
36
- result << self.class.format_time(filter2_hour, filter2_minute)
64
+ result << self.class.format_time(cycle2_start_hour, cycle2_start_minute)
37
65
 
38
66
  result << ">"
39
67
  end
@@ -1,8 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class Ready < Message
4
- MESSAGE_TYPE = "\xbf\06".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\06").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 0
8
+
9
+ def inspect
10
+ "#<BWA::Messages::Ready>"
11
+ end
6
12
  end
7
13
  end
8
14
  end
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
- class SetTemperature < Message
4
- MESSAGE_TYPE = "\xbf\x20".force_encoding(Encoding::ASCII_8BIT)
5
+ class SetTargetTemperature < Message
6
+ MESSAGE_TYPE = (+"\xbf\x20").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 1
6
8
 
7
9
  attr_accessor :temperature
8
10
 
9
11
  def initialize(temperature = nil)
12
+ super()
10
13
  self.temperature = temperature
11
14
  end
12
15
 
@@ -19,7 +22,7 @@ module BWA
19
22
  end
20
23
 
21
24
  def inspect
22
- "#<BWA::Messages::SetTemperature #{temperature}º>"
25
+ "#<BWA::Messages::SetTargetTemperature #{temperature}°>"
23
26
  end
24
27
  end
25
28
  end
@@ -1,17 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class SetTemperatureScale < Message
4
- MESSAGE_TYPE = "\xbf\x27".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x27").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
6
8
 
7
9
  attr_accessor :scale
8
10
 
9
11
  def initialize(scale = nil)
12
+ super()
10
13
  self.scale = scale
11
14
  end
12
15
 
13
16
  def parse(data)
14
- self.scale = data[1].ord == 0x00 ? :fahrenheit : :celsius
17
+ self.scale = data[1].ord.zero? ? :fahrenheit : :celsius
15
18
  end
16
19
 
17
20
  def serialize
@@ -21,7 +24,7 @@ module BWA
21
24
  end
22
25
 
23
26
  def inspect
24
- "#<BWA::Messages::SetTemperatureScale º#{scale.to_s[0].upcase}>"
27
+ "#<BWA::Messages::SetTemperatureScale °#{scale.to_s[0].upcase}>"
25
28
  end
26
29
  end
27
30
  end
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class SetTime < Message
4
- MESSAGE_TYPE = "\xbf\x21".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x21").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
6
8
 
7
9
  attr_accessor :hour, :minute, :twenty_four_hour_time
8
10
 
9
11
  def initialize(hour = nil, minute = nil, twenty_four_hour_time = nil)
12
+ super()
10
13
  self.hour, self.minute, self.twenty_four_hour_time = hour, minute, twenty_four_hour_time
11
14
  end
12
15
 
@@ -23,7 +26,7 @@ module BWA
23
26
  end
24
27
 
25
28
  def inspect
26
- "#<BWA::Messages::SetTime #{Status.format_time(hour, minute, twenty_four_hour_time)}>"
29
+ "#<BWA::Messages::SetTime #{Status.format_time(hour, minute, twenty_four_hour_time: twenty_four_hour_time)}>"
27
30
  end
28
31
  end
29
32
  end
@@ -1,58 +1,72 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class Status < Message
4
- attr_accessor :priming,
6
+ attr_accessor :hold,
7
+ :priming,
5
8
  :heating_mode,
6
- :temperature_scale,
7
9
  :twenty_four_hour_time,
8
- :filter,
10
+ :filter_cycles,
9
11
  :heating,
10
12
  :temperature_range,
11
13
  :hour, :minute,
12
- :circ_pump,
14
+ :circulation_pump,
13
15
  :blower,
14
16
  :pumps,
15
17
  :lights,
16
18
  :mister,
17
19
  :aux,
18
- :current_temperature, :set_temperature
20
+ :current_temperature,
21
+ :target_temperature
22
+ attr_reader :temperature_scale
23
+ alias_method :hold?, :hold
24
+ alias_method :priming?, :priming
25
+ alias_method :twenty_four_hour_time?, :twenty_four_hour_time
26
+ alias_method :heating?, :heating
19
27
 
20
- MESSAGE_TYPE = "\xaf\x13".force_encoding(Encoding::ASCII_8BIT)
28
+ MESSAGE_TYPE = (+"\xaf\x13").force_encoding(Encoding::ASCII_8BIT)
21
29
  # additional features have been added in later versions
22
- MESSAGE_LENGTH = 24..32
30
+ MESSAGE_LENGTH = (24..32).freeze
23
31
 
24
32
  def initialize
33
+ super
34
+
25
35
  @src = 0xff
36
+ self.hold = false
26
37
  self.priming = false
27
38
  self.heating_mode = :ready
28
39
  @temperature_scale = :fahrenheit
29
40
  self.twenty_four_hour_time = false
30
- self.filter = Array.new(2, false)
41
+ self.filter_cycles = Array.new(2, false)
31
42
  self.heating = false
32
43
  self.temperature_range = :high
33
44
  self.hour = self.minute = 0
34
- self.circ_pump = false
45
+ self.circulation_pump = false
35
46
  self.pumps = Array.new(6, 0)
36
47
  self.lights = Array.new(2, false)
37
48
  self.mister = false
38
49
  self.aux = Array.new(2, false)
39
- self.set_temperature = 100
50
+ self.target_temperature = 100
40
51
  end
41
52
 
42
53
  def parse(data)
54
+ flags = data[0].ord
55
+ self.hold = (flags & 0x05 != 0)
56
+
43
57
  flags = data[1].ord
44
58
  self.priming = (flags & 0x01 == 0x01)
45
59
  flags = data[5].ord
46
60
  self.heating_mode = case flags & 0x03
47
- when 0x00; :ready
48
- when 0x01; :rest
49
- when 0x02; :ready_in_rest
61
+ when 0x00 then :ready
62
+ when 0x01 then :rest
63
+ when 0x02 then :ready_in_rest
50
64
  end
51
65
  flags = data[9].ord
52
66
  self.temperature_scale = (flags & 0x01 == 0x01) ? :celsius : :fahrenheit
53
67
  self.twenty_four_hour_time = (flags & 0x02 == 0x02)
54
- filter[0] = (flags & 0x04 != 0)
55
- filter[1] = (flags & 0x08 != 0)
68
+ filter_cycles[0] = (flags & 0x04 != 0)
69
+ filter_cycles[1] = (flags & 0x08 != 0)
56
70
  flags = data[10].ord
57
71
  self.heating = (flags & 0x30 != 0)
58
72
  self.temperature_range = (flags & 0x04 == 0x04) ? :high : :low
@@ -66,8 +80,8 @@ module BWA
66
80
  pumps[5] = (flags >> 2) & 0x03
67
81
 
68
82
  flags = data[13].ord
69
- self.circ_pump = (flags & 0x02 == 0x02)
70
- self.blower = (flags & 0x0C == 0x0C)
83
+ self.circulation_pump = (flags & 0x02 == 0x02)
84
+ self.blower = (flags >> 2) & 0x03
71
85
  flags = data[14].ord
72
86
  lights[0] = (flags & 0x03 != 0)
73
87
  lights[1] = ((flags >> 2) & 0x03 != 0)
@@ -78,22 +92,22 @@ module BWA
78
92
  self.hour = data[3].ord
79
93
  self.minute = data[4].ord
80
94
  self.current_temperature = data[2].ord
81
- self.current_temperature = nil if self.current_temperature == 0xff
82
- self.set_temperature = data[20].ord
83
- if temperature_scale == :celsius
84
- self.current_temperature /= 2.0 if self.current_temperature
85
- self.set_temperature /= 2.0 if self.set_temperature
86
- end
95
+ self.current_temperature = nil if current_temperature == 0xff
96
+ self.target_temperature = data[20].ord
97
+
98
+ return unless temperature_scale == :celsius
99
+
100
+ self.current_temperature /= 2.0 if current_temperature
101
+ self.target_temperature /= 2.0 if target_temperature
87
102
  end
88
103
 
89
104
  def serialize
90
105
  data = "\x00" * 24
106
+ data[0] = (hold ? 0x05 : 0x00).chr
91
107
  data[1] = (priming ? 0x01 : 0x00).chr
92
- data[5] = (case heating_mode
93
- when :ready; 0x00
94
- when :rest; 0x01
95
- when :ready_in_rest; 0x02
96
- end).chr
108
+ data[5] = { ready: 0x00,
109
+ rest: 0x01,
110
+ ready_in_rest: 0x02 }[heating_mode].chr
97
111
  flags = 0
98
112
  flags |= 0x01 if temperature_scale == :celsius
99
113
  flags |= 0x02 if twenty_four_hour_time
@@ -107,7 +121,7 @@ module BWA
107
121
  flags |= pump2 * 4
108
122
  data[11] = flags.chr
109
123
  flags = 0
110
- flags |= 0x02 if circ_pump
124
+ flags |= 0x02 if circulation_pump
111
125
  data[13] = flags.chr
112
126
  flags = 0
113
127
  flags |= 0x03 if light1
@@ -116,10 +130,10 @@ module BWA
116
130
  data[4] = minute.chr
117
131
  if temperature_scale == :celsius
118
132
  data[2] = (current_temperature ? (current_temperature * 2).to_i : 0xff).chr
119
- data[20] = (set_temperature * 2).to_i.chr
133
+ data[20] = (target_temperature * 2).to_i.chr
120
134
  else
121
- data[2] = (current_temperature&.to_i || 0xff).chr
122
- data[20] = set_temperature.to_i.chr
135
+ data[2] = (current_temperature.to_i || 0xff).chr
136
+ data[20] = target_temperature.to_i.chr
123
137
  end
124
138
 
125
139
  super(data)
@@ -129,46 +143,46 @@ module BWA
129
143
  if value != @temperature_scale
130
144
  if value == :fahrenheit
131
145
  if current_temperature
132
- self.current_temperature *= 9.0/5
146
+ self.current_temperature *= 9.0 / 5
133
147
  self.current_temperature += 32
134
148
  self.current_temperature = current_temperature.round
135
149
  end
136
- self.set_temperature *= 9.0/5
137
- self.set_temperature += 32
138
- self.set_temperature = set_temperature.round
150
+ self.target_temperature *= 9.0 / 5
151
+ self.target_temperature += 32
152
+ self.target_temperature = target_temperature.round
139
153
  else
140
154
  if current_temperature
141
155
  self.current_temperature -= 32
142
- self.current_temperature *= 5.0/90
156
+ self.current_temperature *= 5.0 / 90
143
157
  self.current_temperature = (current_temperature * 2).round / 2.0
144
158
  end
145
- self.set_temperature -= 32
146
- self.set_temperature *= 5.0/9
147
- self.set_temperature = (set_temperature * 2).round / 2.0
159
+ self.target_temperature -= 32
160
+ self.target_temperature *= 5.0 / 9
161
+ self.target_temperature = (target_temperature * 2).round / 2.0
148
162
  end
149
163
  end
150
164
  @temperature_scale = value
151
165
  end
152
166
 
153
167
  def inspect
154
- result = "#<BWA::Messages::Status "
155
168
  items = []
156
169
 
170
+ items << "hold" if hold
157
171
  items << "priming" if priming
158
- items << self.class.format_time(hour, minute, twenty_four_hour_time)
159
- items << "#{current_temperature || '--'}/#{set_temperature}º#{temperature_scale.to_s[0].upcase}"
160
- items << "filter=#{filter.inspect}"
172
+ items << self.class.format_time(hour, minute, twenty_four_hour_time: twenty_four_hour_time)
173
+ items << "#{current_temperature || "--"}/#{target_temperature}°#{temperature_scale.to_s[0].upcase}"
174
+ items << "filter_cycles=#{filter_cycles.inspect}"
161
175
  items << heating_mode
162
176
  items << "heating" if heating
163
177
  items << temperature_range
164
- items << "circ_pump" if circ_pump
165
- items << "blower" if blower
178
+ items << "circulation_pump" if circulation_pump
179
+ items << "blower=#{blower}"
166
180
  items << "pumps=#{pumps.inspect}"
167
181
  items << "lights=#{lights.inspect}"
168
182
  items << "aux=#{aux.inspect}"
169
183
  items << "mister" if mister
170
184
 
171
- result << items.join(' ') << ">"
185
+ "#<BWA::Messages::Status #{items.join(" ")}>"
172
186
  end
173
187
  end
174
188
  end
@@ -1,36 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ToggleItem < Message
4
- MESSAGE_TYPE = "\xbf\x11".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x11").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
8
+ ITEMS = {
9
+ normal_operation: 0x01,
10
+ clear_notification: 0x03,
11
+ pump1: 0x04,
12
+ pump2: 0x05,
13
+ pump3: 0x06,
14
+ pump4: 0x07,
15
+ pump5: 0x08,
16
+ pump6: 0x09,
17
+ blower: 0x0c,
18
+ mister: 0x0e,
19
+ light1: 0x11,
20
+ light2: 0x12,
21
+ aux1: 0x16,
22
+ aux2: 0x17,
23
+ hold: 0x3c,
24
+ temperature_range: 0x50,
25
+ heating_mode: 0x51
26
+ }.freeze
6
27
 
7
28
  attr_accessor :item
8
29
 
9
30
  def initialize(item = nil)
31
+ super()
10
32
  self.item = item
11
33
  end
12
34
 
13
35
  def parse(data)
14
- self.item = case data[0].ord
15
- when 0x04; :pump1
16
- when 0x05; :pump2
17
- when 0x11; :light1
18
- when 0x3c; :hold
19
- when 0x50; :temperature_range
20
- when 0x51; :heating_mode
21
- else; data[0].ord
22
- end
36
+ self.item = ITEMS.invert[data[0].ord] || data[0].ord
23
37
  end
24
38
 
25
39
  def serialize
26
- data = "\x00\x00"
27
- data[0] = (case setting
28
- when :pump1; 0x04
29
- when :pump2; 0x05
30
- when :light1; 0x11
31
- when :temperature_range; 0x50
32
- when :heating_mode; 0x51
33
- end).chr
40
+ data = +"\x00\x00"
41
+ data[0] = if item.is_a? Integer
42
+ item.chr
43
+ else
44
+ ITEMS[item].chr
45
+ end
34
46
  super(data)
35
47
  end
36
48