waterfurnace_aurora 0.3.4 → 0.3.5

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: afe09cd2a6e4d3dea0a4ebe3548c86fb5a0ed25025e07b11565c4706a82267ef
4
- data.tar.gz: ded746f6e623b489ea364623307b7589b2d3b7002cd2b051b0be28f26d701252
3
+ metadata.gz: 85309a61ae279d3255db42a0ff3d53a038c1fdcb3c7e02e3febf6b533992a2c3
4
+ data.tar.gz: be76ef3d6821fbd8535192fd4a55f770234f1736fb280a7a3736fa6c134a1085
5
5
  SHA512:
6
- metadata.gz: bbe91b347c1056af614f4290a52ec2f2eb3dc64883b30a129ea41d8353626835738fb8169b2081d56d5688f6910e584b1805403317ed4b29de7d6ee674ca8f9a
7
- data.tar.gz: 1d6211ea820d958976201635bbfb239c53ab9a1818cc4779263ce6dda72aaaf669ae26751dd2abe5f82038bc21af7d6a6495b398e89bb4f9c1cc20b6cc876cb9
6
+ metadata.gz: a45f409c8573e02e7b761c6363abfea445f6e86fe58fab96b5e2ed427564ba791ff83c8817c74d2ff90028eae0c35fb4f090c0a28d3e9c6931aab45e2658c580
7
+ data.tar.gz: b5d793acc1dbca113c11205198b6ad6623b29543b5c5cc095ab8f4ddf0d5d9fbcf98fc5ca586e534d516027bc446bec2ee164fd3bb7f36ba6309b63517b13524
@@ -37,8 +37,8 @@ class MQTTBridge
37
37
  case addr
38
38
  when "known"
39
39
  Aurora::REGISTER_NAMES.keys
40
- when /^(\d+)\.\.(\d+)$/
41
- Regexp.last_match(1).to_i..Regexp.last_match(2).to_i
40
+ when /^(\d+)(?:\.\.|-)(\d+)$/
41
+ $1.to_i..$2.to_i
42
42
  else
43
43
  addr.to_i
44
44
  end
@@ -48,17 +48,22 @@ class MQTTBridge
48
48
  queries.each do |subquery|
49
49
  registers.merge!(@abc.modbus_slave.read_multiple_holding_registers(*subquery))
50
50
  end
51
- result = Aurora.print_registers(registers)
52
- @homie.mqtt.publish("#{@homie.topic}/$modbus/response", result, retain: false, qos: 1)
53
- when %r{\$modbus/(\d+)$}
54
- register = Regexp.last_match(1).to_i
51
+ Aurora.print_registers(registers) do |register, v|
52
+ @homie.mqtt.publish("#{@homie.topic}/$modbus/#{register}", v, retain: false, qos: 1)
53
+ end
54
+ when %r{\$modbus/(\d+)/set$}
55
+ register = $1.to_i
55
56
  value = case value
56
57
  when /\d+/
57
58
  value.to_i
58
59
  when /0x(\d+)/
59
- Regexp.last_match(1).to_i(16)
60
+ $1.to_i(16)
60
61
  end
61
62
  @abc.modbus_slave.holding_registers[register] = value if value
63
+ registers = { register => @abc.modbus_slave.holding_registers[register] }
64
+ Aurora.print_registers(registers) do |r, v|
65
+ @homie.mqtt.publish("#{@homie.topic}/$modbus/#{r}", v, retain: false, qos: 1)
66
+ end
62
67
  end
63
68
  end
64
69
  rescue StandardError => e
@@ -72,25 +77,8 @@ class MQTTBridge
72
77
  begin
73
78
  @mutex.synchronize do
74
79
  @abc.refresh
75
- %i[compressor_speed
76
- current_mode
77
- dhw_water_temperature
78
- entering_air_temperature
79
- entering_water_temperature
80
- fan_speed
81
- leaving_air_temperature
82
- leaving_water_temperature
83
- outdoor_temperature
84
- relative_humidity
85
- waterflow
86
- fp1
87
- fp2
88
- compressor_watts
89
- blower_watts
90
- aux_heat_watts
91
- loop_pump_watts
92
- total_watts].each do |property|
93
- @homie_abc[property.to_s.tr("_", "-")].value = @abc.public_send(property)
80
+ @homie_abc.each do |property|
81
+ property.value = @abc.public_send(property.id.tr("-", "_"))
94
82
  end
95
83
 
96
84
  @abc.zones.each_with_index do |z, idx|
@@ -123,7 +111,9 @@ class MQTTBridge
123
111
  unit: "ºF")
124
112
  node.property("leaving-water-temperature", "Leaving Water Temperature", :float, @abc.leaving_water_temperature,
125
113
  unit: "ºF")
126
- node.property("outdoor-temperature", "Outdoor Temperature", :float, @abc.outdoor_temperature, unit: "ºF")
114
+ unless @abc.outdoor_temperature.zero? # TODO: figure out the config if this actually exists
115
+ node.property("outdoor-temperature", "Outdoor Temperature", :float, @abc.outdoor_temperature, unit: "ºF")
116
+ end
127
117
  node.property("relative-humidity", "Relative Humidity", :integer, @abc.relative_humidity, unit: "%",
128
118
  format: 0..100)
129
119
  node.property("waterflow", "Waterflow", :float, unit: "gpm")
@@ -134,6 +124,15 @@ class MQTTBridge
134
124
  node.property(component.tr("_", "-"), component.tr("_", " ").titleize, :integer,
135
125
  @abc.public_send(component), unit: "W")
136
126
  end
