waterfurnace_aurora 1.0.0 → 1.0.1

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: 5a92e9aadd14ee0154443cea52907f793880242ce22a44f3df7912065074c3c8
4
- data.tar.gz: 553a945493652a50f92f49e4e0620db8e03305c3ff0ab65823f20c15db2ac89d
3
+ metadata.gz: 8311d85ee1e300bcfbb3228a65cb98a69301f25f27569c36d898faf97c25fbd5
4
+ data.tar.gz: 86eab096d17d12aa01bb56f253022d64bb806d5aec3b55c6efc16a895b75d111
5
5
  SHA512:
6
- metadata.gz: 5fee6734f5e5752aec571c2c93a81e79be950af8c8f4a3ab3259f7d6b1d5e2540d4fd616be06d911a382c710b23ed43c1b1ecf23db23444022c24216faff52cb
7
- data.tar.gz: c2e5a9f54f7bd0f6b869ffff94b4cd0a0bf9de65ea29d8342fe690f582893a9fe0a7b0f0ce94ba4c0ecf6595156d21a12e7e8203023aaadc923a56c0951f817f
6
+ metadata.gz: 7edd9fd909c0b9fe316f306bf00a56eff1108f467718d71c1645596675938abd67c5e727b4f6312d79c1d706df0f22f7d65f475c35061f7b66405add92eec342
7
+ data.tar.gz: b0a6f4af036ebcd003557777e1fd276e33e56e1cbfbde268ad42a5a5bfa729c9ffa718dd3fd08917aad8beba2bf4d894519de128a5ba1519b5988ba5ddc707f7
@@ -132,7 +132,7 @@ class MQTTBridge
132
132
  }
133
133
 
134
134
  @homie_abc = @homie.node("abc", "Heat Pump", "ABC") do |node|
135
- allowed_modes = %w[lockout standby blower heating cooling waiting]
135
+ allowed_modes = %w[lockout standby blower heating heating_with_aux emergency_heat cooling waiting]
136
136
  allowed_modes << "dehumidify" if @abc.compressor.is_a?(Aurora::Compressor::VSDrive)
137
137
  node.property("current-mode",
138
138
  "Current Heating/Cooling Mode",
@@ -190,8 +190,8 @@ class MQTTBridge
190
190
  :integer,
191
191
  @abc.line_voltage,
192
192
  format: 90..635,
193
- unit: "V") do |value, property|
194
- @mutex.synchronize { property.value = @abc.line_voltage = value }
193
+ unit: "V") do |value|
194
+ @mutex.synchronize { @abc.line_voltage = value }
195
195
  end
196
196
  node.property("fp1",
197
197
  "FP1 Sensor",
@@ -337,8 +337,8 @@ class MQTTBridge
337
337
  :integer,
338
338
  @abc.blower.public_send(field),
339
339
  format: 1..12,
340
- hass: { number: { entity_category: :config } }) do |value, property|
341
- @mutex.synchronize { property.value = @abc.blower.public_send("#{field}=", value) }
340
+ hass: { number: { entity_category: :config } }) do |value|
341
+ @mutex.synchronize { @abc.blower.public_send("#{field}=", value) }
342
342
  end
343
343
  end
344
344
 
@@ -383,8 +383,8 @@ class MQTTBridge
383
383
  "Manual Control",
384
384
  :boolean,
385
385
  @abc.pump.manual_control?,
386
- hass: { switch: { entity_category: :diagnostic } }) do |value, property|
387
- @mutex.synchronize { property.value = @abc.pump.manual_control = value }
386
+ hass: { switch: { entity_category: :diagnostic } }) do |value|
387
+ @mutex.synchronize { @abc.pump.manual_control = value }
388
388
  end
389
389
  node.property("minimum-speed",
390
390
  "Actual Minimum Speed",
@@ -392,8 +392,8 @@ class MQTTBridge
392
392
  @abc.pump.minimum_speed,
393
393
  format: 0..100,
394
394
  unit: "%",
395
- hass: { number: { entity_category: :config } }) do |value, property|
396
- @mutex.synchronize { property.value = @abc.pump.minimum_speed = value }
395
+ hass: { number: { entity_category: :config } }) do |value|
396
+ @mutex.synchronize { @abc.pump.minimum_speed = value }
397
397
  end
398
398
  node.property("maximum-speed",
399
399
  "Actual Maximum Speed",
@@ -401,8 +401,8 @@ class MQTTBridge
401
401
  @abc.pump.minimum_speed,
402
402
  format: 0..100,
403
403
  unit: "%",
404
- hass: { number: { entity_category: :config } }) do |value, property|
405
- @mutex.synchronize { property.value = @abc.pump.maximum_speed = value }
404
+ hass: { number: { entity_category: :config } }) do |value|
405
+ @mutex.synchronize { @abc.pump.maximum_speed = value }
406
406
  end
407
407
  next unless @abc.awl_axb?
408
408
 
@@ -412,8 +412,8 @@ class MQTTBridge
412
412
  @abc.pump.speed,
413
413
  format: 0..100,
414
414
  unit: "%",
415
- hass: { number: { entity_category: :diagnostic } }) do |value, property|
416
- @mutex.synchronize { property.value = @abc.pump.speed = value }
415
+ hass: { number: { entity_category: :diagnostic } }) do |value|
416
+ @mutex.synchronize { @abc.pump.speed = value }
417
417
  end
418
418
  end
419
419
 
@@ -423,8 +423,8 @@ class MQTTBridge
423
423
  "Enabled",
424
424
  :boolean,
425
425
  @abc.dhw.enabled,
426
- hass: { switch: { icon: "mdi:water-boiler" } }) do |value, property|
427
- @mutex.synchronize { property.value = @abc.dhw.enabled = value }
426
+ hass: { switch: { icon: "mdi:water-boiler" } }) do |value|
427
+ @mutex.synchronize { @abc.dhw.enabled = value }
428
428
  end
429
429
  node.property("running",
430
430
  "Pump Running",
@@ -444,8 +444,8 @@ class MQTTBridge
444
444
  @abc.dhw.set_point,
445
445
  format: 100..140,
446
446
  unit: "°F",
447
- hass: { number: { step: 5 } }) do |value, property|
448
- @mutex.synchronize { property.value = @abc.dhw.set_point = value }
447
+ hass: { number: { step: 5 } }) do |value|
448
+ @mutex.synchronize { @abc.dhw.set_point = value }
449
449
  end
450
450
  end
451
451
  end
@@ -461,16 +461,16 @@ class MQTTBridge
461
461
  "Humidifier Mode",
462
462
  :enum,
463
463
  @abc.humidistat.humidifier_mode,
464
- format: %i[auto manual]) do |value, property|
465
- @mutex.synchronize { property.value = @abc.humidistat.humidifier_mode = value.to_sym }
464
+ format: %i[auto manual]) do |value|
465
+ @mutex.synchronize { @abc.humidistat.humidifier_mode = value.to_sym }
466
466
  end
467
467
  node.property("humidification-target",
468
468
  "Humidification Target Relative Humidity",
469
469
  :integer,
470
470
  @abc.humidistat.humidification_target,
471
471
  unit: "%",
472
- format: 15..50) do |value, property|
473
- @mutex.synchronize { property.value = @abc.humidistat.humidification_target = value }
472
+ format: 15..50) do |value|
473
+ @mutex.synchronize { @abc.humidistat.humidification_target = value }
474
474
  end
475
475
  node.hass_humidifier("humidifier-running",
476
476
  target_property: "humidification-target",
@@ -493,16 +493,16 @@ class MQTTBridge
493
493
  "Dehumidifier Mode",
494
494
  :enum,
495
495
  @abc.humidistat.dehumidifier_mode,
496
- format: %i[auto manual]) do |value, property|
497
- @mutex.synchronize { property.value = @abc.humidistat.dehumidifier_mode = value.to_sym }
496
+ format: %i[auto manual]) do |value|
497
+ @mutex.synchronize { @abc.humidistat.dehumidifier_mode = value.to_sym }
498
498
  end
499
499
  node.property("dehumidification-target",
500
500
  "Dehumidification Target Relative Humidity",
501
501
  :integer,
502
502
  @abc.humidistat.dehumidification_target,
503
503
  unit: "%",
504
- format: 35..65) do |value, property|
505
- @mutex.synchronize { property.value = @abc.humidistat.dehumidification_target = value }
504
+ format: 35..65) do |value|
505
+ @mutex.synchronize { @abc.humidistat.dehumidification_target = value }
506
506
  end
507
507
  node.hass_humidifier("dehumidifier-running",
508
508
  target_property: "dehumidification-target",
@@ -563,15 +563,15 @@ class MQTTBridge
563
563
  "Target Heating/Cooling Mode",
564
564
  :enum,
565
565
  zone.target_mode,
566
- format: allowed_modes) do |value, property|
567
- @mutex.synchronize { property.value = zone.target_mode = value.to_sym }
566
+ format: allowed_modes) do |value|
567
+ @mutex.synchronize { zone.target_mode = value.to_sym }
568
568
  end
569
569
  node.property("target-fan-mode",
570
570
  "Target Fan Mode",
571
571
  :enum,
572
572
  zone.target_fan_mode,
573
- format: %w[auto continuous intermittent]) do |value, property|
574
- @mutex.synchronize { property.value = zone.target_fan_mode = value.to_sym }
573
+ format: %w[auto continuous intermittent]) do |value|
574
+ @mutex.synchronize { zone.target_fan_mode = value.to_sym }
575
575
  end
576
576
  node.property("fan-intermittent-on",
577
577
  "Fan Intermittent Mode On Duration",
@@ -579,8 +579,8 @@ class MQTTBridge
579
579
  zone.fan_intermittent_on,
580
580
  unit: "M",
581
581
  format: %w[0 5 10 15 20],
582
- hass: { select: { entity_category: :config } }) do |value, property|
583
- @mutex.synchronize { property.value = zone.fan_intermittent_on = value.to_i }
582
+ hass: { select: { entity_category: :config } }) do |value|
583
+ @mutex.synchronize { zone.fan_intermittent_on = value.to_i }
584
584
  end
585
585
  node.property("fan-intermittent-off",
586
586
  "Fan Intermittent Mode Off Duration",
@@ -588,8 +588,8 @@ class MQTTBridge
588
588
  zone.fan_intermittent_on,
589
589
  unit: "M",
590
590
  format: %w[0 5 10 15 20 25 30 35 40],
591
- hass: { select: { entity_category: :config } }) do |value, property|
592
- @mutex.synchronize { property.value = zone.fan_intermittent_on = value.to_i }
591
+ hass: { select: { entity_category: :config } }) do |value|
592
+ @mutex.synchronize { zone.fan_intermittent_on = value.to_i }
593
593
  end
594
594
  node.property("current-fan-mode",
595
595
  "Current Fan Status",
@@ -630,15 +630,15 @@ class MQTTBridge
630
630
  :integer,
631
631
  zone.heating_target_temperature,
632
632
  unit: "°F",
633
- format: 40..90) do |value, property|
634
- @mutex.synchronize { property.value = zone.heating_target_temperature = value }
633
+ format: 40..90) do |value|
634
+ @mutex.synchronize { zone.heating_target_temperature = value }
635
635
  end
636
636
  node.property("cooling-target-temperature",
637
637
  "Cooling Target Temperature", :integer,
638
638
  zone.cooling_target_temperature,
639
639
  unit: "°F",
640
- format: 54..99) do |value, property|
641
- @mutex.synchronize { property.value = zone.cooling_target_temperature = value }
640
+ format: 54..99) do |value|
641
+ @mutex.synchronize { zone.cooling_target_temperature = value }
642
642
  end
