teleinfo 0.0.2

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