bcs-interrogator 0.0.2 → 0.0.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 +7 -0
- data/README.md +1 -6
- data/lib/brewery_control_system.rb +106 -0
- data/lib/brewery_control_system/api.rb +94 -0
- data/lib/brewery_control_system/api/3.7.0/bcs_sys.rb +158 -0
- data/lib/brewery_control_system/api/3.7.0/device_endpoint.rb +25 -0
- data/lib/brewery_control_system/api/3.7.0/endpoint.rb +48 -0
- data/lib/brewery_control_system/api/3.7.0/setpoints.rb +15 -0
- data/lib/brewery_control_system/api/3.7.0/sysname.rb +247 -0
- data/lib/brewery_control_system/api/3.7.0/temperature_probe_names_endpoint.rb +21 -0
- data/lib/brewery_control_system/api/3.7.0/temperature_probes_endpoint.rb +42 -0
- data/lib/brewery_control_system/api/3.7.0/temps.rb +15 -0
- data/lib/brewery_control_system/api/3.7.0/ultemp.rb +117 -0
- data/lib/brewery_control_system/api/device.rb +8 -0
- data/lib/brewery_control_system/api/server_version.rb +7 -0
- data/lib/brewery_control_system/api/version_check.rb +26 -0
- data/lib/brewery_control_system/http_service.rb +27 -0
- data/lib/brewery_control_system/http_service/user_agent.rb +33 -0
- data/lib/brewery_control_system/input.rb +4 -0
- data/lib/brewery_control_system/middleware.rb +5 -0
- data/lib/brewery_control_system/middleware/registration.rb +18 -0
- data/lib/brewery_control_system/output.rb +4 -0
- data/lib/brewery_control_system/temperature_probe.rb +4 -0
- data/lib/brewery_control_system/version.rb +6 -0
- data/spec/spec_helper.rb +6 -1
- metadata +48 -80
- data/lib/bcs_interrogator.rb +0 -36
- data/lib/bcs_interrogator/api.rb +0 -46
- data/lib/bcs_interrogator/api/endpoint.rb +0 -61
- data/lib/bcs_interrogator/api/response.rb +0 -38
- data/lib/bcs_interrogator/api/sysname.rb +0 -227
- data/lib/bcs_interrogator/api/ultemp.rb +0 -110
- data/lib/bcs_interrogator/entity.rb +0 -43
- data/lib/bcs_interrogator/version.rb +0 -6
- data/spec/cases/api_spec.rb +0 -33
- data/spec/cases/bcs_interrogator_spec.rb +0 -4
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.join File.dirname(__FILE__), "ultemp"
|
2
|
+
class NRB::BreweryControlSystem::API
|
3
|
+
class Setpoints < Ultemp
|
4
|
+
|
5
|
+
register_middleware middleware_options(self)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def parse
|
10
|
+
return if body_array.nil?
|
11
|
+
setpoints
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
class NRB::BreweryControlSystem::API
|
2
|
+
class Sysname < Endpoint
|
3
|
+
# http://wiki.embeddedcc.com/index.php/Sysname.dat
|
4
|
+
# Entries in the sysname structure cannot be more than 16 characters
|
5
|
+
# Commas are not allowed
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def endpoint; 'sysname.dat'; end
|
9
|
+
end
|
10
|
+
|
11
|
+
DESCRIPTIONS = [
|
12
|
+
'Firmware Version',
|
13
|
+
'Process 0 name',
|
14
|
+
'Process 1 name',
|
15
|
+
'Process 2 name',
|
16
|
+
'Process 3 name',
|
17
|
+
'Process 0 State 0 name',
|
18
|
+
'Process 0 State 1 name',
|
19
|
+
'Process 0 State 2 name',
|
20
|
+
'Process 0 State 3 name',
|
21
|
+
'Process 0 State 4 name',
|
22
|
+
'Process 0 State 5 name',
|
23
|
+
'Process 0 State 6 name',
|
24
|
+
'Process 0 State 7 name',
|
25
|
+
'Process 1 State 0 name',
|
26
|
+
'Process 1 State 1 name',
|
27
|
+
'Process 1 State 2 name',
|
28
|
+
'Process 1 State 3 name',
|
29
|
+
'Process 1 State 4 name',
|
30
|
+
'Process 1 State 5 name',
|
31
|
+
'Process 1 State 6 name',
|
32
|
+
'Process 1 State 7 name',
|
33
|
+
'Process 2 State 0 name',
|
34
|
+
'Process 2 State 1 name',
|
35
|
+
'Process 2 State 2 name',
|
36
|
+
'Process 2 State 3 name',
|
37
|
+
'Process 2 State 4 name',
|
38
|
+
'Process 2 State 5 name',
|
39
|
+
'Process 2 State 6 name',
|
40
|
+
'Process 2 State 7 name',
|
41
|
+
'Process 3 State 0 name',
|
42
|
+
'Process 3 State 1 name',
|
43
|
+
'Process 3 State 2 name',
|
44
|
+
'Process 3 State 3 name',
|
45
|
+
'Process 3 State 4 name',
|
46
|
+
'Process 3 State 5 name',
|
47
|
+
'Process 3 State 6 name',
|
48
|
+
'Process 3 State 7 name',
|
49
|
+
'Output 0 name',
|
50
|
+
'Output 1 name',
|
51
|
+
'Output 2 name',
|
52
|
+
'Output 3 name',
|
53
|
+
'Output 4 name',
|
54
|
+
'Output 5 name',
|
55
|
+
'Din 0 name',
|
56
|
+
'Din 1 name',
|
57
|
+
'Din 2 name',
|
58
|
+
'Din 3 name',
|
59
|
+
'Process 0 Win 0 name',
|
60
|
+
'Process 0 Win 1 name',
|
61
|
+
'Process 0 Win 2 name',
|
62
|
+
'Process 0 Win 3 name',
|
63
|
+
'Process 1 Win 0 name',
|
64
|
+
'Process 1 Win 1 name',
|
65
|
+
'Process 1 Win 2 name',
|
66
|
+
'Process 1 Win 3 name',
|
67
|
+
'Process 2 Win 0 name',
|
68
|
+
'Process 2 Win 1 name',
|
69
|
+
'Process 2 Win 2 name',
|
70
|
+
'Process 2 Win 3 name',
|
71
|
+
'Process 3 Win 0 name',
|
72
|
+
'Process 3 Win 1 name',
|
73
|
+
'Process 3 Win 2 name',
|
74
|
+
'Process 3 Win 3 name',
|
75
|
+
'Temp Probe 0 name',
|
76
|
+
'Temp Probe 1 name',
|
77
|
+
'Temp Probe 2 name',
|
78
|
+
'Temp Probe 3 name',
|
79
|
+
'Process 0 Timer 0 name',
|
80
|
+
'Process 0 Timer 1 name',
|
81
|
+
'Process 0 Timer 2 name',
|
82
|
+
'Process 0 Timer 3 name',
|
83
|
+
'Process 1 Timer 0 name',
|
84
|
+
'Process 1 Timer 1 name',
|
85
|
+
'Process 1 Timer 2 name',
|
86
|
+
'Process 1 Timer 3 name',
|
87
|
+
'Process 2 Timer 0 name',
|
88
|
+
'Process 2 Timer 1 name',
|
89
|
+
'Process 2 Timer 2 name',
|
90
|
+
'Process 2 Timer 3 name',
|
91
|
+
'Process 3 Timer 0 name',
|
92
|
+
'Process 3 Timer 1 name',
|
93
|
+
'Process 3 Timer 2 name',
|
94
|
+
'Process 3 Timer 3 name',
|
95
|
+
'Reserved 0',
|
96
|
+
'Reserved 1',
|
97
|
+
'Temp Probe 4 name',
|
98
|
+
'Temp Probe 5 name',
|
99
|
+
'Temp Probe 6 name',
|
100
|
+
'Temp Probe 7 name',
|
101
|
+
'Din 4 name',
|
102
|
+
'Din 5 name',
|
103
|
+
'Din 6 name',
|
104
|
+
'Din 7 name',
|
105
|
+
'Output 6 name',
|
106
|
+
'Output 7 name',
|
107
|
+
'Output 8 name',
|
108
|
+
'Output 9 name',
|
109
|
+
'Output 10 name',
|
110
|
+
'Output 11 name',
|
111
|
+
'Output 12 name',
|
112
|
+
'Output 13 name',
|
113
|
+
'Output 14 name',
|
114
|
+
'Output 15 name',
|
115
|
+
'Output 16 name',
|
116
|
+
'Output 17 name',
|
117
|
+
'Process 4 name',
|
118
|
+
'Process 5 name',
|
119
|
+
'Process 6 name',
|
120
|
+
'Process 7 name',
|
121
|
+
'Process 4 State 0 name',
|
122
|
+
'Process 4 State 1 name',
|
123
|
+
'Process 4 State 2 name',
|
124
|
+
'Process 4 State 3 name',
|
125
|
+
'Process 4 State 4 name',
|
126
|
+
'Process 4 State 5 name',
|
127
|
+
'Process 4 State 6 name',
|
128
|
+
'Process 4 State 7 name',
|
129
|
+
'Process 5 State 0 name',
|
130
|
+
'Process 5 State 1 name',
|
131
|
+
'Process 5 State 2 name',
|
132
|
+
'Process 5 State 3 name',
|
133
|
+
'Process 5 State 4 name',
|
134
|
+
'Process 5 State 5 name',
|
135
|
+
'Process 5 State 6 name',
|
136
|
+
'Process 5 State 7 name',
|
137
|
+
'Process 6 State 0 name',
|
138
|
+
'Process 6 State 1 name',
|
139
|
+
'Process 6 State 2 name',
|
140
|
+
'Process 6 State 3 name',
|
141
|
+
'Process 6 State 4 name',
|
142
|
+
'Process 6 State 5 name',
|
143
|
+
'Process 6 State 6 name',
|
144
|
+
'Process 6 State 7 name',
|
145
|
+
'Process 7 State 0 name',
|
146
|
+
'Process 7 State 1 name',
|
147
|
+
'Process 7 State 2 name',
|
148
|
+
'Process 7 State 3 name',
|
149
|
+
'Process 7 State 4 name',
|
150
|
+
'Process 7 State 5 name',
|
151
|
+
'Process 7 State 6 name',
|
152
|
+
'Process 7 State 7 name',
|
153
|
+
'Process 4 Win 0 name',
|
154
|
+
'Process 4 Win 1 name',
|
155
|
+
'Process 4 Win 2 name',
|
156
|
+
'Process 4 Win 3 name',
|
157
|
+
'Process 5 Win 0 name',
|
158
|
+
'Process 5 Win 1 name',
|
159
|
+
'Process 5 Win 2 name',
|
160
|
+
'Process 5 Win 3 name',
|
161
|
+
'Process 6 Win 0 name',
|
162
|
+
'Process 6 Win 1 name',
|
163
|
+
'Process 6 Win 2 name',
|
164
|
+
'Process 6 Win 3 name',
|
165
|
+
'Process 7 Win 0 name',
|
166
|
+
'Process 7 Win 1 name',
|
167
|
+
'Process 7 Win 2 name',
|
168
|
+
'Process 7 Win 3 name',
|
169
|
+
'4 Timer 0 name',
|
170
|
+
'4 Timer 1 name',
|
171
|
+
'4 Timer 2 name',
|
172
|
+
'4 Timer 3 name',
|
173
|
+
'5 Timer 0 name',
|
174
|
+
'5 Timer 1 name',
|
175
|
+
'5 Timer 2 name',
|
176
|
+
'5 Timer 3 name',
|
177
|
+
'6 Timer 0 name',
|
178
|
+
'6 Timer 1 name',
|
179
|
+
'6 Timer 2 name',
|
180
|
+
'6 Timer 3 name',
|
181
|
+
'7 Timer 0 name',
|
182
|
+
'7 Timer 1 name',
|
183
|
+
'7 Timer 2 name',
|
184
|
+
'7 Timer 3 name',
|
185
|
+
'Reserved 2',
|
186
|
+
'Reserved 3',
|
187
|
+
'Reserved 4',
|
188
|
+
'Reserved 5',
|
189
|
+
'Reserved 6',
|
190
|
+
'Reserved 7',
|
191
|
+
'Reserved 8',
|
192
|
+
'Reserved 9',
|
193
|
+
'Reserved 10',
|
194
|
+
'Reserved 11',
|
195
|
+
'Reserved 12',
|
196
|
+
'Reserved 13',
|
197
|
+
'Reserved 14',
|
198
|
+
'Reserved 15',
|
199
|
+
'Reserved 16',
|
200
|
+
'Reserved 17',
|
201
|
+
'Reserved 18',
|
202
|
+
'Reserved 19',
|
203
|
+
'Reserved 20',
|
204
|
+
'Reserved 21',
|
205
|
+
'Reserved 22',
|
206
|
+
'Reserved 23',
|
207
|
+
'Reserved 24',
|
208
|
+
'Reserved 25',
|
209
|
+
'Reserved 26',
|
210
|
+
'Reserved 27',
|
211
|
+
'Reserved 28',
|
212
|
+
'Reserved 29',
|
213
|
+
'Reserved 30',
|
214
|
+
'Reserved 31',
|
215
|
+
'Reserved 32',
|
216
|
+
'Reserved 33',
|
217
|
+
'Reserved 34'
|
218
|
+
].freeze
|
219
|
+
|
220
|
+
def descriptions; DESCRIPTIONS; end
|
221
|
+
|
222
|
+
# def input_names; data[43..46] + data[89..92]; end
|
223
|
+
# def output_names; data[37..42] + data[93..104]; end
|
224
|
+
# def temp_probe_names; data[63..66] + data[85..88]; end
|
225
|
+
|
226
|
+
register_middleware middleware_options(self)
|
227
|
+
|
228
|
+
private
|
229
|
+
|
230
|
+
attr_accessor :body_text
|
231
|
+
|
232
|
+
def body_array
|
233
|
+
super.map { |str| str.strip[/.+/m] }
|
234
|
+
end
|
235
|
+
|
236
|
+
|
237
|
+
def parse
|
238
|
+
raise "Stop using this"
|
239
|
+
return if body_text.nil?
|
240
|
+
body_array.each_with_index.inject({}) do |hash,(body,i)|
|
241
|
+
hash[descriptions[i]] = body_array[i]
|
242
|
+
hash
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class NRB::BreweryControlSystem::API
|
2
|
+
class TemperatureProbeNamesEndpoint < Endpoint
|
3
|
+
# http://wiki.embeddedcc.com/index.php/sysname.dat
|
4
|
+
class << self
|
5
|
+
def endpoint; 'sysname.dat'; end
|
6
|
+
end
|
7
|
+
|
8
|
+
register_middleware middleware_options(self)
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def body_array
|
13
|
+
super.map { |val| val.strip[/.+/m] }
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def parse
|
18
|
+
[ *body_array[63..66], *body_array[85..88] ].compact
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.join File.dirname(__FILE__), "temperature_probe_names_endpoint.rb"
|
2
|
+
class NRB::BreweryControlSystem::API
|
3
|
+
class TemperatureProbesEndpoint
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def fetch(api: nil)
|
7
|
+
new(api: api).fetch
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def fetch
|
13
|
+
names = http_service do |b|
|
14
|
+
b.response TemperatureProbeNamesEndpoint
|
15
|
+
end.get(TemperatureProbeNamesEndpoint.endpoint).body
|
16
|
+
ultemp = http_service do |b|
|
17
|
+
b.response Ultemp
|
18
|
+
end.get(Ultemp.endpoint).body
|
19
|
+
temps = ultemp[34..41]
|
20
|
+
setpoints = ultemp[42..49]
|
21
|
+
names.each_with_index.collect do |name,i|
|
22
|
+
NRB::BreweryControlSystem::TemperatureProbe.new name, temps[i], setpoints[i]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def http_service &block
|
28
|
+
api.http_service &block
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def initialize(api: nil)
|
33
|
+
raise ArgumentError.new("Need an api") if api.nil?
|
34
|
+
self.api = api
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
attr_accessor :api
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class NRB::BreweryControlSystem::API
|
2
|
+
class Ultemp < Endpoint
|
3
|
+
# http://wiki.embeddedcc.com/index.php/Ultemp.dat
|
4
|
+
# All entries in the ultemp structure have to be in the range
|
5
|
+
# 0 <= ultemp < 2^32
|
6
|
+
# Commas are not allowed
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def endpoint; 'ultemp.dat'; end
|
10
|
+
end
|
11
|
+
|
12
|
+
register_middleware middleware_options(self)
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def alarm
|
17
|
+
body_array[54].to_s(2).rjust(9,"0")[8] == "1"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def bit_range(data, range)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def body_array
|
26
|
+
super.map { |i| i.to_i }
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def body_array_by_ten(range)
|
31
|
+
collect_body_array(range) { |t| t.to_f / 10.0 }
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def collect_body_array(range, &block)
|
36
|
+
body_array[range].collect &block
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def decode_current_state(int)
|
41
|
+
# http://forum.embeddedcc.com/viewtopic.php?f=9&t=484&p=2513
|
42
|
+
( "%08x" % int ).scan(/[0-9a-f\.]{2}/).reverse.collect { |hex| hex == ".." || hex == "ff" ? nil : hex.to_i(16) }
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def input_statuses
|
47
|
+
unmask_boolean body_array[2], 0..7
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def internal_registers
|
52
|
+
unmask_boolean body_array[53], 0..15
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def output_statuses
|
57
|
+
unmask_boolean body_array[1], 0..17
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def parse
|
62
|
+
return if body_array.nil?
|
63
|
+
[ *running_processes,
|
64
|
+
*output_statuses,
|
65
|
+
*input_statuses,
|
66
|
+
*temps,
|
67
|
+
*setpoints,
|
68
|
+
*processes_current_state,
|
69
|
+
*process_timers,
|
70
|
+
*internal_registers,
|
71
|
+
*process_pause_states,
|
72
|
+
alarm
|
73
|
+
]
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def process_pause_states
|
78
|
+
unmask_boolean body_array[54], 0..7
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def processes_current_state
|
83
|
+
[ *decode_current_state(body_array[19]), *decode_current_state(body_array[20]) ]
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def process_timers
|
88
|
+
body_array[21..52]
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def running_processes
|
93
|
+
unmask_boolean body_array[0], 0..7
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
def temps
|
98
|
+
body_array_by_ten(3..10)
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def setpoints
|
103
|
+
body_array_by_ten(11..18)
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
def unmask(masked, range)
|
108
|
+
range.collect { |i| masked & (2**i) }
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
def unmask_boolean(masked, range)
|
113
|
+
unmask(masked, range).collect { |unmasked| unmasked > 0 }
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|