waterfurnace_aurora 0.3.12 → 0.3.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdebb583f3d84e8f1c050e21ac205d29bba5d29d91cb14de2c106a5de26917cd
4
- data.tar.gz: 64f7a0b749c050e0041e34d6682f1428320b8bc3762532c62b825f43ff4c40b7
3
+ metadata.gz: a92c5ae13a08cf060e3c7f23613cc1302e20af0bc4bc7c77c610936bea48c2b5
4
+ data.tar.gz: 914c7c6371755e06524e063b5eb6820ca63f67844713d4d396cd08559fa62cc6
5
5
  SHA512:
6
- metadata.gz: 8ec3c74f737e3d38fd593831246e1153ab2ec5eef39a488aaac43c2c22bf5df92e9e613157e1b101c6af2008d451f3513b3e47a6badae0a01b966d4ed87bc3ee
7
- data.tar.gz: 3973f340af41d8645de59291245d599a9d7993691249ad9d0b4b7b7582a11ee5d5f95d8c11493ba1be8d9f7611e755e33e6778114bb14a5197eacb9bac16f119
6
+ metadata.gz: 384657c10727cf0a955cf4a4db5270d8ee021629e40c0dee65170e22206e3b0c21c85da2beade4f02143cdd5ff8d5631d5429c6a2957b96d933a3476cf83078c
7
+ data.tar.gz: 6ea98c0cd77e83158d8313a851b0fa155cc6ee7a042aa338abb27c3c57cec543017b1ab97953aedf11d4645fedd5a6423c35b2c4f75fae6c768cfd1d5e47635d
@@ -45,11 +45,14 @@ module Aurora
45
45
  end
46
46
 
47
47
  def query_registers(query)
48
+ implicit = false
48
49
  ranges = query.split(",").map do |addr|
49
50
  case addr
50
51
  when "known"
52
+ implicit = true
51
53
  Aurora::REGISTER_NAMES.keys
52
54
  when "valid"
55
+ implicit = true
53
56
  break Aurora::REGISTER_RANGES
54
57
  when /^(\d+)(?:\.\.|-)(\d+)$/
55
58
  $1.to_i..$2.to_i
@@ -61,12 +64,22 @@ module Aurora
61
64
  registers = {}
62
65
  queries.each do |subquery|
63
66
  registers.merge!(@modbus_slave.read_multiple_holding_registers(*subquery))
67
+ rescue ::ModBus::Errors::IllegalDataAddress
68
+ # maybe this unit doesn't respond to all the addresses we want?
69
+ raise unless implicit
70
+
71
+ # try each query individually
72
+ subquery.each do |subsubquery|
73
+ registers.merge!(@modbus_slave.read_multiple_holding_registers(subsubquery))
74
+ rescue ::ModBus::Errors::IllegalDataAddress
75
+ next
76
+ end
64
77
  end
65
78
  registers
66
79
  end
67
80
 
68
81
  def refresh
