Skip to content

Commit

Permalink
Update WeightSensor, Reservoir, ReservoirMonitor.
Browse files Browse the repository at this point in the history
  • Loading branch information
JeetShetty committed Jun 15, 2016
1 parent efffc27 commit 2991382
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 36 deletions.
12 changes: 6 additions & 6 deletions greenpithumb/reservoir.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@


class Reservoir(object):
"""Wrapper for a reservoir."""
"""Provides information about a GreenPiThumb system's water reservoir."""

def __init__(self, weight_sensor, container_weight):
"""Creates a new Reservoir wrapper.
"""Creates a new Reservoir instance.
Args:
weight_sensor: Weight sensor interface.
Expand All @@ -16,10 +16,10 @@ def __init__(self, weight_sensor, container_weight):

def reservoir_level(self):
"""Returns reservoir level in ml."""
res_weight_grams = self._weight_sensor.reservoir_weight()
water_weight_grams = res_weight_grams - self._container_weight
if water_weight_grams < weight_sensor.MIN_RES_WEIGHT:
reservoir_weight_grams = self._weight_sensor.weight()
water_weight_grams = reservoir_weight_grams - self._container_weight
if water_weight_grams < weight_sensor.MIN_WEIGHT:
raise ValueError('Water level out of range: %.1f' %
water_weight_grams)

return water_weight_grams #1 gr water = 1 ml water
return water_weight_grams #1 gr water ~ 1 ml water
4 changes: 2 additions & 2 deletions greenpithumb/reservoir_monitor.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
class ReservoirMonitor(object):
"""Wrapper for a reservoir monitor."""
"""Monitors and returns alerts about a GreenPiThumb system's reservoir"""

def __init__(self, reservoir):
"""Creates a new ReservoirMonitor wrapper.
"""Creates a new ReservoirMonitor instance.
Args:
reservoir: Reservoir interface.
Expand Down
23 changes: 11 additions & 12 deletions greenpithumb/weight_sensor.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import adc

MIN_RES_WEIGHT = 0.0
_MAX_RES_WEIGHT = 1023.0
MIN_WEIGHT = 0.0
_MAX_WEIGHT = 1023.0


class WeightSensor(object):
Expand All @@ -16,15 +16,14 @@ def __init__(self, adc):
"""
self._adc = adc

def reservoir_weight(self):
"""Returns reservoir weight in grams."""
reservoir_weight = self._adc.read_pin(adc.PIN_WEIGHT_SENSOR)
if not MIN_RES_WEIGHT <= reservoir_weight <= _MAX_RES_WEIGHT:
raise ValueError('reservoir weight out of range: %.1f' %
reservoir_weight)
def weight(self):
"""Returns weight in grams."""
weight = self._adc.read_pin(adc.PIN_WEIGHT_SENSOR)
if not MIN_WEIGHT <= weight <= _MAX_WEIGHT:
raise ValueError('reservoir weight out of range: %.1f' % weight)

# TODO(JeetShetty): Implement the actual conversion from
# reservoir_weight to reservoir_weight_grams
reservoir_weight_grams = reservoir_weight
# TODO(JeetShetty): Implement the actual conversion from weight to
# weight_grams
weight_grams = weight

return reservoir_weight_grams
return weight_grams
12 changes: 4 additions & 8 deletions tests/test_reservoir.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,13 @@ def setUp(self):
self.mock_weight_sensor = mock.Mock(spec=weight_sensor.WeightSensor)

def test_water_level_in_range(self):
container_weight = 50.0
res_weight = container_weight + 50.0
res = reservoir.Reservoir(self.mock_weight_sensor, container_weight)
self.mock_weight_sensor.reservoir_weight.return_value = res_weight
water_level = res.reservoir_level()
self.assertAlmostEqual(water_level, res_weight - container_weight)
self.mock_weight_sensor.weight.return_value = 55.0
res = reservoir.Reservoir(self.mock_weight_sensor, 50.0)
self.assertAlmostEqual(5.0, res.reservoir_level())

def test_water_level_out_of_range(self):
with self.assertRaises(ValueError):
container_weight = 50.0
res = reservoir.Reservoir(self.mock_weight_sensor, container_weight)
self.mock_weight_sensor.reservoir_weight.return_value = (
container_weight - 1)
self.mock_weight_sensor.weight.return_value = container_weight - 1
res.reservoir_level()
14 changes: 6 additions & 8 deletions tests/test_weight_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,15 @@ def setUp(self):
def test_weight_500(self):
"""Weight returned should be weight read."""
self.mock_adc.read_pin.return_value = 500.0
reservoir_weight = self.weight_sensor.reservoir_weight()
self.assertEqual(reservoir_weight, 500.0)
weight = self.weight_sensor.weight()
self.assertEqual(weight, 500.0)

def test_weight_too_low_raises_ValueError(self):
with self.assertRaises(ValueError):
self.mock_adc.read_pin.return_value = (
weight_sensor.MIN_RES_WEIGHT - 1)
self.weight_sensor.reservoir_weight()
self.mock_adc.read_pin.return_value = weight_sensor.MIN_WEIGHT - 1
self.weight_sensor.weight()

def test_weight_too_high_raises_ValueError(self):
with self.assertRaises(ValueError):
self.mock_adc.read_pin.return_value = (
weight_sensor._MAX_RES_WEIGHT + 1)
self.weight_sensor.reservoir_weight()
self.mock_adc.read_pin.return_value = weight_sensor._MAX_WEIGHT + 1
self.weight_sensor.weight()

0 comments on commit 2991382

Please sign in to comment.