aemo 0.1.6 → 0.1.7

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.
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