solar-simulator 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/solar-simulator +31 -0
- data/lib/solar/simulator/network.rb +30 -0
- data/lib/solar/simulator/panel.rb +10 -6
- data/lib/solar/simulator/version.rb +1 -1
- data/lib/solar/simulator.rb +1 -0
- data/solar-simulator.gemspec +2 -0
- data/spec/network_spec.rb +10 -0
- metadata +35 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be355873e57e451a98ef540a0fd12196a5104678
|
4
|
+
data.tar.gz: 67137cf6f8fd95ecd3294f047c405f0f1ce90d4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e49ca52e11c7ac2ecf002bf8abbcc79cbf25dd8e2089e02bbf842a42d9522bd23611ff120c0485a37b8004806aafdac8de0664f16ffd56abbf511a07314e7d1b
|
7
|
+
data.tar.gz: bbfc6f86278b30452d13640bb279aa0b23c90a1c61de6a042c0e82a4e9f577c9c2de17a25dfc62e92be4ef41a7985be8bedddf34351321892a4edbc298262922
|
data/.gitignore
CHANGED
data/bin/solar-simulator
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'forever'
|
3
|
+
require 'slop'
|
4
|
+
require 'solar/simulator'
|
5
|
+
opts = nil
|
6
|
+
|
7
|
+
Forever.run do
|
8
|
+
before :all do
|
9
|
+
opts = Slop.parse({help: true}) do
|
10
|
+
banner 'Usage: solar-simulator [options]'
|
11
|
+
|
12
|
+
on 's=', 'serial=', 'Serial number of the Panel', required: true
|
13
|
+
on 'u=', 'uri=', 'URI of collector server', required: true
|
14
|
+
on 'n', 'nominal-power', 'Nominal Power of the Panel'
|
15
|
+
on 't=', 'type=', 'Panel type 0 single phase, 1 three phase'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
every 15.seconds do
|
19
|
+
data = Solar::Simulator::Panel.run({type: opts[:type]})
|
20
|
+
puts data
|
21
|
+
Solar::Simulator::Network.send_payload(data, opts.to_hash)
|
22
|
+
end
|
23
|
+
on_error do |e|
|
24
|
+
puts e.message
|
25
|
+
stop! if e.class < Slop::Error
|
26
|
+
end
|
27
|
+
|
28
|
+
on_exit do
|
29
|
+
puts "Simulation ended"
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Solar
|
6
|
+
module Simulator
|
7
|
+
class Network
|
8
|
+
|
9
|
+
def self.send_payload(data, options = {})
|
10
|
+
payload = { p: {
|
11
|
+
se: options[:serial],
|
12
|
+
ts: data[:timestamp],
|
13
|
+
ty: "gr",
|
14
|
+
cfg: options[:type].to_i || 0,
|
15
|
+
d: data[:values]
|
16
|
+
}
|
17
|
+
}
|
18
|
+
uri = URI.parse(options[:uri])
|
19
|
+
req = Net::HTTP::Post.new(uri.request_uri)
|
20
|
+
req["content-type"] = "application/json"
|
21
|
+
req.body = payload.to_json
|
22
|
+
Net::HTTP.start(uri.host, uri.port) { |http|http.request(req) }
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -6,16 +6,20 @@ module Solar
|
|
6
6
|
Seasons = [[3240, 700],[3600, 600],[3120, 850],[2880, 1000]]
|
7
7
|
GammaVoltage = 11
|
8
8
|
GammaCurrent = 12
|
9
|
+
Types = [:single_phase, :three_phase]
|
9
10
|
|
10
11
|
def self.run(options = {})
|
11
12
|
options[:time] ||= Time.now
|
12
13
|
options[:nominal_power] ||= 6000.0
|
13
14
|
options[:max_current] = options[:nominal_power]/230.0
|
15
|
+
options[:type] = Types[options[:type].to_i || 0]
|
14
16
|
timestamp = options[:time].to_i
|
17
|
+
|
18
|
+
phases = options[:type] == :single_phase ? 1 : 3
|
15
19
|
|
16
20
|
lux = self.simulate_lux(options)
|
17
|
-
voltage = self.simulate_voltage(options)
|
18
|
-
current = self.simulate_current(lux, options)
|
21
|
+
voltage = phases.times.map{self.simulate_voltage(options)}
|
22
|
+
current = phases.times.map{self.simulate_current(lux, options)}
|
19
23
|
|
20
24
|
payload = {}
|
21
25
|
payload[:timestamp] = timestamp
|
@@ -36,9 +40,9 @@ module Solar
|
|
36
40
|
base_voltage = 230
|
37
41
|
|
38
42
|
if sign
|
39
|
-
|
43
|
+
(base_voltage + delta).round(2)
|
40
44
|
else
|
41
|
-
|
45
|
+
(base_voltage - delta).round(2)
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
@@ -46,9 +50,9 @@ module Solar
|
|
46
50
|
max_delta = (options[:max_current] * lux / 1023.0) * (GammaCurrent / 100.0)
|
47
51
|
delta = rand * max_delta
|
48
52
|
if Random.rand(2)
|
49
|
-
|
53
|
+
((options[:max_current]*lux/1023.0)+delta).round(2)
|
50
54
|
else
|
51
|
-
|
55
|
+
((options[:max_current]*lux/1023.0)-delta).round(2)
|
52
56
|
end
|
53
57
|
end
|
54
58
|
end
|
data/lib/solar/simulator.rb
CHANGED
data/solar-simulator.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "activesupport", "~> 4.0.0"
|
22
|
+
spec.add_dependency "slop"
|
23
|
+
spec.add_dependency "foreverb"
|
22
24
|
|
23
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
26
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solar-simulator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego R. Brogna
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: slop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: foreverb
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: bundler
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -69,7 +97,8 @@ dependencies:
|
|
69
97
|
description: Realistic solar panel simulator
|
70
98
|
email:
|
71
99
|
- dierbro@gmail.com
|
72
|
-
executables:
|
100
|
+
executables:
|
101
|
+
- solar-simulator
|
73
102
|
extensions: []
|
74
103
|
extra_rdoc_files: []
|
75
104
|
files:
|
@@ -79,10 +108,13 @@ files:
|
|
79
108
|
- LICENSE.txt
|
80
109
|
- README.md
|
81
110
|
- Rakefile
|
111
|
+
- bin/solar-simulator
|
82
112
|
- lib/solar/simulator.rb
|
113
|
+
- lib/solar/simulator/network.rb
|
83
114
|
- lib/solar/simulator/panel.rb
|
84
115
|
- lib/solar/simulator/version.rb
|
85
116
|
- solar-simulator.gemspec
|
117
|
+
- spec/network_spec.rb
|
86
118
|
- spec/panel_spec.rb
|
87
119
|
- spec/simulator_spec.rb
|
88
120
|
- spec/spec_helper.rb
|
@@ -111,6 +143,7 @@ signing_key:
|
|
111
143
|
specification_version: 4
|
112
144
|
summary: Realistic solar panel simulator
|
113
145
|
test_files:
|
146
|
+
- spec/network_spec.rb
|
114
147
|
- spec/panel_spec.rb
|
115
148
|
- spec/simulator_spec.rb
|
116
149
|
- spec/spec_helper.rb
|