waterfurnace_aurora 0.7.5 → 0.7.6

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: 037ee3ea9f7274fbc12400840c5f174a70e42361c686753728b31ef8c4c6faaf
4
- data.tar.gz: 4ce5ddc17e4212d8a73f1c2f9255608d9d9a933da8d74e84af3552acd8bf7021
3
+ metadata.gz: 6682276ad275ed03cc9985a993fb2b97830d4aee801d544797b7dbe4e34288db
4
+ data.tar.gz: 674d421a8729c071bab6de126757d993eb4940a0ee6e514b8e689397ceee1c56
5
5
  SHA512:
6
- metadata.gz: d21f026be0e2d578b0a12064b5f90c71e039636d6fa7c21cb2a30c87fae2f2a0cc9eb9ffc65ca025cf415800abab3c32185a52ecc1e86ed5c15b93fe9516391c
7
- data.tar.gz: 2dc36c52c465c776f95e6581f60c20816b06c76d392d485c5c14b7c85a82c16b141b68da569eda8bfce1ddfed60bf1027166951b9bbf17383fe8f410506c3e39
6
+ metadata.gz: a47a7971f42f9ad100cc756b06b6146fc2c315a4298af501478f7208697d31bbd535ee26e7cd1250f4391bb7df16cd07da5ea420e752cfb95d6c4e1192ae9021
7
+ data.tar.gz: 2fdd41be490e09ae5436508b972134ee3f51c2b07b24f21006fccec51fd9981a79715a380ef401ad76a5c5680cf329b023b8f2e2f3a53cf3b8f2a78c08a71c73
data/exe/aurora_fetch CHANGED
@@ -9,11 +9,19 @@ require "uri"
9
9
  require "yaml"
10
10
 
11
11
  debug_modbus = yaml = false
12
+ try_individual = nil
12
13
 
13
14
  options = OptionParser.new do |opts|
14
15
  opts.banner = "Usage: aurora_fetch /path/to/serial/port REGISTERS [options]"
15
16
 
17
+ opts.separator("")
18
+ opts.separator("Use `known` to fetch all identified registers. Use `valid` to fetch all registers that will respond.")
19
+ opts.separator("")
20
+
16
21
  opts.on("--debug-modbus", "Print actual protocol bytes") { debug_modbus = true }
22
+ opts.on("--[no-]try-individual",
23
+ "Query registers one-by-one if a range has an illegal address. " \
24
+ "Defaults to true for `valid` and `known` special registers, false otherwise.") { |v| try_individual = v }
17
25
  opts.on("-y", "--yaml", "Output raw values as YAML") { yaml = true }
18
26
  opts.on("-v", "--version", "Print version") do
19
27
  puts Aurora::VERSION
@@ -32,11 +40,13 @@ unless ARGV.length == 2
32
40
  exit 1
33
41
  end
34
42
 
35
- abc = Aurora::ABCClient.new(ARGV[0])
36
- abc.modbus_slave.logger = Logger.new($stdout)
37
- abc.modbus_slave.logger.level = debug_modbus ? :debug : :warn
43
+ modbus_slave = Aurora::ABCClient.open_modbus_slave(ARGV[0])
44
+ modbus_slave.read_retry_timeout = 15
45
+ modbus_slave.read_retries = 2
46
+ modbus_slave.logger = Logger.new($stdout)
47
+ modbus_slave.logger.level = debug_modbus ? :debug : :warn
38
48
 
39
- registers = abc.query_registers(ARGV[1])
49
+ registers = Aurora::ABCClient.query_registers(modbus_slave, ARGV[1], try_individual: try_individual)
40
50
 
41
51
  if yaml
42
52
  puts YAML.dump(registers)
@@ -181,6 +181,14 @@ class MQTTBridge
181
181
  state_class: :measurement } })
182
182
  end
183
183
 
