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.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -6
  3. data/lib/brewery_control_system.rb +106 -0
  4. data/lib/brewery_control_system/api.rb +94 -0
  5. data/lib/brewery_control_system/api/3.7.0/bcs_sys.rb +158 -0
  6. data/lib/brewery_control_system/api/3.7.0/device_endpoint.rb +25 -0
  7. data/lib/brewery_control_system/api/3.7.0/endpoint.rb +48 -0
  8. data/lib/brewery_control_system/api/3.7.0/setpoints.rb +15 -0
  9. data/lib/brewery_control_system/api/3.7.0/sysname.rb +247 -0
  10. data/lib/brewery_control_system/api/3.7.0/temperature_probe_names_endpoint.rb +21 -0
  11. data/lib/brewery_control_system/api/3.7.0/temperature_probes_endpoint.rb +42 -0
  12. data/lib/brewery_control_system/api/3.7.0/temps.rb +15 -0
  13. data/lib/brewery_control_system/api/3.7.0/ultemp.rb +117 -0
  14. data/lib/brewery_control_system/api/device.rb +8 -0
  15. data/lib/brewery_control_system/api/server_version.rb +7 -0
  16. data/lib/brewery_control_system/api/version_check.rb +26 -0
  17. data/lib/brewery_control_system/http_service.rb +27 -0
  18. data/lib/brewery_control_system/http_service/user_agent.rb +33 -0
  19. data/lib/brewery_control_system/input.rb +4 -0
  20. data/lib/brewery_control_system/middleware.rb +5 -0
  21. data/lib/brewery_control_system/middleware/registration.rb +18 -0
  22. data/lib/brewery_control_system/output.rb +4 -0
  23. data/lib/brewery_control_system/temperature_probe.rb +4 -0
  24. data/lib/brewery_control_system/version.rb +6 -0
  25. data/spec/spec_helper.rb +6 -1
  26. metadata +48 -80
  27. data/lib/bcs_interrogator.rb +0 -36
  28. data/lib/bcs_interrogator/api.rb +0 -46
  29. data/lib/bcs_interrogator/api/endpoint.rb +0 -61
  30. data/lib/bcs_interrogator/api/response.rb +0 -38
  31. data/lib/bcs_interrogator/api/sysname.rb +0 -227
  32. data/lib/bcs_interrogator/api/ultemp.rb +0 -110
  33. data/lib/bcs_interrogator/entity.rb +0 -43
  34. data/lib/bcs_interrogator/version.rb +0 -6
  35. data/spec/cases/api_spec.rb +0 -33
  36. 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,15 @@
1
+ require File.join File.dirname(__FILE__), "ultemp"
2
+ class NRB::BreweryControlSystem::API
3
+ class Temps < Ultemp
4
+
5
+ register_middleware middleware_options(self)
6
+
7
+ private
8
+
9
+ def parse
10
+ return if body_array.nil?
11
+ temps
12
+ end
13
+
14
+ end
15
+ 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