teleinfo 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0fff90f0c5a96ba7ce18008cacf9d0a02151cce6
4
+ data.tar.gz: b9d54e2c926883c823527c65645858d7d5849a60
5
+ SHA512:
6
+ metadata.gz: d79d6660882afc6decc98d13788ab6478b08677456f49dc6da24e57001b201e9a76b8ffea431466ab6dc136a6523046d4bce01f31d6c8e69738d716fe160baa3
7
+ data.tar.gz: 5ad19d77ee7142b9ccb9fd7d81c027f820e9ce0752e37f97eb8b3de56d9d3c2fef45269a3b34ce370d941fba3ffb54481504f2914a0763ec50ed5690180cb9e7
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1 @@
1
+ 2.1.5
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in teleinfo.gemspec
4
+ gemspec
@@ -0,0 +1,40 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %(app lib config test spec feature)
6
+ directories %w(lib spec)
7
+
8
+ ## Uncomment to clear the screen before every task
9
+ # clearing :on
10
+
11
+ # Note: The cmd option is now required due to the increasing number of ways
12
+ # rspec may be run, below are examples of the most common uses.
13
+ # * bundler: 'bundle exec rspec'
14
+ # * bundler binstubs: 'bin/rspec'
15
+ # * spring: 'bin/rsspec' (This will use spring if running and you have
16
+ # installed the spring binstubs per the docs)
17
+ # * zeus: 'zeus rspec' (requires the server to be started separetly)
18
+ # * 'just' rspec: 'rspec'
19
+ guard :rspec, cmd: 'bundle exec rspec' do
20
+ watch(%r{^spec/.+_spec\.rb$})
21
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
22
+ watch('spec/spec_helper.rb') { "spec" }
23
+
24
+ # Rails example
25
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
26
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
27
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
28
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
29
+ watch('config/routes.rb') { "spec/routing" }
30
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
31
+ watch('spec/rails_helper.rb') { "spec" }
32
+
33
+ # Capybara features specs
34
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
35
+
36
+ # Turnip features and steps
37
+ watch(%r{^spec/acceptance/(.+)\.feature$})
38
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
39
+ end
40
+
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Thomas Lecavelier
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,58 @@
1
+ # Teleinfo
2
+
3
+ [![Build Status](https://travis-ci.org/ook/teleinfo.svg?branch=master)](https://travis-ci.org/ook/teleinfo)
4
+
5
+ ## English:
6
+ It's a simple parser for "téléinfo", the data stream available on french electric meters since the 2000.
7
+ Data are available as modulations (1200 bauds) on 2 wires directly on the meter. It provides plenty of
8
+ interesting informations: meter identification, subscribed power, subscribed contract, immediate power
9
+ consumption, etc.
10
+ Since this program concern a french only device, the other documentation will be redacted in french.
11
+
12
+ ## Français :
13
+ Il s'agit d'un simple interpréteur de trames téléinfo EDF. Ce programme est testé sur un Raspberry Pi B.
14
+ Il permet de déchiffrer chaque trame et en fournir une représentation simple à traiter.
15
+
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ gem 'teleinfo'
23
+ ```
24
+
25
+ And then execute:
26
+
27
+ $ bundle
28
+
29
+ Or install it yourself as:
30
+
31
+ $ gem install teleinfo
32
+
33
+ ## Usage
34
+
35
+ You can use the binary embedded into the gem: teleinfo <file> (were file can be a regular file containing raw teleinfo datas or STDIN)
36
+
37
+ On my side, I mounted on my Rasperry Pi a /dev/ttyAMA0 according the instructions from http://www.magdiblog.fr/gpio/teleinfo-edf-suivi-conso-de-votre-compteur-electrique/
38
+ So I just run:
39
+
40
+ $ teleinfo /dev/ttyAMA0
41
+
42
+ or
43
+
44
+ $ cat /dev/ttyAMA0 | teleinfo
45
+
46
+ You'll get on stdout a Hash representation like:
47
+
48
+ {"adco":"424242424242","optarif":"HC","isousc":30,"hchc":25036224,"hchp":40244232,"ptec":"HP","iinst":16,"imax":41,"papp":3580,"hhphc":"D"}
49
+
50
+ Since I have only a counter with HPHC option, feel free to send me a dump of your counter if you want I handle your options set (please create an issue for it).
51
+
52
+ ## Contributing
53
+
54
+ 1. Fork it ( https://github.com/ook/teleinfo/fork )
55
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
56
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
57
+ 4. Push to the branch (`git push origin my-new-feature`)
58
+ 5. Create a new Pull Request
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'guard' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('guard', 'guard')
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'teleinfo'
4
+
5
+ file = ARGF
6
+
7
+ if file.nil?
8
+ puts %{
9
+ Téléinfo v#{Teleinfo::VERSION}
10
+
11
+ Usage: cat /dev/ttyAMA0 | teleinfo
12
+ teleinfo /dev/ttyAMA0
13
+ teleinfo raw_file
14
+
15
+ }
16
+ exit 1
17
+ end
18
+ teleinfo = Teleinfo::Parser.new(file)
19
+ trap('SIGTERM', proc { teleinfo.stop! } )
20
+ count = teleinfo.each { |f| puts f.to_json }
21
+ puts
22
+ puts "#{count} frames read."
23
+
@@ -0,0 +1,71 @@
1
+ require 'teleinfo/version'
2
+ require 'teleinfo/frame'
3
+
4
+ require 'json'
5
+
6
+ module Teleinfo
7
+ class Parser
8
+ def initialize(file)
9
+ fail ArgumentError.new('Must respond to #readline') unless file.respond_to?('readline')
10
+ @file = file
11
+ @frames = []
12
+ @fully_parsed = false # indicate EOF readched
13
+ end
14
+
15
+ def next(only_valid: true, store_frame: false)
16
+ begin
17
+ frame = []
18
+ until @line =~ /ADCO/
19
+ @line = @file.readline
20
+ end
21
+ frame << @line.chomp if @line.length > 6
22
+ @line = @file.readline
23
+ until @line =~ /ADCO/
24
+ frame << @line.chomp if @line.length > 6
25
+ @line = @file.readline
26
+ end
27
+ teleinfo_frame = Teleinfo::Frame.new(frame)
28
+ if teleinfo_frame.errors.empty?
29
+ @frames << teleinfo_frame if store_frame
30
+ elsif only_valid && !@fully_parsed
31
+ raise teleinfo_frame.errors.inspect
32
+ teleinfo_frame = self.next(true)
33
+ end
34
+ teleinfo_frame
35
+ rescue EOFError => error
36
+ @fully_parsed = true
37
+ @frames.freeze if store_frame
38
+ nil
39
+ end
40
+ end
41
+
42
+ # Warning: for STDIN, will wait for EOF
43
+ def read_all
44
+ unless @fully_parsed
45
+ last_frame = self.next(store_frame: true)
46
+ until last_frame.nil? || @fully_parsed
47
+ self.next(store_frame: true)
48
+ end
49
+ end
50
+ @frames.length
51
+ end
52
+
53
+ def stop!
54
+ @fully_parsed = true
55
+ self
56
+ end
57
+
58
+ def each
59
+ count = 0
60
+ until (frame = self.next).nil? || @fully_parsed
61
+ yield frame if block_given?
62
+ count += 1
63
+ end
64
+ count
65
+ end
66
+
67
+ def frames
68
+ @fully_parsed ? @frames : @frames.dup
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,58 @@
1
+ module Teleinfo
2
+ # Take an array of String to parse as a Téléinfo Frame
3
+ class Frame
4
+ attr_reader :errors
5
+
6
+ def initialize(lines)
7
+ fail ArgumentError.new('Must instanciate with a non empty array of String') if !lines.is_a?(Array) || lines.empty? || lines.any? { |line| !line.is_a?(String) }
8
+ tokenize(lines)
9
+ end
10
+
11
+ def to_hash
12
+ @data
13
+ end
14
+
15
+ def to_json
16
+ @data.to_json
17
+ end
18
+
19
+ protected
20
+ # Once parsed, @data and @errors are frozen since there's no need to alter them
21
+ def tokenize(lines)
22
+ @errors = []
23
+ @data = {}
24
+ lines.each do |line|
25
+ case line
26
+ when /^ADCO (\S{12}) ./
27
+ @data[:adco] = $1
28
+ when /^OPTARIF (....) ./
29
+ @data[:optarif] = $1.sub(/\.+$/, '')
30
+ when /^ISOUSC (\d{2}) ./
31
+ @data[:isousc] = $1.to_i
32
+ when /^HCHC (\d{9}) ./
33
+ @data[:hchc] = $1.to_i
34
+ when /^HCHP (\d{9}) ./
35
+ @data[:hchp] = $1.to_i
36
+ when /^PAPP (\d{5}) ./
37
+ @data[:papp] = $1.to_i
38
+ when /^PTEC (\S{4}) ./
39
+ @data[:ptec] = $1.sub(/\.+$/, '')
40
+ when /^IINST (\d{3}) ./
41
+ @data[:iinst] = $1.to_i
42
+ when /^IMAX (\d{3}) ./
43
+ @data[:imax] = $1.to_i
44
+ when /^HHPHC (\S{1})/
45
+ @data[:hhphc] = $1
46
+ when /^ADPS (\d{3})/
47
+ @data[:adps] = $1.to_i
48
+ when /MOTDETAT/
49
+ # always 00000…
50
+ else
51
+ @errors << "Can't parse: #{line}"
52
+ end
53
+ end
54
+ @data.freeze
55
+ @errors.freeze
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module Teleinfo
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ StringFrame = [
4
+ 'ADCO 424242424242 E',
5
+ 'OPTARIF HC.. <',
6
+ 'ISOUSC 30 9',
7
+ 'HCHC 023995979 ;',
8
+ 'HCHP 038653523 6',
9
+ 'PTEC HP.. ',
10
+ 'IINST 008 _',
11
+ 'IMAX 041 D',
12
+ 'PAPP 01770 0',
13
+ 'HHPHC D'
14
+ ]
15
+
16
+ describe Teleinfo::Frame do
17
+ it 'should instanciate only with a non empty Array of String' do
18
+ expect{ Teleinfo::Frame.new() }.to raise_error
19
+ expect{ Teleinfo::Frame.new(nil) }.to raise_error
20
+ expect{ Teleinfo::Frame.new([]) }.to raise_error
21
+ expect{ Teleinfo::Frame.new([nil]) }.to raise_error
22
+ expect{ Teleinfo::Frame.new([:pouet]) }.to raise_error
23
+ expect{ Teleinfo::Frame.new(['ok']) }.not_to raise_error
24
+ expect{ Teleinfo::Frame.new(['ok', 'ok', 'ok']) }.not_to raise_error
25
+ end
26
+
27
+ it 'should have no error when parsing a correct frame' do
28
+ frame = Teleinfo::Frame.new(StringFrame)
29
+ expect(frame.errors).to eq([])
30
+ end
31
+
32
+ it 'should return valid Hash on #to_hash' do
33
+ frame = Teleinfo::Frame.new(StringFrame)
34
+ expect(frame.to_hash).to eq({
35
+ :adco=>"424242424242",
36
+ :optarif=>"HC",
37
+ :isousc=>30,
38
+ :hchc=>23995979,
39
+ :hchp=>38653523,
40
+ :ptec=>"HP",
41
+ :iinst=>8,
42
+ :imax=>41,
43
+ :papp=>1770,
44
+ :hhphc=>"D"
45
+ })
46
+ end
47
+ end
@@ -0,0 +1,1302 @@
1
+ 3549 E
2
+
3
+ OPTARIF HC.. <
4
+
5
+ ISOUSC 30 9
6
+
7
+ HCHC 023995979 ;
8
+
9
+ HCHP 038653522 5
10
+
11
+ PTEC HP..
12
+
13
+ IINST 008 _
14
+
15
+ IMAX 041 D
16
+
17
+ PAPP 01770 0
18
+
19
+ HHPHC D /
20
+
21
+ 
22
+ ADCO 424242424242 E
23
+
24
+ OPTARIF HC.. <
25
+
26
+ ISOUSC 30 9
27
+
28
+ HCHC 023995979 ;
29
+
30
+ HCHP 038653523 6
31
+
32
+ PTEC HP..
33
+
34
+ IINST 008 _
35
+
36
+ IMAX 041 D
37
+
38
+ PAPP 01770 0
39
+
40
+ HHPHC D /
41
+
42
+ 
43
+ ADCO 424242424242 E
44
+
45
+ OPTARIF HC.. <
46
+
47
+ ISOUSC 30 9
48
+
49
+ HCHC 023995979 ;
50
+
51
+ HCHP 038653524 7
52
+
53
+ PTEC HP..
54
+
55
+ IINST 008 _
56
+
57
+ IMAX 041 D
58
+
59
+ PAPP 01760 /
60
+
61
+ HHPHC D /
62
+
63
+ 
64
+ ADCO 424242424242 E
65
+
66
+ OPTARIF HC.. <
67
+
68
+ ISOUSC 30 9
69
+
70
+ HCHC 023995979 ;
71
+
72
+ HCHP 038653524 7
73
+
74
+ PTEC HP..
75
+
76
+ IINST 008 _
77
+
78
+ IMAX 041 D
79
+
80
+ PAPP 01760 /
81
+
82
+ HHPHC D /
83
+
84
+ 
85
+ ADCO 424242424242 E
86
+
87
+ OPTARIF HC.. <
88
+
89
+ ISOUSC 30 9
90
+
91
+ HCHC 023995979 ;
92
+
93
+ HCHP 038653525 8
94
+
95
+ PTEC HP..
96
+
97
+ IINST 008 _
98
+
99
+ IMAX 041 D
100
+
101
+ PAPP 01760 /
102
+
103
+ HHPHC D /
104
+
105
+ 
106
+ ADCO 424242424242 E
107
+
108
+ OPTARIF HC.. <
109
+
110
+ ISOUSC 30 9
111
+
112
+ HCHC 023995979 ;
113
+
114
+ HCHP 038653526 9
115
+
116
+ PTEC HP..
117
+
118
+ IINST 008 _
119
+
120
+ IMAX 041 D
121
+
122
+ PAPP 01760 /
123
+
124
+ HHPHC D /
125
+
126
+ 
127
+ ADCO 424242424242 E
128
+
129
+ OPTARIF HC.. <
130
+
131
+ ISOUSC 30 9
132
+
133
+ HCHC 023995979 ;
134
+
135
+ HCHP 038653527 :
136
+
137
+ PTEC HP..
138
+
139
+ IINST 012 Z
140
+
141
+ IMAX 041 D
142
+
143
+ PAPP 02680 1
144
+
145
+ HHPHC D /
146
+
147
+ 
148
+ ADCO 424242424242 E
149
+
150
+ OPTARIF HC.. <
151
+
152
+ ISOUSC 30 9
153
+
154
+ HCHC 023995979 ;
155
+
156
+ HCHP 038653528 ;
157
+
158
+ PTEC HP..
159
+
160
+ IINST 009
161
+
162
+ IMAX 041 D
163
+
164
+ PAPP 02070 *
165
+
166
+ HHPHC D /
167
+
168
+ 
169
+ ADCO 424242424242 E
170
+
171
+ OPTARIF HC.. <
172
+
173
+ ISOUSC 30 9
174
+
175
+ HCHC 023995979 ;
176
+
177
+ HCHP 038653528 ;
178
+
179
+ PTEC HP..
180
+
181
+ IINST 008 _
182
+
183
+ IMAX 041 D
184
+
185
+ PAPP 01760 /
186
+
187
+ HHPHC D /
188
+
189
+ 
190
+ ADCO 424242424242 E
191
+
192
+ OPTARIF HC.. <
193
+
194
+ ISOUSC 30 9
195
+
196
+ HCHC 023995979 ;
197
+
198
+ HCHP 038653529 <
199
+
200
+ PTEC HP..
201
+
202
+ IINST 008 _
203
+
204
+ IMAX 041 D
205
+
206
+ PAPP 01940 /
207
+
208
+ HHPHC D /
209
+
210
+ 
211
+ ADCO 424242424242 E
212
+
213
+ OPTARIF HC.. <
214
+
215
+ ISOUSC 30 9
216
+
217
+ HCHC 023995979 ;
218
+
219
+ HCHP 038653530 4
220
+
221
+ PTEC HP..
222
+
223
+ IINST 008 _
224
+
225
+ IMAX 041 D
226
+
227
+ PAPP 01760 /
228
+
229
+ HHPHC D /
230
+
231
+ 
232
+ ADCO 424242424242 E
233
+
234
+ OPTARIF HC.. <
235
+
236
+ ISOUSC 30 9
237
+
238
+ HCHC 023995979 ;
239
+
240
+ HCHP 038653530 4
241
+
242
+ PTEC HP..
243
+
244
+ IINST 007 ^
245
+
246
+ IMAX 041 D
247
+
248
+ PAPP 01560 -
249
+
250
+ HHPHC D /
251
+
252
+ 
253
+ ADCO 424242424242 E
254
+
255
+ OPTARIF HC.. <
256
+
257
+ ISOUSC 30 9
258
+
259
+ HCHC 023995979 ;
260
+
261
+ HCHP 038653531 5
262
+
263
+ PTEC HP..
264
+
265
+ IINST 003 Z
266
+
267
+ IMAX 041 D
268
+
269
+ PAPP 00810 *
270
+
271
+ HHPHC D /
272
+
273
+ 
274
+ ADCO 424242424242 E
275
+
276
+ OPTARIF HC.. <
277
+
278
+ ISOUSC 30 9
279
+
280
+ HCHC 023995979 ;
281
+
282
+ HCHP 038653531 5
283
+
284
+ PTEC HP..
285
+
286
+ IINST 004 [
287
+
288
+ IMAX 041 D
289
+
290
+ PAPP 01000 "
291
+
292
+ HHPHC D /
293
+
294
+ 
295
+ ADCO 424242424242 E
296
+
297
+ OPTARIF HC.. <
298
+
299
+ ISOUSC 30 9
300
+
301
+ HCHC 023995979 ;
302
+
303
+ HCHP 038653531 5
304
+
305
+ PTEC HP..
306
+
307
+ IINST 004 [
308
+
309
+ IMAX 041 D
310
+
311
+ PAPP 00950 /
312
+
313
+ HHPHC D /
314
+
315
+ 
316
+ ADCO 424242424242 E
317
+
318
+ OPTARIF HC.. <
319
+
320
+ ISOUSC 30 9
321
+
322
+ HCHC 023995979 ;
323
+
324
+ HCHP 038653532 6
325
+
326
+ PTEC HP..
327
+
328
+ IINST 003 Z
329
+
330
+ IMAX 041 D
331
+
332
+ PAPP 00810 *
333
+
334
+ HHPHC D /
335
+
336
+ 
337
+ ADCO 424242424242 E
338
+
339
+ OPTARIF HC.. <
340
+
341
+ ISOUSC 30 9
342
+
343
+ HCHC 023995979 ;
344
+
345
+ HCHP 038653532 6
346
+
347
+ PTEC HP..
348
+
349
+ IINST 003 Z
350
+
351
+ IMAX 041 D
352
+
353
+ PAPP 00810 *
354
+
355
+ HHPHC D /
356
+
357
+ 
358
+ ADCO 424242424242 E
359
+
360
+ OPTARIF HC.. <
361
+
362
+ ISOUSC 30 9
363
+
364
+ HCHC 023995979 ;
365
+
366
+ HCHP 038653533 7
367
+
368
+ PTEC HP..
369
+
370
+ IINST 003 Z
371
+
372
+ IMAX 041 D
373
+
374
+ PAPP 01690 1
375
+
376
+ HHPHC D /
377
+
378
+ 
379
+ ADCO 424242424242 E
380
+
381
+ OPTARIF HC.. <
382
+
383
+ ISOUSC 30 9
384
+
385
+ HCHC 023995979 ;
386
+
387
+ HCHP 038653533 7
388
+
389
+ PTEC HP..
390
+
391
+ IINST 008 _
392
+
393
+ IMAX 041 D
394
+
395
+ PAPP 01800 *
396
+
397
+ HHPHC D /
398
+
399
+ 
400
+ ADCO 424242424242 E
401
+
402
+ OPTARIF HC.. <
403
+
404
+ ISOUSC 30 9
405
+
406
+ HCHC 023995979 ;
407
+
408
+ HCHP 038653534 8
409
+
410
+ PTEC HP..
411
+
412
+ IINST 008 _
413
+
414
+ IMAX 041 D
415
+
416
+ PAPP 01790 2
417
+
418
+ HHPHC D /
419
+
420
+ 
421
+ ADCO 424242424242 E
422
+
423
+ OPTARIF HC.. <
424
+
425
+ ISOUSC 30 9
426
+
427
+ HCHC 023995979 ;
428
+
429
+ HCHP 038653535 9
430
+
431
+ PTEC HP..
432
+
433
+ IINST 008 _
434
+
435
+ IMAX 041 D
436
+
437
+ PAPP 01790 2
438
+
439
+ HHPHC D /
440
+
441
+ 
442
+ ADCO 424242424242 E
443
+
444
+ OPTARIF HC.. <
445
+
446
+ ISOUSC 30 9
447
+
448
+ HCHC 023995979 ;
449
+
450
+ HCHP 038653535 9
451
+
452
+ PTEC HP..
453
+
454
+ IINST 008 _
455
+
456
+ IMAX 041 D
457
+
458
+ PAPP 01790 2
459
+
460
+ HHPHC D /
461
+
462
+ 
463
+ ADCO 424242424242 E
464
+
465
+ OPTARIF HC.. <
466
+
467
+ ISOUSC 30 9
468
+
469
+ HCHC 023995979 ;
470
+
471
+ HCHP 038653536 :
472
+
473
+ PTEC HP..
474
+
475
+ IINST 008 _
476
+
477
+ IMAX 041 D
478
+
479
+ PAPP 01790 2
480
+
481
+ HHPHC D /
482
+
483
+ 
484
+ ADCO 424242424242 E
485
+
486
+ OPTARIF HC.. <
487
+
488
+ ISOUSC 30 9
489
+
490
+ HCHC 023995979 ;
491
+
492
+ HCHP 038653537 ;
493
+
494
+ PTEC HP..
495
+
496
+ IINST 008 _
497
+
498
+ IMAX 041 D
499
+
500
+ PAPP 01790 2
501
+
502
+ HHPHC D /
503
+
504
+ 
505
+ ADCO 424242424242 E
506
+
507
+ OPTARIF HC.. <
508
+
509
+ ISOUSC 30 9
510
+
511
+ HCHC 023995979 ;
512
+
513
+ HCHP 038653537 ;
514
+
515
+ PTEC HP..
516
+
517
+ IINST 008 _
518
+
519
+ IMAX 041 D
520
+
521
+ PAPP 01790 2
522
+
523
+ HHPHC D /
524
+
525
+ 
526
+ ADCO 424242424242 E
527
+
528
+ OPTARIF HC.. <
529
+
530
+ ISOUSC 30 9
531
+
532
+ HCHC 023995979 ;
533
+
534
+ HCHP 038653538 <
535
+
536
+ PTEC HP..
537
+
538
+ IINST 008 _
539
+
540
+ IMAX 041 D
541
+
542
+ PAPP 01800 *
543
+
544
+ HHPHC D /
545
+
546
+ 
547
+ ADCO 424242424242 E
548
+
549
+ OPTARIF HC.. <
550
+
551
+ ISOUSC 30 9
552
+
553
+ HCHC 023995979 ;
554
+
555
+ HCHP 038653539 =
556
+
557
+ PTEC HP..
558
+
559
+ IINST 008 _
560
+
561
+ IMAX 041 D
562
+
563
+ PAPP 01800 *
564
+
565
+ HHPHC D /
566
+
567
+ 
568
+ ADCO 424242424242 E
569
+
570
+ OPTARIF HC.. <
571
+
572
+ ISOUSC 30 9
573
+
574
+ HCHC 023995979 ;
575
+
576
+ HCHP 038653540 5
577
+
578
+ PTEC HP..
579
+
580
+ IINST 012 Z
581
+
582
+ IMAX 041 D
583
+
584
+ PAPP 02760 0
585
+
586
+ HHPHC D /
587
+
588
+ 
589
+ ADCO 424242424242 E
590
+
591
+ OPTARIF HC.. <
592
+
593
+ ISOUSC 30 9
594
+
595
+ HCHC 023995979 ;
596
+
597
+ HCHP 038653541 6
598
+
599
+ PTEC HP..
600
+
601
+ IINST 012 Z
602
+
603
+ IMAX 041 D
604
+
605
+ PAPP 02750 /
606
+
607
+ HHPHC D /
608
+
609
+ 
610
+ ADCO 424242424242 E
611
+
612
+ OPTARIF HC.. <
613
+
614
+ ISOUSC 30 9
615
+
616
+ HCHC 023995979 ;
617
+
618
+ HCHP 038653542 7
619
+
620
+ PTEC HP..
621
+
622
+ IINST 012 Z
623
+
624
+ IMAX 041 D
625
+
626
+ PAPP 02760 0
627
+
628
+ HHPHC D /
629
+
630
+ 
631
+ ADCO 424242424242 E
632
+
633
+ OPTARIF HC.. <
634
+
635
+ ISOUSC 30 9
636
+
637
+ HCHC 023995979 ;
638
+
639
+ HCHP 038653543 8
640
+
641
+ PTEC HP..
642
+
643
+ IINST 013 [
644
+
645
+ IMAX 041 D
646
+
647
+ PAPP 02950 1
648
+
649
+ HHPHC D /
650
+
651
+ 
652
+ ADCO 424242424242 E
653
+
654
+ OPTARIF HC.. <
655
+
656
+ ISOUSC 30 9
657
+
658
+ HCHC 023995979 ;
659
+
660
+ HCHP 038653544 9
661
+
662
+ PTEC HP..
663
+
664
+ IINST 012 Z
665
+
666
+ IMAX 041 D
667
+
668
+ PAPP 02760 0
669
+
670
+ HHPHC D /
671
+
672
+ 
673
+ ADCO 424242424242 E
674
+
675
+ OPTARIF HC.. <
676
+
677
+ ISOUSC 30 9
678
+
679
+ HCHC 023995979 ;
680
+
681
+ HCHP 038653546 ;
682
+
683
+ PTEC HP..
684
+
685
+ IINST 012 Z
686
+
687
+ IMAX 041 D
688
+
689
+ PAPP 02760 0
690
+
691
+ HHPHC D /
692
+
693
+ 
694
+ ADCO 424242424242 E
695
+
696
+ OPTARIF HC.. <
697
+
698
+ ISOUSC 30 9
699
+
700
+ HCHC 023995979 ;
701
+
702
+ HCHP 038653547 <
703
+
704
+ PTEC HP..
705
+
706
+ IINST 012 Z
707
+
708
+ IMAX 041 D
709
+
710
+ PAPP 02740 .
711
+
712
+ HHPHC D /
713
+
714
+ 
715
+ ADCO 424242424242 E
716
+
717
+ OPTARIF HC.. <
718
+
719
+ ISOUSC 30 9
720
+
721
+ HCHC 023995979 ;
722
+
723
+ HCHP 038653548 =
724
+
725
+ PTEC HP..
726
+
727
+ IINST 016 ^
728
+
729
+ IMAX 041 D
730
+
731
+ PAPP 03760 1
732
+
733
+ HHPHC D /
734
+
735
+ 
736
+ ADCO 424242424242 E
737
+
738
+ OPTARIF HC.. <
739
+
740
+ ISOUSC 30 9
741
+
742
+ HCHC 023995979 ;
743
+
744
+ HCHP 038653549 >
745
+
746
+ PTEC HP..
747
+
748
+ IINST 014 \
749
+
750
+ IMAX 041 D
751
+
752
+ PAPP 03280 .
753
+
754
+ HHPHC D /
755
+
756
+ 
757
+ ADCO 424242424242 E
758
+
759
+ OPTARIF HC.. <
760
+
761
+ ISOUSC 30 9
762
+
763
+ HCHC 023995979 ;
764
+
765
+ HCHP 038653550 6
766
+
767
+ PTEC HP..
768
+
769
+ IINST 012 Z
770
+
771
+ IMAX 041 D
772
+
773
+ PAPP 02740 .
774
+
775
+ HHPHC D /
776
+
777
+ 
778
+ ADCO 424242424242 E
779
+
780
+ OPTARIF HC.. <
781
+
782
+ ISOUSC 30 9
783
+
784
+ HCHC 023995979 ;
785
+
786
+ HCHP 038653551 7
787
+
788
+ PTEC HP..
789
+
790
+ IINST 010 X
791
+
792
+ IMAX 041 D
793
+
794
+ PAPP 02310 '
795
+
796
+ HHPHC D /
797
+
798
+ 
799
+ ADCO 424242424242 E
800
+
801
+ OPTARIF HC.. <
802
+
803
+ ISOUSC 30 9
804
+
805
+ HCHC 023995979 ;
806
+
807
+ HCHP 038653552 8
808
+
809
+ PTEC HP..
810
+
811
+ IINST 008 _
812
+
813
+ IMAX 041 D
814
+
815
+ PAPP 01760 /
816
+
817
+ HHPHC D /
818
+
819
+ 
820
+ ADCO 424242424242 E
821
+
822
+ OPTARIF HC.. <
823
+
824
+ ISOUSC 30 9
825
+
826
+ HCHC 023995979 ;
827
+
828
+ HCHP 038653553 9
829
+
830
+ PTEC HP..
831
+
832
+ IINST 008 _
833
+
834
+ IMAX 041 D
835
+
836
+ PAPP 01760 /
837
+
838
+ HHPHC D /
839
+
840
+ 
841
+ ADCO 424242424242 E
842
+
843
+ OPTARIF HC.. <
844
+
845
+ ISOUSC 30 9
846
+
847
+ HCHC 023995979 ;
848
+
849
+ HCHP 038653553 9
850
+
851
+ PTEC HP..
852
+
853
+ IINST 006 ]
854
+
855
+ IMAX 041 D
856
+
857
+ PAPP 01410 '
858
+
859
+ HHPHC D /
860
+
861
+ 
862
+ ADCO 424242424242 E
863
+
864
+ OPTARIF HC.. <
865
+
866
+ ISOUSC 30 9
867
+
868
+ HCHC 023995979 ;
869
+
870
+ HCHP 038653553 9
871
+
872
+ PTEC HP..
873
+
874
+ IINST 003 Z
875
+
876
+ IMAX 041 D
877
+
878
+ PAPP 00810 *
879
+
880
+ HHPHC D /
881
+
882
+ 
883
+ ADCO 424242424242 E
884
+
885
+ OPTARIF HC.. <
886
+
887
+ ISOUSC 30 9
888
+
889
+ HCHC 023995979 ;
890
+
891
+ HCHP 038653554 :
892
+
893
+ PTEC HP..
894
+
895
+ IINST 003 Z
896
+
897
+ IMAX 041 D
898
+
899
+ PAPP 00810 *
900
+
901
+ HHPHC D /
902
+
903
+ 
904
+ ADCO 424242424242 E
905
+
906
+ OPTARIF HC.. <
907
+
908
+ ISOUSC 30 9
909
+
910
+ HCHC 023995979 ;
911
+
912
+ HCHP 038653554 :
913
+
914
+ PTEC HP..
915
+
916
+ IINST 003 Z
917
+
918
+ IMAX 041 D
919
+
920
+ PAPP 00810 *
921
+
922
+ HHPHC D /
923
+
924
+ 
925
+ ADCO 424242424242 E
926
+
927
+ OPTARIF HC.. <
928
+
929
+ ISOUSC 30 9
930
+
931
+ HCHC 023995979 ;
932
+
933
+ HCHP 038653554 :
934
+
935
+ PTEC HP..
936
+
937
+ IINST 003 Z
938
+
939
+ IMAX 041 D
940
+
941
+ PAPP 00810 *
942
+
943
+ HHPHC D /
944
+
945
+ 
946
+ ADCO 424242424242 E
947
+
948
+ OPTARIF HC.. <
949
+
950
+ ISOUSC 30 9
951
+
952
+ HCHC 023995979 ;
953
+
954
+ HCHP 038653555 ;
955
+
956
+ PTEC HP..
957
+
958
+ IINST 003 Z
959
+
960
+ IMAX 041 D
961
+
962
+ PAPP 00810 *
963
+
964
+ HHPHC D /
965
+
966
+ 
967
+ ADCO 424242424242 E
968
+
969
+ OPTARIF HC.. <
970
+
971
+ ISOUSC 30 9
972
+
973
+ HCHC 023995979 ;
974
+
975
+ HCHP 038653555 ;
976
+
977
+ PTEC HP..
978
+
979
+ IINST 003 Z
980
+
981
+ IMAX 041 D
982
+
983
+ PAPP 00810 *
984
+
985
+ HHPHC D /
986
+
987
+ 
988
+ ADCO 424242424242 E
989
+
990
+ OPTARIF HC.. <
991
+
992
+ ISOUSC 30 9
993
+
994
+ HCHC 023995979 ;
995
+
996
+ HCHP 038653555 ;
997
+
998
+ PTEC HP..
999
+
1000
+ IINST 003 Z
1001
+
1002
+ IMAX 041 D
1003
+
1004
+ PAPP 00810 *
1005
+
1006
+ HHPHC D /
1007
+
1008
+ 
1009
+ ADCO 424242424242 E
1010
+
1011
+ OPTARIF HC.. <
1012
+
1013
+ ISOUSC 30 9
1014
+
1015
+ HCHC 023995979 ;
1016
+
1017
+ HCHP 038653556 <
1018
+
1019
+ PTEC HP..
1020
+
1021
+ IINST 003 Z
1022
+
1023
+ IMAX 041 D
1024
+
1025
+ PAPP 00810 *
1026
+
1027
+ HHPHC D /
1028
+
1029
+ 
1030
+ ADCO 424242424242 E
1031
+
1032
+ OPTARIF HC.. <
1033
+
1034
+ ISOUSC 30 9
1035
+
1036
+ HCHC 023995979 ;
1037
+
1038
+ HCHP 038653556 <
1039
+
1040
+ PTEC HP..
1041
+
1042
+ IINST 004 [
1043
+
1044
+ IMAX 041 D
1045
+
1046
+ PAPP 00820 +
1047
+
1048
+ HHPHC D /
1049
+
1050
+ 
1051
+ ADCO 424242424242 E
1052
+
1053
+ OPTARIF HC.. <
1054
+
1055
+ ISOUSC 30 9
1056
+
1057
+ HCHC 023995979 ;
1058
+
1059
+ HCHP 038653556 <
1060
+
1061
+ PTEC HP..
1062
+
1063
+ IINST 004 [
1064
+
1065
+ IMAX 041 D
1066
+
1067
+ PAPP 00820 +
1068
+
1069
+ HHPHC D /
1070
+
1071
+ 
1072
+ ADCO 424242424242 E
1073
+
1074
+ OPTARIF HC.. <
1075
+
1076
+ ISOUSC 30 9
1077
+
1078
+ HCHC 023995979 ;
1079
+
1080
+ HCHP 038653557 =
1081
+
1082
+ PTEC HP..
1083
+
1084
+ IINST 004 [
1085
+
1086
+ IMAX 041 D
1087
+
1088
+ PAPP 01030 %
1089
+
1090
+ HHPHC D /
1091
+
1092
+ 
1093
+ ADCO 424242424242 E
1094
+
1095
+ OPTARIF HC.. <
1096
+
1097
+ ISOUSC 30 9
1098
+
1099
+ HCHC 023995979 ;
1100
+
1101
+ HCHP 038653557 =
1102
+
1103
+ PTEC HP..
1104
+
1105
+ IINST 004 [
1106
+
1107
+ IMAX 041 D
1108
+
1109
+ PAPP 00910 +
1110
+
1111
+ HHPHC D /
1112
+
1113
+ 
1114
+ ADCO 424242424242 E
1115
+
1116
+ OPTARIF HC.. <
1117
+
1118
+ ISOUSC 30 9
1119
+
1120
+ HCHC 023995979 ;
1121
+
1122
+ HCHP 038653557 =
1123
+
1124
+ PTEC HP..
1125
+
1126
+ IINST 003 Z
1127
+
1128
+ IMAX 041 D
1129
+
1130
+ PAPP 00810 *
1131
+
1132
+ HHPHC D /
1133
+
1134
+ 
1135
+ ADCO 424242424242 E
1136
+
1137
+ OPTARIF HC.. <
1138
+
1139
+ ISOUSC 30 9
1140
+
1141
+ HCHC 023995979 ;
1142
+
1143
+ HCHP 038653558 >
1144
+
1145
+ PTEC HP..
1146
+
1147
+ IINST 003 Z
1148
+
1149
+ IMAX 041 D
1150
+
1151
+ PAPP 00810 *
1152
+
1153
+ HHPHC D /
1154
+
1155
+ 
1156
+ ADCO 424242424242 E
1157
+
1158
+ OPTARIF HC.. <
1159
+
1160
+ ISOUSC 30 9
1161
+
1162
+ HCHC 023995979 ;
1163
+
1164
+ HCHP 038653558 >
1165
+
1166
+ PTEC HP..
1167
+
1168
+ IINST 009
1169
+
1170
+ IMAX 041 D
1171
+
1172
+ PAPP 01970 2
1173
+
1174
+ HHPHC D /
1175
+
1176
+ 
1177
+ ADCO 424242424242 E
1178
+
1179
+ OPTARIF HC.. <
1180
+
1181
+ ISOUSC 30 9
1182
+
1183
+ HCHC 023995979 ;
1184
+
1185
+ HCHP 038653559 ?
1186
+
1187
+ PTEC HP..
1188
+
1189
+ IINST 008 _
1190
+
1191
+ IMAX 041 D
1192
+
1193
+ PAPP 01860 0
1194
+
1195
+ HHPHC D /
1196
+
1197
+ 
1198
+ ADCO 424242424242 E
1199
+
1200
+ OPTARIF HC.. <
1201
+
1202
+ ISOUSC 30 9
1203
+
1204
+ HCHC 023995979 ;
1205
+
1206
+ HCHP 038653560 7
1207
+
1208
+ PTEC HP..
1209
+
1210
+ IINST 008 _
1211
+
1212
+ IMAX 041 D
1213
+
1214
+ PAPP 01760 /
1215
+
1216
+ HHPHC D /
1217
+
1218
+ 
1219
+ ADCO 424242424242 E
1220
+
1221
+ OPTARIF HC.. <
1222
+
1223
+ ISOUSC 30 9
1224
+
1225
+ HCHC 023995979 ;
1226
+
1227
+ HCHP 038653560 7
1228
+
1229
+ PTEC HP..
1230
+
1231
+ IINST 008 _
1232
+
1233
+ IMAX 041 D
1234
+
1235
+ PAPP 01770 0
1236
+
1237
+ HHPHC D /
1238
+
1239
+ 
1240
+ ADCO 424242424242 E
1241
+
1242
+ OPTARIF HC.. <
1243
+
1244
+ ISOUSC 30 9
1245
+
1246
+ HCHC 023995979 ;
1247
+
1248
+ HCHP 038653561 8
1249
+
1250
+ PTEC HP..
1251
+
1252
+ IINST 008 _
1253
+
1254
+ IMAX 041 D
1255
+
1256
+ PAPP 01770 0
1257
+
1258
+ HHPHC D /
1259
+
1260
+ 
1261
+ ADCO 424242424242 E
1262
+
1263
+ OPTARIF HC.. <
1264
+
1265
+ ISOUSC 30 9
1266
+
1267
+ HCHC 023995979 ;
1268
+
1269
+ HCHP 038653562 9
1270
+
1271
+ PTEC HP..
1272
+
1273
+ IINST 008 _
1274
+
1275
+ IMAX 041 D
1276
+
1277
+ PAPP 01770 0
1278
+
1279
+ HHPHC D /
1280
+
1281
+ 
1282
+ ADCO 424242424242 E
1283
+
1284
+ OPTARIF HC.. <
1285
+
1286
+ ISOUSC 30 9
1287
+
1288
+ HCHC 023995979 ;
1289
+
1290
+ HCHP 038653562 9
1291
+
1292
+ PTEC HP..
1293
+
1294
+ IINST 008 _
1295
+
1296
+ IMAX 041 D
1297
+
1298
+ PAPP 01770 0
1299
+
1300
+ HHPHC D /
1301
+
1302
+