643
643
  node.hass_climate(action_property: "current-mode",
644
644
  current_temperature_property: "ambient-temperature",
@@ -202,10 +202,18 @@ module Aurora
202
202
  elsif registers[362]
203
203
  :dehumidify
204
204
  elsif outputs.include?(:cc2) || outputs.include?(:cc)
205
- outputs.include?(:rv) ? :cooling : :heating
205
+ if outputs.include?(:rv)
206
+ :cooling
207
+ elsif outputs.include?(:eh2) || outputs.include?(:eh1)
208
+ :heating_with_aux
209
+ else
210
+ :heating
211
+ end
212
+ elsif outputs.include?(:eh2) || outputs.include?(:eh1)
213
+ :emergency_heat
206
214
  elsif outputs.include?(:blower)
207
215
  :blower
208
- elsif registers[6]
216
+ elsif !registers[6].zero?
209
217
  :waiting
210
218
  else
211
219
  :standby
@@ -3,19 +3,19 @@
3
3
  require "aurora/component"
4
4
 
5
5
  module Aurora
6
- class AuxHeat < Component
6
+ class AuxHeat < Component
7
7
  attr_reader :stage, :watts
8
8
 
9
9
  def refresh(registers)
10
- outputs = registers[30]
11
- @stage = if outputs.include?(:eh2)
12
- 2
13
- elsif outputs.include?(:eh1)
14
- 1
15
- else
16
- 0
17
- end
18
- @watts = registers[1151] if abc.energy_monitoring?
10
+ outputs = registers[30]
11
+ @stage = if outputs.include?(:eh2)
12
+ 2
13
+ elsif outputs.include?(:eh1)
14
+ 1
15
+ else
16
+ 0
17
+ end
18
+ @watts = registers[1151] if abc.energy_monitoring?
19
19
  end
20
20
  end
21
21
  end
data/lib/aurora/dhw.rb CHANGED
@@ -27,7 +27,6 @@ module Aurora
27
27
 
28
28
  raw_value = (value * 10).to_i
29
29
  holding_registers[401] = raw_value
30
- @set_point = value
31
30
  end
32
31
  end
33
32
  end
@@ -75,8 +75,6 @@ module Aurora
75
75
  raw_value |= 0x4000 if humidifier_mode == :auto
76
76
  raw_value |= 0x8000 if dehumidifier_mode == :auto
77
77
  holding_registers[abc.iz2? ? 21_114 : 12_309] = raw_value
78
- @humidifier_mode = humidifier_mode
79
- @dehumidifier_mode = dehumidifier_mode
80
78
  end
81
79
 
82
80
  def humidification_target=(value)
@@ -92,8 +90,6 @@ module Aurora
92
90
  raise ArgumentError unless (35..65).cover?(dehumidification_target)
93
91
 
94
92
  holding_registers[abc.iz2? ? 21_115 : 12_310] = (humidification_target << 8) + dehumidification_target
95
- @humidification_target = humidification_target
96
- @dehumidification_target = dehumidification_target
97
93
  end
98
94
  end
99
95
  end
@@ -46,28 +46,24 @@ module Aurora
46
46
  return unless (raw_value = Aurora::HEATING_MODE.invert[value])
47
47
 
48
48
  holding_registers[21_202 + ((zone_number - 1) * 9)] = raw_value
49
- @target_mode = value
50
49
  end
51
50
 
52
51
  def target_fan_mode=(value)
53
52
  return unless (raw_value = Aurora::FAN_MODE.invert[value])
54
53
 
55
54
  holding_registers[21_205 + ((zone_number - 1) * 9)] = raw_value
56
- @target_fan_mode = value
57
55
  end
58
56
 
59
57
  def fan_intermittent_on=(value)
60
58
  return unless value >= 0 && value <= 25 && (value % 5).zero?
61
59
 
62
60
  holding_registers[21_206 + ((zone_number - 1) * 9)] = value
63
- @fan_intermittent_on = value
64
61
  end
65
62
 
66
63
  def fan_intermittent_off=(value)
67
64
  return unless value >= 0 && value <= 40 && (value % 5).zero?
68
65
 
69
66
  holding_registers[21_207 + ((zone_number - 1) * 9)] = value
70
- @fan_intermittent_off = value
71
67
  end
72
68
 
73
69
  def heating_target_temperature=(value)
@@ -75,7 +71,6 @@ module Aurora
75
71
 
76
72
  raw_value = (value * 10).to_i
77
73
  holding_registers[21_203 + ((zone_number - 1) * 9)] = raw_value
78
- @heating_target_temperature = value
79
74
  end
80
75
 
81
76
  def cooling_target_temperature=(value)
@@ -83,7 +78,6 @@ module Aurora
83
78
 
84
79
  raw_value = (value * 10).to_i
85
80
  holding_registers[21_204 + ((zone_number - 1) * 9)] = raw_value
86
- @cooling_target_temperature = value
87
81
  end
88
82
  end
89
83
  end
@@ -229,6 +229,8 @@ module Aurora
229
229
  0x08 => :blower,
230
230
  0x10 => :eh1,
231
231
  0x20 => :eh2,
232
+ # 0x40 => ??, # this turns on and off quite a bit during normal operation
233
+ # 0x80 => ??, # this turns on occasionally during normal operation; I've only seen it when aux heat is on
232
234
  0x200 => :accessory,
233
235
  0x400 => :lockout,
234
236
  0x800 => :alarm
@@ -703,8 +705,9 @@ module Aurora
703
705
  9 => "Compressor Minimum Run Time",
704
706
  15 => "Blower Off Delay",
705
707
  16 => "Line Voltage",
706
- 17 => "Aux/E Heat Stage", # this has some complicated condition based on
707
- # current inputs and outputs on if it should have a value (310 - v) or (130 - v), or be 0
708
+ 17 => "Aux/E Heat Stage", # this is how long aux/eheat have been requested in seconds
709
+ # when in eheat mode (explicit on the thermostat), it will stage up to eh2 after 130s
710
+ # when in aux mode (thermostat set to heat; compressor at full capacity), it will stage up to eh2 after 310s
708
711
  19 => "FP1 (Cooling Liquid Line) Temperature",
709
712
  20 => "FP2",
710
713
  21 => "Condensate", # >= 270 normal, otherwise fault
@@ -48,14 +48,12 @@ module Aurora
48
48
  return unless (raw_value = HEATING_MODE.invert[value])
49
49
 
50
50
  @abc.modbus_slave.holding_registers[12_606] = raw_value
51
- @target_mode = value
52
51
  end
53
52
 
54
53
  def target_fan_mode=(value)
55
54
  return unless (raw_value = FAN_MODE.invert[value])
56
55
 
57
56
  @abc.modbus_slave.holding_registers[12_621] = raw_value
58
- @target_fan_mode = value
59
57
  end
60
58
 
61
59
  def heating_target_temperature=(value)
@@ -63,7 +61,6 @@ module Aurora
63
61
 
64
62
  raw_value = (value * 10).to_i
65
63
  @abc.modbus_slave.holding_registers[12_619] = raw_value
66
- @heating_target_temperature = value
67
64
  end
68
65
 
69
66
  def cooling_target_temperature=(value)
@@ -71,21 +68,18 @@ module Aurora
71
68
 
72
69
  raw_value = (value * 10).to_i
73
70
  @abc.modbus_slave.holding_registers[12_620] = raw_value
74
- @cooling_target_temperature = value
75
71
  end
76
72
 
77
73
  def fan_intermittent_on=(value)
78
74
  return unless value >= 0 && value <= 25 && (value % 5).zero?
79
75
 
80
76
  holding_registers[12_622] = value
81
- @fan_intermittent_on = value
82
77
  end
83
78
 
84
79
  def fan_intermittent_off=(value)
85
80
  return unless value >= 0 && value <= 40 && (value % 5).zero?
86
81
 
87
82
  holding_registers[12_623] = value
88
- @fan_intermittent_off = value
89
83
  end
90
84
  end
91
85
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aurora
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
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: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer