milk_maid 0.5.1 → 0.6.1

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: 2f0f245160791808edfa669ac395183eb669e953
4
- data.tar.gz: 7c54fd662f87fd419db5276fbaa79c9d921ec33b
3
+ metadata.gz: 037860fab1c6f5fa56e71f5fb223ada051e8231c
4
+ data.tar.gz: fa12bff10a10f22b10a626b5e142de820061176d
5
5
  SHA512:
6
- metadata.gz: 5551dc5effe1e650d6b4503284b783fa4013fca16b316e2cf187ae574597c92f91ac9eb430e8dcefbe8021c36a4663634cfd87829de676228dd0643a9db78707
7
- data.tar.gz: b11dcde118be05459cedfef62a457fb9a0c05e440b6e1556acb75e8748548d3bf91615331f0770352911895012926403dbe44003591ee85fd8f850966c9f5122
6
+ metadata.gz: 4a93045950a4c0d7eb1a1fcd3fafe68b6cd8ce6193b636fbec58f1cde67f6755616f5238048997179475da48492d93c0d1efd2a6254074b6fe99c3f56b1c5388
7
+ data.tar.gz: 5adc08a0168158703647ed0d47ab3fae9e55c283422f202424d4aad2da81467c68792212242eed3880b4464653d66ee9b6d93fdd9bd65f98875e39ab2288447d
data/.gitignore CHANGED
@@ -8,3 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  *.yml
11
+ *.gem
12
+ session.json
@@ -0,0 +1,30 @@
1
+ FROM resin/%%RESIN_MACHINE_NAME%%-debian:jessie
2
+ ENV PATH /opt/elixir/bin:$PATH
3
+ ENV LANG C.UTF-8
4
+ ENV MIX_ENV production
5
+ RUN apt-get update && apt-get install -y \
6
+ less \
7
+ vim \
8
+ tree \
9
+ curl \
10
+ unzip \
11
+ git \
12
+ ca-certificates \
13
+ build-essential \
14
+ && echo "deb http://packages.erlang-solutions.com/debian wheezy contrib" >> /etc/apt/sources.list \
15
+ && curl 'http://packages.erlang-solutions.com/debian/erlang_solutions.asc' -o 'esolutions.asc' \
16
+ && apt-key add esolutions.asc \
17
+ && rm esolutions.asc \
18
+ && apt-get update \
19
+ && apt-get install -y --force-yes erlang-mini \
20
+ && mkdir /opt/elixir \
21
+ && curl -k -L https://github.com/elixir-lang/elixir/releases/download/v1.2.4/Precompiled.zip -o /opt/elixir/precompiled.zip \
22
+ && cd /opt/elixir \
23
+ && unzip precompiled.zip \
24
+ && mix local.hex --force \
25
+ && mix local.rebar --force \
26
+ && rm -rf /var/lib/apt/lists/*
27
+ COPY . /app
28
+ WORKDIR /app
29
+ RUN mix hex.registry fetch && mix deps.get && mix compile
30
+ CMD modprobe w1-gpio && modprobe w1-therm && elixir -S mix run --no-halt --no-deps-check
@@ -1,8 +1,8 @@
1
1
  require 'milk_maid/batch'
2
2
  require 'milk_maid/cli'
3
3
  require 'milk_maid/console_notifier'
4
- require 'milk_maid/parse_notifier'
5
- require 'milk_maid/firebase_notifier/batch_record'
4
+ require 'milk_maid/spreadsheet_writer'
5
+ require 'milk_maid/google_sheet_notifier'
6
6
  require 'milk_maid/temperature_sensor'
7
7
  require 'milk_maid/version'
8
8
 
@@ -1,4 +1,5 @@
1
1
  require 'securerandom'
2
+ require 'pry'
2
3
 
3
4
  module MilkMaid
4
5
  class Batch
@@ -12,7 +12,7 @@ module MilkMaid
12
12
  option :batch_name, :type => :string, :aliases => "-b"
13
13
  option :temperature, :type => :numeric, :required => :false, :default => 30, :aliases => '-t'
14
14
  option :duration, :type => :numeric, :required => false, :default => 30, :aliases => '-d'
15
- option :logger, :type => :string, :required => false, :default => 'Console', :aliases => '-l'
15
+ option :logger, :type => :string, :required => false, :default => 'Spreadsheet', :aliases => '-l'
16
16
  option :sensor, :type => :boolean, :required => false, :default => true, :aliases => '-s'
17
17
  option :nap, :type => :numeric, :required => false, :default => 5, :aliases => '-n'
18
18
  def monitor_batch
@@ -27,6 +27,8 @@ module MilkMaid
27
27
  notifier = get_logger(logger_type)
28
28
  batch = ::MilkMaid::Batch.new(name: batch_name, temperature: temperature, duration: duration, notifier: notifier, sensor: sensor, nap_time: nap_time)
29
29
 
30
+ puts batch.inspect
31
+
30
32
  batch.start
31
33
  rescue ::MilkMaid::SensorException => e
32
34
  puts e.message
@@ -49,6 +51,8 @@ module MilkMaid
49
51
  ::MilkMaid::ConsoleNotifier.new
50
52
  when 'WEB'
51
53
  ::MilkMaid::ParseNotifier.new
54
+ when 'SPREADSHEET'
55
+ ::MilkMaid::GoogleSheetNotifier.new
52
56
  end
53
57
  end
54
58
  end
@@ -0,0 +1,65 @@
1
+ module MilkMaid
2
+ class GoogleSheetNotifier < ::MilkMaid::ConsoleNotifier
3
+ attr_accessor :batch_record
4
+
5
+ def batch_completed
6
+ super
7
+ batch_record.complete!
8
+ ::MilkMaid::SpreadsheetWriter.write_spreadsheet("./session.json", "Pasteurization Batch #{Time.now}", batch_record)
9
+ end
10
+
11
+ def batch_started(batch_data = {})
12
+ super(batch_data)
13
+ @batch_record = ::MilkMaid::BatchRecord.new(batch_data)
14
+ end
15
+
16
+ def log_temperature(temperature)
17
+ super(temperature)
18
+ batch_record.add_event(:temperature, temperature)
19
+ end
20
+
21
+ def post_warning(current_temperature, base_temperature)
22
+ super(current_temperature, base_temperature)
23
+ batch_record.add_event(:temperature_warning, current_temperature)
24
+ end
25
+
26
+ def temperature_reached
27
+ super
28
+ batch_record.add_event(:threshold_reached)
29
+ end
30
+
31
+ end
32
+
33
+ class BatchRecord
34
+ attr_accessor :name, :guid, :duration, :base_temperature, :batch_size, :status, :record
35
+
36
+ def initialize(batch_data = {})
37
+ batch_data.each { |key, value| send("#{key}=", value) }
38
+ @status = 'Started'
39
+ end
40
+
41
+ def add_event(event_type, data = 0)
42
+ events << ::MilkMaid::Event.new(event_name_from_type(event_type), data, timestamp)
43
+ end
44
+
45
+ def complete!
46
+ add_event(:batch_completed)
47
+ @status = 'Completed'
48
+ end
49
+
50
+ def event_name_from_type(event)
51
+ event.to_s.split(/_/).map(&:capitalize).join(' ')
52
+ end
53
+
54
+ def events
55
+ @events ||= []
56
+ end
57
+
58
+ def timestamp
59
+ Time.now
60
+ end
61
+ end
62
+
63
+ class Event < Struct.new(:name, :data, :timestamp)
64
+ end
65
+ end
@@ -0,0 +1,55 @@
1
+ require "google/api_client"
2
+ require "google_drive"
3
+
4
+ module MilkMaid
5
+ TIMESTAMP_COL = 1
6
+ READING_COL = 2
7
+ DATA_COL = 3
8
+
9
+ class SpreadsheetWriter
10
+ def self.write_spreadsheet(session_file, spreadsheet_name, record)
11
+ session = GoogleDrive.saved_session(session_file)
12
+
13
+ puts "Creating Spreadsheet #{spreadsheet_name}"
14
+ sheet = session.create_spreadsheet(spreadsheet_name)
15
+
16
+ print_record(sheet, record)
17
+ end
18
+
19
+ def self.print_footer(ws, row, record)
20
+ ws[row, 1] = "Batch Name"
21
+ ws[row, 2] = record.name
22
+ row += 1
23
+ ws[row, 1] = "Duration"
24
+ ws[row, 2] = record.duration
25
+ row += 1
26
+ ws[row, 1] = "Base Temperature"
27
+ ws[row, 2] = record.base_temperature
28
+ row += 1
29
+ ws[row, 1] = "Status"
30
+ ws[row, 2] = record.status
31
+ ws.save
32
+ end
33
+
34
+ def self.print_record(sheet, record)
35
+ worksheet_name = "#{record.name}: #{record.status}"
36
+ puts "Creating worksheet for #{worksheet_name}"
37
+ ws = sheet.add_worksheet(worksheet_name)
38
+
39
+ ws[1,TIMESTAMP_COL] = "Timestamp"
40
+ ws[1,READING_COL] = "Reading"
41
+ ws[1,DATA_COL] = "Value"
42
+
43
+ row = 2
44
+
45
+ record.events.each do |event|
46
+ ws[row, TIMESTAMP_COL] = event.timestamp
47
+ ws[row, READING_COL] = event.name
48
+ ws[row, DATA_COL] = event.data unless event.data == 0
49
+ row += 1
50
+ end
51
+
52
+ print_footer(ws, row + 1, record)
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module MilkMaid
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Steve Newell"]
10
10
  spec.email = ["steve.newell@mx.com"]
11
11
 
12
- spec.summary = %q{Reads data from Raspberry PI sensor and posts to Firebase}
13
- spec.description = %q{Reads data from Raspberry PI sensor and posts to Firebase}
12
+ spec.summary = %q{Reads data from Raspberry PI sensor}
13
+ spec.description = %q{Reads data from Raspberry PI sensor and posts to somewhere}
14
14
 
15
15
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
16
16
  # delete this section to allow pushing this gem to any host.
@@ -25,14 +25,13 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ["lib"]
27
27
 
28
- spec.add_dependency "thor"
29
- spec.add_runtime_dependency "w1temp"
30
- spec.add_runtime_dependency "parse-ruby-client"
31
- spec.add_runtime_dependency "firebase"
28
+ spec.add_dependency "thor", "~> 0.19"
29
+ spec.add_dependency "google_drive", "~> 1.0"
30
+ spec.add_runtime_dependency "w1temp", "~> 0.0.4"
32
31
 
33
32
  spec.add_development_dependency "bundler", "~> 1.10"
34
33
  spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "rspec"
36
- spec.add_development_dependency "guard-rspec"
37
- spec.add_development_dependency "pry"
34
+ spec.add_development_dependency "rspec", "~> 3.3"
35
+ spec.add_development_dependency "guard-rspec", "~> 4.6"
36
+ spec.add_dependency "pry", "~> 0.10"
38
37
  end
metadata CHANGED
@@ -1,71 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milk_maid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Newell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-11 00:00:00.000000000 Z
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: w1temp
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
17
+ - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '0'
19
+ version: '0.19'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ">="
24
+ - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '0.19'
41
27
  - !ruby/object:Gem::Dependency
42
- name: parse-ruby-client
28
+ name: google_drive
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ">="
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: '1.0'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ">="
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: '1.0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: firebase
42
+ name: w1temp
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '0'
47
+ version: 0.0.4
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '0'
54
+ version: 0.0.4
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -98,45 +84,45 @@ dependencies:
98
84
  name: rspec
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
89
+ version: '3.3'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - ">="
94
+ - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: '3.3'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: guard-rspec
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ">="
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: '4.6'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ">="
108
+ - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '0'
110
+ version: '4.6'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: pry
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ">="
115
+ - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
117
+ version: '0.10'
118
+ type: :runtime
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ">="
122
+ - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0'
139
- description: Reads data from Raspberry PI sensor and posts to Firebase
124
+ version: '0.10'
125
+ description: Reads data from Raspberry PI sensor and posts to somewhere
140
126
  email:
141
127
  - steve.newell@mx.com
142
128
  executables:
@@ -148,6 +134,7 @@ files:
148
134
  - ".rspec"
149
135
  - ".ruby-version"
150
136
  - ".travis.yml"
137
+ - Dockerfile.template
151
138
  - Gemfile
152
139
  - README.md
153
140
  - Rakefile
@@ -159,7 +146,9 @@ files:
159
146
  - lib/milk_maid/console_notifier.rb
160
147
  - lib/milk_maid/firebase_notifier.rb
161
148
  - lib/milk_maid/firebase_notifier/batch_record.rb
149
+ - lib/milk_maid/google_sheet_notifier.rb
162
150
  - lib/milk_maid/parse_notifier.rb
151
+ - lib/milk_maid/spreadsheet_writer.rb
163
152
  - lib/milk_maid/temperature_sensor.rb
164
153
  - lib/milk_maid/version.rb
165
154
  - milk_maid.gemspec
@@ -186,5 +175,5 @@ rubyforge_project:
186
175
  rubygems_version: 2.4.8
187
176
  signing_key:
188
177
  specification_version: 4
189
- summary: Reads data from Raspberry PI sensor and posts to Firebase
178
+ summary: Reads data from Raspberry PI sensor
190
179
  test_files: []