69
- registers_to_read = [19..20, 30, 340, 344, 347, 740..741, 900, 1110..1111, 1114, 1117, 1147..1153, 1165,
82
+ registers_to_read = [6, 19..20, 25, 30, 340, 344, 347, 362, 740..741, 900, 1110..1111, 1114, 1147..1153, 1165,
70
83
  3027, 31_003]
71
84
  if zones.first.is_a?(IZ2Zone)
72
85
  zones.each_with_index do |_z, i|
@@ -99,7 +112,10 @@ module Aurora
99
112
  @outdoor_temperature = registers[31_003]
100
113
  @fp1 = registers[19]
101
114
  @fp2 = registers[20]
102
- @locked_out = registers[1117]
115
+ @locked_out = registers[25] & 0x8000
116
+ @error = registers[25] & 0x7fff
117
+ @derated = (41..46).include?(@error)
118
+ @safe_mode = [47, 48, 49, 72, 74].include?(@error)
103
119
  @blower_only_ecm_speed = registers[340]
104
120
  @aux_heat_ecm_speed = registers[347]
105
121
  @compressor_watts = registers[1147]
@@ -111,16 +127,20 @@ module Aurora
111
127
  outputs = registers[30]
112
128
  @current_mode = if outputs.include?(:lockout)
113
129
  :lockout
130
+ elsif registers[362]
131
+ :dehumidify
114
132
  elsif outputs.include?(:cc2)
115
133
  outputs.include?(:rv) ? :c2 : :h2
116
134
  elsif outputs.include?(:cc)
117
135
  outputs.include?(:rv) ? :c1 : :h1
118
136
  elsif outputs.include?(:eh2)
119
- :eh2
137
+ outputs.include?(:rv) ? :eh2 : :emergency
120
138
  elsif outputs.include?(:eh1)
121
- :eh1
139
+ outputs.include?(:rv) ? :eh1 : :emergency
122
140
  elsif outputs.include?(:blower)
123
141
  :blower
142
+ elsif registers[6]
143
+ :waiting
124
144
  else
125
145
  :standby
126
146
  end
@@ -173,6 +193,37 @@ module Aurora
173
193
  @modbus_slave.holding_registers[322] = value
174
194
  end
175
195
 
196
+ def clear_fault_history
197
+ @modbus_slave.holding_registers[47] = 0x5555
198
+ end
199
+
200
+ def manual_operation(mode: :off,
201
+ compressor_speed: 0,
202
+ blower_speed: :with_compressor,
203
+ pump_speed: :with_compressor,
204
+ aux_heat: false)
205
+ raise ArgumentError, "mode must be :off, :heating, or :cooling" unless %i[off heating cooling].include?(mode)
206
+ raise ArgumentError, "compressor speed must be between 0 and 12" unless (0..12).include?(compressor_speed)
207
+
208
+ unless blower_speed == :with_compressor || (0..12).include?(blower_speed)
209
+ raise ArgumentError,
210
+ "blower speed must be :with_compressor or between 0 and 12"
211
+ end
212
+ unless pump_speed == :with_compressor || (0..100).include?(pump_speed)
213
+ raise ArgumentError,
214
+ "pump speed must be :with_compressor or between 0 and 100"
215
+ end
216
+
217
+ value = 0
218
+ value = 0x7fff if mode == :off
219
+ value |= 0x100 if mode == :cooling
220
+ value |= blower_speed == :with_compressor ? 0xf0 : (blower_speed << 4)
221
+ value |= 0x200 if aux_heat
222
+
223
+ @modbus_slave.holding_registers[3002] = value
224
+ @modbus_slave.holding_registers[323] = pump_speed == :with_compressor ? 0x7fff : pump_speed
225
+ end
226
+
176
227
  # config aurora system
177
228
  { thermostat: 800, axb: 806, iz2: 812, aoc: 815, moc: 818, eev2: 824 }.each do |(component, register)|
178
229
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
@@ -59,65 +59,102 @@ module Aurora
59
59
  result
60
60
  end
61
61
 
62
+ def to_int32(registers, idx)
63
+ (registers[idx] << 16) + registers[idx + 1]
64
+ end
65
+
62
66
  def to_string(registers, idx, length)
63
67
  (idx...(idx + length)).map do |i|
68
+ raise ArgumentError, "Missing register #{i} for string starting at #{idx}" unless registers[i]
69
+
64
70
  (registers[i] >> 8).chr + (registers[i] & 0xff).chr
65
71
  end.join.sub(/[ \0]+$/, "")
66
72
  end
67
73
 
68
74
  FAULTS = {
69
- 1 => "Input Flt Limit",
70
- 2 => "High Pressure",
71
- 3 => "Low Pressure",
72
- 4 => "FP2",
73
- 5 => "FP1",
74
- 7 => "Condensate Limit",
75
- 8 => "Over/Under Voltage",
75
+ # ABC/AXB Basic Faults
76
+ 1 => "Input Error", # Tstat input error. Autoreset upon condition removal.
77
+ 2 => "High Pressure", # HP switch has tripped (>600 psi)
78
+ 3 => "Low Pressure", # Low Pressure Switch has tripped (<40 psi for 30 continous sec.)
79
+ 4 => "Freeze Detect FP2", # Freeze protection sensor has tripped (<15 or 30 degF for 30 continuous sec.)
80
+ 5 => "Freeze Detect FP1", # Freeze protection sensor has tripped (<15 or 30 degF for 30 continuous sec.)
81
+ 7 => "Condensate Overflow", # Condensate switch has shown continuity for 30 continuous sec.
82
+ 8 => "Over/Under Voltage", # Instantaneous Voltage is out of range. **Controls shut down until resolved.
76
83
  9 => "AirF/RPM",
77
- 10 => "CompMon",
78
- 11 => "FP1/2 Snr Limit",
79
- 12 => "RefPerfrm Limit",
80
- 13 => "NCrtAxbSr Limit",
81
- 14 => "CrtAxbSnr Limit",
82
- 15 => "HW Limit",
83
- 16 => "VSPumpFlt Limit",
84
- 17 => "CommTStat Limit",
85
- 18 => "NCritComm Limit",
86
- 19 => "Crit Comm Limit",
87
- 21 => "Low Loop Pressure",
88
- 22 => "ComEcmErr Limit",
89
- 23 => "HAGenAlrm1 Limit",
90
- 24 => "HAGenAlrm2 Limit",
91
- 25 => "AxbEevErr Limit",
92
- 41 => "High Drive Temp Limit",
93
- 42 => "High Discharge Temp Limit",
94
- 43 => "Low Suction Pressure Limit",
95
- 44 => "Low Con Pressure Limit",
96
- 45 => "High Con Pressure Limit",
97
- 46 => "Out Power Limit",
98
- 47 => "EevIDComm Limit",
99
- 48 => "EevODComm Limit",
100
- 49 => "CabTmpSnr Limit",
101
- 51 => "Discharge Temp Sensor Limit",
102
- 52 => "Suction Presure Sensor Limit",
103
- 53 => "Con Pressure Sensor Limit",
104
- 54 => "Low Supply Voltage Limit",
105
- 55 => "OutEnvelp Limit",
106
- 56 => "Suction Pressure Sensor Limit",
107
- 57 => "Drive Over/Under Voltage Limit",
108
- 58 => "High Drive Temp Limit",
109
- 59 => "Internal Drive Error Limit",
110
- 61 => "MultSafm",
111
- 71 => "ChrgLoss",
112
- 72 => "Suction Temp Sensor Limit",
113
- 73 => "Leaving Air Temp Sensor Limit",
114
- 74 => "Maximum Operating Pressure Limit",
115
- 75 => "Charge Loss",
116
- 76 => "Suction Temperatur Sensor Limit",
117
- 77 => "Leaving Air Temperature Sensor Limit",
118
- 78 => "Maximum Operating Pressure Limit"
84
+ 10 => "Compressor Monitor", # Open Crkt, Run, Start or welded cont
85
+ 11 => "FP1/2 Sensor Error",
86
+ 12 => "RefPerfrm Error",
87
+ # Miscellaneous
88
+ 13 => "Non-Critical AXB Sensor Error", # Any Other Sensor Error
89
+ 14 => "Critical AXB Sensor Error", # Sensor Err for EEV or HW
90
+ 15 => "Hot Water Limit", # HW over limit or logic lockout. HW pump deactivated.
91
+ 16 => "VS Pump Error", # Alert is read from PWM feedback.
92
+ 17 => "Communicating Thermostat Error",
93
+ 18 => "Non-Critical Communications Error", # Any non-critical com error
94
+ 19 => "Critical Communications Error", # Any critical com error. Auto reset upon condition removal
95
+ 21 => "Low Loop Pressure", # Loop pressure is below 3 psi for more than 3 minutes
96
+ 22 => "Communicating ECM Error",
97
+ 23 => "HA Alarm 1", # Closed contact input is present on Dig 2 input - Text is configurable.
98
+ 24 => "HA Alarm 2", # Closed contact input is present on Dig 3 input - Text is configurable.
99
+ 25 => "AxbEev Error",
100
+ # VS Drive
101
+ 41 => "High Drive Temp", # Drive Temp has reached critical High Temp (>239 ̊F/115 ̊C)
102
+ 42 => "High Discharge Temp", # Discharge temperature has reached critical high temp (> 280 ̊F/138 ̊C)
103
+ 43 => "Low Suction Pressure", # Suction Pressure is critically low (< 28 psig)
104
+ 44 => "Low Condensing Pressure", # Condensing pressure is critically low (< 119 psig)
105
+ 45 => "High Condensing Pressure", # Condensing pressure is critically high (> 654 psig)
106
+ 46 => "Output Power Limit", # Supply Voltage is <208V or Max Pwr is reached due to high pressure
107
+ 47 => "EEV ID Comm Error", # Com with EEV is interupted EEV has gone independent mode
108
+ 48 => "EEV OD Comm Error", # Com with EEV is interupted EEV has gone independent mode
109
+ 49 => "Cabinet Temperature Sensor", # Ambient Temperature (Tamb) is <-76 or > 212 F and out of range or invalid
110
+ 51 => "Discharge Temp Sensor", # Discharge Sensor (Sd) is > 280 F or invalid (-76 to 392 F)
111
+ 52 => "Suction Presure Sensor", # Suction Pressure (P0) is invalid (0 to 232 psi)
112
+ 53 => "Condensing Pressure Sensor", # Low condensing pressure (PD) or invalid (0 to 870 psi) Retry 10x.
113
+ 54 => "Low Supply Voltage", # Supply Voltage is <180 V (190V to reset) or powered off/on too quickly (<30 sec.).
114
+ 55 => "Out of Envelope", # Comp Operating out of envelope (P0) more than 90 sec. Retry 10x.
115
+ 56 => "Drive Over Currnet", # Over current tripped by phase loss, earth fault, short circuit, low water flow, low air flow, or major drive fault. # rubocop:disable Layout/LineLength
116
+ 57 => "Drive Over/Under Voltage", # DC Link Voltage to compressor is >450vdc or at minimum voltage (<185vdc).
117
+ 58 => "High Drive Temp", # Drive Temp has reached critical High Temp >239 F
118
+ 59 => "Internal Drive Error", # The MOC has encountered an internal fault or an internal error. Probably fatal.
119
+ 61 => "Multiple Safe Mode", # More than one SafeMode condition is present requiring lockout
120
+ # EEV2
121
+ 71 => "Loss of Charge", # High superheat and high EEV opening % for a long time will trigger a loss of charge fault
122
+ 72 => "Suction Temperature Sensor", # Suction Temperature Sensor is invalid (-76 to 392 F)
123
+ 73 => "Leaving Air Temperature Sensor", # Leaving Air Temperature Sensor is invalid (-76 to 392 F)
124
+ 74 => "Maximum Operating Pressure", # Suction pressure has exceeded that maximum operating level for 90 sec.
125
+ 99 => "System Reset"
126
+ }.freeze
127
+
128
+ SMARTGRID_ACTION = {
129
+ 0 => :none,
130
+ 1 => :unoccupied_set_points,
131
+ 2 => :load_shed,
132
+ 3 => :capacity_limiting,
133
+ 4 => :off_time
134
+ }.freeze
135
+
136
+ HA_ALARM = {
137
+ 0 => :none,
138
+ 1 => :general,
139
+ 2 => :security,
140
+ 3 => :sump,
141
+ 4 => :carbon_monoxide,
142
+ 5 => :dirty_filter
119
143
  }.freeze
120
144
 
145
+ VS_FAULTS = {
146
+ "Under-Voltage Warning" => (71..77),
147
+ "RPM Sensor Signal Fault" => (78..82),
148
+ "Under-Voltage Stop" => (83..87),
149
+ "Rotor Locked" => (88..92),
150
+ "Standby" => (93..)
151
+ }.freeze
152
+
153
+ def vs_fault(value)
154
+ name = VS_FAULTS.find { |(_, range)| range.include?(value) }&.first
155
+ name ? "#{value} #{name}" : value.to_s
156
+ end
157
+
121
158
  AR_SETTINGS = {
122
159
  0 => "Cycle with Compressor",
123
160
  1 => "Cycle with Thermostat Humidification Call",
@@ -145,12 +182,6 @@ module Aurora
145
182
  3 => :removed
146
183
  }.freeze
147
184
 
148
- VS_PUMP_CONTROL = {
149
- 0x7fff => :off,
150
- 40 => :min,
151
- 100 => :max
152
- }.freeze
153
-
154
185
  SYSTEM_OUTPUTS = {
155
186
  0x01 => :cc, # compressor stage 1
156
187
  0x02 => :cc2, # compressor stage 2
@@ -163,6 +194,13 @@ module Aurora
163
194
  0x800 => :alarm
164
195
  }.freeze
165
196
 
197
+ # 5-speed ECM shows
198
+ # Aux if eh1 is on
199
+ # High if cc2 is on
200
+ # Med if cc1 is on
201
+ # Low if blower is on
202
+ # Off
203
+
166
204
  SYSTEM_INPUTS = {
167
205
  0x01 => "Y1",
168
206
  0x02 => "Y2",
@@ -279,6 +317,27 @@ module Aurora
279
317
  0x7 => :unknown7
280
318
  }.freeze
281
319
 
320
+ def manual_operation(value)
321
+ return :off if value == 0x7fff
322
+
323
+ result = {
324
+ mode: value & 0x100 == 0x100 ? :cooling : :heating
325
+ }
326
+ result[:aux_heat] = true if value & 0x200 == 0x200
327
+ result[:compressor_speed] = value & 0xf
328
+ result[:blower_speed] = value & 0xf0
329
+ result[:blower_speed] = :with_compressor if value & 0xf0 == 0xf0
330
+ leftover = value & ~0x03ff
331
+ result[:unknown] = format("0x%04x", leftover) unless leftover.zero?
332
+ result
333
+ end
334
+
335
+ def vs_manual_control(value)
336
+ return :off if value == 0x7fff
337
+
338
+ value
339
+ end
340
+
282
341
  def iz2_demand(value)
283
342
  {
284
343
  fan_demand: value >> 8,
@@ -286,6 +345,18 @@ module Aurora
286
345
  }
287
346
  end
288
347
 
348
+ def iz2_fan_desired(value)
349
+ case value
350
+ when 1 then 25
351
+ when 2 then 40
352
+ when 3 then 55
353
+ when 4 then 70
354
+ when 5 then 85
355
+ when 6 then 100
356
+ else value
357
+ end
358
+ end
359
+
289
360
  def zone_configuration1(value)
290
361
  fan = if value & 0x80 == 0x80
291
362
  :continuous
@@ -344,6 +415,7 @@ module Aurora
344
415
  method(:dipswitch_settings) => [4, 33],
345
416
  TO_TENTHS => [19, 20, 401, 419, 501, 502, 567, 740, 745, 746, 747, 900,
346
417
  1105, 1106, 1107, 1108, 1110, 1111, 1114, 1117, 1134, 1136,
418
+ 3327, 3522,
347
419
  12_619, 12_620,
348
420
  21_203, 21_204,
349
421
  21_212, 21_213,
@@ -357,21 +429,28 @@ module Aurora
357
429
  ->(v) { from_bitmask(v, SYSTEM_OUTPUTS) } => [27, 30],
358
430
  ->(v) { from_bitmask(v, SYSTEM_INPUTS) } => [28],
359
431
  method(:status) => [31],
432
+ ->(v) { !v.zero? } => [45, 362, 400],
360
433
  ->(registers, idx) { to_string(registers, idx, 4) } => [88],
361
434
  ->(registers, idx) { to_string(registers, idx, 12) } => [92],
362
435
  ->(registers, idx) { to_string(registers, idx, 5) } => [105],
363
- ->(v) { from_bitmask(v, VS_DRIVE_DERATE) } => [214],
364
- ->(v) { from_bitmask(v, VS_SAFE_MODE) } => [216],
365
- ->(v) { from_bitmask(v, VS_ALARM1) } => [217],
366
- ->(v) { from_bitmask(v, VS_ALARM2) } => [218],
367
- ->(v) { from_bitmask(v, VS_EEV2) } => [280],
368
- ->(v) { VS_PUMP_CONTROL[v] } => [323],
436
+ ->(v) { from_bitmask(v, VS_DRIVE_DERATE) } => [214, 3223],
437
+ ->(v) { from_bitmask(v, VS_SAFE_MODE) } => [216, 3225],
438
+ ->(v) { from_bitmask(v, VS_ALARM1) } => [217, 3226],
439
+ ->(v) { from_bitmask(v, VS_ALARM2) } => [218, 3227],
440
+ ->(v) { from_bitmask(v, VS_EEV2) } => [280, 3804],
441
+ method(:vs_manual_control) => [323],
369
442
  NEGATABLE => [346, 1146],
370
- ->(v) { !v.zero? } => [400],
443
+ ->(v) { v.zero? ? :closed : :open } => [405, 408, 410],
444
+ ->(v) { SMARTGRID_ACTION[v] } => [406],
445
+ ->(v) { HA_ALARM[v] } => [409, 411],
446
+ method(:iz2_fan_desired) => [565],
447
+ ->(registers, idx) { to_string(registers, idx, 8) } => [710],
371
448
  ->(v) { COMPONENT_STATUS[v] } => [800, 806, 812, 815, 818, 824, 827],
372
449
  ->(v) { from_bitmask(v, AXB_INPUTS) } => [1103],
373
450
  ->(v) { from_bitmask(v, AXB_OUTPUTS) } => [1104],
374
451
  ->(v) { TO_TENTHS.call(NEGATABLE.call(v)) } => [1136],
452
+ method(:manual_operation) => [3002],
453
+ method(:to_int32) => [3422, 3424],
375
454
  ->(v) { HEATING_MODE[v] } => [12_606, 21_202, 21_211, 21_220, 21_229, 21_238, 21_247],
376
455
  ->(v) { FAN_MODE[v] } => [12_621, 21_205, 21_214, 21_223, 21_232, 21_241, 21_250],
377
456
  ->(v) { from_bitmask(v, HUMIDIFIER_SETTINGS) } => [31_109],
@@ -390,8 +469,9 @@ module Aurora
390
469
 
391
470
  REGISTER_FORMATS = {
392
471
  "%ds" => [1, 6, 9, 15, 84, 85],
393
- "%dV" => [16, 112],
472
+ "%dV" => [16, 112, 3331, 3424, 3523],
394
473
  "%0.1fºF" => [19, 20, 401, 501, 502, 567, 740, 745, 746, 747, 900, 1110, 1111, 1114, 1134, 1136,
474
+ 3327, 3522,
395
475
  12_619, 12_620,
396
476
  21_203, 21_204,
397
477
  21_212, 21_213,
@@ -402,15 +482,16 @@ module Aurora
402
482
  31_003,
403
483
  31_007, 31_010, 31_013, 31_016, 31_019, 31_022],
404
484
  "E%d" => [25, 26],
405
- "%d%%" => [282, 321, 322, 346, 565, 741],
485
+ "%d%%" => [282, 321, 322, 346, 565, 741, 3332, 3524],
406
486
  "%0.1f psi" => [419],
407
487
  "%0.1fA" => [1105, 1106, 1107, 1108],
408
488
  "%0.1fgpm" => [1117],
409
- "%dW" => [1147, 1149, 1151, 1153, 1165],
489
+ "%dW" => [1147, 1149, 1151, 1153, 1165, 3422],
410
490
  "%dBtuh" => [1157]
411
491
  }.freeze
412
492
 
413
493
  def ignore(range)
494
+ range = (range..range) if range.is_a?(Integer)
414
495
  range.zip(Array.new(range.count)).to_h
415
496
  end
416
497
 
@@ -530,19 +611,20 @@ module Aurora
530
611
  ].freeze
531
612
 
532
613
  REGISTER_NAMES = {
614
+ 0 => "Test Mode Flag", # 0x100 for enabled; this might have other flags
533
615
  1 => "Random Start Delay",
534
616
  2 => "ABC Program Version",
535
617
  3 => "??? Version?",
536
618
  4 => "DIP Switch Override",
537
619
  6 => "Compressor Anti-Short Cycle Delay",
538
- 8 => "Unit Type?",
620
+ 8 => "ABC Program Revision",
539
621
  9 => "Compressor Minimum Run Time",
540
622
  15 => "Blower Off Delay",
541
623
  16 => "Line Voltage",
542
624
  19 => "FP1",
543
625
  20 => "FP2",
544
626
  21 => "Condensate", # >= 270 normal, otherwise fault
545
- 25 => "Last Fault Number",
627
+ 25 => "Last Fault Number", # high bit set if locked out
546
628
  26 => "Last Lockout",
547
629
  27 => "System Outputs (At Last Lockout)",
548
630
  28 => "System Inputs (At Last Lockout)",
@@ -550,6 +632,8 @@ module Aurora
550
632
  31 => "Status",
551
633
  33 => "DIP Switch Status",
552
634
  36 => "ABC Board Rev",
635
+ 45 => "Test Mode (write)", # 1 to enable
636
+ 47 => "Clear Fault History", # 0x5555 to clear
553
637
  50 => "ECM Speed Low (== 5)",
554
638
  51 => "ECM Speed Med (== 5)",
555
639
  52 => "ECM Speed High (== 5)",
@@ -580,7 +664,8 @@ module Aurora
580
664
  284 => "Saturated Suction Temperature", ## ?? data format
581
665
  321 => "VS Pump Min",
582
666
  322 => "VS Pump Max",
583
- 323 => "VS Pump Control",
667
+ 323 => "VS Pump Speed Manual Control",
668
+ 326 => "VS Pump Fault",
584
669
  340 => "Blower Only Speed",
585
670
  341 => "Lo Compressor ECM Speed",
586
671
  342 => "Hi Compressor ECM Speed",
@@ -594,7 +679,14 @@ module Aurora
594
679
  400 => "DHW Enabled",
595
680
  401 => "DHW Setpoint",
596
681
  # 403 => "DHW Status", just a guess, based on AID Tool querying this register while showing DHW settings
597
- 414 => "On Peak/SmartGrid 2", # 0x0001 only
682
+ 405 => "SmartGrid Trigger",
683
+ 406 => "SmartGrid Action", # 0/1 for 1/2; see 414
684
+ 407 => "Off Time Length",
685
+ 408 => "HA Alarm 1 Trigger",
686
+ 409 => "HA Alarm 1 Action",
687
+ 410 => "HA Alaram 2 Trigger",
688
+ 411 => "HA Alarm 2 Action",
689
+ 414 => "On Peak/SmartGrid", # 0x0001 only
598
690
  419 => "Loop Pressure Trip",
599
691
  483 => "Number of IZ2 Zones",
600
692
  501 => "Set Point", # only read by AID tool? this is _not_ heating/cooling set point
@@ -602,6 +694,7 @@ module Aurora
602
694
  564 => "IZ2 Compressor Speed Desired",
603
695
  565 => "IZ2 Blower % Desired",
604
696
  567 => "Entering Air",
697
+ 710 => "Fault Description",
605
698
  740 => "Entering Air",
606
699
  741 => "Relative Humidity",
607
700
  745 => "Heating Set Point",
@@ -613,6 +706,9 @@ module Aurora
613
706
  806 => "AXB Installed",
614
707
  807 => "AXB Version",
615
708
  808 => "AXB Revision",
709
+ 809 => "AHB Installed",
710
+ 810 => "AHB Version",
711
+ 811 => "AHB Revision",
616
712
  812 => "IZ2 Installed",
617
713
  813 => "IZ2 Version",
618
714
  814 => "IZ2 Revision",
@@ -652,9 +748,27 @@ module Aurora
652
748
  12_619 => "Heating Setpoint (write)",
653
749
  12_620 => "Cooling Setpoint (write)",
654
750
  12_621 => "Fan Mode (write)",
655
- 3000 => "Compressor Speed?",
656
- 3001 => "Compressor Speed?",
751
+ 3000 => "Compressor Speed Desired",
752
+ 3001 => "Compressor Speed Actual",
753
+ 3002 => "Manual Operation",
657
754
  3027 => "Compressor Speed",
755
+ 3220 => "VS Drive Details (General 1)",
756
+ 3221 => "VS Drive Details (General 2)",
757
+ 3222 => "VS Drive Details (Derate 1)",
758
+ 3223 => "VS Drive Details (Derate 2)",
759
+ 3224 => "VS Drive Details (Safemode 1)",
760
+ 3225 => "VS Drive Details (Safemode 2)",
761
+ 3226 => "VS Drive Details (Alarm 1)",
762
+ 3227 => "VS Drive Details (Alarm 2)",
763
+ 3327 => "VS Drive Temperature",
764
+ 3331 => "VS Drive Line Voltage",
765
+ 3332 => "VS Drive Thermo Power",
766
+ 3422 => "VS Drive Compressor Power",
767
+ 3424 => "VS Drive Supply Voltage",
768
+ 3522 => "VS Drive Inverter Temperature",
769
+ 3523 => "VS Drive UDC Voltage",
770
+ 3524 => "VS Drive Fan Speed",
771
+ 3804 => "VS Drive Details (EEV2 Ctl)",
658
772
  3904 => "Leaving Air Temperature?",
659
773
  31_003 => "Outdoor Temp",
660
774
  31_005 => "IZ2 Demand",
@@ -670,7 +784,10 @@ module Aurora
670
784
  .merge(ignore(93..104))
671
785
  .merge(ignore(106..109))
672
786
  .merge(faults(601..699))
787
+ .merge(ignore(711..717))
673
788
  .merge(zone_registers)
789
+ .merge(ignore(3423))
790
+ .merge(ignore(3425))
674
791
  .merge(ignore(31_401..31_412))
675
792
  .merge(ignore(31_414..31_420))
676
793
  .merge(ignore(31_422..31_433))
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aurora
4
- VERSION = "0.3.12"
4
+ VERSION = "0.3.13"
5
5
  end
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.3.12
4
+ version: 0.3.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer