milk_maid 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 60b61c742362d8e47611594ae8d749eb21c0e196
4
+ data.tar.gz: e30619de06cb423bfb20929b45b6e39a2d45086d
5
+ SHA512:
6
+ metadata.gz: fc59278709740c167a7e3167586b02b5d2829ae33f92f3699dc1d897b23363a47bec834e7cb2c9002c7a2811c98873b46a8c57224c3c6c72c3572c2d7f351cd5
7
+ data.tar.gz: 9ee3ce7b156b4902cd29abd5ca0327571666f3256619ae9cfd3b68af6087643ed850e6d6f39655013e225a5ec92e68bb163ad9fbd3ea6b3cd6bb5c9aaa4bb362
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.yml
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.1
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ before_install: gem install bundler -v 1.10.5
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in milkmaid.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Milkmaid
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/milkmaid`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'milkmaid'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install milkmaid
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/milkmaid.
36
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "milkmaid"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/milkmaid ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'milkmaid'
4
+
5
+ Milkmaid::CLI.start( ARGV )
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1 @@
1
+ firebase_url: 'YOUR FIREBASE URL'
@@ -0,0 +1,51 @@
1
+ module Milkmaid
2
+ class Batch
3
+ attr_accessor :name, :batch_guid, :temperature, :duration, :size, :notifier, :sensor
4
+
5
+ NAP_TIME = 5
6
+
7
+ def initialize(options = {})
8
+ options.each { |key, value| send("#{key}=", value) }
9
+
10
+ @batch_guid = generate_guid
11
+ end
12
+
13
+ def compare_temperature(current_temperature)
14
+ notifier.log_temperature(current_temperature)
15
+ current_temperature.to_i >= temperature.to_i
16
+ end
17
+
18
+ def start
19
+ notifier.batch_started(name: name, guid: batch_guid, duration: duration, base_temperature: temperature, batch_size: size)
20
+
21
+ until compare_temperature(sensor.reading)
22
+ take_a_nap
23
+ end
24
+
25
+ ending_time = Time.now + duration
26
+
27
+ notifier.temperature_reached
28
+
29
+ until Time.now > ending_time
30
+ current_temp = sensor.reading
31
+ notifier.log_temperature(current_temp)
32
+
33
+ notifier.post_warning(current_temp, temperature) if current_temp < temperature
34
+
35
+ take_a_nap
36
+ end
37
+
38
+ notifier.batch_completed
39
+ end
40
+
41
+ private
42
+
43
+ def generate_guid
44
+ ::SecureRandom.uuid
45
+ end
46
+
47
+ def take_a_nap
48
+ sleep NAP_TIME
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,48 @@
1
+ require 'thor'
2
+
3
+ module Milkmaid
4
+ class CLI < Thor
5
+ desc 'monitor_batch BATCH_NAME', "Start Monitoring a batch"
6
+ long_desc <<-DESC
7
+
8
+ `monitor_batch BATCH_NAME` will create a batch called BATCH_NAME
9
+ and begin monitoring it for 30 minutes
10
+
11
+ DESC
12
+ option :batch_name, :type => :string, :required => :true, :aliases => "-b"
13
+ option :temperature, :type => :numeric, :required => :false, :default => 30, :aliases => '-t'
14
+ option :duration, :type => :numeric, :required => false, :default => 30, :aliases => '-d'
15
+ option :logger, :type => :string, :required => false, :default => 'Console', :aliases => '-l'
16
+ option :sensor, :type => :boolean, :required => false, :default => true, :aliases => '-s'
17
+ def monitor_batch
18
+ batch_name = options[:batch_name]
19
+ temperature = options[:temperature].to_i
20
+ duration = options[:duration].to_i
21
+ logger_type = options[:logger]
22
+ sensor_type = options[:sensor]
23
+
24
+ sensor = get_sensor(sensor_type)
25
+ notifier = get_logger(logger_type)
26
+ batch = ::Milkmaid::Batch.new(name: batch_name, temperature: temperature, duration: duration, notifier: notifier, sensor: sensor)
27
+
28
+ batch.start
29
+ rescue ::Milkmaid::SensorException => e
30
+ puts e.message
31
+ end
32
+
33
+ no_commands do
34
+ def get_sensor(sensor_type)
35
+ sensor_type ? ::Milkmaid::TemperatureSensor.new : ::Milkmaid::MockTemperatureSensor.new(options[:temperature].to_i - 20, options[:temperature].to_i + 30)
36
+ end
37
+
38
+ def get_logger(logger_type)
39
+ case logger_type.upcase
40
+ when 'CONSOLE'
41
+ ::Milkmaid::ConsoleNotifier.new
42
+ when 'WEB'
43
+ ::Milkmaid::ParseNotifier.new
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,23 @@
1
+ module Milkmaid
2
+ class ConsoleNotifier
3
+ def batch_completed
4
+ puts "#{Time.now} - Batch Completed"
5
+ end
6
+
7
+ def batch_started(_)
8
+ puts "#{Time.now} - Batch Started"
9
+ end
10
+
11
+ def log_temperature(temperature)
12
+ puts "#{Time.now} - Temperature reading: #{temperature}"
13
+ end
14
+
15
+ def post_warning(current_temperature, base_temperature)
16
+ puts "#{Time.now} - WARNING: Current Temperature: #{current_temperature} Base Temperature: #{base_temperature}"
17
+ end
18
+
19
+ def temperature_reached
20
+ puts "#{Time.now} - Temperature reached!"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,78 @@
1
+ require 'firebase'
2
+ require 'yaml'
3
+
4
+ module Milkmaid
5
+ module FirebaseNotifier
6
+ class BatchRecord
7
+ attr_accessor :name, :guid, :duration, :base_temperature, :batch_size, :status, :record
8
+
9
+ CACHE_THRESHOLD = 20
10
+
11
+ def initialize
12
+ @firebase = ::Firebase::Client.new(::YAML.load_file(File.join(CONFIG_DIR, 'firebase.yml'))['firebase_url'])
13
+ end
14
+
15
+ def start(batch_data = {})
16
+ batch_data.each { |key, value| send("#{key}=", value) }
17
+ @status = 'Started'
18
+
19
+ self.create_remote_record
20
+ end
21
+
22
+ def create_remote_record
23
+ @response = @firebase.push("batches", {
24
+ :guid => guid,
25
+ :name => name,
26
+ :duration => duration,
27
+ :base_temperature => base_temperature,
28
+ :batch_size => batch_size,
29
+ :status => status
30
+ })
31
+ end
32
+
33
+ def add_event(event_type, data = 0)
34
+ events << ::Milkmaid::FirebaseNotifier::Event.new(event_name_from_type(event_type), data, timestamp)
35
+ return if cache_event(event_type)
36
+ send_events!
37
+ end
38
+
39
+ def cache_event(event_type)
40
+ return false unless event_type == :temperature
41
+ return false if @events.length < CACHE_THRESHOLD
42
+ true
43
+ end
44
+
45
+ def close_batch
46
+ @firebase.update("/batches/#{guid}", :status => 'Completed')
47
+ end
48
+
49
+ def complete!
50
+ add_event(:batch_completed)
51
+ close_batch
52
+ end
53
+
54
+ def event_name_from_type(event)
55
+ event.to_s.split(/_/).map(&:capitalize).join(' ')
56
+ end
57
+
58
+ def events
59
+ @events ||= []
60
+ end
61
+
62
+ def send_events!
63
+ events.each do |event|
64
+ @firebase.push("/batches/#{guid}/events", event.to_h)
65
+ end
66
+
67
+ @events = []
68
+ end
69
+
70
+ def timestamp
71
+ Time.now
72
+ end
73
+ end
74
+
75
+ class Event < Struct.new(:name, :data, :timestamp)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,31 @@
1
+ module Milkmaid
2
+ class FirebaseNotifier < ::Milkmaid::ConsoleNotifier
3
+ attr_accessor :batch_record
4
+
5
+ def batch_completed
6
+ super
7
+ batch_record.complete!
8
+ end
9
+
10
+ def batch_started(batch_data = {})
11
+ super(batch_data)
12
+ batch_record = ::Milkmaid::FirebaseNotifier::BatchRecord.new(batch_data)
13
+ end
14
+
15
+ def log_temperature(temperature)
16
+ super(temperature)
17
+ batch_record.add_event(:temperature, temperature)
18
+ end
19
+
20
+ def post_warning(current_temperature, base_temperature)
21
+ super(current_temperature, base_temperature)
22
+ batch_record.add_event(:temperature_warning, current_temperature)
23
+ end
24
+
25
+ def temperature_reached
26
+ super
27
+ batch_record.add_event(:threshold_reached)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ module Milkmaid
2
+ class ParseNotifier < ::Milkmaid::ConsoleNotifier
3
+ attr_accessor :batch_record
4
+
5
+ def batch_completed
6
+ super
7
+ batch_record.complete!
8
+ end
9
+
10
+ def batch_record
11
+ @batch_record ||= ::Milkmaid::FirebaseNotifier::BatchRecord.new
12
+ end
13
+
14
+ def batch_started(batch_data = {})
15
+ super(batch_data)
16
+ batch_record.start(batch_data)
17
+ end
18
+
19
+ def log_temperature(temperature)
20
+ super(temperature)
21
+ batch_record.add_event(:temperature, temperature)
22
+ end
23
+
24
+ def post_warning(current_temperature, base_temperature)
25
+ super(current_temperature, base_temperature)
26
+ batch_record.add_event(:temperature_warning, current_temperature)
27
+ end
28
+
29
+ def temperature_reached
30
+ super
31
+ batch_record.add_event(:threshold_reached)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,80 @@
1
+ require 'parse-ruby-client'
2
+
3
+ module Milkmaid
4
+ module RemoteNotifier
5
+ class BatchRecord
6
+ attr_accessor :name, :guid, :duration, :base_temperature, :batch_size, :status, :record
7
+
8
+ def initialize
9
+ Parse.init(
10
+ :application_id => 'JxuqdmEaI0DYwxcDV1imv2S64PWMLNjJq3wpGcVC',
11
+ :api_key => 'dsEh8Uqc3gwT9kYcG6OvR9W6pRlzcZlG6X9NeClS'
12
+ )
13
+ end
14
+
15
+ def start(batch_data = {})
16
+ batch_data.each { |key, value| send("#{key}=", value) }
17
+ @status = 'Started'
18
+ self.create_remote_record
19
+ end
20
+
21
+ def create_remote_record
22
+ @record = ::Parse::Object.new('BatchRecords')
23
+ @record[:name] = name
24
+ @record[:guid] = guid
25
+ @record[:duration] = duration
26
+ @record[:base_temperature] = base_temperature
27
+ @record[:batch_size] = batch_size
28
+ @record[:status] = status
29
+
30
+ @record.save
31
+ end
32
+
33
+ def add_event(event_type, data = 0)
34
+ events << ::Milkmaid::RemoteNotifier::Event.new(name: event_name_from_type(event_type), data: data, timestamp: timestamp)
35
+ return if event_type == :temperature
36
+ send_events!
37
+ end
38
+
39
+ def close_batch
40
+ @record[:status] = 'Completed'
41
+ @record.save
42
+ end
43
+
44
+ def complete!
45
+ add_event(:batch_completed)
46
+ close_batch
47
+ end
48
+
49
+ def event_name_from_type(event)
50
+ event.to_s.split(/_/).map(&:capitalize).join(' ')
51
+ end
52
+
53
+ def events
54
+ @events ||= []
55
+ end
56
+
57
+ def send_events!
58
+ events.each do |event|
59
+ event.save
60
+ @record.array_add_relation("BatchRecordEvents", event.pointer)
61
+ @record.save
62
+ end
63
+
64
+ end
65
+
66
+ def timestamp
67
+ Time.now
68
+ end
69
+ end
70
+
71
+ class Event < ::Parse::Object
72
+ def initialize(params = {})
73
+ super('Events')
74
+ self[:name] = params.fetch(:name)
75
+ self[:data] = params.fetch(:data)
76
+ self[:timestamp] = params.fetch(:timestamp)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,38 @@
1
+ require 'w1temp'
2
+
3
+ module Milkmaid
4
+ class SensorException < RuntimeError; end
5
+
6
+ class TemperatureSensor
7
+ def initialize
8
+ @sensor = Temperature.new
9
+
10
+ fail ::Milkmaid::SensorException.new 'Sensor not available' unless @sensor.name
11
+ end
12
+
13
+ def name
14
+ return "No sensor attached" unless @sensor.display
15
+ @sensor.name
16
+ end
17
+
18
+ def reading
19
+ return "Reading: No sensor attached" unless @sensor.display
20
+ @sensor.reading
21
+ end
22
+ end
23
+
24
+ class MockTemperatureSensor
25
+ def initialize(low_temp, high_temp)
26
+ @low_temp = low_temp.to_i
27
+ @high_temp = high_temp.to_i
28
+ end
29
+
30
+ def name
31
+ 'MockTemperatureSensor'
32
+ end
33
+
34
+ def reading
35
+ rand(@low_temp..@high_temp)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Milkmaid
2
+ VERSION = "0.1.0"
3
+ end
data/lib/milkmaid.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'milkmaid/batch'
2
+ require 'milkmaid/cli'
3
+ require 'milkmaid/console_notifier'
4
+ require 'milkmaid/parse_notifier'
5
+ require 'milkmaid/remote_notifier/batch_record'
6
+ require 'milkmaid/firebase_notifier/batch_record'
7
+ require 'milkmaid/temperature_sensor'
8
+ require 'milkmaid/version'
9
+
10
+ CONFIG_DIR = File.join(File.dirname(__FILE__), '..', 'config')
11
+
12
+ module Milkmaid
13
+ end
data/milkmaid.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'milkmaid/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "milk_maid"
8
+ spec.version = Milkmaid::VERSION
9
+ spec.authors = ["Steve Newell"]
10
+ spec.email = ["steve.newell@mx.com"]
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}
14
+
15
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
16
+ # delete this section to allow pushing this gem to any host.
17
+ if spec.respond_to?(:metadata)
18
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
19
+ else
20
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
21
+ end
22
+
23
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ spec.bindir = "bin"
25
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
+ spec.require_paths = ["lib"]
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"
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.10"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "rspec"
36
+ spec.add_development_dependency "guard-rspec"
37
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: milk_maid
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Steve Newell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
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
+ - - ">="
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: parse-ruby-client
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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: firebase
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Reads data from Raspberry PI sensor and posts to Firebase
126
+ email:
127
+ - steve.newell@mx.com
128
+ executables:
129
+ - console
130
+ - milkmaid
131
+ - setup
132
+ extensions: []
133
+ extra_rdoc_files: []
134
+ files:
135
+ - ".gitignore"
136
+ - ".rspec"
137
+ - ".ruby-version"
138
+ - ".travis.yml"
139
+ - Gemfile
140
+ - README.md
141
+ - Rakefile
142
+ - bin/console
143
+ - bin/milkmaid
144
+ - bin/setup
145
+ - config/firebase.yml.sample
146
+ - lib/milkmaid.rb
147
+ - lib/milkmaid/batch.rb
148
+ - lib/milkmaid/cli.rb
149
+ - lib/milkmaid/console_notifier.rb
150
+ - lib/milkmaid/firebase_notifier.rb
151
+ - lib/milkmaid/firebase_notifier/batch_record.rb
152
+ - lib/milkmaid/parse_notifier.rb
153
+ - lib/milkmaid/remote_notifier/batch_record.rb
154
+ - lib/milkmaid/temperature_sensor.rb
155
+ - lib/milkmaid/version.rb
156
+ - milkmaid.gemspec
157
+ homepage:
158
+ licenses: []
159
+ metadata:
160
+ allowed_push_host: https://rubygems.org
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ requirements: []
176
+ rubyforge_project:
177
+ rubygems_version: 2.4.6
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Reads data from Raspberry PI sensor and posts to Firebase
181
+ test_files: []