127
+
128
+ node.property("blower-only-ecm-speed", "Blower Only ECM Speed", :integer, @abc.blower_only_ecm_speed,
129
+ format: 1..12) do |value, property|
130
+ @mutex.synchronize { property.value = @abc.blower_only_ecm_speed = value }
131
+ end
132
+ node.property("aux-heat-ecm-speed", "Aux Heat ECM Speed", :integer, @abc.aux_heat_ecm_speed,
133
+ format: 1..12) do |value, property|
134
+ @mutex.synchronize { property.value = @abc.aux_heat_ecm_speed = value }
135
+ end
137
136
  end
138
137
 
139
138
  @abc.zones.each_with_index do |zone, i|
@@ -183,7 +182,7 @@ class MQTTBridge
183
182
 
184
183
  # direct access to modbus registers for debugging purposes
185
184
  @homie.mqtt.subscribe("#{@homie.topic}/$modbus")
186
- @homie.mqtt.subscribe("#{@homie.topic}/$modbus/+")
185
+ @homie.mqtt.subscribe("#{@homie.topic}/$modbus/+/set")
187
186
  @homie.publish
188
187
  end
189
188
  end
@@ -18,6 +18,8 @@ module Aurora
18
18
  :outdoor_temperature,
19
19
  :fp1,
20
20
  :fp2,
21
+ :blower_only_ecm_speed,
22
+ :aux_heat_ecm_speed,
21
23
  :compressor_watts,
22
24
  :blower_watts,
23
25
  :aux_heat_watts,
@@ -31,17 +33,18 @@ module Aurora
31
33
  registers_array = @modbus_slave.holding_registers[105...110]
32
34
  registers = registers_array.each_with_index.map { |r, i| [i + 105, r] }.to_h
33
35
  @serial_number = Aurora.transform_registers(registers)[105]
34
- iz2_zone_count = @modbus_slave.holding_registers[483]
35
- # TODO: better detect IZ2/Non-IZ2
36
- @zones = if iz2_zone_count > 1
37
- (0...iz2_zone_count).map { |i| IZ2Zone.new(self, i + 1) }
38
- else
36
+
37
+ @zones = if @modbus_slave.holding_registers[813].zero?
39
38
  [Thermostat.new(self)]
39
+ else
40
+ iz2_zone_count = @modbus_slave.holding_registers[483]
41
+ (0...iz2_zone_count).map { |i| IZ2Zone.new(self, i + 1) }
40
42
  end
41
43
  end
42
44
 
43
45
  def refresh
44
- registers_to_read = [19..20, 30, 344, 740..741, 900, 1110..1111, 1114, 1117, 1147..1153, 1165, 3027, 31_003]
46
+ registers_to_read = [19..20, 30, 340, 344, 347, 740..741, 900, 1110..1111, 1114, 1117, 1147..1153, 1165, 3027,
47
+ 31_003]
45
48
  if zones.first.is_a?(IZ2Zone)
46
49
  zones.each_with_index do |_z, i|
47
50
  base1 = 21_203 + i * 9
@@ -71,6 +74,8 @@ module Aurora
71
74
  @fp1 = registers[19]
72
75
  @fp2 = registers[20]
73
76
  @locked_out = registers[1117]
77
+ @blower_only_ecm_speed = registers[340]
78
+ @aux_heat_ecm_speed = registers[347]
74
79
  @compressor_watts = registers[1147]
75
80
  @blower_watts = registers[1149]
76
81
  @aux_heat_watts = registers[1151]
@@ -99,6 +104,18 @@ module Aurora
99
104
  end
100
105
  end
101
106
 
107
+ def blower_only_ecm_speed=(value)
108
+ return unless (1..12).include?(value)
109
+
110
+ @modbus_slave.holding_registers[340] = value
111
+ end
112
+
113
+ def aux_heat_ecm_speed=(value)
114
+ return unless (1..12).include?(value)
115
+
116
+ @modbus_slave.holding_registers[347] = value
117
+ end
118
+
102
119
  def inspect
103
120
  "#<Aurora::ABCClient #{(instance_variables - [:@modbus_slave]).map do |iv|
104
121
  "#{iv}=#{instance_variable_get(iv).inspect}"
@@ -497,7 +497,7 @@ module Aurora
497
497
  REGISTER_NAMES = {
498
498
  1 => "Random Start Delay",
499
499
  2 => "ABC Program Version",
500
- 3 => "IZ2 Version?",
500
+ 3 => "??? Version?",
501
501
  4 => "DIP Switch Override",
502
502
  6 => "Compressor Anti-Short Cycle Delay",
503
503
  8 => "Unit Type?",
@@ -563,7 +563,7 @@ module Aurora
563
563
  746 => "Cooling Set Point",
564
564
  747 => "Ambient Temperature",
565
565
  807 => "AXB Version",
566
- 813 => "IZ2 Version?",
566
+ 813 => "IZ2 Version",
567
567
  816 => "AOC Version 1?",
568
568
  817 => "AOC Version 2?",
569
569
  819 => "MOC Version 1?",
@@ -648,7 +648,7 @@ module Aurora
648
648
  end
649
649
 
650
650
  def print_registers(registers)
651
- result = []
651
+ result = [] unless block_given?
652
652
  registers.each do |(k, value)|
653
653
  # ignored
654
654
  next if REGISTER_NAMES.key?(k) && REGISTER_NAMES[k].nil?
@@ -665,8 +665,13 @@ module Aurora
665
665
 
666
666
  name ||= "???"
667
667
 
668
- result << "#{name} (#{k}): #{value}"
668
+ full_value = "#{name} (#{k}): #{value}"
669
+ if block_given?
670
+ yield(k, full_value)
671
+ else
672
+ result << full_value
673
+ end
669
674
  end
670
- result.join("\n")
675
+ result.join("\n") unless block_given?
671
676
  end
672
677
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aurora
4
- VERSION = "0.3.4"
4
+ VERSION = "0.3.5"
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.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer