waterfurnace_aurora 1.0.0 → 1.0.1

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: 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