waterfurnace_aurora 0.7.5 → 0.7.6

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