aemo 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/aemo.gemspec +2 -2
- data/lib/aemo.rb +1 -0
- data/lib/aemo/nmi.rb +41 -11
- data/lib/aemo/version.rb +29 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ea10bd77f54b36de7128da38ceb13247b0b08b1
|
4
|
+
data.tar.gz: 89f8f122e89391b19d3ba3b84c4b2a93d2eb9928
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8962bbee938ad756b7e3ea72e9416ae90f66eecd534d7d157ba9b9131cf9e57900d8b7934b00ccb53d06bd8ac6674fd003223487be3df7f8d47439d66b219f1e
|
7
|
+
data.tar.gz: c5acfee90eacd6344c41d5167fc709744cad92db4aeea9f6fed983fb2c12229414e08f650f8130f32a11ff6d136aa6ed654e9eb0e0425623538e5e8ec8827b0a
|
data/aemo.gemspec
CHANGED
@@ -3,9 +3,9 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'aemo'
|
6
|
-
s.version = '0.1.
|
6
|
+
s.version = '0.1.7'
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
-
s.date = '2015-02-
|
8
|
+
s.date = '2015-02-26'
|
9
9
|
s.summary = 'AEMO Gem'
|
10
10
|
s.description = 'Gem providing functionality for the Australian Energy Market Operator data'
|
11
11
|
s.authors = ['Joel Courtney']
|
data/lib/aemo.rb
CHANGED
data/lib/aemo/nmi.rb
CHANGED
@@ -435,7 +435,7 @@ module AEMO
|
|
435
435
|
raise ArgumentError.new("NMI is not constructed with valid characters") unless AEMO::NMI.valid_nmi?(nmi)
|
436
436
|
|
437
437
|
@nmi = nmi
|
438
|
-
@meters =
|
438
|
+
@meters = []
|
439
439
|
@roles = {}
|
440
440
|
@data_streams = []
|
441
441
|
end
|
@@ -503,11 +503,15 @@ module AEMO
|
|
503
503
|
@classification_code = @msats_detail['MasterData']['NMIClassificationCode']
|
504
504
|
@status = @msats_detail['MasterData']['Status']
|
505
505
|
@address = @msats_detail['MasterData']['Address']
|
506
|
-
@meters
|
506
|
+
@meters ||= []
|
507
|
+
@roles ||= {}
|
508
|
+
@data_streams ||= []
|
507
509
|
# Meters
|
508
510
|
unless @msats_detail['MeterRegister'].nil?
|
509
|
-
@msats_detail['MeterRegister']['Meter']
|
510
|
-
|
511
|
+
meters = @msats_detail['MeterRegister']['Meter']
|
512
|
+
meters = [meters] if meters.is_a?(Hash)
|
513
|
+
meters.select{|x| !x['Status'].nil? }.each do |meter|
|
514
|
+
@meters << OpenStruct.new(
|
511
515
|
status: meter['Status'],
|
512
516
|
installation_type_code: meter['InstallationTypeCode'],
|
513
517
|
next_scheduled_read_date: meter['NextScheduledReadDate'],
|
@@ -515,11 +519,10 @@ module AEMO
|
|
515
519
|
registers: [],
|
516
520
|
serial_number: meter['SerialNumber']
|
517
521
|
)
|
518
|
-
puts "@meters.inspect: #{@meters.inspect}"
|
519
|
-
@meters[meter['SerialNumber']] = m
|
520
522
|
end
|
521
|
-
|
522
|
-
|
523
|
+
meters.select{|x| x['Status'].nil? }.each do |registers|
|
524
|
+
m = @meters.find{|x| x.serial_number == registers['SerialNumber']}
|
525
|
+
m.registers << register = OpenStruct.new(
|
523
526
|
controlled_load: (registers['RegisterConfiguration']['Register']['ControlledLoad'] == 'Y'),
|
524
527
|
dial_format: registers['RegisterConfiguration']['Register']['DialFormat'],
|
525
528
|
multiplier: registers['RegisterConfiguration']['Register']['Multiplier'],
|
@@ -529,18 +532,21 @@ module AEMO
|
|
529
532
|
time_of_day: registers['RegisterConfiguration']['Register']['TimeOfDay'],
|
530
533
|
unit_of_measure: registers['RegisterConfiguration']['Register']['UnitOfMeasure']
|
531
534
|
)
|
532
|
-
@meters[registers['SerialNumber']].registers << register
|
533
535
|
end
|
534
536
|
end
|
535
537
|
# Roles
|
536
538
|
unless @msats_detail['RoleAssignments'].nil?
|
537
|
-
@msats_detail['RoleAssignments']['RoleAssignment']
|
539
|
+
role_assignments = @msats_detail['RoleAssignments']['RoleAssignment']
|
540
|
+
role_assignments = [role_assignments] if role_assignments.is_a?(Hash)
|
541
|
+
role_assignments.each do |role|
|
538
542
|
@roles[role['Role']] = role['Party']
|
539
543
|
end
|
540
544
|
end
|
541
545
|
# DataStreams
|
542
546
|
unless @msats_detail['DataStreams'].nil?
|
543
|
-
@msats_detail['DataStreams']['DataStream']
|
547
|
+
data_streams = @msats_detail['DataStreams']['DataStream']
|
548
|
+
data_streams = [data_streams] if data_streams.is_a?(Hash) # Deal with issue of only one existing
|
549
|
+
data_streams.each do |stream|
|
544
550
|
@data_streams << OpenStruct.new(suffix: stream['Suffix'], profile_name: stream['ProfileName'],averaged_daily_load: stream['AveragedDailyLoad'], data_stream_type: stream['DataStreamType'],status: stream['Status'])
|
545
551
|
end
|
546
552
|
end
|
@@ -557,6 +563,30 @@ module AEMO
|
|
557
563
|
end
|
558
564
|
friendly_address
|
559
565
|
end
|
566
|
+
|
567
|
+
# Returns the meter OpenStructs for the requested status (C/R)
|
568
|
+
#
|
569
|
+
# @param status [String] the stateus [C|R]
|
570
|
+
# @return [Array<OpenStruct>] Returns an array of OpenStructs for Meters with the status provided
|
571
|
+
def meters_by_status(status = 'C')
|
572
|
+
@meters.select{|x| x.status == "#{status}"}
|
573
|
+
end
|
574
|
+
|
575
|
+
# Returns the data_stream OpenStructs for the requested status (A/I)
|
576
|
+
#
|
577
|
+
# @param status [String] the stateus [A|I]
|
578
|
+
# @return [Array<OpenStruct>] Returns an array of OpenStructs for the current Meters
|
579
|
+
def data_streams_by_status(state = 'A')
|
580
|
+
@data_streams.select{|x| x.status == "#{status}"}
|
581
|
+
end
|
582
|
+
|
583
|
+
# The current daily load
|
584
|
+
#
|
585
|
+
# @return [Integer] the current daily load for the meter
|
586
|
+
def current_daily_load
|
587
|
+
active_data_streams = data_streams_by_status()
|
588
|
+
current_daily_load = 0 + data_streams_by_status.map{|x| x.averaged_daily_load.to_i }.reduce(:+)
|
589
|
+
end
|
560
590
|
|
561
591
|
# A function to validate the NMI provided
|
562
592
|
#
|
data/lib/aemo/version.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright 2014 Joel Courtney
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
# Deal with AEMO data - nicely!
|
18
|
+
#
|
19
|
+
# The namespace for code of aemo gem
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# @author Joel Courtney <euphemize@gmail.com>
|
23
|
+
module AEMO
|
24
|
+
# aemo version
|
25
|
+
VERSION = '0.1.7'
|
26
|
+
|
27
|
+
# aemo version split amongst different revisions
|
28
|
+
MAJOR_VERSION, MINOR_VERSION, REVISION = VERSION.split('.').map(&:to_i)
|
29
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aemo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Courtney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/aemo/nem13.rb
|
87
87
|
- lib/aemo/nmi.rb
|
88
88
|
- lib/aemo/region.rb
|
89
|
+
- lib/aemo/version.rb
|
89
90
|
- lib/data/TNI-MLF-Codes.csv
|
90
91
|
- lib/data/aemo-dlf-dnsp.csv
|
91
92
|
- lib/data/aemo-dlf.json
|