ruby-sml 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.
- data/LICENSE +24 -0
- data/README.md +0 -0
- data/lib/ruby-sml.rb +30 -0
- data/lib/ruby-sml/crc16.rb +47 -0
- data/lib/ruby-sml/encoding-binary.rb +262 -0
- data/lib/ruby-sml/helpers.rb +58 -0
- data/lib/ruby-sml/nilclass-mixin.rb +5 -0
- data/lib/ruby-sml/obis.rb +139 -0
- data/lib/ruby-sml/sml-attention.rb +60 -0
- data/lib/ruby-sml/sml-file.rb +37 -0
- data/lib/ruby-sml/sml-getlist.rb +88 -0
- data/lib/ruby-sml/sml-getprocparameter.rb +61 -0
- data/lib/ruby-sml/sml-getprofilelist.rb +103 -0
- data/lib/ruby-sml/sml-getprofilepack.rb +107 -0
- data/lib/ruby-sml/sml-listentry.rb +98 -0
- data/lib/ruby-sml/sml-message.rb +87 -0
- data/lib/ruby-sml/sml-messagebody.rb +95 -0
- data/lib/ruby-sml/sml-periodentry.rb +38 -0
- data/lib/ruby-sml/sml-procparametervalue.rb +46 -0
- data/lib/ruby-sml/sml-profileobjectheaderentry.rb +31 -0
- data/lib/ruby-sml/sml-profileobjectperiodentry.rb +46 -0
- data/lib/ruby-sml/sml-publicclose.rb +51 -0
- data/lib/ruby-sml/sml-publicopen.rb +84 -0
- data/lib/ruby-sml/sml-setprocparameter.rb +37 -0
- data/lib/ruby-sml/sml-time.rb +46 -0
- data/lib/ruby-sml/sml-tree.rb +42 -0
- data/lib/ruby-sml/sml-treepath.rb +24 -0
- data/lib/ruby-sml/sml-tupelentry.rb +105 -0
- data/lib/ruby-sml/sml-valueentry.rb +29 -0
- data/lib/ruby-sml/transport-binary.rb +158 -0
- data/lib/ruby-sml/units.rb +84 -0
- data/sample.rb +66 -0
- metadata +85 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module SML
|
4
|
+
Units = []
|
5
|
+
|
6
|
+
Units[1] = { "id" => :year, "unit" => "a", "quantity" => "Time", "name" => "Year" }
|
7
|
+
Units[2] = { "id" => :month, "unit" => "mo", "quantity" => "Time", "name" => "Month" }
|
8
|
+
Units[3] = { "id" => :week, "unit" => "wk", "quantity" => "Time", "name" => "Week" }
|
9
|
+
Units[4] = { "id" => :day, "unit" => "d", "quantity" => "Time", "name" => "Day" }
|
10
|
+
Units[5] = { "id" => :hour, "unit" => "h", "quantity" => "Time", "name" => "Hour" }
|
11
|
+
|
12
|
+
Units[6] = { "id" => :minute, "unit" => "min.", "quantity" => "Time", "name" => "Minute" }
|
13
|
+
Units[7] = { "id" => :second, "unit" => "s", "quantity" => "Time", "name" => "Second" }
|
14
|
+
Units[8] = { "id" => :degree, "unit" => "°", "quantity" => "Angle", "name" => "Degree" }
|
15
|
+
Units[9] = { "id" => :celsius, "unit" => "°C", "quantity" => "Temperature", "name" => "Degree Celsius" }
|
16
|
+
Units[10] = { "id" => :currency, "unit" => "currency", "quantity" => "(local) Currency", "name" => "" }
|
17
|
+
|
18
|
+
Units[11] = { "id" => :metre, "unit" => "m", "quantity" => "Length", "name" => "Metre" }
|
19
|
+
Units[12] = { "id" => :metre_second, "unit" => "m/s", "quantity" => "Speed", "name" => "Metre per Second" }
|
20
|
+
Units[13] = { "id" => :cubicmetre, "unit" => "m³", "quantity" => "Volume", "name" => "Cubic Metre" }
|
21
|
+
Units[14] = { "id" => :cubicmetre_c, "unit" => "m³", "quantity" => "Corrected Volume", "name" => "Cubic Metre" }
|
22
|
+
Units[15] = { "id" => :cubicmetre_hour, "unit" => "m³/h", "quantity" => "Volume Flux", "name" => "Cubic Metre per Hour" }
|
23
|
+
|
24
|
+
Units[16] = { "id" => :cubicmetre_hour_c, "unit" => "m³/h", "quantity" => "Corrected Volume Flux", "name" => "Cubic Metre per Hour" }
|
25
|
+
Units[17] = { "id" => :cubicmetre_day, "unit" => "m³/d", "quantity" => "Volume Flux", "name" => "Cubic Metre per Day" }
|
26
|
+
Units[18] = { "id" => :cubicmetre_day_c, "unit" => "m³/d", "quantity" => "Corrected Volume Flux", "name" => "Cubic Metre per Day" }
|
27
|
+
Units[19] = { "id" => :litre, "unit" => "l", "quantity" => "Volume", "name" => "Litre" }
|
28
|
+
Units[20] = { "id" => :kilogram, "unit" => "kg", "quantity" => "Mass", "name" => "Kilogram" }
|
29
|
+
|
30
|
+
Units[21] = { "id" => :newton, "unit" => "N", "quantity" => "Force", "name" => "Newton" }
|
31
|
+
Units[22] = { "id" => :newtonmeter, "unit" => "Nm", "quantity" => "Energy", "name" => "Newtonmeter" }
|
32
|
+
Units[23] = { "id" => :pascal, "unit" => "Pa", "quantity" => "Pressure", "name" => "Pascal" }
|
33
|
+
Units[24] = { "id" => :bar, "unit" => "bar", "quantity" => "Pressure", "name" => "Bar" }
|
34
|
+
Units[25] = { "id" => :joule, "unit" => "J", "quantity" => "Energe", "name" => "Joule" }
|
35
|
+
|
36
|
+
Units[26] = { "id" => :joule_hour, "unit" => "J/h", "quantity" => "Thermal Power", "name" => "Joule per Hour" }
|
37
|
+
Units[27] = { "id" => :watt, "unit" => "W", "quantity" => "Active Power", "name" => "Watt" }
|
38
|
+
Units[28] = { "id" => :voltampere, "unit" => "VA", "quantity" => "Apparent Power", "name" => "Volt-Ampere" }
|
39
|
+
Units[29] = { "id" => :var, "unit" => "var", "quantity" => "Reactive Power", "name" => "var" }
|
40
|
+
Units[30] = { "id" => :watthour, "unit" => "Wh", "quantity" => "Active Energy", "name" => "Watt-Hour" }
|
41
|
+
|
42
|
+
Units[31] = { "id" => :voltamperehour, "unit" => "VAh", "quantity" => "Apparent Energy", "name" => "Volt-Ampere-Hour" }
|
43
|
+
Units[32] = { "id" => :varhour, "unit" => "varh", "quantity" => "Reactive Energy", "name" => "Var-Hour" }
|
44
|
+
Units[33] = { "id" => :ampere, "unit" => "A", "quantity" => "Current", "name" => "Ampere" }
|
45
|
+
Units[34] = { "id" => :coulomb, "unit" => "C", "quantity" => "Electrical Charge", "name" => "Coulomb" }
|
46
|
+
Units[35] = { "id" => :volt, "unit" => "V", "quantity" => "Voltage", "name" => "Volt" }
|
47
|
+
|
48
|
+
Units[36] = { "id" => :volt_metre, "unit" => "V/m", "quantity" => "Eletric Field Strength", "name" => "Volt per Metre" }
|
49
|
+
Units[37] = { "id" => :farad, "unit" => "F", "quantity" => "Capacitance", "name" => "Farad" }
|
50
|
+
Units[38] = { "id" => :ohm, "unit" => "Ω", "quantity" => "Resistance", "name" => "Ohm" }
|
51
|
+
Units[39] = { "id" => :ohm_metre, "unit" => "Ωm²/m", "quantity" => "Resistivity", "name" => "Ohm-Metre" }
|
52
|
+
Units[40] = { "id" => :weber, "unit" => "Wb", "quantity" => "Magnetic Flux", "name" => "Weber" }
|
53
|
+
|
54
|
+
Units[41] = { "id" => :tesla, "unit" => "T", "quantity" => "Magnetic Flux Density", "name" => "Tesla" }
|
55
|
+
Units[42] = { "id" => :ampere_metre, "unit" => "A/m", "quantity" => "Magnetic Field Strength", "name" => "Ampere per Metre" }
|
56
|
+
Units[43] = { "id" => :henry, "unit" => "H", "quantity" => "Inductance", "name" => "Henry" }
|
57
|
+
Units[44] = { "id" => :hertz, "unit" => "Hz", "quantity" => "Frequency", "name" => "Hertz" }
|
58
|
+
Units[45] = { "id" => :one_watthour, "unit" => "1/(Wh)", "quantity" => "R_W, Active Energy Meter Constant or Pulse Value", "name" => "" }
|
59
|
+
|
60
|
+
Units[46] = { "id" => :one_varhour, "unit" => "1/(varh)", "quantity" => "R_B, Reactive Energy Meter Constant or Pulse Value", "name" => "" }
|
61
|
+
Units[47] = { "id" => :one_voltamperehour, "unit" => "1/(VAh)", "quantity" => "R_S, Apparent Energy Meter Constant or Pulse Value", "name" => "" }
|
62
|
+
Units[48] = { "id" => :voltsquaredhours, "unit" => "V²h", "quantity" => "Volt-squared Hour", "name" => "Volt-Squared-Hours" }
|
63
|
+
Units[49] = { "id" => :amperesquaredhours, "unit" => "A²h", "quantity" => "Ampere-squared hour", "name" => "Ampere-Squared-Hours" }
|
64
|
+
Units[50] = { "id" => :kilogram_second, "unit" => "kg/s", "quantity" => "Mass Flux", "name" => "Kilogram per Second" }
|
65
|
+
|
66
|
+
Units[51] = { "id" => :siemens, "unit" => "S", "quantity" => "Conductance", "name" => "Siemens" }
|
67
|
+
Units[52] = { "id" => :kelvin, "unit" => "K", "quantity" => "Temperature", "name" => "Kelvin" }
|
68
|
+
Units[53] = { "id" => :one_voltsquaredhour, "unit" => "1/(V²h)", "quantity" => "R_U2h, Volt-Squared Hour Meter Constant or Pulse Value", "name" => "" }
|
69
|
+
Units[54] = { "id" => :one_amperesquaredhour, "unit" => "1/(A²h)", "quantity" => "R_I2h, Ampere-Squared Hour Meter Constant or Pulse Value", "name" => "" }
|
70
|
+
Units[55] = { "id" => :one_cubicmetre, "unit" => "1/m³", "quantity" => "R_V, Meter Constant or Pulse Value (Volume)", "name" => "" }
|
71
|
+
|
72
|
+
Units[56] = { "id" => :percent, "unit" => "%", "quantity" => "Percentage", "name" => "Percent" }
|
73
|
+
Units[57] = { "id" => :amperehour, "unit" => "Ah", "quantity" => "Ampere-Hours", "name" => "Ampere-Hour" }
|
74
|
+
Units[60] = { "id" => :watthour_cubicmetre, "unit" => "Wh/m³", "quantity" => "Energy per Volume", "name" => "Watthour per Cubic Metre" }
|
75
|
+
|
76
|
+
Units[61] = { "id" => :joule_cubicmetre, "unit" => "J/m³", "quantity" => "Calorific Value, Wobbe", "name" => "Joule per Cubic Metre" }
|
77
|
+
Units[62] = { "id" => :molpercent, "unit" => "Mol %", "quantity" => "Molar Fraction of Gas Composition", "name" => "Mole Percent" }
|
78
|
+
Units[63] = { "id" => :gram_cubicmetre, "unit" => "g/m³", "quantity" => "Mass Density", "name" => "Gram per Cubic Metre" }
|
79
|
+
Units[64] = { "id" => :pascalsecond, "unit" => "Pa s", "quantity" => "Dynamic Viscosity", "name" => "Pascal Second" }
|
80
|
+
|
81
|
+
Units[254] = { "id" => :other, "unit" => "other", "quantity" => "Other Unit", "name" => "" }
|
82
|
+
Units[255] = { "id" => :count, "unit" => "count", "quantity" => "Count, unitless", "name" => "" }
|
83
|
+
|
84
|
+
end
|
data/sample.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
$: << "./lib/ruby-sml"
|
4
|
+
|
5
|
+
require 'transport-binary'
|
6
|
+
require 'encoding-binary'
|
7
|
+
require 'sml-file'
|
8
|
+
|
9
|
+
@inputFile = "test-data/request.sml"
|
10
|
+
@outputFile = "test-data/request_processed.sml"
|
11
|
+
|
12
|
+
io = File.open(@inputFile, 'rb')
|
13
|
+
|
14
|
+
encodedFile = SML::BinaryTransport.readfile(io)
|
15
|
+
if encodedFile.nil?
|
16
|
+
puts "binary transport checksum invalid, exiting"
|
17
|
+
io.close
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
puts "Encoded File:"
|
21
|
+
count = 0
|
22
|
+
encodedFile.each_byte do |byte|
|
23
|
+
print "0x%02x " % byte
|
24
|
+
count += 1
|
25
|
+
if count > 7
|
26
|
+
count = 0
|
27
|
+
puts
|
28
|
+
end
|
29
|
+
end
|
30
|
+
puts
|
31
|
+
puts "-------------"
|
32
|
+
|
33
|
+
io.close
|
34
|
+
|
35
|
+
decodedFile = SML::BinaryEncoding.decode_file(encodedFile)
|
36
|
+
puts "Decoded File:"
|
37
|
+
pp decodedFile
|
38
|
+
puts "-------------"
|
39
|
+
|
40
|
+
sml_file = SML::File.construct(decodedFile)
|
41
|
+
puts "Parsed File:"
|
42
|
+
pp sml_file
|
43
|
+
puts "-------------"
|
44
|
+
|
45
|
+
sml_file_array_rep = sml_file.to_a
|
46
|
+
puts "Unparsed File:"
|
47
|
+
pp sml_file_array_rep
|
48
|
+
puts "-------------"
|
49
|
+
|
50
|
+
reencodedFile = SML::BinaryEncoding.encode_file(sml_file_array_rep)
|
51
|
+
puts "Reencoded File:"
|
52
|
+
count = 0
|
53
|
+
reencodedFile.each_byte do |byte|
|
54
|
+
print "0x%02x " % byte
|
55
|
+
count += 1
|
56
|
+
if count > 7
|
57
|
+
count = 0
|
58
|
+
puts
|
59
|
+
end
|
60
|
+
end
|
61
|
+
puts
|
62
|
+
puts "-------------"
|
63
|
+
|
64
|
+
io_out = File.open(@outputFile, 'wb')
|
65
|
+
SML::BinaryTransport.writefile(io_out, reencodedFile)
|
66
|
+
io_out.close
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-sml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: "0.2"
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Prof. MAAD
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2010-05-27 00:00:00 Z
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: " ruby-sml implements the Smart Messaging Language specification 1.3 (http://www.vde.de/de/fnn/arbeitsgebiete/messwesen/documents/Spezifikation_SML_1-03.pdf) in pure ruby. So far, only transport protocol v1 is supported.\n"
|
17
|
+
email: himself@prof-maad.org
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/ruby-sml/transport-binary.rb
|
26
|
+
- lib/ruby-sml/sml-message.rb
|
27
|
+
- lib/ruby-sml/helpers.rb
|
28
|
+
- lib/ruby-sml/sml-tree.rb
|
29
|
+
- lib/ruby-sml/sml-profileobjectheaderentry.rb
|
30
|
+
- lib/ruby-sml/sml-file.rb
|
31
|
+
- lib/ruby-sml/sml-getprofilepack.rb
|
32
|
+
- lib/ruby-sml/sml-attention.rb
|
33
|
+
- lib/ruby-sml/sml-getlist.rb
|
34
|
+
- lib/ruby-sml/sml-treepath.rb
|
35
|
+
- lib/ruby-sml/sml-publicclose.rb
|
36
|
+
- lib/ruby-sml/sml-profileobjectperiodentry.rb
|
37
|
+
- lib/ruby-sml/sml-procparametervalue.rb
|
38
|
+
- lib/ruby-sml/sml-getprofilelist.rb
|
39
|
+
- lib/ruby-sml/sml-valueentry.rb
|
40
|
+
- lib/ruby-sml/nilclass-mixin.rb
|
41
|
+
- lib/ruby-sml/sml-listentry.rb
|
42
|
+
- lib/ruby-sml/units.rb
|
43
|
+
- lib/ruby-sml/obis.rb
|
44
|
+
- lib/ruby-sml/sml-setprocparameter.rb
|
45
|
+
- lib/ruby-sml/sml-getprocparameter.rb
|
46
|
+
- lib/ruby-sml/sml-publicopen.rb
|
47
|
+
- lib/ruby-sml/crc16.rb
|
48
|
+
- lib/ruby-sml/sml-time.rb
|
49
|
+
- lib/ruby-sml/sml-periodentry.rb
|
50
|
+
- lib/ruby-sml/sml-tupelentry.rb
|
51
|
+
- lib/ruby-sml/encoding-binary.rb
|
52
|
+
- lib/ruby-sml/sml-messagebody.rb
|
53
|
+
- lib/ruby-sml.rb
|
54
|
+
- sample.rb
|
55
|
+
- README.md
|
56
|
+
- LICENSE
|
57
|
+
homepage: https://prof-maad.org
|
58
|
+
licenses:
|
59
|
+
- BSD
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.8.5
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Pure ruby implementation of the Smart Messaging Language protocol
|
84
|
+
test_files: []
|
85
|
+
|