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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbb54d233f0bd13dcce773ff836b7877456a1a14
4
- data.tar.gz: 5459c83ac0ea8cc02ba3d1645961e4af105ffd1d
3
+ metadata.gz: 8ea10bd77f54b36de7128da38ceb13247b0b08b1
4
+ data.tar.gz: 89f8f122e89391b19d3ba3b84c4b2a93d2eb9928
5
5
  SHA512:
6
- metadata.gz: 9253a01333a488789af1a50ecae9795a6ff695fa4eb48729610f3da6482fb1b7a31a789bf1de1336c18f3426954c713304b13fa12632b9726c9cd90f461e2494
7
- data.tar.gz: 204bd766824e4c9e55ee24895e428febd5c19125b01128f7802961ce826b5fb4be61296e0e8191ec1401f6c830c4779ad74de748fb00416d171b638fc91d636d
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'
6
+ s.version = '0.1.7'
7
7
  s.platform = Gem::Platform::RUBY
8
- s.date = '2015-02-07'
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
@@ -6,6 +6,7 @@ require 'aemo/region.rb'
6
6
  require 'aemo/nem12.rb'
7
7
  require 'aemo/nmi.rb'
8
8
  require 'aemo/msats.rb'
9
+ require 'aemo/version.rb'
9
10
 
10
11
  # AEMO Module to encapsulate all AEMO classes
11
12
  module AEMO
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'].select{|x| !x['Status'].nil? }.each do |meter|
510
- m = OpenStruct.new(
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
- @msats_detail['MeterRegister']['Meter'].select{|x| x['Status'].nil? }.each do |registers|
522
- register = OpenStruct.new(
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'].each do |role|
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'].each do |stream|
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
  #
@@ -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.6
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-07 00:00:00.000000000 Z
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