waterfurnace_aurora 0.4.1 → 0.4.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/aurora_mqtt_bridge +24 -8
- data/lib/aurora/abc_client.rb +24 -11
- data/lib/aurora/blower.rb +99 -0
- data/lib/aurora/component.rb +17 -0
- data/lib/aurora/registers.rb +0 -7
- data/lib/aurora/thermostat.rb +3 -5
- data/lib/aurora/version.rb +1 -1
- data/lib/aurora.rb +0 -2
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0e43967c61aa8b5c445ec2a6024e9da5ba8cc94205cc853ff07fed0374827dc3
|
|
4
|
+
data.tar.gz: 875004f5c9835f25f7c18d7e7e7d632f0877db6ac7a3fc8215fa28b68c5ce2b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f5d48422906f8dbac8aa83645ab3f46a9481f96d7e4720b75772dfbf2be2cf8456753f5d364a4cde3ad69fb778fd3ba29f23249ec08010806339039264bcbefc
|
|
7
|
+
data.tar.gz: 3a78e33d93f256e0153ae98b7f8df92da2f3138c246e1b5ef47550f4759d5502725a1d52acb6fe3f084b8a158962538ed73a3c1acf072cc151bf18ad9db2f75d
|
data/exe/aurora_mqtt_bridge
CHANGED
|
@@ -78,6 +78,10 @@ class MQTTBridge
|
|
|
78
78
|
property.value = @abc.public_send(property.id.tr("-", "_"))
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
+
@blower.each do |property|
|
|
82
|
+
property.value = @abc.blower.public_send(property.id.tr("-", "_"))
|
|
83
|
+
end
|
|
84
|
+
|
|
81
85
|
if @abc.dhw?
|
|
82
86
|
@dhw["enabled"].value = @abc.dhw_enabled
|
|
83
87
|
@dhw["water-temperature"].value = @abc.dhw_water_temperature
|
|
@@ -113,7 +117,6 @@ class MQTTBridge
|
|
|
113
117
|
unit: "ºF")
|
|
114
118
|
node.property("entering-water-temperature", "Entering Water Temperature", :float,
|
|
115
119
|
@abc.entering_water_temperature, unit: "ºF")
|
|
116
|
-
node.property("fan-speed", "Fan Speed", :integer, @abc.fan_speed, format: 0..11)
|
|
117
120
|
node.property("leaving-air-temperature", "Leaving Air Temperature", :float, @abc.leaving_air_temperature,
|
|
118
121
|
unit: "ºF")
|
|
119
122
|
node.property("leaving-water-temperature", "Leaving Water Temperature", :float, @abc.leaving_water_temperature,
|
|
@@ -126,19 +129,32 @@ class MQTTBridge
|
|
|
126
129
|
node.property("waterflow", "Waterflow", :float, @abc.waterflow, unit: "gpm")
|
|
127
130
|
node.property("fp1", "FP1 Sensor", :float, @abc.fp1, unit: "ºF")
|
|
128
131
|
node.property("fp2", "FP2 Sensor", :float, @abc.fp2, unit: "ºF")
|
|
129
|
-
%i[compressor
|
|
132
|
+
%i[compressor aux_heat loop_pump total].each do |component|
|
|
130
133
|
component = "#{component}_watts"
|
|
131
134
|
node.property(component.tr("_", "-"), component.tr("_", " ").titleize, :integer,
|
|
132
135
|
@abc.public_send(component), unit: "W")
|
|
133
136
|
end
|
|
137
|
+
end
|
|
134
138
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
139
|
+
@blower = @homie.node("blower", "Blower", @abc.blower.type) do |node|
|
|
140
|
+
if @abc.blower.respond_to?(:running)
|
|
141
|
+
node.property("running", "Blower is running", :boolean, @abc.blower.running?)
|
|
142
|
+
else
|
|
143
|
+
node.property("speed", "Current blower speed", :integer, @abc.blower.speed, format: @abc.blower.speed_range)
|
|
138
144
|
end
|
|
139
|
-
node.property("
|
|
140
|
-
|
|
141
|
-
|
|
145
|
+
node.property("watts", "Energy Usage", :integer, @abc.blower.watts, unit: "W") if @abc.energy_monitoring?
|
|
146
|
+
if @abc.blower.is_a?(Aurora::Blower::ECM)
|
|
147
|
+
%w[blower-only low-compressor high-compressor aux-heat].each do |setting|
|
|
148
|
+
field = "#{setting.tr('-', '_')}_speed"
|
|
149
|
+
node.property("#{setting}-speed", "#{setting.tr('-', ' ').titleize} Speed", :integer,
|
|
150
|
+
@abc.blower.public_send(field), format: 1..12) do |value, property|
|
|
151
|
+
@mutex.synchronize { property.value = @abc.blower.public_send("#{field}=", value) }
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
if @abc.iz2?
|
|
155
|
+
node.property("iz2-desired-speed", "IZ2 Desired Speed", :integer, @abc.blower.iz2_desired_speed,
|
|
156
|
+
format: 0..100, unit: "%")
|
|
157
|
+
end
|
|
142
158
|
end
|
|
143
159
|
end
|
|
144
160
|
|
data/lib/aurora/abc_client.rb
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
require "yaml"
|
|
4
4
|
require "uri"
|
|
5
5
|
|
|
6
|
+
require "aurora/blower"
|
|
7
|
+
require "aurora/iz2_zone"
|
|
8
|
+
require "aurora/thermostat"
|
|
9
|
+
|
|
6
10
|
module Aurora
|
|
7
11
|
class ABCClient
|
|
8
12
|
class << self
|
|
@@ -35,9 +39,9 @@ module Aurora
|
|
|
35
39
|
attr_reader :modbus_slave,
|
|
36
40
|
:serial_number,
|
|
37
41
|
:zones,
|
|
42
|
+
:blower,
|
|
38
43
|
:faults,
|
|
39
44
|
:current_mode,
|
|
40
|
-
:fan_speed,
|
|
41
45
|
:dhw_enabled,
|
|
42
46
|
:dhw_setpoint,
|
|
43
47
|
:entering_air_temperature,
|
|
@@ -51,10 +55,7 @@ module Aurora
|
|
|
51
55
|
:outdoor_temperature,
|
|
52
56
|
:fp1,
|
|
53
57
|
:fp2,
|
|
54
|
-
:blower_only_ecm_speed,
|
|
55
|
-
:aux_heat_ecm_speed,
|
|
56
58
|
:compressor_watts,
|
|
57
|
-
:blower_watts,
|
|
58
59
|
:aux_heat_watts,
|
|
59
60
|
:loop_pump_watts,
|
|
60
61
|
:total_watts
|
|
@@ -63,10 +64,18 @@ module Aurora
|
|
|
63
64
|
@modbus_slave = self.class.open_modbus_slave(uri)
|
|
64
65
|
@modbus_slave.read_retry_timeout = 15
|
|
65
66
|
@modbus_slave.read_retries = 2
|
|
66
|
-
|
|
67
|
+
raw_registers = @modbus_slave.holding_registers[88..91, 105...110, 404, 412, 1114]
|
|
68
|
+
registers = Aurora.transform_registers(raw_registers.dup)
|
|
67
69
|
@program = registers[88]
|
|
68
70
|
@serial_number = registers[105]
|
|
69
71
|
@dhw_water_temperature = registers[1114]
|
|
72
|
+
@energy_monitor = raw_registers[412]
|
|
73
|
+
|
|
74
|
+
@blower = case raw_registers[404]
|
|
75
|
+
when 1, 2 then Blower::ECM.new(self, registers[404])
|
|
76
|
+
when 3 then Blower::FiveSpeed.new(self, registers[404])
|
|
77
|
+
else; Blower::PSC.new(self, registers[404])
|
|
78
|
+
end
|
|
70
79
|
|
|
71
80
|
@zones = if iz2?
|
|
72
81
|
iz2_zone_count = @modbus_slave.holding_registers[483]
|
|
@@ -112,9 +121,10 @@ module Aurora
|
|
|
112
121
|
end
|
|
113
122
|
|
|
114
123
|
def refresh
|
|
115
|
-
registers_to_read = [6, 19..20, 25, 30,
|
|
124
|
+
registers_to_read = [6, 19..20, 25, 30, 344, 740..741, 900, 1110..1111, 1114, 1117, 1147..1153, 1165,
|
|
116
125
|
31_003]
|
|
117
126
|
registers_to_read << (400..401) if dhw?
|
|
127
|
+
registers_to_read.concat(blower.registers_to_read)
|
|
118
128
|
registers_to_read.concat([362, 3001]) if vs_drive?
|
|
119
129
|
|
|
120
130
|
if zones.first.is_a?(IZ2Zone)
|
|
@@ -138,7 +148,6 @@ module Aurora
|
|
|
138
148
|
|
|
139
149
|
outputs = registers[30]
|
|
140
150
|
|
|
141
|
-
@fan_speed = registers[344]
|
|
142
151
|
@dhw_enabled = registers[400]
|
|
143
152
|
@dhw_setpoint = registers[401]
|
|
144
153
|
@entering_air_temperature = registers[740]
|
|
@@ -164,10 +173,7 @@ module Aurora
|
|
|
164
173
|
@error = registers[25] & 0x7fff
|
|
165
174
|
@derated = (41..46).include?(@error)
|
|
166
175
|
@safe_mode = [47, 48, 49, 72, 74].include?(@error)
|
|
167
|
-
@blower_only_ecm_speed = registers[340]
|
|
168
|
-
@aux_heat_ecm_speed = registers[347]
|
|
169
176
|
@compressor_watts = registers[1147]
|
|
170
|
-
@blower_watts = registers[1149]
|
|
171
177
|
@aux_heat_watts = registers[1151]
|
|
172
178
|
@loop_pump_watts = registers[1165]
|
|
173
179
|
@total_watts = registers[1153]
|
|
@@ -190,6 +196,8 @@ module Aurora
|
|
|
190
196
|
:standby
|
|
191
197
|
end
|
|
192
198
|
|
|
199
|
+
blower.refresh(registers)
|
|
200
|
+
|
|
193
201
|
zones.each do |z|
|
|
194
202
|
z.refresh(registers)
|
|
195
203
|
end
|
|
@@ -277,6 +285,10 @@ module Aurora
|
|
|
277
285
|
@modbus_slave.holding_registers[323] = pump_speed == :with_compressor ? 0x7fff : pump_speed
|
|
278
286
|
end
|
|
279
287
|
|
|
288
|
+
def energy_monitoring?
|
|
289
|
+
@energy_monitor == 2
|
|
290
|
+
end
|
|
291
|
+
|
|
280
292
|
def vs_drive?
|
|
281
293
|
@program == "ABCVSP"
|
|
282
294
|
end
|
|
@@ -289,7 +301,8 @@ module Aurora
|
|
|
289
301
|
{ thermostat: 800, axb: 806, iz2: 812, aoc: 815, moc: 818, eev2: 824 }.each do |(component, register)|
|
|
290
302
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
291
303
|
def #{component}?
|
|
292
|
-
|
|
304
|
+
return @#{component} if instance_variable_defined?(:@#{component})
|
|
305
|
+
@#{component} = @modbus_slave.holding_registers[#{register}] != 3
|
|
293
306
|
end
|
|
294
307
|
|
|
295
308
|
def add_#{component}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "aurora/component"
|
|
4
|
+
|
|
5
|
+
module Aurora
|
|
6
|
+
module Blower
|
|
7
|
+
class GenericBlower < Component
|
|
8
|
+
attr_reader :type, :watts
|
|
9
|
+
|
|
10
|
+
def initialize(abc, type)
|
|
11
|
+
super(abc)
|
|
12
|
+
@type = type
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def registers_to_read
|
|
16
|
+
if abc.energy_monitoring?
|
|
17
|
+
[1148..1149]
|
|
18
|
+
else
|
|
19
|
+
[]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def refresh(registers)
|
|
24
|
+
@watts = registers[1148] if abc.energy_monitoring?
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class PSC < GenericBlower
|
|
29
|
+
attr_reader :running
|
|
30
|
+
alias running? running
|
|
31
|
+
|
|
32
|
+
def refresh(registers)
|
|
33
|
+
@running = registers[30].include?(:g)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class FiveSpeed < GenericBlower
|
|
38
|
+
attr_reader :speed
|
|
39
|
+
|
|
40
|
+
def speed_range
|
|
41
|
+
0..4
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def refresh(registers)
|
|
45
|
+
outputs = registers[30]
|
|
46
|
+
@speed = if outputs.include?(:eh1)
|
|
47
|
+
4
|
|
48
|
+
elsif outputs.include?(:cc2)
|
|
49
|
+
3
|
|
50
|
+
elsif outputs.include?(:cc)
|
|
51
|
+
2
|
|
52
|
+
elsif outputs.include?(:g)
|
|
53
|
+
1
|
|
54
|
+
else
|
|
55
|
+
0
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class ECM < GenericBlower
|
|
61
|
+
attr_reader :speed, :blower_only_speed, :low_compressor_speed, :high_compressor_speed, :aux_heat_speed,
|
|
62
|
+
:iz2_desired_speed
|
|
63
|
+
|
|
64
|
+
def speed_range
|
|
65
|
+
0..12
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def registers_to_read
|
|
69
|
+
result = super + [340..342, 344, 347]
|
|
70
|
+
result << 565 if abc.iz2?
|
|
71
|
+
result
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def refresh(registers)
|
|
75
|
+
super
|
|
76
|
+
|
|
77
|
+
@speed = registers[344]
|
|
78
|
+
@blower_only_speed = registers[340]
|
|
79
|
+
@low_compressor_speed = registers[341]
|
|
80
|
+
@high_compressor_speed = registers[342]
|
|
81
|
+
@aux_heat_speed = registers[347]
|
|
82
|
+
@iz2_desired_speed = registers[565] if abc.iz2?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
{ blower_only: 340,
|
|
86
|
+
low_compressor: 341,
|
|
87
|
+
high_compressor: 342,
|
|
88
|
+
aux_heat: 347 }.each do |(setting, register)|
|
|
89
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
90
|
+
def #{setting}_speed=(value)
|
|
91
|
+
raise ArgumentError unless (1..12).include?(value)
|
|
92
|
+
|
|
93
|
+
holding_registers[#{register}] = value
|
|
94
|
+
end
|
|
95
|
+
RUBY
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
data/lib/aurora/registers.rb
CHANGED
data/lib/aurora/thermostat.rb
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "aurora/component"
|
|
4
|
+
|
|
3
5
|
module Aurora
|
|
4
|
-
class Thermostat
|
|
6
|
+
class Thermostat < Component
|
|
5
7
|
attr_reader :target_mode,
|
|
6
8
|
:target_fan_mode,
|
|
7
9
|
:ambient_temperature,
|
|
8
10
|
:cooling_target_temperature,
|
|
9
11
|
:heating_target_temperature
|
|
10
12
|
|
|
11
|
-
def initialize(abc)
|
|
12
|
-
@abc = abc
|
|
13
|
-
end
|
|
14
|
-
|
|
15
13
|
def refresh(registers)
|
|
16
14
|
@ambient_temperature = registers[502]
|
|
17
15
|
@heating_target_temperature = registers[746]
|
data/lib/aurora/version.rb
CHANGED
data/lib/aurora.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: waterfurnace_aurora
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Cody Cutrer
|
|
@@ -134,6 +134,8 @@ files:
|
|
|
134
134
|
- exe/web_aid_tool
|
|
135
135
|
- lib/aurora.rb
|
|
136
136
|
- lib/aurora/abc_client.rb
|
|
137
|
+
- lib/aurora/blower.rb
|
|
138
|
+
- lib/aurora/component.rb
|
|
137
139
|
- lib/aurora/core_ext/string.rb
|
|
138
140
|
- lib/aurora/iz2_zone.rb
|
|
139
141
|
- lib/aurora/mock_abc.rb
|