bcs-interrogator 0.0.2 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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