184
+ node.property("line-voltage",
185
+ "Line Voltage Setting",
186
+ :integer,
187
+ @abc.line_voltage,
188
+ format: 90..635,
189
+ unit: "V") do |value, property|
190
+ @mutex.synchronize { property.value = @abc.line_voltage = value }
191
+ end
184
192
  node.property("fp1",
185
193
  "FP1 Sensor",
186
194
  :float,
@@ -40,6 +40,49 @@ module Aurora
40
40
  client = ::ModBus::RTUClient.new(io)
41
41
  client.with_slave(1)
42
42
  end
43
+
44
+ def query_registers(modbus_slave, query, try_individual: false)
45
+ implicit = try_individual
46
+ ranges = query.split(",").map do |addr|
47
+ case addr
48
+ when "known"
49
+ implicit = true
50
+ try_individual = true if try_individual.nil?
51
+ Aurora::REGISTER_NAMES.keys
52
+ when "valid"
53
+ implicit = true
54
+ try_individual = true if try_individual.nil?
55
+ break Aurora::REGISTER_RANGES
56
+ when /^(\d+)(?:\.\.|-)(\d+)$/
57
+ $1.to_i..$2.to_i
58
+ else
59
+ addr.to_i
60
+ end
61
+ end
62
+ queries = Aurora.normalize_ranges(ranges)
63
+ registers = {}
64
+ queries.each do |subquery|
65
+ registers.merge!(modbus_slave.read_multiple_holding_registers(*subquery))
66
+ rescue ::ModBus::Errors::IllegalDataAddress
67
+ # maybe this unit doesn't respond to all the addresses we want?
68
+ raise unless implicit
69
+
70
+ # try each query individually
71
+ subquery.each do |subsubquery|
72
+ registers.merge!(modbus_slave.read_multiple_holding_registers(subsubquery))
73
+ rescue ::ModBus::Errors::IllegalDataAddress
74
+ next unless try_individual
75
+
76
+ # seriously?? try each register individually
77
+ subsubquery.each do |i|
78
+ registers[i] = modbus_slave.holding_registers[i]
79
+ rescue ::ModBus::Errors::IllegalDataAddress
80
+ next
81
+ end
82
+ end
83
+ end
84
+ registers
85
+ end
43
86
  end
44
87
 
45
88
  attr_reader :modbus_slave,
@@ -60,6 +103,7 @@ module Aurora
60
103
  :outdoor_temperature,
61
104
  :fp1,
62
105
  :fp2,
106
+ :line_voltage,
63
107
  :aux_heat_watts,
64
108
  :total_watts
65
109
 
@@ -108,7 +152,7 @@ module Aurora
108
152
 
109
153
  @faults = []
110
154
 
111
- @registers_to_read = [6, 19..20, 25, 30, 344, 740..741, 900, 1104, 1110..1111, 1114, 1150..1153, 1165,
155
+ @registers_to_read = [6, 19..20, 25, 30, 112, 344, 740..741, 900, 1104, 1110..1111, 1114, 1150..1153, 1165,
112
156
  31_003]
113
157
  zones.each do |z|
114
158
  @registers_to_read.concat(z.registers_to_read)
@@ -122,37 +166,7 @@ module Aurora
122
166
  end
123
167
 
124
168
  def query_registers(query)
125
- implicit = false
126
- ranges = query.split(",").map do |addr|
127
- case addr
128
- when "known"
129
- implicit = true
130
- Aurora::REGISTER_NAMES.keys
131
- when "valid"
132
- implicit = true
133
- break Aurora::REGISTER_RANGES
134
- when /^(\d+)(?:\.\.|-)(\d+)$/
135
- $1.to_i..$2.to_i
136
- else
137
- addr.to_i
138
- end
139
- end
140
- queries = Aurora.normalize_ranges(ranges)
141
- registers = {}
142
- queries.each do |subquery|
143
- registers.merge!(@modbus_slave.read_multiple_holding_registers(*subquery))
144
- rescue ::ModBus::Errors::IllegalDataAddress
145
- # maybe this unit doesn't respond to all the addresses we want?
146
- raise unless implicit
147
-
148
- # try each query individually
149
- subquery.each do |subsubquery|
150
- registers.merge!(@modbus_slave.read_multiple_holding_registers(subsubquery))
151
- rescue ::ModBus::Errors::IllegalDataAddress
152
- next
153
- end
154
- end
155
- registers
169
+ self.class.query_registers(@modbus_slave, query)
156
170
  end
157
171
 
158
172
  def refresh
@@ -175,6 +189,7 @@ module Aurora
175
189
  @error = registers[25] & 0x7fff
176
190
  @derated = (41..46).cover?(@error)
177
191
  @safe_mode = [47, 48, 49, 72, 74].include?(@error)
192
+ @line_voltage = registers[112]
178
193
  @aux_heat_watts = registers[1151]
179
194
  @total_watts = registers[1153]
180
195
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aurora
4
- VERSION = "0.7.5"
4
+ VERSION = "0.7.6"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waterfurnace_aurora
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-11 00:00:00.000000000 Z
11
+ date: 2022-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ccutrer-serialport